@@ -413,11 +413,19 @@ namespace dxvk {
413413// can not be higher than D3DSWAPEFFECT_FLIPEX.
414414if (unlikely (pPresentationParameters->SwapEffect > D3DSWAPEFFECT_FLIPEX))
415415return D3DERR_INVALIDCALL;
416+
417+ // 30 is the highest supported back buffer count for Ex devices.
418+ if (unlikely (pPresentationParameters->BackBufferCount > D3DPRESENT_BACK_BUFFERS_MAX_EX))
419+ return D3DERR_INVALIDCALL;
416420 }else {
417421// The swap effect value on a non-Ex D3D9 device
418422// can not be higher than D3DSWAPEFFECT_COPY.
419423if (unlikely (pPresentationParameters->SwapEffect > D3DSWAPEFFECT_COPY))
420424return D3DERR_INVALIDCALL;
425+
426+ // 3 is the highest supported back buffer count for non-Ex devices.
427+ if (unlikely (pPresentationParameters->BackBufferCount > D3DPRESENT_BACK_BUFFERS_MAX))
428+ return D3DERR_INVALIDCALL;
421429 }
422430
423431// The swap effect value can not be 0.
@@ -436,10 +444,6 @@ namespace dxvk {
436444 && pPresentationParameters->BackBufferCount >1 ))
437445return D3DERR_INVALIDCALL;
438446
439- // 3 is the highest supported back buffer count.
440- if (unlikely (pPresentationParameters->BackBufferCount >3 ))
441- return D3DERR_INVALIDCALL;
442-
443447// Valid fullscreen presentation intervals must be known values.
444448if (unlikely (!pPresentationParameters->Windowed
445449 && !(pPresentationParameters->PresentationInterval == D3DPRESENT_INTERVAL_DEFAULT