DxDdStartupDxGraphics

Bugfix : the load order, it try loading vista dxkrnl.sys frist then it try loading dxg.System
rember I have not tested vista dxkrnl.sys in reactos at all yet. 

Bugfix :
thx piggworth for notice the hDev was never resive to DxEngLockHdev, it still does not do in some case. 
we need more invigaste why

svn path=/trunk/; revision=33084
This commit is contained in:
Magnus Olsen 2008-04-21 05:42:08 +00:00
parent 09592ecd54
commit 92a93b0559
3 changed files with 36 additions and 20 deletions

View file

@ -125,7 +125,8 @@ dll\directx\dplay\dplay.dll 1
dll\directx\dplayx\dplayx.dll 1 dll\directx\dplayx\dplayx.dll 1
dll\directx\dsound\dsound.dll 1 dll\directx\dsound\dsound.dll 1
dll\directx\dxdiagn\dxdiagn.dll 1 dll\directx\dxdiagn\dxdiagn.dll 1
dll\directx\ddraw\ddraw.dll 1 windows\ddraw.dll 1
windows\dciman32.dll 1
dll\directx\d3d8thk\d3d8thk.dll 1 dll\directx\d3d8thk\d3d8thk.dll 1
dll\directx\devenum\devenum.dll 1 dll\directx\devenum\devenum.dll 1
dll\directx\ksproxy\ksproxy.ax 1 dll\directx\ksproxy\ksproxy.ax 1
@ -307,9 +308,9 @@ drivers\base\null\null.sys 2
drivers\bus\isapnp\isapnp.sys 2 drivers\bus\isapnp\isapnp.sys 2
drivers\directx\dxapi\dxapi.sys 2 windows\dxapi.sys 2
drivers\directx\dxg\dxg.sys 2 windows\dxg.sys 2
drivers\directx\dxgthk\dxgthk.sys 2 windows\dxgthk.sys 2
drivers\filesystems\fs_rec\fs_rec.sys 2 drivers\filesystems\fs_rec\fs_rec.sys 2
drivers\filesystems\msfs\msfs.sys 2 drivers\filesystems\msfs\msfs.sys 2
@ -605,6 +606,17 @@ modules\rostests\winetests\usp10\usp10_winetest.exe 7 o
modules\rostests\winetests\uxtheme\uxtheme_winetest.exe 7 optional modules\rostests\winetests\uxtheme\uxtheme_winetest.exe 7 optional
modules\rostests\winetests\version\version_winetest.exe 7 optional modules\rostests\winetests\version\version_winetest.exe 7 optional
modules\rostests\winetests\wininet\wininet_winetest.exe 7 optional modules\rostests\winetests\wininet\wininet_winetest.exe 7 optional
modules\rostests\dxtest\ddraw_test\ddraw_test.exe 7 optional
modules\rostests\dxtest\win32kdxtest\win32kdxtest.exe 7 optional
modules\rostests\apitests\gdi32api\gdi32api.exe 7 optional
modules\rostests\apitests\user32api\user32api.exe 7 optional
modules\rostests\apitests\w32knapi\w32knapi.exe 7 optional
modules\rostests\apitests\w32kdll\w32kdll_ros\w32kdll.dll 7 optional
modules\wallpaper\lake.bmp 4 optional modules\wallpaper\lake.bmp 4 optional
; Native libraries ; Native libraries

View file

