[ros-diffs] [tkreuzer] 56032: [WIN32K] - Don't check for presence of driver functions that are not mandatory - Pass graphics device, devmode and log address to PDEVOBJ_CreatePDEV to make it work

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Mon Mar 5 13:30:38 UTC 2012


Author: tkreuzer
Date: Mon Mar  5 13:30:37 2012
New Revision: 56032

URL: http://svn.reactos.org/svn/reactos?rev=56032&view=rev
Log:
[WIN32K]
- Don't check for presence of driver functions that are not mandatory
- Pass graphics device, devmode and log address to PDEVOBJ_CreatePDEV to make it work

Modified:
    branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/ldevobj.c
    branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/pdevobj.c
    branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/font/fntdrvsup.c
    branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/include/pdevobj.h

Modified: branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/ldevobj.c
URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/ldevobj.c?rev=56032&r1=56031&r2=56032&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/ldevobj.c [iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/ldevobj.c [iso-8859-1] Mon Mar  5 13:30:37 2012
@@ -264,8 +264,7 @@
 
     /* Check if the neccessary functions are there */
     if ((!pldev->pfn.EnablePDEV) ||
-        (!pldev->pfn.CompletePDEV) ||
-        (!pldev->pfn.UnloadFontFile))
+        (!pldev->pfn.CompletePDEV))
     {
         DPRINT1("Missing function for gdi driver\n");
         return FALSE;
@@ -276,7 +275,6 @@
         if ((!pldev->pfn.AssertMode) ||
             (!pldev->pfn.EnableSurface) ||
             (!pldev->pfn.DisableSurface) ||
-            (!pldev->pfn.DisableDriver) ||
             (!pldev->pfn.DisablePDEV) ||
             (!pldev->pfn.GetModes))
         {

Modified: branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/pdevobj.c
URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/pdevobj.c?rev=56032&r1=56031&r2=56032&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/pdevobj.c [iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/eng/pdevobj.c [iso-8859-1] Mon Mar  5 13:30:37 2012
@@ -7,8 +7,7 @@
  */
 
 #include <win32k.h>
-#define NDEBUG
-#include <debug.h>
+DBG_DEFAULT_CHANNEL(EngPDev);
 
 PPDEVOBJ gppdevPrimary = NULL;
 
@@ -104,8 +103,7 @@
     PWSTR pwszLogAddress)
 {
     PFN_DrvEnablePDEV pfnEnablePDEV;
-
-    DPRINT("PDEVOBJ_bEnablePDEV()\n");
+    TRACE("PDEVOBJ_bEnablePDEV()\n");
 
     /* Get the DrvEnablePDEV function */
     pfnEnablePDEV = ppdev->pldev->pfn.EnablePDEV;
@@ -136,8 +134,7 @@
     /* Setup Palette */
     ppdev->ppalSurf = PALETTE_ShareLockPalette(ppdev->devinfo.hpalDefault);
 
-    DPRINT("PDEVOBJ_bEnablePDEV - dhpdev = %p\n", ppdev->dhpdev);
-
+    TRACE("PDEVOBJ_bEnablePDEV - dhpdev = %p\n", ppdev->dhpdev);
     return TRUE;
 }
 
@@ -153,16 +150,18 @@
 PPDEVOBJ
 NTAPI
 PDEVOBJ_CreatePDEV(
-    PLDEVOBJ pldev)
+    PLDEVOBJ pldev,
+    PGRAPHICS_DEVICE pGraphicsDevice,
+    PDEVMODEW pdevmode,
+    PWSTR pwszLogAddress)
 {
     PPDEVOBJ ppdev;
-    LDEVTYPE ldevtype;
 
     /* Allocate a new PDEVOBJ */
     ppdev = ExAllocatePoolWithTag(PagedPool, sizeof(PDEVOBJ), GDITAG_PDEV);
     if (!ppdev)
     {
-        DPRINT1("failed to allocate a PDEV\n");
+        ERR("failed to allocate a PDEV\n");
         return FALSE;
     }
 
@@ -177,37 +176,61 @@
     /* Copy the function table from the LDEVOBJ */
     ppdev->pfn = ppdev->pldev->pfn;
 
+    /* Set the graphics device */
+    ppdev->pGraphicsDevice = pGraphicsDevice;
+
     /* Allocate the device lock semaphore */
     ppdev->hsemDevLock = EngCreateSemaphore();
     if (!ppdev->hsemDevLock)
     {
-        DPRINT1("Failed to create semaphore\n");
+        ERR("Failed to create semaphore\n");
         ExFreePoolWithTag(ppdev, GDITAG_PDEV);
         return FALSE;
     }
 
     /* Call the drivers DrvEnablePDEV function */
-    if (!PDEVOBJ_bEnablePDEV(ppdev, NULL, NULL))
-    {
-        DPRINT1("Failed to enable PDEV\n");
+    if (!PDEVOBJ_bEnablePDEV(ppdev, pdevmode, NULL))
+    {
+        ERR("Failed to enable PDEV\n");
         EngDeleteSemaphore(ppdev->hsemDevLock);
         ExFreePoolWithTag(ppdev, GDITAG_PDEV);
         return FALSE;
     }
 
-    /* Set flags based on the LDEV type */
-    ldevtype = pldev->ldevtype;
-    if (ldevtype == LDEV_DEVICE_MIRROR) ppdev->flFlags |= PDEV_CLONE_DEVICE;
-    else if (ldevtype == LDEV_DEVICE_DISPLAY) ppdev->flFlags |= PDEV_DISPLAY;
-    else if (ldevtype == LDEV_DEVICE_PRINTER) ppdev->flFlags |= PDEV_PRINTER;
-    else if (ldevtype == LDEV_DEVICE_META) ppdev->flFlags |= PDEV_META_DEVICE;
-    else if (ldevtype == LDEV_FONT) ppdev->flFlags |= PDEV_FONTDRIVER;
+    /* Check what type of driver this is */
+    if (pldev->ldevtype == LDEV_DEVICE_DISPLAY)
+    {
+        /* This is a display device */
+        ppdev->flFlags |= PDEV_DISPLAY;
+
+        /* Check if the driver supports a hardware pointer */
+        if (ppdev->pfn.SetPointerShape && ppdev->pfn.MovePointer)
+        {
+            ppdev->flFlags |= PDEV_HARDWARE_POINTER;
+            //ppdev->pfnDrvSetPointerShape = ppdev->pfn.SetPointerShape;
+            ppdev->pfnMovePointer = ppdev->pfn.MovePointer;
+        }
+        else
+        {
+            ppdev->flFlags |= PDEV_SOFTWARE_POINTER;
+            //ppdev->pfnDrvSetPointerShape = EngSetPointerShape;
+            ppdev->pfnMovePointer = EngMovePointer;
+        }
+
+    }
+    else if (pldev->ldevtype == LDEV_DEVICE_MIRROR)
+        ppdev->flFlags |= PDEV_CLONE_DEVICE;
+    else if (pldev->ldevtype == LDEV_DEVICE_PRINTER)
+        ppdev->flFlags |= PDEV_PRINTER;
+    else if (pldev->ldevtype == LDEV_DEVICE_META)
+        ppdev->flFlags |= PDEV_META_DEVICE;
+    else if (pldev->ldevtype == LDEV_FONT)
+        ppdev->flFlags |= PDEV_FONTDRIVER;
 
     /* Check if the driver supports fonts */
     if (ppdev->devinfo.cFonts != 0) ppdev->flFlags |= PDEV_GOTFONTS;
 
-    if (ppdev->pfn.MovePointer) ppdev->flFlags |= PDEV_HARDWARE_POINTER;
-
+    /* Check for a gamma ramp table */
     if (ppdev->pvGammaRamp) ppdev->flFlags |= PDEV_GAMMARAMP_TABLE;
 
     /* Call the drivers DrvCompletePDEV function */
@@ -238,7 +261,7 @@
         ppdev->pSurface = SURFACE_ShareLockSurface(hsurf);
     }
 
-    DPRINT("PDEVOBJ_pSurface() returning %p\n", ppdev->pSurface);
+    TRACE("PDEVOBJ_pSurface() returning %p\n", ppdev->pSurface);
     return ppdev->pSurface;
 }
 
@@ -290,7 +313,7 @@
     PGRAPHICS_DEVICE pGraphicsDevice;
     PLDEVOBJ pldev;
     PPDEVOBJ ppdev;
-    DPRINT("EngCreateDisplayPDEV(%wZ, %p)\n", pustrDeviceName, pdm);
+    TRACE("EngCreateDisplayPDEV(%wZ, %p)\n", pustrDeviceName, pdm);
 
     /* Try to find the GRAPHICS_DEVICE */
     if (pustrDeviceName)
@@ -298,8 +321,8 @@
         pGraphicsDevice = EngpFindGraphicsDevice(pustrDeviceName, 0, 0);
         if (!pGraphicsDevice)
         {
-            DPRINT1("No GRAPHICS_DEVICE found for %ls!\n",
-                    pustrDeviceName ? pustrDeviceName->Buffer : 0);
+            ERR("No GRAPHICS_DEVICE found for %ls!\n",
+                pustrDeviceName ? pustrDeviceName->Buffer : 0);
             return NULL;
         }
     }
