diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-10-20 16:26:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-20 16:26:03 +0200 |
commit | b56c7397ad2c13ad9cd18c40ff439c14b39c98c5 (patch) | |
tree | 1d7640f2dc4202198a331818d63ba91018326e70 /src/video_core/renderer_vulkan/vk_rasterizer.cpp | |
parent | Merge pull request #11822 from german77/no-name (diff) | |
parent | renderer_vulkan: add locks to avoid scheduler flushes from CPU (diff) | |
download | yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.tar yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.tar.gz yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.tar.bz2 yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.tar.lz yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.tar.xz yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.tar.zst yuzu-b56c7397ad2c13ad9cd18c40ff439c14b39c98c5.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_rasterizer.cpp')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 61d03daae..465eac37e 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -198,7 +198,7 @@ void RasterizerVulkan::PrepareDraw(bool is_indexed, Func&& draw_func) { if (!pipeline) { return; } - std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; + std::scoped_lock lock{LockCaches()}; // update engine as channel may be different. pipeline->SetEngine(maxwell3d, gpu_memory); pipeline->Configure(is_indexed); @@ -708,6 +708,7 @@ void RasterizerVulkan::TiledCacheBarrier() { } void RasterizerVulkan::FlushCommands() { + std::scoped_lock lock{LockCaches()}; if (draw_counter == 0) { return; } @@ -805,6 +806,7 @@ void RasterizerVulkan::FlushWork() { if ((++draw_counter & 7) != 7) { return; } + std::scoped_lock lock{LockCaches()}; if (draw_counter < DRAWS_TO_DISPATCH) { // Send recorded tasks to the worker thread scheduler.DispatchWork(); @@ -1499,7 +1501,7 @@ void RasterizerVulkan::UpdateVertexInput(Tegra::Engines::Maxwell3D::Regs& regs) void RasterizerVulkan::InitializeChannel(Tegra::Control::ChannelState& channel) { CreateChannel(channel); { - std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; + std::scoped_lock lock{LockCaches()}; texture_cache.CreateChannel(channel); buffer_cache.CreateChannel(channel); } @@ -1512,7 +1514,7 @@ void RasterizerVulkan::BindChannel(Tegra::Control::ChannelState& channel) { const s32 channel_id = channel.bind_id; BindToChannel(channel_id); { - std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; + std::scoped_lock lock{LockCaches()}; texture_cache.BindToChannel(channel_id); buffer_cache.BindToChannel(channel_id); } @@ -1525,7 +1527,7 @@ void RasterizerVulkan::BindChannel(Tegra::Control::ChannelState& channel) { void RasterizerVulkan::ReleaseChannel(s32 channel_id) { EraseChannel(channel_id); { - std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; + std::scoped_lock lock{LockCaches()}; texture_cache.EraseChannel(channel_id); buffer_cache.EraseChannel(channel_id); } |