From 6d8cb64ea33d9bc6d93f8c867dd19476359c982c Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Thu, 1 May 2008 12:08:02 +0000 Subject: [PATCH] add regkey HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI\Timeout for dxg.sys it is the second timeout value for a surface lock see url for more informations http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/28237.mspx?mfr=true thx irc:stefan100 for the url remove one hack in intEnableReactXDriver thx to this info. svn path=/trunk/; revision=33210 --- reactos/boot/bootdata/hivesys.inf | 3 +++ reactos/include/reactos/drivers/directx/directxint.h | 12 +++++++++--- reactos/subsystems/win32/win32k/ntddraw/ddraw.c | 8 +------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/reactos/boot/bootdata/hivesys.inf b/reactos/boot/bootdata/hivesys.inf index 60790fed444..d804c12e2a4 100644 --- a/reactos/boot/bootdata/hivesys.inf +++ b/reactos/boot/bootdata/hivesys.inf @@ -457,6 +457,9 @@ HKLM,"SYSTEM\CurrentControlSet\Control\ServiceGroupOrder","List",0x00010000, \ "PlugPlay", \ "Extended Base" +; Set the timeout for directx/ReactX graphic surface lock see _EDD_DIRECTDRAW_GLOBAL struct for more info +HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI","Timeout",0x00010001,0x00000007 + ; Group order, the first DWORD is the count of entries, ; the following dwords are the tag entries for the load order. HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Video Save", 0x00000001, \ diff --git a/reactos/include/reactos/drivers/directx/directxint.h b/reactos/include/reactos/drivers/directx/directxint.h index 1baa66df6e6..cefed19025c 100644 --- a/reactos/include/reactos/drivers/directx/directxint.h +++ b/reactos/include/reactos/drivers/directx/directxint.h @@ -106,13 +106,13 @@ typedef struct _EDD_SURFACE typedef struct _EDD_DIRECTDRAW_GLOBAL { -/* 0x000 */ PVOID dhpdev; +/* 0x000 */ PVOID dhpdev; // 0x000 <-- verified to match Windows XP, dhpdev, the drv hPDev --> /* 0x004 */ DWORD dwReserved1; /* 0x008 */ DWORD dwReserved2; /* 0x00C */ ULONG unk_000c[3]; /* 0x018 */ LONG cDriverReferences; /* 0x01C */ ULONG unk_01c; -/* 0x020 */ DWORD dwCallbackFlags; /* <-- verified to match Windows XP, dwCallbackFlags +/* 0x020 */ DWORD dwCallbackFlags; /* 0x020 <-- verified to match Windows XP, dwCallbackFlags Flags value 0x0002 = ddVideoPortCallback and GUID_VideoPortCaps 0x0004 = GUID_ColorControlCallbacks @@ -125,7 +125,13 @@ typedef struct _EDD_DIRECTDRAW_GLOBAL /* 0x024 */ ULONG unk_024; #ifdef _WIN32 -/* 0x028 */ LARGE_INTEGER llAssertModeTimeout; // 0x028 <-- verified to match Windows XP, llAssertModeTimeout +/* 0x028 */ LARGE_INTEGER llAssertModeTimeout; /* 0x028 <-- verified to match Windows XP, llAssertModeTimeout, it + using regkey + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI + Specifies how long a DirectDraw application can keep a graphics-device frame-buffer locked + in second, if this value are set to 0 it disable directdraw acclatrions. + it is normal set to 7 (7 sec in windwos xp/2003) + */ #else /* 0x028 */ DWORD llAssertModeTimeoutLowPart; /* 0x02C */ DWORD llAssertModeTimeoutHighPart; diff --git a/reactos/subsystems/win32/win32k/ntddraw/ddraw.c b/reactos/subsystems/win32/win32k/ntddraw/ddraw.c index 115273f765c..46b1d9a0700 100644 --- a/reactos/subsystems/win32/win32k/ntddraw/ddraw.c +++ b/reactos/subsystems/win32/win32k/ntddraw/ddraw.c @@ -54,6 +54,7 @@ intEnableReactXDriver(PEDD_DIRECTDRAW_GLOBAL pEddgbl, PDC pDC) success = pfnDdEnableDirectDraw(pDC->pPDev, TRUE); dump_edd_directdraw_global(pEddgbl); + dump_halinfo(&pEddgbl->ddHalInfo); DPRINT1(" end call to pfnDdEnableDirectDraw \n "); } @@ -264,13 +265,6 @@ intEnableReactXDriver(PEDD_DIRECTDRAW_GLOBAL pEddgbl, PDC pDC) /* setup missing data in ddHalInfo */ //pEddgbl->ddHalInfo.GetDriverInfo = (PVOID)pDev->DriverFunctions.GetDirectDrawInfo; - - /* FIXME : hack ? it will let us DxDdQueryDirectDrawObject if the llAssertModeTimeout contain negtive value -1*/ - pEddgbl->llAssertModeTimeout.QuadPart = -1; - - - - /* FIXME : remove this when we are done with debuging of dxg */ dump_edd_directdraw_global(pEddgbl); dump_halinfo(&pEddgbl->ddHalInfo);