Skip to content

Commit 1680d1e

Browse files
committed
FidelityFX FSR v2.2.1
1 parent 149cf26 commit 1680d1e

File tree

7 files changed

+32
-27
lines changed

7 files changed

+32
-27
lines changed

Diff for: README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# FidelityFX Super Resolution 2.2 (FSR 2.2)
1+
# FidelityFX Super Resolution 2.2 (FSR 2.2.1)
22

33
Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
44

@@ -805,6 +805,7 @@ FSR2 requires a GPU with typed UAV load and R16G16B16A16_UNORM support.
805805
806806
| Version | Date |
807807
| ---------------|-------------------|
808+
| **2.2.1** | 2023-05-12 |
808809
| **2.2.0** | 2023-02-16 |
809810
| **2.1.2** | 2022-10-19 |
810811
| **2.1.1** | 2022-09-15 |

Diff for: changelog.md

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
2023-02-23 | FidelityFX Super Resolution 2.2a
1+
2023-05-12 | FidelityFX Super Resolution 2.2.1
2+
-------
3+
- Fixed comments in API header for incorrect cameraFar use.
4+
- Fixed DRS issue where resource was not correctly cleared on first use.
5+
- Fixed issue where luma instability logic could introduce output artefacts with strobing lights.
6+
- Fixed incorrect luma resource size.
7+
8+
2023-02-23 | FidelityFX Super Resolution 2.2.0a
29
-------
310
- Minor updates to the documentation
411
- Removal of a handful of files from the prior release that are no longer part of FSR 2.2.
512

6-
2023-02-16 | FidelityFX Super Resolution 2.2
13+
2023-02-16 | FidelityFX Super Resolution 2.2.0
714
-------
815
- Introduction of API debug checker.
916
- Changes to improve "High Velocity Ghosting" situations.

Diff for: release_notes.txt

+5-16
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1-
FidelityFX Super Resolution 2.2
1+
FidelityFX Super Resolution 2.2.1
22
=================================
33

4-
Features
5-
--------
6-
- API debug Checker
7-
- Changes to improve "High Velocity Ghosting" situations.
8-
94
Changes
105
-------
11-
- Changes to Luminance computation with pre-exposure application.
12-
- Small motion vectors ignored in previous depth estimation.
13-
- Changes to depth logic to improve disocclusion detection and avoid self-disocclusions.
14-
- Dilated reactive mask logic updated to use temporal motion vector divergence to kill locks.
15-
- New lock luminance resource.
16-
- Accumulation overhauled to use temporal reactivity.
17-
- Changed how intermediate signals are stored and tonemapped.
18-
- Luminance instability logic improved.
19-
- Tonemapping no longer applied during RCAS to retain more dynamic range.
20-
- Fixes for multiple user reported issues on GitHub and elsewhere. Thank you for your feedback!
6+
- Fixed comments in API header for incorrect cameraFar use.
7+
- Fixed DRS issue where resource was not correctly cleared on first use.
8+
- Fixed issue where luma instability logic could introduce output artefacts with strobing lights.
9+
- Fixed incorrect luma resource size.
2110

2211
Limitations
2312
-----------

Diff for: src/ffx-fsr2-api/ffx_fsr2.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ static FfxErrorCode fsr2Create(FfxFsr2Context_Private* context, const FfxFsr2Con
516516
FFX_SURFACE_FORMAT_R16G16_FLOAT, contextDescription->displaySize.width, contextDescription->displaySize.height, 1, FFX_RESOURCE_FLAGS_NONE },
517517

518518
{ FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_INPUT_LUMA, L"FSR2_LockInputLuma", (FfxResourceUsage)(FFX_RESOURCE_USAGE_UAV),
519-
FFX_SURFACE_FORMAT_R16_FLOAT, contextDescription->displaySize.width, contextDescription->displaySize.height, 1, FFX_RESOURCE_FLAGS_ALIASABLE },
519+
FFX_SURFACE_FORMAT_R16_FLOAT, contextDescription->maxRenderSize.width, contextDescription->maxRenderSize.height, 1, FFX_RESOURCE_FLAGS_ALIASABLE },
520520

521521
{ FFX_FSR2_RESOURCE_IDENTIFIER_NEW_LOCKS, L"FSR2_NewLocks", (FfxResourceUsage)(FFX_RESOURCE_USAGE_UAV),
522522
FFX_SURFACE_FORMAT_R8_UNORM, contextDescription->displaySize.width, contextDescription->displaySize.height, 1, FFX_RESOURCE_FLAGS_ALIASABLE },
@@ -788,6 +788,8 @@ static FfxErrorCode fsr2Dispatch(FfxFsr2Context_Private* context, const FfxFsr2D
788788
context->contextDescription.callbacks.fpScheduleGpuJob(&context->contextDescription.callbacks, &clearJob);
789789
clearJob.clearJobDescriptor.target = context->srvResources[FFX_FSR2_RESOURCE_IDENTIFIER_LOCK_STATUS_2];
790790
context->contextDescription.callbacks.fpScheduleGpuJob(&context->contextDescription.callbacks, &clearJob);
791+
clearJob.clearJobDescriptor.target = context->srvResources[FFX_FSR2_RESOURCE_IDENTIFIER_PREPARED_INPUT_COLOR];
792+
context->contextDescription.callbacks.fpScheduleGpuJob(&context->contextDescription.callbacks, &clearJob);
791793
}
792794

