Use monotonic interop fence values for FSR3 bridge dispatch

This commit is contained in:
Kelsi 2026-03-09 02:03:03 -07:00
parent 1c7908f02d
commit 1bcc2c6b85
2 changed files with 8 additions and 2 deletions

View file

@ -455,6 +455,7 @@ private:
size_t amdFsr3UpscaleDispatchCount = 0; size_t amdFsr3UpscaleDispatchCount = 0;
size_t amdFsr3FramegenDispatchCount = 0; size_t amdFsr3FramegenDispatchCount = 0;
size_t amdFsr3FallbackCount = 0; size_t amdFsr3FallbackCount = 0;
uint64_t amdFsr3InteropSyncValue = 1;
float jitterSign = 0.38f; float jitterSign = 0.38f;
float motionVecScaleX = 1.0f; float motionVecScaleX = 1.0f;
float motionVecScaleY = 1.0f; float motionVecScaleY = 1.0f;

View file

@ -3823,6 +3823,7 @@ bool Renderer::initFSR2Resources() {
fsr2_.amdFsr3UpscaleDispatchCount = 0; fsr2_.amdFsr3UpscaleDispatchCount = 0;
fsr2_.amdFsr3FramegenDispatchCount = 0; fsr2_.amdFsr3FramegenDispatchCount = 0;
fsr2_.amdFsr3FallbackCount = 0; fsr2_.amdFsr3FallbackCount = 0;
fsr2_.amdFsr3InteropSyncValue = 1;
#if WOWEE_HAS_AMD_FSR2 #if WOWEE_HAS_AMD_FSR2
LOG_INFO("FSR2: AMD FidelityFX SDK detected at build time."); LOG_INFO("FSR2: AMD FidelityFX SDK detected at build time.");
#else #else
@ -4260,6 +4261,7 @@ void Renderer::destroyFSR2Resources() {
fsr2_.framegenOutputValid = false; fsr2_.framegenOutputValid = false;
fsr2_.amdFsr3RuntimePath = "Path C"; fsr2_.amdFsr3RuntimePath = "Path C";
fsr2_.amdFsr3RuntimeLastError.clear(); fsr2_.amdFsr3RuntimeLastError.clear();
fsr2_.amdFsr3InteropSyncValue = 1;
#if WOWEE_HAS_AMD_FSR3_FRAMEGEN #if WOWEE_HAS_AMD_FSR3_FRAMEGEN
if (fsr2_.amdFsr3Runtime) { if (fsr2_.amdFsr3Runtime) {
fsr2_.amdFsr3Runtime->shutdown(); fsr2_.amdFsr3Runtime->shutdown();
@ -4606,8 +4608,11 @@ void Renderer::dispatchAmdFsr3Framegen() {
fgDispatch.externalFlags |= WOWEE_FSR3_WRAPPER_EXTERNAL_RELEASE_SEMAPHORE; fgDispatch.externalFlags |= WOWEE_FSR3_WRAPPER_EXTERNAL_RELEASE_SEMAPHORE;
trackHandle(fgDispatch.releaseSemaphoreHandle); trackHandle(fgDispatch.releaseSemaphoreHandle);
} }
fgDispatch.acquireSemaphoreValue = 1; uint64_t syncValue = fsr2_.amdFsr3InteropSyncValue;
fgDispatch.releaseSemaphoreValue = 1; if (syncValue == 0) syncValue = 1;
fgDispatch.acquireSemaphoreValue = syncValue;
fgDispatch.releaseSemaphoreValue = syncValue;
fsr2_.amdFsr3InteropSyncValue = syncValue + 1;
#endif #endif
if (!fsr2_.amdFsr3Runtime->dispatchUpscale(fgDispatch)) { if (!fsr2_.amdFsr3Runtime->dispatchUpscale(fgDispatch)) {