Vulkan: Fix crash when drag-resizing window

This commit is contained in:
Connor McLaughlin 2020-06-22 15:57:54 +10:00
parent 82a0ad8a10
commit 1455e793d5
2 changed files with 8 additions and 8 deletions

View file

@ -411,12 +411,8 @@ void SwapChain::DestroySwapChain()
VkResult SwapChain::AcquireNextImage() VkResult SwapChain::AcquireNextImage()
{ {
VkResult res = vkAcquireNextImageKHR(g_vulkan_context->GetDevice(), m_swap_chain, UINT64_MAX, return vkAcquireNextImageKHR(g_vulkan_context->GetDevice(), m_swap_chain, UINT64_MAX, m_image_available_semaphore,
m_image_available_semaphore, VK_NULL_HANDLE, &m_current_image); VK_NULL_HANDLE, &m_current_image);
if (res != VK_SUCCESS && res != VK_ERROR_OUT_OF_DATE_KHR && res != VK_SUBOPTIMAL_KHR)
LOG_VULKAN_ERROR(res, "vkAcquireNextImageKHR failed: ");
return res;
} }
bool SwapChain::ResizeSwapChain(u32 new_width /* = 0 */, u32 new_height /* = 0 */) bool SwapChain::ResizeSwapChain(u32 new_width /* = 0 */, u32 new_height /* = 0 */)

View file

@ -380,9 +380,13 @@ bool VulkanHostDisplay::BeginRender()
res = m_swap_chain->AcquireNextImage(); res = m_swap_chain->AcquireNextImage();
} }
if (res != VK_SUCCESS) // This can happen when multiple resize events happen in quick succession.
// In this case, just wait until the next frame to try again.
if (res != VK_SUCCESS && res != VK_SUBOPTIMAL_KHR)
{ {
Panic("Failed to acquire swap chain image"); // Still submit the command buffer, otherwise we'll end up with several frames waiting.
LOG_VULKAN_ERROR(res, "vkAcquireNextImageKHR() failed: ");
g_vulkan_context->ExecuteCommandBuffer(false);
return false; return false;
} }
} }