From 419a2ecd426a1a112c12afc93fb5571a22c74f0a Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 6 Jul 2017 16:15:10 +0100 Subject: [PATCH] Add handling for VK_ERROR_OUT_OF_DATE_KHR returned from swapchain funcs --- renderdoc/driver/vulkan/vk_replay.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index f201b49e1..1f5bc58af 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -2482,6 +2482,20 @@ void VulkanReplay::BindOutputWindow(uint64_t id, bool depth) vkr = vt->AcquireNextImageKHR(Unwrap(dev), Unwrap(outw.swap), UINT64_MAX, sem, VK_NULL_HANDLE, &outw.curidx); + + if(vkr == VK_ERROR_OUT_OF_DATE_KHR) + { + // force a swapchain recreate. + outw.width = 0; + outw.height = 0; + + CheckResizeOutputWindow(id); + + // then try again to acquire. + vkr = vt->AcquireNextImageKHR(Unwrap(dev), Unwrap(outw.swap), UINT64_MAX, sem, VK_NULL_HANDLE, + &outw.curidx); + } + RDCASSERTEQUAL(vkr, VK_SUCCESS); VkSubmitInfo submitInfo = { @@ -2750,6 +2764,19 @@ void VulkanReplay::FlipOutputWindow(uint64_t id) &vkr}; VkResult retvkr = vt->QueuePresentKHR(Unwrap(m_pDriver->GetQ()), &presentInfo); + + if(retvkr == VK_ERROR_OUT_OF_DATE_KHR) + { + // force a swapchain recreate. + outw.width = 0; + outw.height = 0; + + CheckResizeOutputWindow(id); + + // skip this present + retvkr = vkr = VK_SUCCESS; + } + RDCASSERTEQUAL(vkr, VK_SUCCESS); RDCASSERTEQUAL(retvkr, VK_SUCCESS);