diff --git a/source/renderer/backend/vulkan/Device.cpp b/source/renderer/backend/vulkan/Device.cpp index e09458bbea..855233713c 100644 --- a/source/renderer/backend/vulkan/Device.cpp +++ b/source/renderer/backend/vulkan/Device.cpp @@ -805,13 +805,6 @@ bool CDevice::AcquireNextBackbuffer() { if (!IsSwapChainValid()) { - vkDeviceWaitIdle(m_Device); - - // Since we know there is no GPU work in progress we can free resources - // queued for deletion. - ProcessDeviceObjectToDestroyQueue(true); - ProcessObjectToDestroyQueue(true); - RecreateSwapChain(); if (!IsSwapChainValid()) return false; @@ -1042,7 +1035,18 @@ std::unique_ptr CDevice::CreateRingCommandContext(const siz void CDevice::RecreateSwapChain() { - m_BackbufferReadbackTexture.reset(); + if (m_SwapChain) + { + vkDeviceWaitIdle(m_Device); + + m_BackbufferReadbackTexture.reset(); + + // Since we know there is no GPU work in progress we can free resources + // queued for deletion. + ProcessDeviceObjectToDestroyQueue(true); + ProcessObjectToDestroyQueue(true); + } + int surfaceDrawableWidth = 0, surfaceDrawableHeight = 0; SDL_Vulkan_GetDrawableSize(m_Window, &surfaceDrawableWidth, &surfaceDrawableHeight); m_SwapChain = CSwapChain::Create(