[ros-diffs] [tkreuzer] 56211: [WIN32K] - Add EngAcquireSemaphoreShared prototype - implement RECTL_bIsWellOrdered - implement DbgLookupDHPDEV - start implementation of driver callback debug hooks

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Wed Mar 21 20:50:04 UTC 2012


Author: tkreuzer
Date: Wed Mar 21 20:50:04 2012
New Revision: 56211

URL: http://svn.reactos.org/svn/reactos?rev=56211&view=rev
Log:
[WIN32K]
- Add EngAcquireSemaphoreShared prototype
- implement RECTL_bIsWellOrdered
- implement DbgLookupDHPDEV
- start implementation of driver callback debug hooks

Added:
    trunk/reactos/subsystems/win32/win32k/eng/drvdbg.c   (with props)
Modified:
    trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c
    trunk/reactos/subsystems/win32/win32k/include/eng.h
    trunk/reactos/subsystems/win32/win32k/include/rect.h

Added: trunk/reactos/subsystems/win32/win32k/eng/drvdbg.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/drvdbg.c?rev=56211&view=auto
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/drvdbg.c (added)
+++ trunk/reactos/subsystems/win32/win32k/eng/drvdbg.c [iso-8859-1] Wed Mar 21 20:50:04 2012
@@ -1,0 +1,1264 @@
+/*
+ * PROJECT:         Win32 subsystem
+ * LICENSE:         GNU GPL, see COPYING in the top level directory
+ * FILE:            subsystems/win32/win32k/eng/ddidbg.c
+ * PURPOSE:         Debug hooks for display driver callbacks
+ * PROGRAMMERS:     Timo Kreuzer
+ */
+
+#include <win32k.h>
+DBG_DEFAULT_CHANNEL(EngDev);
+
+PPDEVOBJ
+NTAPI
+DbgLookupDHPDEV(DHPDEV dhpdev);
+
+VOID
+DbgDrvReserved(void)
+{
+    ASSERT(FALSE);
+}
+
+DHPDEV
+APIENTRY
+DbgDrvEnablePDEV(
+    _In_ DEVMODEW *pdm,
+    _In_ LPWSTR pwszLogAddress,
+    ULONG cPat,
+    _In_opt_ HSURF *phsurfPatterns,
+    ULONG cjCaps,
+    _Out_ ULONG *pdevcaps,
+    ULONG cjDevInfo,
+    _Out_ DEVINFO *pdi,
+    HDEV hdev,
+    _In_ LPWSTR pwszDeviceName,
+    HANDLE hDriver)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)hdev;
+
+    ASSERT(pdm);
+    ASSERT(hdev);
+
+    return ppdev->pldev->pfn.EnablePDEV(pdm,
+                                        pwszLogAddress,
+                                        cPat,
+                                        phsurfPatterns,
+                                        cjCaps,
+                                        pdevcaps,
+                                        cjDevInfo,
+                                        pdi,
+                                        hdev,
+                                        pwszDeviceName,
+                                        hDriver);
+}
+
+VOID
+APIENTRY
+DbgDrvCompletePDEV(
+    DHPDEV dhpdev,
+    HDEV hdev)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)hdev;
+
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.CompletePDEV(dhpdev, hdev);
+}
+
+VOID
+APIENTRY
+DbgDrvDisablePDEV(
+    DHPDEV dhpdev)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.DisablePDEV(dhpdev);
+}
+
+HSURF
+APIENTRY
+DbgDrvEnableSurface(
+    DHPDEV dhpdev)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.EnableSurface(dhpdev);
+}
+
+VOID
+APIENTRY
+DbgDrvDisableSurface(
+    DHPDEV dhpdev)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.DisableSurface(dhpdev);
+}
+
+BOOL
+APIENTRY
+DbgDrvAssertMode(
+    _In_ DHPDEV dhpdev,
+    _In_ BOOL bEnable)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.AssertMode(dhpdev, bEnable);
+}
+
+BOOL
+APIENTRY
+DbgDrvOffset(
+    SURFOBJ* pso,
+    LONG x1,
+    LONG x2,
+    FLONG fl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+
+    ASSERT(FALSE);
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvResetPDEV(
+    DHPDEV dhpdev,
+    PVOID Reserved)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.ResetDevice(dhpdev, Reserved);
+}
+
+VOID
+APIENTRY
+DbgDrvDisableDriver(void)
+{
+    ASSERT(FALSE);
+}
+
+HBITMAP
+APIENTRY
+DbgDrvCreateDeviceBitmap(
+    DHPDEV dhpdev,
+    SIZEL sizl,
+    ULONG iFormat)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.CreateDeviceBitmap(dhpdev, sizl, iFormat);
+}
+
+VOID
+APIENTRY
+DbgDrvDeleteDeviceBitmap(
+    DHSURF dhsurf)
+{
+    ASSERT(FALSE);
+}
+
+BOOL
+APIENTRY
+DbgDrvRealizeBrush(
+    _In_      BRUSHOBJ *pbo,
+    _Inout_   SURFOBJ *psoTarget,
+    _In_      SURFOBJ *psoPattern,
+    _In_opt_  SURFOBJ *psoMask,
+    _In_      XLATEOBJ *pxlo,
+    _In_      ULONG iHatch)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)psoTarget->hdev;
+    ASSERT(FALSE);
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvDitherColor(
+    _In_     DHPDEV dhpdev,
+    _In_     ULONG iMode,
+    _In_     ULONG rgb,
+    _Inout_  ULONG *pul)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.DitherColor(dhpdev, iMode, rgb, pul);
+}
+
+BOOL
+APIENTRY
+DbgDrvStrokePath(
+    _Inout_   SURFOBJ *pso,
+    _In_      PATHOBJ *ppo,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XFORMOBJ *pxo,
+    _In_      BRUSHOBJ *pbo,
+    _In_      POINTL *pptlBrushOrg,
+    _In_      LINEATTRS *plineattrs,
+    _In_      MIX mix)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    ASSERT(FALSE);
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvFillPath(
+    _Inout_  SURFOBJ *pso,
+    _In_     PATHOBJ *ppo,
+    _In_     CLIPOBJ *pco,
+    _In_     BRUSHOBJ *pbo,
+    _In_     POINTL *pptlBrushOrg,
+    _In_     MIX mix,
+    _In_     FLONG flOptions)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    ASSERT(FALSE);
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvStrokeAndFillPath(
+    _Inout_   SURFOBJ *pso,
+    _Inout_   PATHOBJ *ppo,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XFORMOBJ *pxo,
+    _In_      BRUSHOBJ *pboStroke,
+    _In_      LINEATTRS *plineattrs,
+    _In_      BRUSHOBJ *pboFill,
+    _In_      POINTL *pptlBrushOrg,
+    _In_      MIX mixFill,
+    _In_      FLONG flOptions)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    ASSERT(FALSE);
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvPaint(
+    IN SURFOBJ *pso,
+    IN CLIPOBJ *pco,
+    IN BRUSHOBJ *pbo,
+    IN POINTL *pptlBrushOrg,
+    IN MIX mix)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvBitBlt(
+    _Inout_ SURFOBJ *psoTrg,
+    _In_opt_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclTrg,
+    _When_(psoSrc, _In_) POINTL *pptlSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_opt_ BRUSHOBJ *pbo,
+    _When_(pbo, _In_) POINTL *pptlBrush,
+    _In_ ROP4 rop4)
+{
+    PSURFACE psurfTrg = CONTAINING_RECORD(psoTrg, SURFACE, SurfObj);
+    PSURFACE psurfSrc = CONTAINING_RECORD(psoSrc, SURFACE, SurfObj);
+    PPDEVOBJ ppdev;
+
+    /* Get the right BitBlt function */
+    if (psurfTrg->flags & HOOK_BITBLT)
+    {
+        ppdev = (PPDEVOBJ)psoTrg->hdev;
+    }
+    else
+    {
+        ASSERT(ROP4_USES_SOURCE(rop4));
+        ASSERT(psurfSrc->flags & HOOK_BITBLT);
+        ppdev = (PPDEVOBJ)psoSrc->hdev;
+    }
+
+    /* Sanity checks */
+    ASSERT(IS_VALID_ROP4(rop4));
+    ASSERT(psoTrg);
+    ASSERT(psoTrg->iBitmapFormat >= BMF_1BPP);
+    ASSERT(psoTrg->iBitmapFormat <= BMF_32BPP);
+    ASSERT(prclTrg);
+    ASSERT(prclTrg->left >= 0);
+    ASSERT(prclTrg->top >= 0);
+    ASSERT(prclTrg->right <= psoTrg->sizlBitmap.cx);
+    ASSERT(prclTrg->bottom <= psoTrg->sizlBitmap.cy);
+    ASSERT(RECTL_bIsWellOrdered(prclTrg));
+
+    if (ROP4_USES_SOURCE(rop4))
+    {
+        ASSERT(psoSrc);
+        ASSERT(psoSrc->iBitmapFormat >= BMF_1BPP);
+        ASSERT(psoSrc->iBitmapFormat <= BMF_8RLE);
+        ASSERT(pptlSrc);
+        ASSERT(pptlSrc->x >= 0);
+        ASSERT(pptlSrc->y >= 0);
+        ASSERT(pptlSrc->x <= psoTrg->sizlBitmap.cx);
+        ASSERT(pptlSrc->y <= psoTrg->sizlBitmap.cy);
+    }
+
+    if (ROP4_USES_MASK(rop4))
+    {
+        ASSERT(psoMask);
+        ASSERT(psoMask->iBitmapFormat == BMF_1BPP);
+        ASSERT(pptlMask);
+        ASSERT(pptlMask->x >= 0);
+        ASSERT(pptlMask->y >= 0);
+        ASSERT(pptlMask->x <= psoMask->sizlBitmap.cx);
+        ASSERT(pptlMask->y <= psoMask->sizlBitmap.cy);
+
+    }
+
+    if (ROP4_USES_PATTERN(rop4))
+    {
+        ASSERT(pbo);
+        ASSERT(pptlBrush);
+    }
+
+
+    return ppdev->pldev->pfn.BitBlt(psoTrg,
+                                    psoSrc,
+                                    psoMask,
+                                    pco,
+                                    pxlo,
+                                    prclTrg,
+                                    pptlSrc,
+                                    pptlMask,
+                                    pbo,
+                                    pptlBrush,
+                                    rop4);
+}
+
+BOOL
+APIENTRY
+DbgDrvCopyBits(
+    SURFOBJ *psoTrg,
+    SURFOBJ *psoSrc,
+    CLIPOBJ *pco,
+    XLATEOBJ *pxlo,
+    RECTL *prclTrg,
+    POINTL *pptlSrc)
+{
+    PSURFACE psurfTrg = CONTAINING_RECORD(psoTrg, SURFACE, SurfObj);
+    PSURFACE psurfSrc = CONTAINING_RECORD(psoSrc, SURFACE, SurfObj);
+    PPDEVOBJ ppdev;
+
+    /* Get the right BitBlt function */
+    if (psurfTrg->flags & HOOK_COPYBITS)
+    {
+        ppdev = (PPDEVOBJ)psoTrg->hdev;
+    }
+    else
+    {
+        ASSERT(psurfSrc->flags & HOOK_COPYBITS);
+        ppdev = (PPDEVOBJ)psoSrc->hdev;
+    }
+
+    return ppdev->pldev->pfn.CopyBits(psoTrg,
+                                      psoSrc,
+                                      pco,
+                                      pxlo,
+                                      prclTrg,
+                                      pptlSrc);
+
+}
+
+BOOL
+APIENTRY
+DbgDrvStretchBlt(
+    _Inout_   SURFOBJ *psoTrg,
+    _Inout_   SURFOBJ *psoSrc,
+    _In_opt_  SURFOBJ *psoMask,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XLATEOBJ *pxlo,
+    _In_opt_  COLORADJUSTMENT *pca,
+    _In_      POINTL *pptlHTOrg,
+    _In_      RECTL *prclDest,
+    _In_      RECTL *prclSrc,
+    _In_opt_  POINTL *pptlMask,
+    _In_      ULONG iMode)
+{
+    PSURFACE psurfTrg = CONTAINING_RECORD(psoTrg, SURFACE, SurfObj);
+    PSURFACE psurfSrc = CONTAINING_RECORD(psoSrc, SURFACE, SurfObj);
+
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvSetPalette(
+    DHPDEV dhpdev,
+    PALOBJ *ppalo,
+    FLONG fl,
+    ULONG iStart,
+    ULONG cColors)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.SetPalette(dhpdev, ppalo, fl, iStart, cColors);
+}
+
+BOOL
+APIENTRY
+DbgDrvTextOut(
+    SURFOBJ *pso,
+    STROBJ *pstro,
+    FONTOBJ *pfo,
+    CLIPOBJ *pco,
+    RECTL *prclExtra ,
+    RECTL *prclOpaque,
+    BRUSHOBJ *pboFore,
+    BRUSHOBJ *pboOpaque,
+    POINTL *pptlOrg,
+    MIX mix)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvEscape(
+    _In_   SURFOBJ *pso,
+    _In_   ULONG iEsc,
+    _In_   ULONG cjIn,
+    _In_   PVOID pvIn,
+    _In_   ULONG cjOut,
+    _Out_  PVOID pvOut)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvDrawEscape(
+    _In_  SURFOBJ *pso,
+    _In_  ULONG iEsc,
+    _In_  CLIPOBJ *pco,
+    _In_  RECTL *prcl,
+    _In_  ULONG cjIn,
+    _In_  PVOID pvIn)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+PIFIMETRICS
+APIENTRY
+DbgDrvQueryFont(
+    DHPDEV dhpdev,
+    ULONG_PTR iFile,
+    ULONG iFace,
+    ULONG_PTR *pid)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.QueryFont(dhpdev, iFile, iFace, pid);
+}
+
+PVOID
+APIENTRY
+DbgDrvQueryFontTree(
+    DHPDEV dhpdev,
+    ULONG_PTR iFile,
+    ULONG iFace,
+    ULONG iMode,
+    ULONG_PTR *pid)
+{
+    return 0;
+}
+
+LONG
+APIENTRY
+DbgDrvQueryFontData(
+    DHPDEV dhpdev,
+    FONTOBJ *pfo,
+    ULONG iMode,
+    HGLYPH hg,
+    GLYPHDATA *pgd,
+    _Out_  PVOID pv,
+    ULONG cjSize)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.QueryFontData(dhpdev, pfo, iMode, hg, pgd, pv, cjSize);
+}
+
+ULONG
+APIENTRY
+DbgDrvSetPointerShape(
+    _In_  SURFOBJ *pso,
+    _In_  SURFOBJ *psoMask,
+    _In_  SURFOBJ *psoColor,
+    _In_  XLATEOBJ *pxlo,
+    _In_  LONG xHot,
+    _In_  LONG yHot,
+    _In_  LONG x,
+    _In_  LONG y,
+    _In_  RECTL *prcl,
+    _In_  FLONG fl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+VOID
+APIENTRY
+DbgDrvMovePointer(
+    _In_ SURFOBJ *pso,
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_ RECTL *prcl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+}
+
+BOOL
+APIENTRY
+DbgDrvLineTo(
+    SURFOBJ *pso,
+    CLIPOBJ *pco,
+    BRUSHOBJ *pbo,
+    LONG x1,
+    LONG y1,
+    LONG x2,
+    LONG y2,
+    RECTL *prclBounds,
+    MIX mix)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvSendPage(
+    _In_  SURFOBJ *pso)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvStartPage(
+    _In_  SURFOBJ *pso)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvEndDoc(
+    _In_  SURFOBJ *pso,
+    _In_  FLONG fl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvStartDoc(
+    _In_ SURFOBJ *pso,
+    _In_ LPWSTR pwszDocName,
+    _In_ DWORD dwJobId)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvGetGlyphMode(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.GetGlyphMode(dhpdev, pfo);
+}
+
+VOID
+APIENTRY
+DbgDrvSynchronize(
+    DHPDEV dhpdev,
+    RECTL *prcl)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.Synchronize(dhpdev, prcl);
+}
+
+ULONG_PTR
+APIENTRY
+DbgDrvSaveScreenBits(
+    SURFOBJ *pso,
+    ULONG iMode,
+    ULONG_PTR ident,
+    RECTL *prcl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvGetModes(
+    _In_       HANDLE hDriver,
+    ULONG cjSize,
+    _Out_opt_  DEVMODEW *pdm)
+{
+    return 0;
+}
+
+VOID
+APIENTRY
+DbgDrvFree(
+    PVOID pv,
+    ULONG_PTR id)
+{
+}
+
+VOID
+APIENTRY
+DbgDrvDestroyFont(
+    FONTOBJ *pfo)
+{
+}
+
+LONG
+APIENTRY
+DbgDrvQueryFontCaps(
+    ULONG culCaps,
+    ULONG *pulCaps)
+{
+    return 0;
+}
+
+ULONG_PTR
+APIENTRY
+DbgDrvLoadFontFile(
+    ULONG cFiles,
+    ULONG_PTR *piFile,
+    PVOID *ppvView,
+    ULONG *pcjView,
+    DESIGNVECTOR *pdv,
+    ULONG ulLangID,
+    ULONG ulFastCheckSum)
+{
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvUnloadFontFile(
+    ULONG_PTR iFile)
+{
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvFontManagement(
+    _In_      SURFOBJ *pso,
+    _In_opt_  FONTOBJ *pfo,
+    _In_      ULONG iMode,
+    _In_      ULONG cjIn,
+    _In_      PVOID pvIn,
+    _In_      ULONG cjOut,
+    _Out_     PVOID pvOut)
+{
+    return 0;
+}
+
+LONG
+APIENTRY
+DbgDrvQueryTrueTypeTable(
+    ULONG_PTR iFile,
+    ULONG ulFont,
+    ULONG ulTag,
+    PTRDIFF dpStart,
+    ULONG cjBuf,
+    BYTE *pjBuf,
+    PBYTE *ppjTable,
+    ULONG *pcjTable)
+{
+    return 0;
+}
+
+LONG
+APIENTRY
+DbgDrvQueryTrueTypeOutline(
+    DHPDEV dhpdev,
+    FONTOBJ *pfo,
+    HGLYPH hglyph,
+    BOOL bMetricsOnly,
+    GLYPHDATA *pgldt,
+    ULONG cjBuf,
+    TTPOLYGONHEADER *ppoly)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+    return 0;
+}
+
+PVOID
+APIENTRY
+DbgDrvGetTrueTypeFile(
+    ULONG_PTR iFile,
+    ULONG *pcj)
+{
+    return 0;
+}
+
+LONG
+APIENTRY
+DbgDrvQueryFontFile(
+    ULONG_PTR iFile,
+    ULONG ulMode,
+    ULONG cjBuf,
+    ULONG *pulBuf)
+{
+    return 0;
+}
+
+VOID
+APIENTRY
+DbgDrvMovePanning(
+    LONG x,
+    LONG y,
+    FLONG fl)
+{
+    ERR("Obsolete driver function %s called!\n", __FUNCTION__);
+    ASSERT(FALSE);
+}
+
+BOOL
+APIENTRY
+DbgDrvQueryAdvanceWidths(
+    DHPDEV dhpdev,
+    FONTOBJ *pfo,
+    ULONG iMode,
+    _In_   HGLYPH *phg,
+    _Out_  PVOID pvWidths,
+    ULONG cGlyphs)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvSetPixelFormat(
+    SURFOBJ *pso,
+    LONG iPixelFormat,
+    HWND hwnd)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+LONG
+APIENTRY
+DbgDrvDescribePixelFormat(
+    DHPDEV dhpdev,
+    LONG iPixelFormat,
+    ULONG cjpfd,
+    PIXELFORMATDESCRIPTOR *ppfd)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.DescribePixelFormat(dhpdev, iPixelFormat, cjpfd, ppfd);
+}
+
+BOOL
+APIENTRY
+DbgDrvSwapBuffers(
+    SURFOBJ *pso,
+    WNDOBJ *pwo)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvStartBanding(
+    _In_  SURFOBJ *pso,
+    _In_  POINTL *pptl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvNextBand(
+    _In_  SURFOBJ *pso,
+    _In_  POINTL *pptl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvGetDirectDrawInfo(
+    DHPDEV dhpdev,
+    DD_HALINFO *pHalInfo,
+    DWORD *pdwNumHeaps,
+    VIDEOMEMORY *pvmList,
+    DWORD *pdwNumFourCCCodes,
+    DWORD *pdwFourCC)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.GetDirectDrawInfo(dhpdev,
+                                               pHalInfo,
+                                               pdwNumHeaps,
+                                               pvmList,
+                                               pdwNumFourCCCodes,
+                                               pdwFourCC);
+}
+
+BOOL
+APIENTRY
+DbgDrvEnableDirectDraw(
+    DHPDEV dhpdev,
+    DD_CALLBACKS *pCallBacks,
+    DD_SURFACECALLBACKS *pSurfaceCallBacks,
+    DD_PALETTECALLBACKS *pPaletteCallBacks)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.EnableDirectDraw(dhpdev,
+                                              pCallBacks,
+                                              pSurfaceCallBacks,
+                                              pPaletteCallBacks);
+}
+
+VOID
+APIENTRY
+DbgDrvDisableDirectDraw(
+    DHPDEV dhpdev)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.DisableDirectDraw(dhpdev);
+}
+
+BOOL
+APIENTRY
+DbgDrvQuerySpoolType(DHPDEV PDev, LPWSTR SpoolType)
+{
+    ERR("Obsolete driver function %s called!\n", __FUNCTION__);
+    ASSERT(FALSE);
+    return 0;
+}
+
+HANDLE
+APIENTRY
+DbgDrvIcmCreateColorTransform(
+    _In_      DHPDEV dhpdev,
+    _In_      LPLOGCOLORSPACEW pLogColorSpace,
+    _In_opt_  PVOID pvSourceProfile,
+    _In_      ULONG cjSourceProfile,
+    _In_      PVOID pvDestProfile,
+    _In_      ULONG cjDestProfile,
+    _In_opt_  PVOID pvTargetProfile,
+    _In_      ULONG cjTargetProfile,
+    _In_      DWORD dwReserved)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.IcmCreateColorTransform(dhpdev,
+                                                     pLogColorSpace,
+                                                     pvSourceProfile,
+                                                     cjSourceProfile,
+                                                     pvDestProfile,
+                                                     cjDestProfile,
+                                                     pvTargetProfile,
+                                                     cjTargetProfile,
+                                                     dwReserved);
+}
+
+BOOL
+APIENTRY
+DbgDrvIcmDeleteColorTransform(
+    _In_  DHPDEV dhpdev,
+    _In_  HANDLE hcmXform)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.IcmDeleteColorTransform(dhpdev, hcmXform);
+}
+
+BOOL
+APIENTRY
+DbgDrvIcmCheckBitmapBits(
+    DHPDEV dhpdev,
+    HANDLE hColorTransform,
+    SURFOBJ *pso,
+    PBYTE paResults)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.IcmCheckBitmapBits(dhpdev,
+                                                hColorTransform,
+                                                pso,
+                                                paResults);
+}
+
+BOOL
+APIENTRY
+DbgDrvIcmSetDeviceGammaRamp(
+    DHPDEV dhpdev,
+    ULONG iFormat,
+    LPVOID lpRamp)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.IcmSetDeviceGammaRamp(dhpdev, iFormat, lpRamp);
+}
+
+BOOL
+APIENTRY
+DbgDrvGradientFill(
+    _Inout_   SURFOBJ *psoTrg,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XLATEOBJ *pxlo,
+    _In_      TRIVERTEX *pVertex,
+    _In_      ULONG nVertex,
+    _In_      PVOID pMesh,
+    _In_      ULONG nMesh,
+    _In_      RECTL *prclExtents,
+    _In_      POINTL *pptlDitherOrg,
+    _In_      ULONG ulMode)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)psoTrg->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvStretchBltROP(
+    _Inout_   SURFOBJ *psoTrg,
+    _Inout_   SURFOBJ *psoSrc,
+    _In_opt_  SURFOBJ *psoMask,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XLATEOBJ *pxlo,
+    _In_opt_  COLORADJUSTMENT *pca,
+    _In_      POINTL *pptlHTOrg,
+    _In_      RECTL *prclDest,
+    _In_      RECTL *prclSrc,
+    _In_opt_  POINTL *pptlMask,
+    _In_      ULONG iMode,
+    _In_      BRUSHOBJ *pbo,
+    _In_      DWORD rop4)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)psoTrg->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvPlgBlt(
+    _Inout_   SURFOBJ *psoTrg,
+    _Inout_   SURFOBJ *psoSrc,
+    _In_opt_  SURFOBJ *psoMsk,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XLATEOBJ *pxlo,
+    _In_opt_  COLORADJUSTMENT *pca,
+    _In_opt_  POINTL *pptlBrushOrg,
+    _In_      POINTFIX *pptfx,
+    _In_      RECTL *prcl,
+    _In_opt_  POINTL *pptl,
+    _In_      ULONG iMode)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)psoTrg->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvAlphaBlend(
+    _Inout_   SURFOBJ *psoDest,
+    _In_      SURFOBJ *psoSrc,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XLATEOBJ *pxlo,
+    _In_      RECTL *prclDest,
+    _In_      RECTL *prclSrc,
+    _In_      BLENDOBJ *pBlendObj)
+{
+    return 0;
+}
+
+VOID
+APIENTRY
+DbgSynthesizeFont(void)
+{
+    ASSERT(FALSE);
+}
+
+VOID
+APIENTRY
+DbgGetSynthesizedFontFiles(void)
+{
+    ASSERT(FALSE);
+}
+
+BOOL
+APIENTRY
+DbgDrvTransparentBlt(
+    _Inout_   SURFOBJ *psoTrg,
+    _In_      SURFOBJ *psoSrc,
+    _In_      CLIPOBJ *pco,
+    _In_opt_  XLATEOBJ *pxlo,
+    _In_      RECTL *prclDst,
+    _In_      RECTL *prclSrc,
+    _In_      ULONG iTransColor,
+    _In_      ULONG ulReserved)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)psoTrg->hdev;
+    return 0;
+}
+
+ULONG
+APIENTRY
+DbgDrvQueryPerBandInfo(
+    _In_     SURFOBJ *pso,
+    _Inout_  PERBANDINFO *pbi)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    return 0;
+}
+
+BOOL
+APIENTRY
+DbgDrvQueryDeviceSupport(
+    SURFOBJ *pso,
+    XLATEOBJ *pxlo,
+    XFORMOBJ *pxo,
+    ULONG iType,
+    ULONG cjIn,
+    _In_ PVOID pvIn,
+    ULONG cjOut,
+    _Out_ PVOID pvOut)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.QueryDeviceSupport(pso,
+                                                pxlo,
+                                                (PVOID)pxo, // FIXME!!!
+                                                iType,
+                                                cjIn,
+                                                pvIn,
+                                                cjOut,
+                                                pvOut);
+}
+
+HBITMAP
+APIENTRY
+DbgDrvDeriveSurface(
+    DD_DIRECTDRAW_GLOBAL *pDirectDraw,
+    DD_SURFACE_LOCAL *pSurface)
+{
+    return 0;
+}
+
+PFD_GLYPHATTR
+APIENTRY
+DbgDrvQueryGlyphAttrs(
+    _In_  FONTOBJ *pfo,
+    _In_  ULONG iMode)
+{
+    return 0;
+}
+
+VOID
+APIENTRY
+DbgDrvNotify(
+    SURFOBJ *pso,
+    ULONG iType,
+    PVOID pvData)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.Notify(pso, iType, pvData);
+}
+
+VOID
+APIENTRY
+DbgDrvSynchronizeSurface(
+    SURFOBJ *pso,
+    RECTL *prcl,
+    FLONG fl)
+{
+    PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev;
+    ASSERT(ppdev);
+
+    ppdev->pldev->pfn.SynchronizeSurface(pso, prcl, fl);
+}
+
+ULONG
+APIENTRY
+DbgDrvResetDevice(
+    DHPDEV dhpdev,
+    PVOID Reserved)
+{
+    PPDEVOBJ ppdev = DbgLookupDHPDEV(dhpdev);
+    ASSERT(ppdev);
+
+    return ppdev->pldev->pfn.ResetDevice(dhpdev, Reserved);
+}
+
+PVOID
+apfnDbgDrvFunctions[] =
+{
+    DbgDrvEnablePDEV,
+    DbgDrvCompletePDEV,
+    DbgDrvDisablePDEV,
+    DbgDrvEnableSurface,
+    DbgDrvDisableSurface,
+    DbgDrvAssertMode,
+    DbgDrvOffset,
+    DbgDrvResetPDEV,
+    NULL, //DbgDrvDisableDriver,
+    DbgDrvReserved, // Unknown1
+    DbgDrvCreateDeviceBitmap,
+    NULL, //DbgDrvDeleteDeviceBitmap,
+    DbgDrvRealizeBrush,
+    DbgDrvDitherColor,
+    DbgDrvStrokePath,
+    DbgDrvFillPath,
+    DbgDrvStrokeAndFillPath,
+    DbgDrvPaint,
+    DbgDrvBitBlt,
+    NULL, //DbgDrvCopyBits,
+    NULL, //DbgDrvStretchBlt,
+    DbgDrvReserved,
+    DbgDrvSetPalette,
+    NULL, //DbgDrvTextOut,
+    NULL, //DbgDrvEscape,
+    NULL, //DbgDrvDrawEscape,
+    DbgDrvQueryFont,
+    NULL, //DbgDrvQueryFontTree,
+    DbgDrvQueryFontData,
+    NULL, //DbgDrvSetPointerShape,
+    NULL, //DbgDrvMovePointer,
+    NULL, //DbgDrvLineTo,
+    NULL, //DbgDrvSendPage,
+    NULL, //DbgDrvStartPage,
+    NULL, //DbgDrvEndDoc,
+    NULL, //DbgDrvStartDoc,
+    DbgDrvReserved,
+    DbgDrvGetGlyphMode,
+    DbgDrvSynchronize,
+    DbgDrvReserved,
+    NULL, //DbgDrvSaveScreenBits,
+    NULL, //DbgDrvGetModes,
+    NULL, //DbgDrvFree,
+    NULL, //DbgDrvDestroyFont,
+    NULL, //DbgDrvQueryFontCaps,
+    NULL, //DbgDrvLoadFontFile,
+    NULL, //DbgDrvUnloadFontFile,
+    NULL, //DbgDrvFontManagement,
+    NULL, //DbgDrvQueryTrueTypeTable,
+    NULL, //DbgDrvQueryTrueTypeOutline,
+    NULL, //DbgDrvGetTrueTypeFile,
+    NULL, //DbgDrvQueryFontFile,
+    DbgDrvMovePanning,
+    NULL, //DbgDrvQueryAdvanceWidths,
+    NULL, //DbgDrvSetPixelFormat,
+    DbgDrvDescribePixelFormat,
+    NULL, //DbgDrvSwapBuffers,
+    NULL, //DbgDrvStartBanding,
+    NULL, //DbgDrvNextBand,
+    DbgDrvGetDirectDrawInfo,
+    DbgDrvEnableDirectDraw,
+    DbgDrvDisableDirectDraw,
+    DbgDrvQuerySpoolType,
+    DbgDrvReserved,
+    DbgDrvIcmCreateColorTransform,
+    DbgDrvIcmDeleteColorTransform,
+    DbgDrvIcmCheckBitmapBits,
+    DbgDrvIcmSetDeviceGammaRamp,
+    NULL, //DbgDrvGradientFill,
+    NULL, //DbgDrvStretchBltROP,
+    NULL, //DbgDrvPlgBlt,
+    NULL, //DbgDrvAlphaBlend,
+    NULL, //DbgSynthesizeFont,
+    NULL, //DbgGetSynthesizedFontFiles,
+    NULL, //DbgDrvTransparentBlt,
+    NULL, //DbgDrvQueryPerBandInfo,
+    DbgDrvQueryDeviceSupport,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    NULL, //DbgDrvDeriveSurface,
+    NULL, //DbgDrvQueryGlyphAttrs,
+    DbgDrvNotify,
+    DbgDrvSynchronizeSurface,
+    DbgDrvResetDevice,
+    DbgDrvReserved,
+    DbgDrvReserved,
+    DbgDrvReserved
+};

