diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index 0c85ddbe..acbc5e0d 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -377,7 +377,7 @@ namespace dxvk { VkResult status = m_presenter->acquireNextImage(sync, imageIndex); - while (status != VK_SUCCESS && status != VK_SUBOPTIMAL_KHR) { + while (status != VK_SUCCESS) { RecreateSwapChain(); if (!m_presenter->hasSwapChain()) @@ -385,6 +385,9 @@ namespace dxvk { info = m_presenter->info(); status = m_presenter->acquireNextImage(sync, imageIndex); + + if (status == VK_SUBOPTIMAL_KHR) + break; } if (m_hdrMetadata && m_dirtyHdrMetadata) { diff --git a/src/d3d9/d3d9_swapchain.cpp b/src/d3d9/d3d9_swapchain.cpp index d7e43210..76ba168d 100644 --- a/src/d3d9/d3d9_swapchain.cpp +++ b/src/d3d9/d3d9_swapchain.cpp @@ -799,11 +799,14 @@ namespace dxvk { VkResult status = m_wctx->presenter->acquireNextImage(sync, imageIndex); - while (status != VK_SUCCESS && status != VK_SUBOPTIMAL_KHR) { + while (status != VK_SUCCESS) { RecreateSwapChain(); info = m_wctx->presenter->info(); status = m_wctx->presenter->acquireNextImage(sync, imageIndex); + + if (status == VK_SUBOPTIMAL_KHR) + break; } if (m_hdrMetadata && m_dirtyHdrMetadata) {