aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/buffer_cache
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 01:51:42 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 01:51:42 -0400
commite08b40252790eef96337409d7dd606aa7bfa8428 (patch)
treed94274e2c27fa43a99200258558437807a785bd4 /src/video_core/buffer_cache
parentae980ab79568c80ed5760f7fd5f452c8a49dc1ab (diff)
video_core: less waiting on the GPU caches' locks
- The texture and buffer caches' mutexes spin briefly before sleeping (Common::SpinRecursiveMutex): the GPU thread, the fencing thread and CPU write traps take them tens of thousands of times a second for microseconds, and a sleeping waiter's wake-up took longer than that. Title 1's GPU thread slept 7.7% of its time there, now 3.7%. - Fences commit and pop texture and buffer downloads separately, and only when there are any (one fence per compute dispatch in Switch 2 titles): the fencing thread no longer holds both caches while it copies buffer downloads. - Inline uploads and pre-draw invalidation take the caches one at a time again: holding one while std::lock waited for the other waited longer.
Diffstat (limited to 'src/video_core/buffer_cache')
-rw-r--r--src/video_core/buffer_cache/buffer_cache_base.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h
index e4aa5896e5..57011752cc 100644
--- a/src/video_core/buffer_cache/buffer_cache_base.h
+++ b/src/video_core/buffer_cache/buffer_cache_base.h
@@ -21,6 +21,7 @@
#include <boost/container/small_vector.hpp>
#include "common/common_types.h"
+#include "common/spin_recursive_mutex.h"
#include "common/div_ceil.h"
#include "common/literals.h"
#include "common/lru_cache.h"
@@ -339,7 +340,7 @@ public:
} while (channel_state->has_deleted_buffers);
}
- std::recursive_mutex mutex;
+ Common::SpinRecursiveMutex mutex;
Runtime& runtime;
bool any_buffer_uploaded = false;