diff --git a/common/Vulkan/SwapChain.cpp b/common/Vulkan/SwapChain.cpp index 1a7a4b2bce..f68a9c13f8 100644 --- a/common/Vulkan/SwapChain.cpp +++ b/common/Vulkan/SwapChain.cpp @@ -825,6 +825,7 @@ namespace Vulkan DestroySwapChainImages(); DestroySwapChain(); DestroySurface(); + DestroySemaphores(); // Re-create the surface with the new native handle m_window_info = new_wi; @@ -849,7 +850,7 @@ namespace Vulkan } // Finally re-create the swap chain - if (!CreateSwapChain() || !SetupSwapChainImages()) + if (!CreateSwapChain() || !SetupSwapChainImages() || !CreateSemaphores()) return false; return true; diff --git a/pcsx2/Frontend/VulkanHostDisplay.cpp b/pcsx2/Frontend/VulkanHostDisplay.cpp index 5295c45287..878adeb40d 100644 --- a/pcsx2/Frontend/VulkanHostDisplay.cpp +++ b/pcsx2/Frontend/VulkanHostDisplay.cpp @@ -112,7 +112,11 @@ void VulkanHostDisplay::ResizeRenderWindow(s32 new_window_width, s32 new_window_ g_vulkan_context->WaitForGPUIdle(); if (!m_swap_chain->ResizeSwapChain(new_window_width, new_window_height)) - pxFailRel("Failed to resize swap chain"); + { + // AcquireNextImage() will fail, and we'll recreate the surface. + Console.Error("Failed to resize swap chain. Next present will fail."); + return; + } m_window_info = m_swap_chain->GetWindowInfo(); } @@ -341,7 +345,6 @@ bool VulkanHostDisplay::BeginPresent(bool frame_skip) { Console.Error("Failed to recreate surface after loss"); g_vulkan_context->ExecuteCommandBuffer(false); - m_swap_chain.reset(); return false; }