[ros-diffs] [greatlrd] 32550: implemented DdCreateD3DBuffer callbacks and some cleanup

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sun Mar 9 12:33:02 CET 2008


Author: greatlrd
Date: Mon Mar  3 21:54:18 2008
New Revision: 32550

URL: http://svn.reactos.org/svn/reactos?rev=3D32550&view=3Drev
Log:
implemented DdCreateD3DBuffer callbacks and some cleanup

Modified:
    trunk/reactos/dll/win32/gdi32/misc/gdientry.c

Modified: trunk/reactos/dll/win32/gdi32/misc/gdientry.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/misc/=
gdientry.c?rev=3D32550&r1=3D32549&r2=3D32550&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/reactos/dll/win32/gdi32/misc/gdientry.c (original)
+++ trunk/reactos/dll/win32/gdi32/misc/gdientry.c Mon Mar  3 21:54:18 2008
@@ -139,7 +139,7 @@
     /* Call win32k */
     return NtGdiDdLock((HANDLE)Lock->lpDDSurface->hDDSurface,
                         (PDD_LOCKDATA)Lock,
-						(HANDLE)Lock->lpDDSurface->hDC);
+                        (HANDLE)Lock->lpDDSurface->hDC);
 }
 =

 /*
@@ -312,10 +312,10 @@
      * we create the size activate  this IF when you start doing the optim=
ze and please also
      * take report from user which value they got here
      */ =

-#if 0
+#if 1
     {
         char buffer[1024]; \
-        sprintf ( buffer, "Function %s : Optimze max to %d Surface ? (%s:%=
d)\n", __FUNCTION__,SurfaceCount,__FILE__,__LINE__ );
+        sprintf ( buffer, "Function %s : Optimze max to %d Surface ? (%s:%=
d)\n", __FUNCTION__, (int)SurfaceCount,__FILE__,__LINE__ );
         OutputDebugStringA(buffer);
     }
 #endif
@@ -691,7 +691,7 @@
      */
 =

     HANDLE phSurfaceVideo[10];
-    HANDLE phSurfaceVbi[10]; =

+    HANDLE phSurfaceVbi[10];
     =

     if (pDvdUpdateVideoPort->dwFlags !=3D DDRAWI_VPORTSTOP)
     {
@@ -729,7 +729,7 @@
             {
                 dwNumVBIAutoflip =3D 10;
             }
-            memcpy(phSurfaceVbi,pDvdUpdateVideoPort->lplpDDVBISurface,dwNu=
mVBIAutoflip*sizeof(HANDLE));         =

+            memcpy(phSurfaceVbi,pDvdUpdateVideoPort->lplpDDVBISurface,dwNu=
mVBIAutoflip*sizeof(HANDLE));
         }    =

     }
 =

@@ -761,7 +761,6 @@
     return NtGdiDvpGetVideoPortInputFormats(pDvdGetVideoPortInputFormat->l=
pVideoPort->hDDVideoPort, (PDD_GETVPORTINPUTFORMATDATA) pDvdGetVideoPortInp=
utFormat);
 }
 =

