diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-05-03 16:54:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-03 16:54:24 +0200 |
commit | ffeb5cdd8df31dac9744845c7146d7364c843b9c (patch) | |
tree | 5c2567321f0f2397ab0637c5c913489817966eda | |
parent | Merge pull request #10146 from liamwhite/catch3 (diff) | |
parent | vk_present_manager: Fix softlocks when disabling async present (diff) | |
download | yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.tar yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.tar.gz yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.tar.bz2 yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.tar.lz yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.tar.xz yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.tar.zst yuzu-ffeb5cdd8df31dac9744845c7146d7364c843b9c.zip |
-rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 2 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_present_manager.cpp | 11 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_present_manager.h | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 69dc76180..908625c66 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -134,7 +134,7 @@ void RendererVulkan::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { Frame* frame = present_manager.GetRenderFrame(); blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated, is_srgb); scheduler.Flush(*frame->render_ready); - scheduler.Record([this, frame](vk::CommandBuffer) { present_manager.PushFrame(frame); }); + present_manager.Present(frame); gpu.RendererFrameEndNotify(); rasterizer.TickFrame(); diff --git a/src/video_core/renderer_vulkan/vk_present_manager.cpp b/src/video_core/renderer_vulkan/vk_present_manager.cpp index a137c66f2..c49583013 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.cpp +++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp @@ -153,16 +153,19 @@ Frame* PresentManager::GetRenderFrame() { return frame; } -void PresentManager::PushFrame(Frame* frame) { +void PresentManager::Present(Frame* frame) { if (!use_present_thread) { + scheduler.WaitWorker(); CopyToSwapchain(frame); free_queue.push(frame); return; } - std::unique_lock lock{queue_mutex}; - present_queue.push(frame); - frame_cv.notify_one(); + scheduler.Record([this, frame](vk::CommandBuffer) { + std::unique_lock lock{queue_mutex}; + present_queue.push(frame); + frame_cv.notify_one(); + }); } void PresentManager::RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, diff --git a/src/video_core/renderer_vulkan/vk_present_manager.h b/src/video_core/renderer_vulkan/vk_present_manager.h index 9885fd7c6..420a775e2 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.h +++ b/src/video_core/renderer_vulkan/vk_present_manager.h @@ -45,7 +45,7 @@ public: Frame* GetRenderFrame(); /// Pushes a frame for presentation - void PushFrame(Frame* frame); + void Present(Frame* frame); /// Recreates the present frame to match the provided parameters void RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, |