@ -23,7 +23,7 @@ DRVFN gpDxFuncs[DXG_INDEX_DxDdIoctl];
HANDLE ghDxGraphics = NULL; HANDLE ghDxGraphics = NULL;
ULONG gdwDirectDrawContext; ULONG gdwDirectDrawContext;
void dump_edd_directdraw_global(EDD_DIRECTDRAW_GLOBAL *pEddgbl); void dump_edd_directdraw_global(EDD_DIRECTDRAW_GLOBAL *pEddgbl);
EDD_DIRECTDRAW_GLOBAL eDdirectDraw_Global; EDD_DIRECTDRAW_GLOBAL edd_DdirectDraw_Global;
/************************************************************************/ /************************************************************************/
@ -54,17 +54,14 @@ DxDdStartupDxGraphics( ULONG ulc1,
/* Loading the kernel interface of directx for win32k */ /* Loading the kernel interface of directx for win32k */
DPRINT1("Warning: trying loading vista dxkrnl.sys\n");
ghDxGraphics = EngLoadImage(L"\\SystemRoot\\System32\\drivers\\dxg.sys"); ghDxGraphics = EngLoadImage(L"\\SystemRoot\\System32\\drivers\\dxkrnl.sys");
if ( ghDxGraphics == NULL) if ( ghDxGraphics == NULL)
{ {
DPRINT1("Warning: dxg.sys not found\n"); DPRINT1("Warning: dxkrnl.sys not found\n");
/* try loading vista dx kernel */ /* try loading vista dx kernel */
DPRINT1("Warning: trying loading vista dxkrnl.sys\n"); DPRINT1("Warning: trying loading xp/2003/reactos dxg.sys\n");
ghDxGraphics = EngLoadImage(L"\\SystemRoot\\System32\\drivers\\dxg.sys");
ghDxGraphics = EngLoadImage(L"\\SystemRoot\\System32\\drivers\\dxkrnl.sys");
} }
if ( ghDxGraphics == NULL) if ( ghDxGraphics == NULL)
@ -183,10 +180,13 @@ NtGdiDdCreateDirectDrawObject(HDC hdc)
return 0; return 0;
} }
/* FIXME This should be alloc for each drv and use it from each drv, not global for whole win32k */ /* FIXME This should be alloc for each drv and use it from each drv, not global for whole win32k */
((PGDIDEVICE)pDC->pPDev)->pEDDgpl = &eDdirectDraw_Global; ((PGDIDEVICE)pDC->pPDev)->pEDDgpl = &edd_DdirectDraw_Global;
RtlZeroMemory(&eDdirectDraw_Global,sizeof(EDD_DIRECTDRAW_GLOBAL)); RtlZeroMemory(&edd_DdirectDraw_Global,sizeof(EDD_DIRECTDRAW_GLOBAL));
DC_UnlockDc(pDC);
/* setup hdev for edd_DdirectDraw_Global xp */
edd_DdirectDraw_Global.hDev = (PVOID)pDC->pPDev;
edd_DdirectDraw_Global.hPDev = (PVOID)pDC->pPDev;
DC_UnlockDc(pDC);
/* get the pfnDdCreateDirectDrawObject after we load the drv */ /* get the pfnDdCreateDirectDrawObject after we load the drv */
pfnDdCreateDirectDrawObject = (PGD_DDCREATEDIRECTDRAWOBJECT)gpDxFuncs[DXG_INDEX_DxDdCreateDirectDrawObject].pfn; pfnDdCreateDirectDrawObject = (PGD_DDCREATEDIRECTDRAWOBJECT)gpDxFuncs[DXG_INDEX_DxDdCreateDirectDrawObject].pfn;
@ -201,7 +201,7 @@ NtGdiDdCreateDirectDrawObject(HDC hdc)
DxHandle = pfnDdCreateDirectDrawObject(hdc); DxHandle = pfnDdCreateDirectDrawObject(hdc);
#if DXDDRAWDEBUG #if DXDDRAWDEBUG
dump_edd_directdraw_global(&eDdirectDraw_Global); dump_edd_directdraw_global(&edd_DdirectDraw_Global);
#endif #endif
return DxHandle; return DxHandle;

View file

@ -530,7 +530,11 @@ STDCALL
DxEngLockHdev(HDEV hDev) DxEngLockHdev(HDEV hDev)
{ {
PGDIDEVICE pPDev = (PGDIDEVICE)hDev; PGDIDEVICE pPDev = (PGDIDEVICE)hDev;
PERESOURCE Resource = pPDev->hsemDevLock; PERESOURCE Resource;
DPRINT1("hDev : 0x%08lx\n",hDev);
Resource = pPDev->hsemDevLock;
DPRINT1("ReactX Calling : DxEngLockHdev \n"); DPRINT1("ReactX Calling : DxEngLockHdev \n");