@@ -313,34 +336,27 @@
     {
         /* ... use the device's default one */
         pdm = pGraphicsDevice->pDevModeList[pGraphicsDevice->iDefaultMode].pdm;
-        DPRINT("Using iDefaultMode = %ld\n", pGraphicsDevice->iDefaultMode);
+        TRACE("Using iDefaultMode = %ld\n", pGraphicsDevice->iDefaultMode);
     }
 
     /* Try to get a diplay driver */
     pldev = EngLoadImageEx(pdm->dmDeviceName, LDEV_DEVICE_DISPLAY);
     if (!pldev)
     {
-        DPRINT1("Could not load display driver '%ls', '%s'\n",
-                pGraphicsDevice->pDiplayDrivers,
-                pdm->dmDeviceName);
+        ERR("Could not load display driver '%ls', '%s'\n",
+            pGraphicsDevice->pDiplayDrivers, pdm->dmDeviceName);
         return NULL;
     }
 
     /* Create a new PDEVOBJ */
-    ppdev = PDEVOBJ_CreatePDEV(pldev);
+    ppdev = PDEVOBJ_CreatePDEV(pldev, pGraphicsDevice, pdm, NULL);
     if (!ppdev)
     {
-        DPRINT1("failed to allocate a PDEV\n");
+        ERR("failed to create a PDEV\n");
         EngUnloadImage(pldev);
         return FALSE;
     }
 
