From 8a6312abda24d11d6c9abfe133013b32e4aef3e6 Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Mon, 20 Dec 2021 20:27:13 +0000 Subject: [PATCH] [WIN32SS][NTDDRAW] Improve DxEngGetDCState type 2 implementation (#4176) - Use the REGION_Complexity() function to get the actual region complexity instead of just number of rectangles. - Don't use prgnRao at all, because it is always uninitialized when passed to the function. So in condition between prgnRao and prgnVis, the 2nd one always succeeds. - Update the comment accordingly. - Additionally, add a DPRINT to the end of the function, which displays the returned value. This allows to properly enable and use DirectDraw and Direct3D hardware acceleration with the following MS DirectX components: ddraw.dll, d3d8.dll, d3d9.dll and dxg.sys. As in VM, same on real hardware. But note that now the bugcheck 0x50 (PAGE_FAULT_IN_NONPAGED_AREA) occurs when executing fullscreen DDraw apps, after switching display mode. It's unhidden by this fix. Addendum to 855bf46. CORE-17561 --- win32ss/reactx/ntddraw/dxeng.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/win32ss/reactx/ntddraw/dxeng.c b/win32ss/reactx/ntddraw/dxeng.c index 24cb542643e..7004e58e480 100644 --- a/win32ss/reactx/ntddraw/dxeng.c +++ b/win32ss/reactx/ntddraw/dxeng.c @@ -464,8 +464,8 @@ DxEngGetDCState(HDC hDC, retVal = (DWORD_PTR) pDC->fs & DC_FLAG_FULLSCREEN; break; case 2: - /* Return the number of rectangles in the visible region. */ - retVal = (DWORD_PTR) pDC->prgnRao ? pDC->prgnRao->rdh.nCount : pDC->prgnVis->rdh.nCount; + /* Return the complexity of the visible region. */ + retVal = (DWORD_PTR) REGION_Complexity(pDC->prgnVis); break; case 3: { @@ -481,6 +481,8 @@ DxEngGetDCState(HDC hDC, DC_UnlockDc(pDC); } + DPRINT1("Return value %08lx\n", retVal); + return retVal; }