793795
// Prepare per frame descriptor tables

Diff for: src/ffx-fsr2-api/ffx_fsr2.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
/// FidelityFX Super Resolution 2 patch version.
4141
///
4242
/// @ingroup FSR2
43-
#define FFX_FSR2_VERSION_PATCH (0)
43+
#define FFX_FSR2_VERSION_PATCH (1)
4444

4545
/// The size of the context specified in 32bit values.
4646
///
@@ -134,7 +134,7 @@ typedef struct FfxFsr2DispatchDescription {
134134
float preExposure; ///< The pre exposure value (must be > 0.0f)
135135
bool reset; ///< A boolean value which when set to true, indicates the camera has moved discontinuously.
136136
float cameraNear; ///< The distance to the near plane of the camera.
137-
float cameraFar; ///< The distance to the far plane of the camera. This is used only used in case of non infinite depth.
137+
float cameraFar; ///< The distance to the far plane of the camera.
138138
float cameraFovAngleVertical; ///< The camera angle field of view in the vertical direction (expressed in radians).
139139
float viewSpaceToMetersFactor; ///< The scale factor to convert view space units to meters
140140

Diff for: src/ffx-fsr2-api/shaders/ffx_fsr2_accumulate.h

+9-4
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ FfxFloat32x3 ComputeBaseAccumulationWeight(const AccumulationPassCommonParams pa
135135

136136
FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams params, RectificationBox clippingBox, FfxFloat32 fThisFrameReactiveFactor, FfxFloat32 fLuminanceDiff)
137137
{
138+
const FfxFloat32 fUnormThreshold = 1.0f / 255.0f;
138139
const FfxInt32 N_MINUS_1 = 0;
139140
const FfxInt32 N_MINUS_2 = 1;
140141
const FfxInt32 N_MINUS_3 = 2;
@@ -156,7 +157,8 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param
156157

157158
FfxFloat32 fMin = abs(fDiffs0);
158159

159-
if (fMin >= (1.0f / 255.0f)) {
160+
if (fMin >= fUnormThreshold)
161+
{
160162
for (int i = N_MINUS_2; i <= N_MINUS_4; i++) {
161163
FfxFloat32 fDiffs1 = (fCurrentFrameLuma - fCurrentFrameLumaHistory[i]);
162164

@@ -168,10 +170,13 @@ FfxFloat32 ComputeLumaInstabilityFactor(const AccumulationPassCommonParams param
168170
}
169171
}
170172

171-
fLumaInstability = FfxFloat32(fMin != abs(fDiffs0));
173+
const FfxFloat32 fBoxSize = clippingBox.boxVec.x;
174+
const FfxFloat32 fBoxSizeFactor = ffxPow(ffxSaturate(fBoxSize / 0.1f), 6.0f);
172175

173-
fLumaInstability *= 1.0f - ffxMax(params.fAccumulationMask, ffxPow(fThisFrameReactiveFactor, 1.0f / 3.0f));
174-
fLumaInstability *= ffxLerp(1.0f, 0.0f, ffxSaturate(params.fHrVelocity / 20.0f));
176+
fLumaInstability = FfxFloat32(fMin != abs(fDiffs0)) * fBoxSizeFactor;
177+
fLumaInstability = FfxFloat32(fLumaInstability > fUnormThreshold);
178+
179+
fLumaInstability *= 1.0f - ffxMax(params.fAccumulationMask, ffxPow(fThisFrameReactiveFactor, 1.0f / 6.0f));
175180
}
176181

177182
//shift history

Diff for: src/ffx-fsr2-api/shaders/ffx_fsr2_depth_clip.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -216,14 +216,15 @@ FfxFloat32x3 ComputePreparedInputColor(FfxInt32x2 iPxLrPos)
216216
return fPreparedYCoCg;
217217
}
218218

219-
float EvaluateSurface(FfxInt32x2 iPxPos, FfxFloat32x2 fMotionVector)
219+
FfxFloat32 EvaluateSurface(FfxInt32x2 iPxPos, FfxFloat32x2 fMotionVector)
220220
{
221221
FfxFloat32 d0 = GetViewSpaceDepth(LoadReconstructedPrevDepth(iPxPos + FfxInt32x2(0, -1)));
222222
FfxFloat32 d1 = GetViewSpaceDepth(LoadReconstructedPrevDepth(iPxPos + FfxInt32x2(0, 0)));
223223
FfxFloat32 d2 = GetViewSpaceDepth(LoadReconstructedPrevDepth(iPxPos + FfxInt32x2(0, 1)));
224224

225225
return 1.0f - FfxFloat32(((d0 - d1) > (d1 * 0.01f)) && ((d1 - d2) > (d2 * 0.01f)));
226226
}
227+
227228
void DepthClip(FfxInt32x2 iPxPos)
228229
{
229230
FfxFloat32x2 fDepthUv = (iPxPos + 0.5f) / RenderSize();

0 commit comments

Comments
 (0)