Fix upscaler-fed DLSSG resource-transition corruption - #1089
Conversation
|
what |
|
Correction to my earlier wording: this patch did fix the issue in testing. Before the patch, the native-D3D12 3x path produced repeatable HUD-triggered 3-5 second freezes, accumulating ghosting, and full-frame artifacts after a resource transition. With the patched build in Mode 1 does not run the optional disable/drain/re-enable cycle, but the patch still moves reset and depth/motion-vector capture before |
|
Hi there, Instead of generating an AI PR could you please open an Issue and share information so we can understand the problem and fix it properly? Sorry but in this form, I would not merge this PR. |
What this fixes
This patch fixes a resource-transition failure in OptiScaler's upscaler-fed DLSSG path.
In Jump Space running native D3D12 under Proton, 3x DLSSG initially produced repeatable 3-5 second freezes when targeting HUD information panels. Continued play accumulated visible ghosting, and a later scene/resource transition produced major full-frame artifacts. Disabling frame generation removed the artifacts immediately while the FSR 4.1.1 render remained clean.
With this patch, the same 3x workload completed an 84-minute test without a freeze, ghost trail, artifact, crash, or GPU reset. Coverage included the original HUD trigger, sustained motion, ship combat, two observed NGX reset transitions, post-transition play, return to the main menu, and normal exit.
Reproducer
-force-d3d12), not the D3D11-to-D3D12 bridgeTo reproduce the original failure, load a real mission and repeatedly move the targeting reticle onto an object that opens a HUD information panel. Continue normal movement and combat through a mission or scene transition.
Before and after
LifecycleMode=1Bug and fix
The upscaler-fed path previously called
EvaluateState()before capturing the current NGX reset flag and depth/motion-vector inputs. That allowed DLSSG activation and OptiScaler's per-frame resource tracking to cross a resource transition without first observing the new input boundary.This patch moves reset and input capture before
EvaluateState()and latches the lifecycle signals before the existing state handling can consume them. The tested build observed two real reset transitions cleanly:That corrected path was sufficient to eliminate the original failure in testing.
The patch also includes an optional bounded recovery mode for workloads where capture and observation alone are not sufficient. It can disable DLSSG, drain submitted OptiScaler work, clear per-frame tracking, wait for consecutive valid inputs, and re-enable. A drain failure leaves frame generation disabled.
The optional active recovery mode was not needed for the verified Jump Space result. It was developed as the next bounded step during diagnosis, but the issue was already resolved with the tested observation path.
Configuration
LifecycleMode=0: current behavior without lifecycle logging or active recovery.LifecycleMode=1: the tested path; capture lifecycle signals and log transitions without running the recovery cycle.LifecycleMode=2: optional disable/drain/reset/warm/re-enable recovery.Validation
LifecycleMode=1build passed the complete 84-minute 3x regression run described above.git diff --checkand project XML parsing pass.Review requested
EvaluateState()upscaler-input boundary the right permanent location for reset/input capture?