mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
Recreate swapchain directly if vkAcquireNextImageKHR fails.
This commit is contained in:
parent
714684a4d3
commit
ac42b87400
@ -2263,7 +2263,9 @@ void vulkan_acquire_next_image(gfx_ctx_vulkan_data_t *vk)
|
||||
VkFenceCreateInfo fence_info =
|
||||
{ VK_STRUCTURE_TYPE_FENCE_CREATE_INFO };
|
||||
VkFence *next_fence = NULL;
|
||||
bool is_retrying = false;
|
||||
|
||||
retry:
|
||||
vkCreateFence(vk->context.device, &fence_info, NULL, &fence);
|
||||
|
||||
err = vkAcquireNextImageKHR(vk->context.device,
|
||||
@ -2293,8 +2295,27 @@ void vulkan_acquire_next_image(gfx_ctx_vulkan_data_t *vk)
|
||||
|
||||
if (err != VK_SUCCESS)
|
||||
{
|
||||
RARCH_LOG("[Vulkan]: AcquireNextImage failed, invalidating swapchain.\n");
|
||||
vk->context.invalid_swapchain = true;
|
||||
if (is_retrying)
|
||||
{
|
||||
RARCH_ERR("[Vulkan]: Tried acquring next swapchain image after creating new one, but failed ...\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
RARCH_LOG("[Vulkan]: AcquireNextImage failed, invalidating swapchain.\n");
|
||||
vk->context.invalid_swapchain = true;
|
||||
|
||||
RARCH_LOG("[Vulkan]: AcquireNextImage failed, so trying to recreate swapchain.\n");
|
||||
if (!vulkan_create_swapchain(vk, vk->context.swapchain_width,
|
||||
vk->context.swapchain_height, vk->context.swap_interval))
|
||||
{
|
||||
RARCH_ERR("[Vulkan]: Failed to create new swapchain.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
is_retrying = true;
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2517,6 +2538,7 @@ bool vulkan_create_swapchain(gfx_ctx_vulkan_data_t *vk,
|
||||
vkDestroyFence(vk->context.device,
|
||||
vk->context.swapchain_fences[i], NULL);
|
||||
vk->context.swapchain_fences[i] = VK_NULL_HANDLE;
|
||||
vk->context.swapchain_fences_signalled[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user