Take care of one BSOD in NtGdiDdCreateDirectDrawObject, it is not correct fix, it...
[reactos.git] / reactos / subsys / win32k / ntddraw / ddraw.c
index 052b37c..4077b57 100644 (file)
@@ -21,6 +21,8 @@ BOOL INTERNAL_CALL
 DD_Cleanup(PVOID ObjectBody)
 {
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(ObjectBody, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("DD_Cleanup\n");
+       
        if (!pDirectDraw)
                return FALSE;
 
@@ -37,6 +39,7 @@ HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
        DD_CALLBACKS callbacks;
        DD_SURFACECALLBACKS surface_callbacks;
        DD_PALETTECALLBACKS palette_callbacks;
+       DPRINT1("NtGdiDdCreateDirectDrawObject\n");
 
        RtlZeroMemory(&callbacks, sizeof(DD_CALLBACKS));
        callbacks.dwSize = sizeof(DD_CALLBACKS);
@@ -45,7 +48,13 @@ HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
        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;
@@ -109,6 +118,7 @@ BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
     HANDLE hDirectDrawLocal
 )
 {
+    DPRINT1("NtGdiDdDeleteDirectDrawObject\n");
        return GDIOBJ_FreeObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
 }
 
@@ -127,6 +137,8 @@ BOOL STDCALL NtGdiDdQueryDirectDrawObject(
 )
 {
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdQueryDirectDrawObject\n");
+       
        if (!pDirectDraw)
                return FALSE;
 
@@ -178,6 +190,8 @@ DWORD STDCALL NtGdiDdGetDriverInfo(
        DWORD  ddRVal;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdGetDriverInfo\n");
+       
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -209,6 +223,7 @@ DWORD STDCALL NtGdiDdCreateSurface(
 {
        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) 
@@ -242,6 +257,8 @@ DWORD STDCALL NtGdiDdWaitForVerticalBlank(
 {
        DWORD  ddRVal;
        PDD_DIRECTDRAW_GLOBAL lgpl;
+       DPRINT1("NtGdiDdWaitForVerticalBlank\n");
+
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
        if (pDirectDraw == NULL) 
@@ -272,9 +289,10 @@ DWORD STDCALL NtGdiDdCanCreateSurface(
 )
 {
        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;
 
@@ -306,6 +324,7 @@ DWORD STDCALL NtGdiDdGetScanLine(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdGetScanLine\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -344,6 +363,7 @@ DWORD STDCALL NtGdiDdDestroySurface(
        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;
 
@@ -382,6 +402,8 @@ DWORD STDCALL NtGdiDdFlip(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceTarget, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdFlip\n");
+       
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -414,6 +436,7 @@ DWORD STDCALL NtGdiDdLock(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdLock\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -445,6 +468,7 @@ DWORD STDCALL NtGdiDdUnlock(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdUnlock\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -477,6 +501,7 @@ DWORD STDCALL NtGdiDdBlt(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
     PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
+    DPRINT1("NtGdiDdBlt\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -508,6 +533,7 @@ DWORD STDCALL NtGdiDdSetColorKey(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdSetColorKey\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -541,6 +567,7 @@ DWORD STDCALL NtGdiDdAddAttachedSurface(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceAttached, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdAddAttachedSurface\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -572,6 +599,7 @@ DWORD STDCALL NtGdiDdGetBltStatus(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdGetBltStatus\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -603,6 +631,7 @@ DWORD STDCALL NtGdiDdGetFlipStatus(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdGetFlipStatus\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -635,6 +664,7 @@ DWORD STDCALL NtGdiDdUpdateOverlay(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
     PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW);
+    DPRINT1("NtGdiDdUpdateOverlay\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -667,6 +697,7 @@ DWORD STDCALL NtGdiDdSetOverlayPosition(
        PDD_DIRECTDRAW_GLOBAL lgpl;
 
     PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW);
+    DPRINT1("NtGdiDdSetOverlayPosition\n");
        if (pDirectDraw == NULL) 
                return DDHAL_DRIVER_NOTHANDLED;
 
@@ -700,6 +731,7 @@ DDSURF_Cleanup(PVOID pDDSurf)
        /* FIXME: implement 
         * PDD_SURFACE pDDSurf = PVOID pDDSurf
         */
+    DPRINT1("DDSURF_Cleanup\n");
        return TRUE;
 }
 
@@ -713,6 +745,7 @@ HANDLE STDCALL NtGdiDdCreateSurfaceObject(
 )
 {
        PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+       DPRINT1("NtGdiDdCreateSurfaceObject\n");
        if (!pDirectDraw)
                return NULL;
 
@@ -743,6 +776,7 @@ BOOL STDCALL NtGdiDdDeleteSurfaceObject(
     HANDLE hSurface
 )
 {
+    DPRINT1("NtGdiDdDeleteSurfaceObject\n");
        return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
 }
 
@@ -789,6 +823,7 @@ DWORD STDCALL NtGdiDdGetAvailDriverMemory(
        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;
@@ -820,6 +855,7 @@ DWORD STDCALL NtGdiDdSetExclusiveMode(
        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;