summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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) {
134 Frame* frame = present_manager.GetRenderFrame(); 134 Frame* frame = present_manager.GetRenderFrame();
135 blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated, is_srgb); 135 blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated, is_srgb);
136 scheduler.Flush(*frame->render_ready); 136 scheduler.Flush(*frame->render_ready);
137 scheduler.Record([this, frame](vk::CommandBuffer) { present_manager.PushFrame(frame); }); 137 present_manager.Present(frame);
138 138
139 gpu.RendererFrameEndNotify(); 139 gpu.RendererFrameEndNotify();
140 rasterizer.TickFrame(); 140 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() {
153 return frame; 153 return frame;
154} 154}
155 155
156void PresentManager::PushFrame(Frame* frame) { 156void PresentManager::Present(Frame* frame) {
157 if (!use_present_thread) { 157 if (!use_present_thread) {
158 scheduler.WaitWorker();
158 CopyToSwapchain(frame); 159 CopyToSwapchain(frame);
159 free_queue.push(frame); 160 free_queue.push(frame);
160 return; 161 return;
161 } 162 }
162 163
163 std::unique_lock lock{queue_mutex}; 164 scheduler.Record([this, frame](vk::CommandBuffer) {
164 present_queue.push(frame); 165 std::unique_lock lock{queue_mutex};
165 frame_cv.notify_one(); 166 present_queue.push(frame);
167 frame_cv.notify_one();
168 });
166} 169}
167 170
168void PresentManager::RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, 171void 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:
45 Frame* GetRenderFrame(); 45 Frame* GetRenderFrame();
46 46
47 /// Pushes a frame for presentation 47 /// Pushes a frame for presentation
48 void PushFrame(Frame* frame); 48 void Present(Frame* frame);
49 49
50 /// Recreates the present frame to match the provided parameters 50 /// Recreates the present frame to match the provided parameters
51 void RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, 51 void RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb,