diff --git a/src/d3d9/d3d9_interface.cpp b/src/d3d9/d3d9_interface.cpp index 1d3946cf..1adca971 100644 --- a/src/d3d9/d3d9_interface.cpp +++ b/src/d3d9/d3d9_interface.cpp @@ -418,11 +418,19 @@ namespace dxvk { // can not be higher than D3DSWAPEFFECT_FLIPEX. if (unlikely(pPresentationParameters->SwapEffect > D3DSWAPEFFECT_FLIPEX)) return D3DERR_INVALIDCALL; + + // 30 is the highest supported back buffer count for Ex devices. + if (unlikely(pPresentationParameters->BackBufferCount > D3DPRESENT_BACK_BUFFERS_MAX_EX)) + return D3DERR_INVALIDCALL; } else { // The swap effect value on a non-Ex D3D9 device // can not be higher than D3DSWAPEFFECT_COPY. if (unlikely(pPresentationParameters->SwapEffect > D3DSWAPEFFECT_COPY)) return D3DERR_INVALIDCALL; + + // 3 is the highest supported back buffer count for non-Ex devices. + if (unlikely(pPresentationParameters->BackBufferCount > D3DPRESENT_BACK_BUFFERS_MAX)) + return D3DERR_INVALIDCALL; } // The swap effect value can not be 0. @@ -438,10 +446,6 @@ namespace dxvk { && pPresentationParameters->BackBufferCount > 1)) return D3DERR_INVALIDCALL; - // 3 is the highest supported back buffer count. - if (unlikely(pPresentationParameters->BackBufferCount > 3)) - return D3DERR_INVALIDCALL; - // Valid fullscreen presentation intervals must be known values. if (unlikely(!pPresentationParameters->Windowed && !(pPresentationParameters->PresentationInterval == D3DPRESENT_INTERVAL_DEFAULT