diff options
| -rw-r--r-- | src/video_core/fence_manager.h | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.h | 4 | 
4 files changed, 10 insertions, 23 deletions
| diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index c0e6471fe..805a89900 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -86,10 +86,7 @@ public:              uncommitted_operations.emplace_back(std::move(func));          }          pending_operations.emplace_back(std::move(uncommitted_operations)); -        { -            std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; -            QueueFence(new_fence); -        } +        QueueFence(new_fence);          if (!delay_fence) {              func();          } diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 7e7a80740..c4c30d807 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -132,16 +132,12 @@ void RendererVulkan::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {      const bool use_accelerated =          rasterizer.AccelerateDisplay(*framebuffer, framebuffer_addr, framebuffer->stride);      const bool is_srgb = use_accelerated && screen_info.is_srgb; +    RenderScreenshot(*framebuffer, use_accelerated); -    { -        std::scoped_lock lock{rasterizer.LockCaches()}; -        RenderScreenshot(*framebuffer, use_accelerated); - -        Frame* frame = present_manager.GetRenderFrame(); -        blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated, is_srgb); -        scheduler.Flush(*frame->render_ready); -        present_manager.Present(frame); -    } +    Frame* frame = present_manager.GetRenderFrame(); +    blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated, is_srgb); +    scheduler.Flush(*frame->render_ready); +    present_manager.Present(frame);      gpu.RendererFrameEndNotify();      rasterizer.TickFrame(); diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index c0e8431e4..3bfaabc49 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -199,7 +199,7 @@ void RasterizerVulkan::PrepareDraw(bool is_indexed, Func&& draw_func) {      if (!pipeline) {          return;      } -    std::scoped_lock lock{LockCaches()}; +    std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex};      // update engine as channel may be different.      pipeline->SetEngine(maxwell3d, gpu_memory);      pipeline->Configure(is_indexed); @@ -710,7 +710,6 @@ void RasterizerVulkan::TiledCacheBarrier() {  }  void RasterizerVulkan::FlushCommands() { -    std::scoped_lock lock{LockCaches()};      if (draw_counter == 0) {          return;      } @@ -808,7 +807,6 @@ 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(); @@ -1507,7 +1505,7 @@ void RasterizerVulkan::UpdateVertexInput(Tegra::Engines::Maxwell3D::Regs& regs)  void RasterizerVulkan::InitializeChannel(Tegra::Control::ChannelState& channel) {      CreateChannel(channel);      { -        std::scoped_lock lock{LockCaches()}; +        std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex};          texture_cache.CreateChannel(channel);          buffer_cache.CreateChannel(channel);      } @@ -1520,7 +1518,7 @@ void RasterizerVulkan::BindChannel(Tegra::Control::ChannelState& channel) {      const s32 channel_id = channel.bind_id;      BindToChannel(channel_id);      { -        std::scoped_lock lock{LockCaches()}; +        std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex};          texture_cache.BindToChannel(channel_id);          buffer_cache.BindToChannel(channel_id);      } @@ -1533,7 +1531,7 @@ void RasterizerVulkan::BindChannel(Tegra::Control::ChannelState& channel) {  void RasterizerVulkan::ReleaseChannel(s32 channel_id) {      EraseChannel(channel_id);      { -        std::scoped_lock lock{LockCaches()}; +        std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex};          texture_cache.EraseChannel(channel_id);          buffer_cache.EraseChannel(channel_id);      } diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index ce3dfbaab..ad069556c 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -133,10 +133,6 @@ public:      void ReleaseChannel(s32 channel_id) override; -    std::scoped_lock<std::recursive_mutex, std::recursive_mutex> LockCaches() { -        return std::scoped_lock{buffer_cache.mutex, texture_cache.mutex}; -    } -  private:      static constexpr size_t MAX_TEXTURES = 192;      static constexpr size_t MAX_IMAGES = 48; | 
