From bc78fc6ed03cfd0ce326e5377a3fabf984f68c38 Mon Sep 17 00:00:00 2001 From: WinterSnowfall Date: Fri, 4 Oct 2024 16:13:35 +0300 Subject: [PATCH] [d3d8] Validate D3D8 present params before conversion --- src/d3d8/d3d8_d3d9_util.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/d3d8/d3d8_d3d9_util.h b/src/d3d8/d3d8_d3d9_util.h index ce53699f2..9c9a8c66e 100644 --- a/src/d3d8/d3d8_d3d9_util.h +++ b/src/d3d8/d3d8_d3d9_util.h @@ -58,7 +58,12 @@ namespace dxvk { } // (9<-8) D3DD3DPRESENT_PARAMETERS: Returns D3D9's params given an input for D3D8 - inline d3d9::D3DPRESENT_PARAMETERS ConvertPresentParameters9(const D3DPRESENT_PARAMETERS* pParams) { + inline d3d9::D3DPRESENT_PARAMETERS ConvertPresentParameters9(D3DPRESENT_PARAMETERS* pParams) { + // A 0 back buffer count needs to be corrected and made visible to the D3D8 application as well + pParams->BackBufferCount = std::max(pParams->BackBufferCount, 1u); + + if (pParams->BackBufferFormat == D3DFMT_UNKNOWN) + pParams->BackBufferFormat = D3DFMT_X8R8G8B8; d3d9::D3DPRESENT_PARAMETERS params; params.BackBufferWidth = pParams->BackBufferWidth; @@ -69,7 +74,6 @@ namespace dxvk { params.MultiSampleType = d3d9::D3DMULTISAMPLE_TYPE(pParams->MultiSampleType); params.MultiSampleQuality = 0; // (D3D8: no MultiSampleQuality), TODO: get a value for this - UINT PresentationInterval = pParams->FullScreen_PresentationInterval; if (pParams->Windowed) {