aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/buffer_cache/buffer_cache.h
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 09:25:40 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 09:25:45 -0400
commite6d53e728a93fe6d97a243de41301b9f7c54df5a (patch)
treeb9c778ec2df10e9b7dc8194e7854a38c64eb8d8f /src/video_core/buffer_cache/buffer_cache.h
parent6e7edd7462325ee18a0db6fdc29ff7698ac108cc (diff)
dynarmic: skip untouched locations when an IR instruction ends
Compiling a block is most of what makes Mario Kart World stutter in its first minute: the game's thread translates ~20,000 blocks in a few hundred milliseconds when a scene loads, and the frame waits. A CPU profile of those bursts had ~40% of the compile time in two loops over all 96 host locations (16 GPRs, 16 XMMs, 64 spill slots) per IR instruction: - EndOfAllocScope called ReleaseAll on every location, though an instruction touches a few. It now skips the ones ReleaseAll would not change (no references or locks, not scratch, no last use pending, and values either still live or fully cleared). - DefineValueImpl checked, with an assert that stays on in release builds, that the defined value was in no location yet, and afterwards that it was where it was put. Those scans are DEBUG_ASSERTs now. Mario Kart World, first 45 s (boot, world map, title, attract demo): 18.5 -> 12.8 us per compiled block; frames over 60 ms 57 -> 31, over 100 ms in the first 600 presents 23 -> 12; frames render as before.
Diffstat (limited to 'src/video_core/buffer_cache/buffer_cache.h')
0 files changed, 0 insertions, 0 deletions