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;
};