-
 /*
  * @implemented
  *
@@ -786,7 +785,6 @@
     return NtGdiDvpGetVideoPortLine(pDvdGetVideoPortOutputFormat->lpVideoP=
ort->hDDVideoPort, (PDD_GETVPORTLINEDATA)pDvdGetVideoPortOutputFormat);
 }
 =

-
 /*
  * @implemented
  *
@@ -824,7 +822,7 @@
 =

     if (pDdAlphaBlt->lpDDSrcSurface !=3D 0)
     {
-        hDDSrcSurface =3D (HANDLE) pDdAlphaBlt->lpDDSrcSurface->hDDSurface=
;        =

+        hDDSrcSurface =3D (HANDLE) pDdAlphaBlt->lpDDSrcSurface->hDDSurface;
     }
     =

     return NtGdiDdAlphaBlt((HANDLE)pDdAlphaBlt->lpDDDestSurface->hDDSurfac=
e, hDDSrcSurface, (PDD_BLTDATA)&pDdAlphaBlt);
@@ -841,7 +839,7 @@
 {
     pDdCreateSurfaceEx->ddRVal =3D NtGdiDdCreateSurfaceEx( GetDdHandle(pDd=
CreateSurfaceEx->lpDDLcl->lpGbl->hDD),
                                                          (HANDLE)pDdCreate=
SurfaceEx->lpDDSLcl->hDDSurface, =

-                                                         pDdCreateSurfaceE=
x->lpDDSLcl->lpSurfMore->dwSurfaceHandle);    =

+                                                         pDdCreateSurfaceE=
x->lpDDSLcl->lpSurfMore->dwSurfaceHandle);
     return TRUE;
 }
 =

@@ -857,7 +855,6 @@
     return NtGdiDdColorControl( (HANDLE) pDdColorControl->lpDDSurface->hDD=
Surface, (PDD_COLORCONTROLDATA) &pDdColorControl);
 }
 =

-
 /*
  * @implemented
  *
@@ -881,9 +878,6 @@
 {
     return NtGdiDdFlipToGDISurface( GetDdHandle(pDdFlipToGDISurface->lpDD-=
>hDD), (PDD_FLIPTOGDISURFACEDATA) &pDdFlipToGDISurface);
 }
-
-
-
 =

 /* TODO */
 DWORD
@@ -896,7 +890,7 @@
 =

     /* FIXME add SEH around this functions */
 =

-        RtlZeroMemory(&pDrvInfoData, sizeof (DDHAL_GETDRIVERINFODATA));   =
     =

+        RtlZeroMemory(&pDrvInfoData, sizeof (DDHAL_GETDRIVERINFODATA));
         RtlCopyMemory(&pDrvInfoData.guidInfo, &pData->guidInfo, sizeof(GUI=
D));
     =

         hDD =3D GetDdHandle(pData->dwContext);
@@ -910,15 +904,15 @@
         if (IsEqualGUID(&pData->guidInfo, &GUID_VideoPortCallbacks))
         {        =

             DDHAL_DDVIDEOPORTCALLBACKS  pDvdPort;
-            DDHAL_DDVIDEOPORTCALLBACKS* pUserDvdPort =3D (DDHAL_DDVIDEOPOR=
TCALLBACKS *)pData->lpvData;                =

+            DDHAL_DDVIDEOPORTCALLBACKS* pUserDvdPort =3D (DDHAL_DDVIDEOPOR=
TCALLBACKS *)pData->lpvData;
 =

             /* Clear internal out buffer and set it up*/
             RtlZeroMemory(&pDvdPort, DDVIDEOPORTCALLBACKSSIZE);
             pDvdPort.dwSize =3D DDVIDEOPORTCALLBACKSSIZE;
 =

-            /* set up internal buffer */                                  =
                =

-            pDrvInfoData.lpvData =3D (PVOID)&pDvdPort;        =

-            pDrvInfoData.dwExpectedSize =3D DDVIDEOPORTCALLBACKSSIZE ;  =

+            /* set up internal buffer */
+            pDrvInfoData.lpvData =3D (PVOID)&pDvdPort;
+            pDrvInfoData.dwExpectedSize =3D DDVIDEOPORTCALLBACKSSIZE ;
                 =

             /* Call win32k */
             retValue =3D NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)=
&pDrvInfoData);
@@ -1011,19 +1005,19 @@
             RtlZeroMemory(&pColorControl, DDCOLORCONTROLCALLBACKSSIZE);
             pColorControl.dwSize =3D DDCOLORCONTROLCALLBACKSSIZE;
 =

-            /* set up internal buffer */                                  =
                =

-            pDrvInfoData.lpvData =3D (PVOID)&pColorControl;        =

-            pDrvInfoData.dwExpectedSize =3D DDCOLORCONTROLCALLBACKSSIZE ;  =

-                =

