diff --git a/reactos/include/reactos/drivers/directx/directxint.h b/reactos/include/reactos/drivers/directx/directxint.h index 4f2ec872005..3c20d9b6519 100644 --- a/reactos/include/reactos/drivers/directx/directxint.h +++ b/reactos/include/reactos/drivers/directx/directxint.h @@ -129,8 +129,8 @@ typedef struct _EDD_DIRECTDRAW_GLOBAL /* 0x040 */ DD_HALINFO ddHalInfo; /* 0x1E0 */ ULONG unk_1e0[46]; /* 0x298 */ DD_CALLBACKS ddCallbacks; // 0x298 <-- verify it match windows xp, ddCallbacks -/* 0x2C0 */ DD_SURFACECALLBACKS ddSurfaceCallbacks; // 0x2C0 <-- verify it match windows xp, ddCallbacks -/* 0x304 */ DD_PALETTECALLBACKS ddPaletteCallbacks; +/* 0x2C0 */ DD_SURFACECALLBACKS ddSurfaceCallbacks; // 0x2C0 <-- verify it match windows xp, ddSurfaceCallbacks +/* 0x304 */ DD_PALETTECALLBACKS ddPaletteCallbacks; // 0x304 <-- verify it match windows xp, ddPaletteCallbacks /* 0x314 */ ULONG unk_314[46]; /* 0x3D4 */ D3DNTHAL_CALLBACKS d3dNtHalCallbacks; /* 0x460 */ ULONG unk_460[7]; diff --git a/reactos/subsystems/win32/win32k/ntddraw/ddraw.c b/reactos/subsystems/win32/win32k/ntddraw/ddraw.c index 8f33f788727..5d524a1bb3f 100644 --- a/reactos/subsystems/win32/win32k/ntddraw/ddraw.c +++ b/reactos/subsystems/win32/win32k/ntddraw/ddraw.c @@ -34,6 +34,7 @@ intEnableReactXDriver(PEDD_DIRECTDRAW_GLOBAL pEddgbl, PDC pDC) { PGDIDEVICE pDev = (PGDIDEVICE)pDC->pPDev; BOOLEAN success = FALSE; + DD_GETDRIVERINFODATA GetInfo; /*clean up some of the cache entry */ RtlZeroMemory(pEddgbl,sizeof(EDD_DIRECTDRAW_GLOBAL)); @@ -163,8 +164,33 @@ intEnableReactXDriver(PEDD_DIRECTDRAW_GLOBAL pEddgbl, PDC pDC) return FALSE; } + /* Fill in DD_MISCELLANEOUSCALLBACKS */ + GetInfo.dhpdev = pDC->PDev; + + /* Note this check will fail on some nvida drv, it is a bug in their drv not in our code, + * we doing proper check if GetDriverInfo exists */ + if ( ((pEddgbl->ddHalInfo.dwFlags & (DDHALINFO_GETDRIVERINFOSET | DDHALINFO_GETDRIVERINFO2)) != 0) && + (pEddgbl->ddHalInfo.GetDriverInfo != NULL) ) + { + GetInfo.dwSize = sizeof (DD_GETDRIVERINFODATA); + GetInfo.dwFlags = 0x00; + GetInfo.guidInfo = GUID_MiscellaneousCallbacks; + GetInfo.lpvData = (PVOID)&pEddgbl->ddMiscellanousCallbacks; + GetInfo.dwExpectedSize = sizeof (DD_MISCELLANEOUSCALLBACKS); + GetInfo.ddRVal = DDERR_GENERIC; + if ( ( pEddgbl->ddHalInfo.GetDriverInfo (&GetInfo) == DDHAL_DRIVER_NOTHANDLED) || + (GetInfo.ddRVal != DD_OK) ) + { + DPRINT1(" Fail : did not get DD_MISCELLANEOUSCALLBACKS \n"); + } + } + else + { + DPRINT1(" Fail : did not foundpEddgbl->ddHalInfo.GetDriverInfo \n"); + } + /* setup missing data in ddHalInfo */ - pEddgbl->ddHalInfo.GetDriverInfo = (PVOID)pDev->DriverFunctions.GetDirectDrawInfo; + //pEddgbl->ddHalInfo.GetDriverInfo = (PVOID)pDev->DriverFunctions.GetDirectDrawInfo; /* FIXME : remove this when we are done with debuging of dxg */ dump_edd_directdraw_global(pEddgbl); @@ -844,10 +870,10 @@ void dump_edd_directdraw_global(EDD_DIRECTDRAW_GLOBAL *pEddgbl) DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddSurfaceCallbacks.UpdateOverlay : 0x%08lx\n",(((DWORD)&pEddgbl->ddSurfaceCallbacks.UpdateOverlay) - (DWORD)pEddgbl),pEddgbl->ddSurfaceCallbacks.UpdateOverlay); DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddSurfaceCallbacks.SetOverlayPosition : 0x%08lx\n",(((DWORD)&pEddgbl->ddSurfaceCallbacks.SetOverlayPosition) - (DWORD)pEddgbl),pEddgbl->ddSurfaceCallbacks.SetOverlayPosition); DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddSurfaceCallbacks.reserved4 : 0x%08lx\n",(((DWORD)&pEddgbl->ddSurfaceCallbacks.reserved4) - (DWORD)pEddgbl),pEddgbl->ddSurfaceCallbacks.reserved4); - DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddSurfaceCallbacks.SetPalette : 0x%08lx\n",(((DWORD)&pEddgbl->ddSurfaceCallbacks.SetPalette) - (DWORD)pEddgbl),pEddgbl->ddSurfaceCallbacks.SetPalette); - - // DD_PALETTECALLBACKS ddPaletteCallbacks; - DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddPaletteCallbacks : 0x%08lx\n",(((DWORD)&pEddgbl->ddPaletteCallbacks) - (DWORD)pEddgbl),pEddgbl->ddPaletteCallbacks); + DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddPaletteCallbacks.dwSize : 0x%08lx\n",(((DWORD)&pEddgbl->ddPaletteCallbacks.dwSize) - (DWORD)pEddgbl),pEddgbl->ddPaletteCallbacks.dwSize); + DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddPaletteCallbacks.dwFlags : 0x%08lx\n",(((DWORD)&pEddgbl->ddPaletteCallbacks.dwFlags) - (DWORD)pEddgbl),pEddgbl->ddPaletteCallbacks.dwFlags); + DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddPaletteCallbacks.DestroyPalette : 0x%08lx\n",(((DWORD)&pEddgbl->ddPaletteCallbacks.DestroyPalette) - (DWORD)pEddgbl),pEddgbl->ddPaletteCallbacks.DestroyPalette); + DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->ddPaletteCallbacks.SetEntries : 0x%08lx\n",(((DWORD)&pEddgbl->ddPaletteCallbacks.SetEntries) - (DWORD)pEddgbl),pEddgbl->ddPaletteCallbacks.SetEntries); DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->unk_314[0] : 0x%08lx\n",(((DWORD)&pEddgbl->unk_314[0]) - (DWORD)pEddgbl),pEddgbl->unk_314[0]); DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->unk_314[1] : 0x%08lx\n",(((DWORD)&pEddgbl->unk_314[1]) - (DWORD)pEddgbl),pEddgbl->unk_314[1]); DPRINT1("0x%08lx PEDD_DIRECTDRAW_GLOBAL->unk_314[2] : 0x%08lx\n",(((DWORD)&pEddgbl->unk_314[2]) - (DWORD)pEddgbl),pEddgbl->unk_314[2]); diff --git a/reactos/subsystems/win32/win32k/win32k.rbuild b/reactos/subsystems/win32/win32k/win32k.rbuild index 611e2e079df..b4b5c6572ef 100644 --- a/reactos/subsystems/win32/win32k/win32k.rbuild +++ b/reactos/subsystems/win32/win32k/win32k.rbuild @@ -183,6 +183,7 @@ ntdll hal freetype + dxguid win32k.rc