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