Repository navigation
Conversation
Compute shaders disabled via the debug server (reject_shaders) remained inactive after being restored until the emulator was restarted. In The Legend of Zelda: Ocarina of Time, this left the 3D viewport completely black. This happened because KeplerCompute maintains its own cache of programs that failed to execute (rejected_compute_programs), which was never invalidated when shaders were re-enabled. Update the debug-control logic to track a restore counter, and have KeplerCompute clear its rejected program list whenever that count increments. Tested in Ocarina of Time by rejecting and restoring compute dispatches 119–142. Compute GPU time recovered to ~450–490 ms/s and the 3D scene resumed rendering normally. Assisted-by: Claude Opus 5.5 (traced the rejected program cache and wrote the restore counter fix)
|
Retargeted to |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
|
Thanks — the analysis is right and the fix is minimal. rejected_compute_programs is the third rejection cache (ShaderCache::RefreshDebugRejections clears rejected_native and dropscached programs, but nothing clears the per-address compute failure records), and it's only bypassed while Nx2Diag::Active(), which is why the viewport stayed black with diagnosticsoff. Confirmed nothing else in video_core caches compute rejection, so this closes the symptom. |
|
Just built and tested the build to see if there are any consequences on an unaffected device. Doesn't seem to be the case. This fix is deeply necessary as people are still having black screens but can see the UI. Another affected game would be FEFW. Confirmed and merging. |
0a2323e
into
Eglantine-Community:nx2-experimental
Summary
Compute shaders disabled via the debug server (reject_shaders)
remained inactive after being restored until the emulator was
restarted. In The Legend of Zelda: Ocarina of Time, this left
the 3D viewport completely black.
This happened because KeplerCompute maintains its own cache of
programs that failed to execute (rejected_compute_programs), which
was never invalidated when shaders were re-enabled.
Update the debug-control logic to track a restore counter, and
have KeplerCompute clear its rejected program list whenever that
count increments. This only affects debugging tools and not normal play.
Assisted-by: Claude Opus 5.5 (traced the rejected program cache and wrote the restore counter fix)
Type of change
Related issues
None
Testing
Games tested:
Ocarina of Time, gameplay in Kokiri Forest
Hardware: MSI Claw 8+ AI, Intel Arc 140V, driver 101.9175, Windows
Test: rejected the gameplay network’s main pass (da6df3e54c716df2) through the debug server, then restored it
Result: rejected → 3D view black (only hearts and minimap drawn); restored → normal again within ~2 s, no restart; nothing left rejected afterwards
Without the fix: the view stays black after restore until the emulator restarts
Checklist
Screenshots / logs
Summary by CodeRabbit