DD_Cleanup(PVOID ObjectBody)
{
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(ObjectBody, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("DD_Cleanup\n");
+
if (!pDirectDraw)
return FALSE;
DD_CALLBACKS callbacks;
DD_SURFACECALLBACKS surface_callbacks;
DD_PALETTECALLBACKS palette_callbacks;
+ DPRINT1("NtGdiDdCreateDirectDrawObject\n");
RtlZeroMemory(&callbacks, sizeof(DD_CALLBACKS));
callbacks.dwSize = sizeof(DD_CALLBACKS);
RtlZeroMemory(&palette_callbacks, sizeof(DD_PALETTECALLBACKS));
palette_callbacks.dwSize = sizeof(DD_PALETTECALLBACKS);
-
+ /* FIXME hdc can be zero for d3d9 */
+ /* we need create it, if in that case */
+ if (hdc == NULL)
+ {
+ return NULL;
+ }
+
DC *pDC = DC_LockDc(hdc);
if (!pDC)
return NULL;
HANDLE hDirectDrawLocal
)
{
+ DPRINT1("NtGdiDdDeleteDirectDrawObject\n");
return GDIOBJ_FreeObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
}
HANDLE hDirectDrawLocal,
DD_HALINFO *pHalInfo,
DWORD *pCallBackFlags,
- PD3DNTHAL_CALLBACKS puD3dCallbacks,
- PD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData,
+ LPD3DNTHAL_CALLBACKS puD3dCallbacks,
+ LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData,
PDD_D3DBUFCALLBACKS puD3dBufferCallbacks,
LPDDSURFACEDESC puD3dTextureFormats,
DWORD *puNumHeaps,
)
{
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdQueryDirectDrawObject\n");
+
if (!pDirectDraw)
return FALSE;
DWORD ddRVal;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdGetDriverInfo\n");
+
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
{
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW_GLOBAL lgpl;
+ DPRINT1("NtGdiDdCreateSurface\n");
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
if (pDirectDraw == NULL)
{
DWORD ddRVal;
PDD_DIRECTDRAW_GLOBAL lgpl;
+ DPRINT1("NtGdiDdWaitForVerticalBlank\n");
+
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
if (pDirectDraw == NULL)
)
{
DWORD ddRVal;
- PDD_DIRECTDRAW_GLOBAL lgpl;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdCanCreateSurface\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdGetScanLine\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdDestroySurface\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceTarget, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdFlip\n");
+
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdLock\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdUnlock\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puUnlockData->lpDD;
+
+ /* use our cache version instead */
+ puUnlockData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_UNLOCK))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.Unlock(puUnlockData);
+ /* But back the orignal PDev */
+ puUnlockData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdBlt\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puBltData->lpDD;
+
+ /* use our cache version instead */
+ puBltData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_BLT))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.Blt(puBltData);
+ /* But back the orignal PDev */
+ puBltData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdSetColorKey\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puSetColorKeyData->lpDD;
+
+ /* use our cache version instead */
+ puSetColorKeyData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_SETCOLORKEY))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.SetColorKey(puSetColorKeyData);
+ /* But back the orignal PDev */
+ puSetColorKeyData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceAttached, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdAddAttachedSurface\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puAddAttachedSurfaceData->lpDD;
+
+ /* use our cache version instead */
+ puAddAttachedSurfaceData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_ADDATTACHEDSURFACE))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.AddAttachedSurface(puAddAttachedSurfaceData);
+ /* But back the orignal PDev */
+ puAddAttachedSurfaceData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdGetBltStatus\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puGetBltStatusData->lpDD;
+
+ /* use our cache version instead */
+ puGetBltStatusData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_GETBLTSTATUS))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.GetBltStatus(puGetBltStatusData);
+ /* But back the orignal PDev */
+ puGetBltStatusData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdGetFlipStatus\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puGetFlipStatusData->lpDD;
+
+ /* use our cache version instead */
+ puGetFlipStatusData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_GETFLIPSTATUS))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.GetFlipStatus(puGetFlipStatusData);
+ /* But back the orignal PDev */
+ puGetFlipStatusData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdUpdateOverlay\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puUpdateOverlayData->lpDD;
+
+ /* use our cache version instead */
+ puUpdateOverlayData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.UpdateOverlay(puUpdateOverlayData);
+ /* But back the orignal PDev */
+ puUpdateOverlayData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdSetOverlayPosition\n");
if (pDirectDraw == NULL)
return DDHAL_DRIVER_NOTHANDLED;
+ /* backup the orignal PDev and info */
+ lgpl = puSetOverlayPositionData->lpDD;
+
+ /* use our cache version instead */
+ puSetOverlayPositionData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION))
ddRVal = DDHAL_DRIVER_NOTHANDLED;
else
ddRVal = pDirectDraw->Surf.SetOverlayPosition(puSetOverlayPositionData);
+ /* But back the orignal PDev */
+ puSetOverlayPositionData->lpDD = lgpl;
+
GDIOBJ_UnlockObjByPtr(pDirectDraw);
return ddRVal;
}
/* FIXME: implement
* PDD_SURFACE pDDSurf = PVOID pDDSurf
*/
+ DPRINT1("DDSURF_Cleanup\n");
return TRUE;
}
)
{
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdCreateSurfaceObject\n");
if (!pDirectDraw)
return NULL;
HANDLE hSurface
)
{
+ DPRINT1("NtGdiDdDeleteSurfaceObject\n");
return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
}
)
{
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdGetAvailDriverMemory\n");
+ /* backup the orignal PDev and info */
+ lgpl = puGetAvailDriverMemoryData->lpDD;
+
+ /* use our cache version instead */
+ puGetAvailDriverMemoryData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
// ddRVal = pDirectDraw->DdGetAvailDriverMemory(puGetAvailDriverMemoryData);
GDIOBJ_UnlockObjByPtr(pDirectDraw);
+
+ /* But back the orignal PDev */
+ puGetAvailDriverMemoryData->lpDD = lgpl;
+
return ddRVal;
}
)
{
DWORD ddRVal;
+ PDD_DIRECTDRAW_GLOBAL lgpl;
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDraw, GDI_OBJECT_TYPE_DIRECTDRAW);
+ DPRINT1("NtGdiDdSetExclusiveMode\n");
+
+ /* backup the orignal PDev and info */
+ lgpl = puSetExclusiveModeData->lpDD;
+ /* use our cache version instead */
+ puSetExclusiveModeData->lpDD = &pDirectDraw->Global;
+
+ /* make the call */
ddRVal = pDirectDraw->DdSetExclusiveMode(puSetExclusiveModeData);
GDIOBJ_UnlockObjByPtr(pDirectDraw);
+
+ /* But back the orignal PDev */
+ puSetExclusiveModeData->lpDD = lgpl;
return ddRVal;
}