From 00ffffe8c02a6df64d75b266e3005ffcceb8cc46 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Thu, 13 May 2021 12:48:26 +1000 Subject: [PATCH] VulkanHostDisplay: Handle surface changes if this happens --- src/frontend-common/vulkan_host_display.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/frontend-common/vulkan_host_display.cpp b/src/frontend-common/vulkan_host_display.cpp index ed8980c0c..dc936f84a 100644 --- a/src/frontend-common/vulkan_host_display.cpp +++ b/src/frontend-common/vulkan_host_display.cpp @@ -80,6 +80,18 @@ bool VulkanHostDisplay::ChangeRenderWindow(const WindowInfo& new_wi) return true; } + // recreate surface in existing swap chain if it already exists + if (m_swap_chain) + { + if (m_swap_chain->RecreateSurface(new_wi)) + { + m_window_info = m_swap_chain->GetWindowInfo(); + return true; + } + + m_swap_chain.reset(); + } + WindowInfo wi_copy(new_wi); VkSurfaceKHR surface = Vulkan::SwapChain::CreateVulkanSurface(g_vulkan_context->GetVulkanInstance(), g_vulkan_context->GetPhysicalDevice(), &wi_copy); @@ -93,6 +105,7 @@ bool VulkanHostDisplay::ChangeRenderWindow(const WindowInfo& new_wi) if (!m_swap_chain) { Log_ErrorPrintf("Failed to create swap chain"); + Vulkan::SwapChain::DestroyVulkanSurface(g_vulkan_context->GetVulkanInstance(), &wi_copy, surface); return false; }