aboutsummaryrefslogtreecommitdiff
path: root/src/common/sparse_large_vector.cpp
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-31 04:41:01 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-31 04:41:01 -0400
commit837133792d5651a896bc018f13acd8eaabcd8e81 (patch)
tree8c4b55bd0e81fdf3465d809175974d41d2932a92 /src/common/sparse_large_vector.cpp
parentb40ad217ab829226841cb71f6e4c5cb05977a225 (diff)
nx2: map GPU memory on the GPU thread
Switch 2 games could freeze for good (Mario Kart World: twice in five runs, at 48 s and 123 s). A GMMU map takes the texture cache lock (ModifyGPUMemory), and Nx2Map and sparse region creation ran it on the service thread while holding nx2:gpu's region lock, the memory registry lock and the address space lock. The GPU thread takes those locks under the texture cache lock: a GPU write into a sparse or GPU-only region gets its block memory there (BackSparseWrite), e.g. when the texture cache writes back an image it evicts in TickFrame. Each thread waited for the other. Queue the GMMU maps on the GPU thread (GPU::RunInOrder), as the unmaps already are, so the service thread never waits for the texture cache. Command lists submitted after a map still see it; no service code reads through the GMMU.
Diffstat (limited to 'src/common/sparse_large_vector.cpp')
0 files changed, 0 insertions, 0 deletions