aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/surface.cpp
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 00:54:19 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 00:54:38 -0400
commit092c16d6f39b395e7b3e105a42963733bf9de045 (patch)
treefd0913c27aa5a40b2d39b1d4e518a4e420462542 /src/video_core/surface.cpp
parent59fce4d557a23e33bcd671710ea9f7b292dcdb46 (diff)
gpu_split: reset the ring when the split stops
GpuSplit is a static instance and outlives the emulation session. Stop() joined the back thread but kept the ring positions and engine pointers, so the next session's back thread started reading at 0 of a new, empty ring while `published` still held the old session's position: each empty entry reads as a wrap, the back thread skipped ahead a ring at a time and never landed on the old position. The front then spun in Drain(), the next game's first GPU work never ran, and it waited on its first syncpoint forever (Mario Kart World loaded after another Switch 2 game: syncpoint 2 stuck at 0, waiting for 2). The back thread also held the previous session's freed engines. Stop() now drops the ring and resets the positions, the engines and the front macro mode, so MaybeStart() begins a clean ring.
Diffstat (limited to 'src/video_core/surface.cpp')
0 files changed, 0 insertions, 0 deletions