Propchange: trunk/reactos/subsystems/win32/win32k/eng/drvdbg.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c?rev=56211&r1=56210&r2=56211&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c [iso-8859-1] Wed Mar 21 20:50:04 2012
@@ -25,6 +25,29 @@
     return STATUS_SUCCESS;
 }
 
+#if DBG
+PPDEVOBJ
+NTAPI
+DbgLookupDHPDEV(DHPDEV dhpdev)
+{
+    PPDEVOBJ ppdev;
+
+    /* Lock PDEV list */
+    EngAcquireSemaphoreShared(ghsemPDEV);
+
+    /* Walk through the list of PDEVs */
+    for (ppdev = gppdevList;  ppdev; ppdev = ppdev->ppdevNext)
+    {
+        /* Compare with the given DHPDEV */
+        if (ppdev->dhpdev == dhpdev) break;
+    }
+
+    /* Unlock PDEV list */
+    EngReleaseSemaphore(ghsemPDEV);
+
+    return ppdev;
+}
+#endif
 
 PPDEVOBJ
 PDEVOBJ_AllocPDEV()
@@ -803,7 +826,7 @@
         return NULL;
 
     /* Lock PDEV list */
-    EngAcquireSemaphore(ghsemPDEV);
+    EngAcquireSemaphoreShared(ghsemPDEV);
 
     /* Walk through the list of PDEVs */
     for (ppdev = gppdevList;  ppdev; ppdev = ppdev->ppdevNext)