+            /* set up internal buffer */
+            pDrvInfoData.lpvData =3D (PVOID)&pColorControl;
+            pDrvInfoData.dwExpectedSize =3D DDCOLORCONTROLCALLBACKSSIZE ;
+
             /* Call win32k */
             retValue =3D NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)=
&pDrvInfoData);
-                        =

+
             pData->dwActualSize =3D DDCOLORCONTROLCALLBACKSSIZE;
             pData->dwFlags =3D pDrvInfoData.dwFlags;
 =

             pUserColorControl->dwSize =3D DDCOLORCONTROLCALLBACKSSIZE;
             pUserColorControl->dwFlags =3D pUserColorControl->dwFlags;
-                       =

+
             if (pColorControl.ColorControl !=3D NULL)
             {
                 pUserColorControl->ColorControl =3D (LPDDHALCOLORCB_COLORC=
ONTROL) DdColorControl;
@@ -1042,15 +1036,15 @@
         {
             DDHAL_DDMISCELLANEOUSCALLBACKS  pMisc;
             DDHAL_DDMISCELLANEOUSCALLBACKS* pUserMisc =3D (DDHAL_DDMISCELL=
ANEOUSCALLBACKS *)pData->lpvData;
-                =

+
             /* Clear internal out buffer and set it up*/
             RtlZeroMemory(&pMisc, DDMISCELLANEOUSCALLBACKSSIZE);
             pMisc.dwSize =3D DDMISCELLANEOUSCALLBACKSSIZE;
 =

-            /* set up internal buffer */                                  =
                =

-            pDrvInfoData.lpvData =3D (PVOID)&pMisc;        =

-            pDrvInfoData.dwExpectedSize =3D DDMISCELLANEOUSCALLBACKSSIZE ;=
  =

-                =

+            /* set up internal buffer */
+            pDrvInfoData.lpvData =3D (PVOID)&pMisc;
+            pDrvInfoData.dwExpectedSize =3D DDMISCELLANEOUSCALLBACKSSIZE ;
+
             /* Call win32k */
             retValue =3D NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)=
&pDrvInfoData);
 =

@@ -1083,9 +1077,9 @@
             RtlZeroMemory(&pMisc, DDMISCELLANEOUS2CALLBACKSSIZE);
             pMisc.dwSize =3D DDMISCELLANEOUS2CALLBACKSSIZE;
 =

-            /* set up internal buffer */                                  =
                =

-            pDrvInfoData.lpvData =3D (PVOID)&pMisc;        =

-            pDrvInfoData.dwExpectedSize =3D DDMISCELLANEOUS2CALLBACKSSIZE =
;  =

+            /* set up internal buffer */
+            pDrvInfoData.lpvData =3D (PVOID)&pMisc;
+            pDrvInfoData.dwExpectedSize =3D DDMISCELLANEOUS2CALLBACKSSIZE ;
                 =

             /* Call win32k */
             retValue =3D NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)=
&pDrvInfoData);
@@ -1133,9 +1127,9 @@
             RtlZeroMemory(&pNtKernel, sizeof(DD_NTCALLBACKS));
             pNtKernel.dwSize =3D sizeof(DD_NTCALLBACKS);
 =

-            /* set up internal buffer */                                  =
                =

-            pDrvInfoData.lpvData =3D (PVOID)&pNtKernel;        =

-            pDrvInfoData.dwExpectedSize =3D sizeof(DD_NTCALLBACKS) ;  =

+            /* set up internal buffer */
+            pDrvInfoData.lpvData =3D (PVOID)&pNtKernel;
+            pDrvInfoData.dwExpectedSize =3D sizeof(DD_NTCALLBACKS) ;
                 =

             /* Call win32k */
             retValue =3D NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)=
&pDrvInfoData);
@@ -1143,11 +1137,11 @@
             pData->dwActualSize =3D sizeof(DD_NTCALLBACKS);
 =

             pUserNtKernel->dwSize =3D sizeof(DD_NTCALLBACKS);
