aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 08:12:52 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 20:49:47 -0400
commit25bd673899ccdfc58477a286fcc39632feaf9def (patch)
treebd9c0dc7735aad21328d0821cb93ddc6e7f99715 /src
parent6cefcce15f821cd0e65459173cf217bb7e622f43 (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.cpp6
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);