From d6ffd158ea0ae1cf586de15061ae23952cfdf9c0 Mon Sep 17 00:00:00 2001 From: offtkp Date: Sun, 1 Sep 2024 22:08:57 +0300 Subject: [PATCH] Move mutex lock outside of ObtainBuffer --- src/video_core/buffer_cache/buffer_cache.cpp | 11 +++-------- src/video_core/buffer_cache/buffer_cache.h | 4 ---- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index aad70b8ce..71228786e 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -164,7 +164,7 @@ bool BufferCache::BindVertexBuffers(const Shader::Info& vs_info) { // Map buffers for (auto& range : ranges_merged) { - const auto [buffer, offset] = ObtainBufferImpl(range.base_address, range.GetSize(), false); + const auto [buffer, offset] = ObtainBuffer(range.base_address, range.GetSize(), false); range.vk_buffer = buffer->buffer; range.offset = offset; } @@ -222,7 +222,7 @@ u32 BufferCache::BindIndexBuffer(bool& is_indexed, u32 index_offset) { // Bind index buffer. const u32 index_buffer_size = regs.num_indices * index_size; - const auto [vk_buffer, offset] = ObtainBufferImpl(index_address, index_buffer_size, false); + const auto [vk_buffer, offset] = ObtainBuffer(index_address, index_buffer_size, false); const auto cmdbuf = scheduler.CommandBuffer(); cmdbuf.bindIndexBuffer(vk_buffer->Handle(), offset, index_type); return regs.num_indices; @@ -230,12 +230,6 @@ u32 BufferCache::BindIndexBuffer(bool& is_indexed, u32 index_offset) { std::pair BufferCache::ObtainBuffer(VAddr device_addr, u32 size, bool is_written, bool is_texel_buffer) { - std::scoped_lock lk{mutex}; - return ObtainBufferImpl(device_addr, size, is_written, is_texel_buffer); -} - -std::pair BufferCache::ObtainBufferImpl(VAddr device_addr, u32 size, bool is_written, - bool is_texel_buffer) { static constexpr u64 StreamThreshold = CACHING_PAGESIZE; const bool is_gpu_dirty = memory_tracker.IsRegionGpuModified(device_addr, size); if (!is_written && !is_texel_buffer && size <= StreamThreshold && !is_gpu_dirty) { @@ -466,6 +460,7 @@ void BufferCache::ChangeRegister(BufferId buffer_id) { } bool BufferCache::SynchronizeBuffer(Buffer& buffer, VAddr device_addr, u32 size) { + std::scoped_lock lk{mutex}; boost::container::small_vector copies; u64 total_size_bytes = 0; u64 largest_copy = 0; diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index e913a1382..b9002cea2 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -120,10 +120,6 @@ private: void DeleteBuffer(BufferId buffer_id, bool do_not_mark = false); - [[nodiscard]] std::pair ObtainBufferImpl(VAddr gpu_addr, u32 size, - bool is_written, - bool is_texel_buffer = false); - const Vulkan::Instance& instance; Vulkan::Scheduler& scheduler; const AmdGpu::Liverpool* liverpool;