Inconsistencies between the documentation and the implementation regarding texture resolutions
Comparing the implementation in ffx_fsr2.cpp and the diagram,
NewLocksis at present resolution in the implementation, while the diagram is in render resolution. Presentation resolution seems to be the correct value.LockInputLumais at present resolution in the implementation, and renders resolution in the diagram. The render resolution seems to be the correct one.LumaHistoryis at present resolution in the implementation, while the diagram is in render resolution. Presentation resolution seems to be the correct value.
For people who want to implement FSR 2, without going through the SDK-provided context, this is quite confusing.
This part of documentation also seems to mention the following about the New Lock Mask,
This texture is part of an array of two textures along with the Lock status texture which is used as an input to this stage. The selection of which texture in the array is used for input and output is swapped each frame. The red channel contains the time remaining on the pixel lock, and the Y channel contains the luminance of the pixel at the time when the lock was created. The Create locks stage updates only a subset of this resource.
This is incorrect because the texture only has a single channel and doesn't include a Y channel. Additionally, it should not be an array of two textures like the Lock Status; instead, it should be a single texture that is cleared to zero once. The lock stage loads the locks into this mask, and the accumulate stage reads and then clears it.