-    /* Set MovePointer function */
-    ppdev->pfnMovePointer = ppdev->pfn.MovePointer;
-    if (!ppdev->pfnMovePointer)
-        ppdev->pfnMovePointer = EngMovePointer;
-
-    ppdev->pGraphicsDevice = pGraphicsDevice;
     // Should we change the ative mode of pGraphicsDevice ?
     ppdev->pdmwDev = PDEVOBJ_pdmMatchDevMode(ppdev, pdm) ;
 
@@ -417,21 +433,21 @@
     PPDEVOBJ ppdevTmp;
     PSURFACE pSurface;
     BOOL retval = FALSE;
+    TRACE("PDEVOBJ_bSwitchMode, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
 
     /* Lock the PDEV */
     EngAcquireSemaphore(ppdev->hsemDevLock);
+
     /* And everything else */
     EngAcquireSemaphore(ghsemPDEV);
 
-    DPRINT1("PDEVOBJ_bSwitchMode, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
-
     // Lookup the GraphicsDevice + select DEVMODE
     // pdm = PDEVOBJ_pdmMatchDevMode(ppdev, pdm);
 
     /* 1. Temporarily disable the current PDEV */
     if (!ppdev->pfn.AssertMode(ppdev->dhpdev, FALSE))
     {
-        DPRINT1("DrvAssertMode failed\n");
+        ERR("DrvAssertMode failed\n");
         goto leave;
     }
 
@@ -440,7 +456,7 @@
     ppdevTmp = EngCreateDisplayPDEV(&ustrDevice, pdm);
     if (!ppdevTmp)
     {
-        DPRINT1("Failed to create a new PDEV\n");
+        ERR("Failed to create a new PDEV\n");
         goto leave;
     }
 
@@ -448,7 +464,7 @@
     pSurface = PDEVOBJ_pSurface(ppdevTmp);
     if (!pSurface)
     {
-        DPRINT1("DrvEnableSurface failed\n");
+        ERR("DrvEnableSurface failed\n");
         goto leave;
     }
 
@@ -476,8 +492,7 @@
     EngReleaseSemaphore(ppdev->hsemDevLock);
     EngReleaseSemaphore(ghsemPDEV);
 
-    DPRINT1("leave, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
-
+    TRACE("leave, ppdev = %p, pSurface = %p\n", ppdev, ppdev->pSurface);
     return retval;
 }
 

Modified: branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/font/fntdrvsup.c
URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/font/fntdrvsup.c?rev=56032&r1=56031&r2=56032&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/font/fntdrvsup.c [iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/font/fntdrvsup.c [iso-8859-1] Mon Mar  5 13:30:37 2012
@@ -278,7 +278,7 @@
     }
 
     /* Create a new PDEVOBJ */
-    ppdev = PDEVOBJ_CreatePDEV(pldev);
+    ppdev = PDEVOBJ_CreatePDEV(pldev, NULL, NULL, NULL);
     if (!ppdev)
     {
         DPRINT1("failed to allocate a PDEV\n");

Modified: branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/include/pdevobj.h
URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/include/pdevobj.h?rev=56032&r1=56031&r2=56032&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/include/pdevobj.h [iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/subsystems/win32/win32k/include/pdevobj.h [iso-8859-1] Mon Mar  5 13:30:37 2012
@@ -183,7 +183,10 @@
 PPDEVOBJ
 NTAPI
 PDEVOBJ_CreatePDEV(
-    struct _LDEVOBJ *pldev);
+    struct _LDEVOBJ *pldev,
+    PGRAPHICS_DEVICE pGraphicsDevice,
+    PDEVMODEW pdevmode,
+    PWSTR pwszLogAddress);
 
 BOOL
 NTAPI




More information about the Ros-diffs mailing list