diff options
Diffstat (limited to 'src')
| -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) { | |||
| 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 | ||
| 156 | void PresentManager::PushFrame(Frame* frame) { | 156 | void 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 | ||
| 168 | void PresentManager::RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, | 171 | 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: | |||
| 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, |