From 4db57afdf19990a93fbcd30a9462a4f581808081 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Fri, 15 Jun 2007 09:54:52 +0000 Subject: [PATCH] Fixing some bugs in startup.c 1. check for DDHALINFO_GETDRIVERINFOSET before using of DdGetDriverInfo, it exists two diffent version of DdGetDriverInfo2 2. Adding a fixme for fixing CreateSurfaceEx, GetDriverState and DestroyDDLocal callbacks for HAL, and adding partly code in the fixme. svn path=/trunk/; revision=27183 --- reactos/dll/directx/ddraw/startup.c | 57 +++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/reactos/dll/directx/ddraw/startup.c b/reactos/dll/directx/ddraw/startup.c index 6db8fcd1e80..08539f1bcc1 100644 --- a/reactos/dll/directx/ddraw/startup.c +++ b/reactos/dll/directx/ddraw/startup.c @@ -532,22 +532,57 @@ StartDirectDrawHal(LPDIRECTDRAW iface, BOOL reenable) // DxHeapMemFree( mpTextures); /* FIXME D3D setup mD3dCallbacks and mD3dDriverData */ + DDHAL_GETDRIVERINFODATA DdGetDriverInfo = { 0 }; - DdGetDriverInfo.dwSize = sizeof (DDHAL_GETDRIVERINFODATA); - DdGetDriverInfo.guidInfo = GUID_MiscellaneousCallbacks; - DdGetDriverInfo.lpvData = (PVOID)&ddgbl.lpDDCBtmp->HALDDMiscellaneous; - DdGetDriverInfo.dwExpectedSize = sizeof (DDHAL_DDMISCELLANEOUSCALLBACKS); - - if(mHALInfo.GetDriverInfo (&DdGetDriverInfo) == DDHAL_DRIVER_NOTHANDLED || DdGetDriverInfo.ddRVal != DD_OK) + if (mHALInfo.dwFlags & DDHALINFO_GETDRIVERINFOSET) { - DxHeapMemFree(mpFourCC); - DxHeapMemFree(mpTextures); - DxHeapMemFree(ddgbl.lpDDCBtmp); - // FIXME Close DX fristcall and second call - return DD_FALSE; + DdGetDriverInfo.dwSize = sizeof (DDHAL_GETDRIVERINFODATA); + DdGetDriverInfo.guidInfo = GUID_MiscellaneousCallbacks; + DdGetDriverInfo.lpvData = (PVOID)&ddgbl.lpDDCBtmp->HALDDMiscellaneous; + DdGetDriverInfo.dwExpectedSize = sizeof (DDHAL_DDMISCELLANEOUSCALLBACKS); + + if(mHALInfo.GetDriverInfo (&DdGetDriverInfo) == DDHAL_DRIVER_NOTHANDLED || DdGetDriverInfo.ddRVal != DD_OK) + { + DxHeapMemFree(mpFourCC); + DxHeapMemFree(mpTextures); + DxHeapMemFree(ddgbl.lpDDCBtmp); + // FIXME Close DX fristcall and second call + return DD_FALSE; + } + + RtlZeroMemory(&DdGetDriverInfo, sizeof(DDHAL_GETDRIVERINFODATA)); + DdGetDriverInfo.dwSize = sizeof (DDHAL_GETDRIVERINFODATA); + DdGetDriverInfo.guidInfo = GUID_Miscellaneous2Callbacks; + + /* FIXME + DdGetDriverInfo.lpvData = (PVOID)&ddgbl.lpDDCBtmp->HALDDMiscellaneous; + DdGetDriverInfo.dwExpectedSize = sizeof (DDHAL_DDMISCELLANEOUS2CALLBACKS); + + if(mHALInfo.GetDriverInfo (&DdGetDriverInfo) == DDHAL_DRIVER_NOTHANDLED || DdGetDriverInfo.ddRVal != DD_OK) + { + DxHeapMemFree(mpFourCC); + DxHeapMemFree(mpTextures); + DxHeapMemFree(ddgbl.lpDDCBtmp); + // FIXME Close DX fristcall and second call + return DD_FALSE; + } + DD_MISCELLANEOUS2CALLBACKS + { + DWORD dwSize; + DWORD dwFlags; + PDD_ALPHABLT AlphaBlt; // unsuse acoding msdn and always set to NULL + PDD_CREATESURFACEEX CreateSurfaceEx; + PDD_GETDRIVERSTATE GetDriverState; + PDD_DESTROYDDLOCAL DestroyDDLocal; + } + DDHAL_MISC2CB32_CREATESURFACEEX + DDHAL_MISC2CB32_GETDRIVERSTATE + DDHAL_MISC2CB32_DESTROYDDLOCAL + */ } + return DD_OK; }