diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-29 00:54:02 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-29 00:54:02 -0400 |
| commit | c3218452c1a7e9bcdea3f9f21884791a5898ed51 (patch) | |
| tree | a3a4db9594edb69532a3da0b115d1f2e6faeb643 /src/video_core/renderer_vulkan | |
| parent | d56a30137df183de548ac49151ddeeecc1ab0f16 (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.cpp | 6 |
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); } |
