From 09350f71e8711af1d7124ab41dddde462e006a19 Mon Sep 17 00:00:00 2001 From: GPUCode Date: Sun, 5 Feb 2023 21:56:12 +0200 Subject: [PATCH] renderer_vulkan: Fix present mailbox shutdown sequence --- src/video_core/renderer_vulkan/renderer_vulkan.cpp | 2 +- src/video_core/renderer_vulkan/vk_texture_mailbox.cpp | 6 +++--- src/video_core/renderer_vulkan/vk_texture_mailbox.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index c8170a9cd..5277c2470 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -142,7 +142,7 @@ RendererVulkan::~RendererVulkan() { vmaDestroyImage(instance.GetAllocator(), info.texture.image, info.texture.allocation); } - render_window.mailbox.reset(); + mailbox.reset(); } void RendererVulkan::Sync() { diff --git a/src/video_core/renderer_vulkan/vk_texture_mailbox.cpp b/src/video_core/renderer_vulkan/vk_texture_mailbox.cpp index 0c55231bb..3e0ed4443 100644 --- a/src/video_core/renderer_vulkan/vk_texture_mailbox.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_mailbox.cpp @@ -49,9 +49,6 @@ PresentMailbox::PresentMailbox(const Instance& instance_, Swapchain& swapchain_, } PresentMailbox::~PresentMailbox() { - free_queue.Clear(); - present_queue.Clear(); - const vk::Device device = instance.GetDevice(); device.destroyCommandPool(command_pool); for (auto& frame : swap_chain) { @@ -180,6 +177,9 @@ void PresentMailbox::PresentThread(std::stop_token token) { Common::SetCurrentThreadName("VulkanPresent"); do { Frame* frame = present_queue.PopWait(token); + if (token.stop_requested()) { + continue; + } CopyToSwapchain(frame); free_queue.Push(frame); } while (!token.stop_requested()); diff --git a/src/video_core/renderer_vulkan/vk_texture_mailbox.h b/src/video_core/renderer_vulkan/vk_texture_mailbox.h index 33581f133..8456a1320 100644 --- a/src/video_core/renderer_vulkan/vk_texture_mailbox.h +++ b/src/video_core/renderer_vulkan/vk_texture_mailbox.h @@ -55,10 +55,10 @@ private: RenderpassCache& renderpass_cache; vk::CommandPool command_pool; vk::Queue graphics_queue; - std::jthread present_thread; std::array swap_chain{}; Common::SPSCQueue free_queue{}; Common::SPSCQueue present_queue{}; + std::jthread present_thread; std::mutex swapchain_mutex; std::condition_variable swapchain_cv; };