diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index 5a885f52..f95bc2e8 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -308,7 +308,7 @@ namespace dxvk { void D3D11SwapChain::RecreateSwapChain(BOOL Vsync) { vk::PresenterDesc presenterDesc; presenterDesc.imageExtent = { m_desc.Width, m_desc.Height }; - presenterDesc.imageCount = m_desc.BufferCount; + presenterDesc.imageCount = PickImageCount(m_desc.BufferCount); presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats); presenterDesc.numPresentModes = PickPresentModes(Vsync, presenterDesc.presentModes); @@ -329,7 +329,7 @@ namespace dxvk { vk::PresenterDesc presenterDesc; presenterDesc.imageExtent = { m_desc.Width, m_desc.Height }; - presenterDesc.imageCount = m_desc.BufferCount; + presenterDesc.imageCount = PickImageCount(m_desc.BufferCount); presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats); presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes); @@ -720,4 +720,11 @@ namespace dxvk { return n; } + + uint32_t D3D11SwapChain::PickImageCount( + UINT Preferred) { + int32_t option = m_parent->GetOptions()->numBackBuffers; + return option > 0 ? uint32_t(option) : uint32_t(Preferred); + } + } \ No newline at end of file diff --git a/src/d3d11/d3d11_swapchain.h b/src/d3d11/d3d11_swapchain.h index f8989df3..a5eeb176 100644 --- a/src/d3d11/d3d11_swapchain.h +++ b/src/d3d11/d3d11_swapchain.h @@ -153,6 +153,9 @@ namespace dxvk { BOOL Vsync, VkPresentModeKHR* pDstModes); + uint32_t PickImageCount( + UINT Preferred); + }; } \ No newline at end of file