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 res = vkAcquireNextImageKHR(g_vulkan_context->GetDevice(), m_swap_chain, UINT64_MAX,
m_image_available_semaphore, 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;
return vkAcquireNextImageKHR(g_vulkan_context->GetDevice(), m_swap_chain, UINT64_MAX, m_image_available_semaphore,
VK_NULL_HANDLE, &m_current_image);
}
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();
}
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;
}
}