aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 00:54:02 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 00:54:02 -0400
commitc3218452c1a7e9bcdea3f9f21884791a5898ed51 (patch)
treea3a4db9594edb69532a3da0b115d1f2e6faeb643 /src/video_core/renderer_vulkan
parentd56a30137df183de548ac49151ddeeecc1ab0f16 (diff)
vulkan: one lock for both caches in InnerInvalidation
It runs before most draws (constant buffer updates go through the invalidation accumulator) and took the texture and buffer cache mutexes one after the other.
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 6bd267e566..886c5dbfe4 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -1036,13 +1036,11 @@ void RasterizerVulkan::InvalidateRegion(DAddr addr, u64 size, VideoCommon::Cache
void RasterizerVulkan::InnerInvalidation(std::span<const std::pair<DAddr, std::size_t>> sequences) {
{
- std::scoped_lock lock{texture_cache.mutex};
+ // Both caches under one lock: this runs before most draws (constant buffer updates).
+ std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex};
for (const auto& [addr, size] : sequences) {
texture_cache.WriteMemory(addr, size);
}
- }
- {
- std::scoped_lock lock{buffer_cache.mutex};
for (const auto& [addr, size] : sequences) {
buffer_cache.WriteMemory(addr, size);
}