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/en…
==============================================================================
--- 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/en…
==============================================================================
--- 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/in…
==============================================================================
--- 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/in…
==============================================================================
--- 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);