Modified: trunk/reactos/subsystems/win32/win32k/include/eng.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/eng.h?rev=56211&r1=56210&r2=56211&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/eng.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/include/eng.h [iso-8859-1] Wed Mar 21 20:50:04 2012
@@ -1,4 +1,9 @@
 #pragma once
+
+VOID
+NTAPI
+EngAcquireSemaphoreShared(
+    IN HSEMAPHORE hsem);
 
 BOOL APIENTRY
 IntEngMaskBlt(SURFOBJ *psoDest,

Modified: trunk/reactos/subsystems/win32/win32k/include/rect.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/rect.h?rev=56211&r1=56210&r2=56211&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/rect.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/include/rect.h [iso-8859-1] Wed Mar 21 20:50:04 2012
@@ -46,6 +46,14 @@
 }
 
 BOOL
+FORCEINLINE
+RECTL_bIsWellOrdered(const RECTL *prcl)
+{
+    return ((prcl->left <= prcl->right) &&
+            (prcl->top  <= prcl->bottom));
+}
+
+BOOL
 FASTCALL
 RECTL_bUnionRect(RECTL *prclDst, const RECTL *prcl1, const RECTL *prcl2);
 
@@ -57,6 +65,6 @@
 FASTCALL
 RECTL_vMakeWellOrdered(RECTL *prcl);
 
-VOID 
+VOID
 FASTCALL
 RECTL_vInflateRect(RECTL *rect, INT dx, INT dy);




More information about the Ros-diffs mailing list