diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-29 08:12:52 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-29 20:49:47 -0400 |
| commit | 25bd673899ccdfc58477a286fcc39632feaf9def (patch) | |
| tree | bd9c0dc7735aad21328d0821cb93ddc6e7f99715 /src | |
| parent | 6cefcce15f821cd0e65459173cf217bb7e622f43 (diff) | |
maxwell_3d: no method dispatch for non-executable register writes; notes 133-137
ProcessMethodCall and the draw manager behind it act only on executable methods, so
CallMethod stops at the dirty flags for the rest (macro replays write ~2.4 million of
those a second). No change beyond run-to-run noise in two profiled runs; it only removes
work. Notes: row 133 corrected (those courses are bound by the GPU thread, not the host
GPU: 20-40% busy), rows 135-137 (same-value writes, native compute registers, 2D blits).
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index f958b025bc..997ef474f5 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -466,7 +466,11 @@ void Maxwell3D::CallMethod(Core::System& system, u32 method, u32 method_argument // million 3D register writes a second, ~60% of them same-value, most from macro replays. // Methods with side effects (execution_mask: draws, clears, constant buffer data and // binds, semaphores, ...) always run. EDEN_NX2_SKIP_SAME=0 turns it off. - if (SkipSameValueWrites() && !execution_mask[method] && regs.reg_array[method] == argument) { + if (!execution_mask[method]) { + // ProcessMethodCall (and the draw manager behind it) acts only on executable methods. + if (!SkipSameValueWrites() || regs.reg_array[method] != argument) { + ProcessDirtyRegisters(method, argument); + } return; } ProcessDirtyRegisters(method, argument); |
