From 218b67dd0c1eb3942668428a98f46a6fefefcf95 Mon Sep 17 00:00:00 2001 From: WinterSnowfall Date: Thu, 28 Nov 2024 15:25:25 +0200 Subject: [PATCH] [d3d9] Use header back buffer limits during validation Co-authored-by: Blisto91 <47954800+Blisto91@users.noreply.github.com> --- src/d3d9/d3d9_interface.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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