summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-05-03 16:54:24 +0200
committerGitHub <noreply@github.com>2023-05-03 16:54:24 +0200
commitffeb5cdd8df31dac9744845c7146d7364c843b9c (patch)
tree5c2567321f0f2397ab0637c5c913489817966eda
parentMerge pull request #10146 from liamwhite/catch3 (diff)
parentvk_present_manager: Fix softlocks when disabling async present (diff)
downloadyuzu-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.cpp2
-rw-r--r--src/video_core/renderer_vulkan/vk_present_manager.cpp11
-rw-r--r--src/video_core/renderer_vulkan/vk_present_manager.h2
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,