-            pUserNtKernel->dwFlags =3D pNtKernel.dwFlags;  =

+            pUserNtKernel->dwFlags =3D pNtKernel.dwFlags;
             pUserNtKernel->FreeDriverMemory =3D 0;
-           =

+
             if (pNtKernel.SetExclusiveMode)
-            {                =

+            {
                 pUserNtKernel->SetExclusiveMode =3D (PDD_SETEXCLUSIVEMODE)=
 DdSetExclusiveMode;  =

             }
 =

@@ -1161,7 +1155,7 @@
              *  ReactOS keep this behoir to be compatible with
              *  Windows XP
              */
-            pData->ddRVal =3D retValue;           =

+            pData->ddRVal =3D retValue;
         }
 =

         /* D3D Callbacks version 2 check and setup for DirectX/ ReactX */
@@ -1196,15 +1190,15 @@
         else
         {
             /* set up internal buffer */ =

-            pDrvInfoData.dwExpectedSize =3D pData->dwExpectedSize;        =

+            pDrvInfoData.dwExpectedSize =3D pData->dwExpectedSize;
             pDrvInfoData.lpvData =3D pData->lpvData;
 =

             /* We do not cover all callbacks for user mode, they are only =
cover by kmode */
             retValue =3D NtGdiDdGetDriverInfo(hDD, (PDD_GETDRIVERINFODATA)=
&pDrvInfoData);
 =

-            /* Setup return data */            =

+            /* Setup return data */
             pData->dwActualSize =3D pDrvInfoData.dwActualSize;
-            pData->lpvData =3D pDrvInfoData.lpvData;         =

+            pData->lpvData =3D pDrvInfoData.lpvData;
             /* Windows XP never repot back the true return value, =

              *  it only report back if we have a driver or not
              *  ReactOS keep this behoir to be compatible with
@@ -1235,10 +1229,9 @@
    =

     return  NtGdiD3dContextCreate(GetDdHandle(pdcci->lpDDLcl->hDD), =

                                   (HANDLE)pdcci->lpDDSLcl->hDDSurface,
-                                  hSurfZ,                           =

-                                  (D3DNTHAL_CONTEXTCREATEI *)pdcci);    =

-}
-
+                                  hSurfZ,
+                                  (D3DNTHAL_CONTEXTCREATEI *)pdcci);
+}
 =

 /*
  * @implemented
@@ -1262,24 +1255,73 @@
 }
 =

 =

-/* TODO : finish all fixme */ =

+/*
+ * @implemented
+ *
+ * DdCreateD3DBuffer
+ */
 DWORD
 WINAPI
 DdCreateD3DBuffer(LPDDHAL_CREATESURFACEDATA pCreateSurface)
 {
-
+    HANDLE puhSurface =3D 0;
+    DDRAWI_DDRAWSURFACE_GBL *pSurfGBL;
+    DDRAWI_DDRAWSURFACE_LCL *pSurfLcl;
     DD_SURFACE_GLOBAL puSurfaceGlobalData;
     DD_SURFACE_MORE puSurfaceMoreData;
     DD_SURFACE_LOCAL puSurfaceLocalData;
-        =

-    memset(&puSurfaceGlobalData, 0, sizeof(DD_SURFACE_GLOBAL) );
-    memset(&puSurfaceMoreData, 0,  sizeof(DD_SURFACE_MORE) ) ;
-    memset(&puSurfaceLocalData, 0, sizeof(DD_SURFACE_LOCAL) );
-   =

-    /* FIXME convert the struct to right ones and setup for syscall, then =
retranslated the info back to pCreateSurface */
-
-    /* FIXME not supported yet */
-    return 0;
+    DWORD retValue;
+
+    /* Zero all local memory pointer */
+    RtlZeroMemory(&puSurfaceGlobalData, sizeof(DD_SURFACE_GLOBAL) );
+    RtlZeroMemory(&puSurfaceMoreData, sizeof(DD_SURFACE_MORE) ) ;
+    RtlZeroMemory(&puSurfaceLocalData, sizeof(DD_SURFACE_LOCAL) );
+
+    pCreateSurface->dwSCnt =3D 1;
+    pSurfLcl =3D pCreateSurface->lplpSList[0];
+    pSurfGBL =3D pSurfLcl->lpGbl;
+
+    /* Convert DDRAWI_DDRAWSURFACE_GBL to DD_SURFACE_GLOBAL */
+    puSurfaceGlobalData.wWidth =3D pSurfGBL->wWidth;
+    puSurfaceGlobalData.wHeight =3D pSurfGBL->wHeight;
+    puSurfaceGlobalData.dwLinearSize =3D pSurfGBL->dwLinearSize;
+    puSurfaceGlobalData.fpVidMem =3D pSurfGBL->fpVidMem;
+    puSurfaceGlobalData.dwBlockSizeX =3D pSurfGBL->dwBlockSizeX;
+    puSurfaceGlobalData.dwBlockSizeY =3D pSurfGBL->dwBlockSizeY;
+
+    /* Convert DDRAWI_DDRAWSURFACE_MORE to DD_SURFACE_MORE */
+    puSurfaceMoreData.dwSurfaceHandle =3D pSurfLcl->lpSurfMore->dwSurfaceH=
andle;
+    puSurfaceMoreData.ddsCapsEx.dwCaps2 =3D pSurfLcl->lpSurfMore->ddsCapsE=
x.dwCaps2;
+    puSurfaceMoreData.ddsCapsEx.dwCaps3 =3D pSurfLcl->lpSurfMore->ddsCapsE=
x.dwCaps3;
+    puSurfaceMoreData.ddsCapsEx.dwCaps4 =3D pSurfLcl->lpSurfMore->ddsCapsE=
x.dwCaps4;
+
+    /* Convert DDRAWI_DDRAWSURFACE_LCL to DD_SURFACE_LOCAL */
+    puSurfaceLocalData.dwFlags =3D pSurfLcl->dwFlags;
+    puSurfaceLocalData.ddsCaps.dwCaps =3D pSurfLcl->ddsCaps.dwCaps;
+
+    /* Call win32k */
+    retValue =3D NtGdiDdCreateD3DBuffer( GetDdHandle(pCreateSurface->lpDD-=
>hDD),
+                                       (HANDLE*)&pSurfLcl->hDDSurface,
+                                       pCreateSurface->lpDDSurfaceDesc,
+                                       &puSurfaceGlobalData,
+                                       &puSurfaceLocalData,
+                                       &puSurfaceMoreData,
+                                       (DD_CREATESURFACEDATA *) pCreateSur=
face,
+                                       &puhSurface);
+
+    /* Setup surface handle if we got one back  */
+    if ( puhSurface !=3D NULL )
+    {
+        pCreateSurface->lplpSList[0]->hDDSurface =3D (ULONG_PTR)puhSurface;
+    }
+
+    /* Convert DD_SURFACE_GLOBAL to DDRAWI_DDRAWSURFACE_GBL */
+    pSurfGBL->dwLinearSize =3D puSurfaceGlobalData.dwLinearSize;
+    pSurfGBL->fpVidMem =3D puSurfaceGlobalData.fpVidMem;
+    pSurfGBL->dwBlockSizeX =3D puSurfaceGlobalData.dwBlockSizeX;
+    pSurfGBL->dwBlockSizeY =3D puSurfaceGlobalData.dwBlockSizeY;
+
+    return retValue;
 }
 =

 /*
@@ -1294,6 +1336,7 @@
     DWORD retValue =3D 0;
     if ( pDestroySurface->lpDDSurface->hDDSurface)
     {
+        /* Call win32k */
         retValue =3D NtGdiDdDestroyD3DBuffer((HANDLE)pDestroySurface->lpDD=
Surface->hDDSurface);
     }
 =





More information about the Ros-diffs mailing list