/******************************Module*Header**********************************\ * * ******************* * * GDI SAMPLE CODE * * ******************* * * Module Name: thunk.c * * Content: * * This module exists solely for testing, to make it is easy to instrument * all the driver's Drv calls. * * Note that most of this stuff will only be compiled in a checked (debug) * build. * * Copyright (c) 1994-1999 3Dlabs Inc. Ltd. All rights reserved. * Copyright (c) 1995-2003 Microsoft Corporation. All rights reserved. \*****************************************************************************/ #include "precomp.h" #include "glint.h" #if DBG // default these to FALSE BOOL bPuntCopyBits = FALSE; BOOL bPuntBitBlt = FALSE; BOOL bPuntTextOut = FALSE; BOOL bPuntStrokePath = FALSE; BOOL bPuntLineTo = FALSE; BOOL bPuntFillPath = FALSE; BOOL bPuntPaint = FALSE; #endif //DBG //////////////////////////////////////////////////////////////////////////// #if DBG || !SYNCHRONIZEACCESS_WORKS // This entire module is only enabled for Checked builds, or when we // have to explicitly synchronize bitmap access ourselves. //////////////////////////////////////////////////////////////////////////// // By default, GDI does not synchronize drawing to device-bitmaps. Since // our hardware dictates that only one thread can access the accelerator // at a time, we have to synchronize bitmap access. // // If we're running on Windows NT 3.1, we have to do it ourselves. // // If we're running on Windows NT 3.5 or later, we can ask GDI to do it // by setting HOOK_SYNCHRONIZEACCESS when we associate a device-bitmap // surface. extern HSEMAPHORE g_cs; #define SYNCH_ENTER() EngAcquireSemaphore(g_cs); #define SYNCH_LEAVE() EngReleaseSemaphore(g_cs); //////////////////////////////////////////////////////////////////////////// BOOL gbNull = FALSE; // Set to TRUE with the debugger to test the speed // of NT with an inifinitely fast display driver // (actually, almost infinitely fast since we're // not hooking all the calls we could be) BOOL inBitBlt = FALSE; VOID DbgDisableDriver(VOID) { SYNCH_ENTER(); DISPDBG((5, "DrvDisableDriver")); DrvDisableDriver(); DISPDBG((6, "DrvDisableDriver done")); SYNCH_LEAVE(); } DHPDEV DbgEnablePDEV( DEVMODEW* pDevmode, PWSTR pwszLogAddress, ULONG cPatterns, HSURF* ahsurfPatterns, ULONG cjGdiInfo, ULONG* pGdiInfo, ULONG cjDevInfo, DEVINFO* pDevInfo, HDEV hdev, PWSTR pwszDeviceName, HANDLE hDriver) { DHPDEV bRet; SYNCH_ENTER(); DISPDBG((5, "DrvEnablePDEV")); bRet = DrvEnablePDEV( pDevmode, pwszLogAddress, cPatterns, ahsurfPatterns, cjGdiInfo, pGdiInfo, cjDevInfo, pDevInfo, hdev, pwszDeviceName, hDriver); DISPDBG((6, "DrvEnablePDEV done")); SYNCH_LEAVE(); return(bRet); } VOID DbgCompletePDEV( DHPDEV dhpdev, HDEV hdev) { SYNCH_ENTER(); DISPDBG((5, "DrvCompletePDEV")); DrvCompletePDEV( dhpdev, hdev); DISPDBG((6, "DrvCompletePDEV done")); SYNCH_LEAVE(); } VOID DbgDisablePDEV(DHPDEV dhpdev) { SYNCH_ENTER(); DISPDBG((5, "DrvDisable")); DrvDisablePDEV(dhpdev); DISPDBG((6, "DrvDisable done")); SYNCH_LEAVE(); } HSURF DbgEnableSurface(DHPDEV dhpdev) { HSURF h; SYNCH_ENTER(); DISPDBG((5, "DrvEnableSurface")); h = DrvEnableSurface(dhpdev); DISPDBG((6, "DrvEnableSurface done")); SYNCH_LEAVE(); return(h); } VOID DbgDisableSurface(DHPDEV dhpdev) { SYNCH_ENTER(); DISPDBG((5, "DrvDisableSurface")); DrvDisableSurface(dhpdev); DISPDBG((6, "DrvDisableSurface done")); SYNCH_LEAVE(); } BOOL DbgAssertMode( DHPDEV dhpdev, BOOL bEnable) { BOOL bRet; SYNCH_ENTER(); DISPDBG((5, "DrvAssertMode")); bRet = DrvAssertMode(dhpdev,bEnable); DISPDBG((6, "DrvAssertMode done")); SYNCH_LEAVE(); return(bRet); } // // We do not SYNCH_ENTER since we have not initalized the driver. // We just want to get the list of modes from the miniport. // ULONG DbgGetModes( HANDLE hDriver, ULONG cjSize, DEVMODEW* pdm) { ULONG u; DISPDBG((5, "DrvGetModes")); u = DrvGetModes( hDriver, cjSize, pdm); DISPDBG((6, "DrvGetModes done")); return(u); } VOID DbgMovePointer(SURFOBJ *pso,LONG x,LONG y,RECTL *prcl) { if (gbNull) return; #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); } #endif // We don't synchronise access to this routine. If the cursor is hardware // the move can be done at any time and if it is software GDI locks the // access for us. DISPDBG((15, "DrvMovePointer 0x%x 0x%x", x, y)); DrvMovePointer(pso,x,y,prcl); DISPDBG((16, "DrvMovePointer done")); } ULONG DbgSetPointerShape( SURFOBJ* pso, SURFOBJ* psoMask, SURFOBJ* psoColor, XLATEOBJ* pxlo, LONG xHot, LONG yHot, LONG x, LONG y, RECTL* prcl, FLONG fl) { ULONG u; if (gbNull) return(SPS_ACCEPT_NOEXCLUDE); SYNCH_ENTER(); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); } #endif DISPDBG((5, "DrvSetPointerShape")); u = DrvSetPointerShape( pso, psoMask, psoColor, pxlo, xHot, yHot, x, y, prcl, fl); DISPDBG((6, "DrvSetPointerShape done")); SYNCH_LEAVE(); return(u); } ULONG DbgDitherColor( DHPDEV dhpdev, ULONG iMode, ULONG rgb, ULONG* pul) { ULONG u; if (gbNull) return(DCR_DRIVER); DISPDBG((5, "DrvDitherColor")); u = DrvDitherColor( dhpdev, iMode, rgb, pul); DISPDBG((6, "DrvDitherColor done")); return(u); } BOOL DbgSetPalette( DHPDEV dhpdev, PALOBJ* ppalo, FLONG fl, ULONG iStart, ULONG cColors) { BOOL u; if (gbNull) return(TRUE); SYNCH_ENTER(); DISPDBG((5, "DrvSetPalette")); u = DrvSetPalette( dhpdev, ppalo, fl, iStart, cColors); DISPDBG((6, "DrvSetPalette done")); SYNCH_LEAVE(); return(u); } BOOL DbgCopyBits( SURFOBJ* psoDst, SURFOBJ* psoSrc, CLIPOBJ* pco, XLATEOBJ* pxlo, RECTL* prclDst, POINTL* pptlSrc) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (psoSrc && psoSrc->iType != STYPE_BITMAP) ? (PPDEV)psoSrc->dhpdev : (PPDEV)psoDst->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntCopyBits) { SYNCH_ENTER(); if(psoSrc->iType != STYPE_BITMAP) { DSURF *pdsurfSrc = (DSURF *)psoSrc->dhsurf; psoSrc = pdsurfSrc->pso; } if(psoDst->iType != STYPE_BITMAP) { DSURF *pdsurfDst = (DSURF *)psoDst->dhsurf; psoDst = pdsurfDst->pso; } u = EngCopyBits(psoDst, psoSrc, pco, pxlo, prclDst, pptlSrc); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvCopyBits")); u = DrvCopyBits( psoDst, psoSrc, pco, pxlo, prclDst, pptlSrc); DISPDBG((6, "DrvCopyBits done")); SYNCH_LEAVE(); return(u); } BOOL DbgBitBlt( SURFOBJ* psoDst, SURFOBJ* psoSrc, SURFOBJ* psoMask, CLIPOBJ* pco, XLATEOBJ* pxlo, RECTL* prclDst, POINTL* pptlSrc, POINTL* pptlMask, BRUSHOBJ* pbo, POINTL* pptlBrush, ROP4 rop4) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (psoSrc && psoSrc->iType != STYPE_BITMAP) ? (PPDEV)psoSrc->dhpdev : (PPDEV)psoDst->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntBitBlt) { SYNCH_ENTER(); if(psoSrc && psoSrc->iType != STYPE_BITMAP) { DSURF *pdsurfSrc = (DSURF *)psoSrc->dhsurf; psoSrc = pdsurfSrc->pso; } if(psoDst && psoDst->iType != STYPE_BITMAP) { DSURF *pdsurfDst = (DSURF *)psoDst->dhsurf; psoDst = pdsurfDst->pso; } u = EngBitBlt(psoDst, psoSrc, psoMask, pco, pxlo, prclDst, pptlSrc, pptlMask, pbo, pptlBrush, rop4); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvBitBlt: psoDst(%p) psoSrc(%p) psoMask(%p) pbo(%p) rop(%08x)", psoDst, psoSrc, psoMask, pbo, rop4)); inBitBlt = TRUE; u = DrvBitBlt( psoDst, psoSrc, psoMask, pco, pxlo, prclDst, pptlSrc, pptlMask, pbo, pptlBrush, rop4); inBitBlt = FALSE; DISPDBG((6, "DrvBitBlt done")); SYNCH_LEAVE(); return(u); } BOOL DbgTextOut( SURFOBJ* pso, STROBJ* pstro, FONTOBJ* pfo, CLIPOBJ* pco, RECTL* prclExtra, RECTL* prclOpaque, BRUSHOBJ* pboFore, BRUSHOBJ* pboOpaque, POINTL* pptlOrg, MIX mix) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntTextOut) { SYNCH_ENTER(); if(pso->iType != STYPE_BITMAP) { DSURF *pdsurf = (DSURF *)pso->dhsurf; pso = pdsurf->pso; } u = EngTextOut(pso, pstro, pfo, pco, prclExtra, prclOpaque, pboFore, pboOpaque, pptlOrg, mix); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvTextOut")); u = DrvTextOut( pso, pstro, pfo, pco, prclExtra, prclOpaque, pboFore, pboOpaque, pptlOrg, mix); DISPDBG((6, "DrvTextOut done")); SYNCH_LEAVE(); return(u); } BOOL DbgStrokePath( SURFOBJ* pso, PATHOBJ* ppo, CLIPOBJ* pco, XFORMOBJ* pxo, BRUSHOBJ* pbo, POINTL* pptlBrushOrg, LINEATTRS* plineattrs, MIX mix) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntStrokePath) { SYNCH_ENTER(); if(pso && pso->iType != STYPE_BITMAP) { DSURF *pdsurf = (DSURF *)pso->dhsurf; pso = pdsurf->pso; } u = EngStrokePath(pso, ppo, pco, pxo, pbo, pptlBrushOrg, plineattrs, mix); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvStrokePath")); u = DrvStrokePath( pso, ppo, pco, pxo, pbo, pptlBrushOrg, plineattrs, mix); DISPDBG((6, "DrvStrokePath done")); SYNCH_LEAVE(); return(u); } BOOL DbgLineTo( SURFOBJ* pso, CLIPOBJ* pco, BRUSHOBJ* pbo, LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntLineTo) { SYNCH_ENTER(); if(pso && pso->iType != STYPE_BITMAP) { DSURF *pdsurf = (DSURF *)pso->dhsurf; pso = pdsurf->pso; } u = EngLineTo(pso, pco, pbo, x1, y1, x2, y2, prclBounds, mix); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvLineTo")); u = DrvLineTo( pso, pco, pbo, x1, y1, x2, y2, prclBounds, mix); DISPDBG((6, "DrvLineTo done")); SYNCH_LEAVE(); return(u); } BOOL DbgFillPath( SURFOBJ* pso, PATHOBJ* ppo, CLIPOBJ* pco, BRUSHOBJ* pbo, POINTL* pptlBrushOrg, MIX mix, FLONG flOptions) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntFillPath) { SYNCH_ENTER(); if(pso && pso->iType != STYPE_BITMAP) { DSURF *pdsurf = (DSURF *)pso->dhsurf; pso = pdsurf->pso; } u = EngFillPath(pso, ppo, pco, pbo, pptlBrushOrg, mix, flOptions); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvFillPath")); u = DrvFillPath(pso, ppo, pco, pbo, pptlBrushOrg, mix, flOptions); DISPDBG((6, "DrvFillPath done")); SYNCH_LEAVE(); return(u); } BOOL DbgPaint( SURFOBJ* pso, CLIPOBJ* pco, BRUSHOBJ* pbo, POINTL* pptlBrushOrg, MIX mix) { BOOL u; if (gbNull) return(TRUE); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); if(bPuntPaint) { SYNCH_ENTER(); if(pso && pso->iType != STYPE_BITMAP) { DSURF *pdsurf = (DSURF *)pso->dhsurf; pso = pdsurf->pso; } u = EngPaint(pso, pco, pbo, pptlBrushOrg, mix); SYNCH_LEAVE(); return(u); } } #endif //DBG SYNCH_ENTER(); DISPDBG((5, "DrvPaint")); u = DrvPaint( pso, pco, pbo, pptlBrushOrg, mix); DISPDBG((6, "DrvPaint done")); SYNCH_LEAVE(); return(u); } BOOL DbgRealizeBrush( BRUSHOBJ* pbo, SURFOBJ* psoTarget, SURFOBJ* psoPattern, SURFOBJ* psoMask, XLATEOBJ* pxlo, ULONG iHatch) { BOOL u; //@@BEGIN_DDKSPLIT // Note: The only time DrvRealizeBrush is called by GDI is when we've // called BRUSHOBJ_pvGetRbrush in the middle of a DrvBitBlt // call, and GDI had to call us back. Since we're still in the // middle of DrvBitBlt, synchronization has already taken care of. // For the same reason, this will never be called when 'gbNull' // is TRUE, so it doesn't even make sense to check gbNull... // I've seen this to be untrue at least once on a MIPS so ... //@@END_DDKSPLIT if (!inBitBlt) SYNCH_ENTER(); DISPDBG((5, "DrvRealizeBrush")); u = DrvRealizeBrush( pbo, psoTarget, psoPattern, psoMask, pxlo, iHatch); DISPDBG((6, "DrvRealizeBrush done")); if (!inBitBlt) SYNCH_LEAVE(); return(u); } HBITMAP DbgCreateDeviceBitmap(DHPDEV dhpdev, SIZEL sizl, ULONG iFormat) { HBITMAP hbm; //@@BEGIN_DDKSPLIT #if 0 if (gbNull) // I would pretend to have created a return(FALSE); // bitmap when gbNull is set, by we // would need some code to back this // up so that the system wouldn't // crash... #endif //@@END_DDKSPLIT SYNCH_ENTER(); #if DBG { PPDEV ppdev = (PPDEV)dhpdev; CHECK_MEMORY_VIEW(ppdev); } #endif DISPDBG((5, "DrvCreateDeviceBitmap")); hbm = DrvCreateDeviceBitmap(dhpdev, sizl, iFormat); DISPDBG((6, "DrvCreateDeviceBitmap done")); SYNCH_LEAVE(); return(hbm); } VOID DbgDeleteDeviceBitmap(DHSURF dhsurf) { SYNCH_ENTER(); #if DBG { PPDEV ppdev = ((DSURF *)dhsurf)->ppdev; CHECK_MEMORY_VIEW(ppdev); } #endif DISPDBG((5, "DrvDeleteDeviceBitmap")); DrvDeleteDeviceBitmap(dhsurf); DISPDBG((6, "DrvDeleteDeviceBitmap done")); SYNCH_LEAVE(); } //@@BEGIN_DDKSPLIT #define DRV_STRETCH_SUPPORTED 0 #if DRV_STRETCH_SUPPORTED #if DBG #define STRETCH_COPY 0x00000000 #define STRETCH_DOWNLOAD 0x00000001 #define STRETCH_COLORONCOLOR 0x00000000 #define STRETCH_BLACKONWHITE 0x00000002 #define STRETCH_WHITEONBLACK 0x00000004 #define STRETCH_SOURCE_1BPP 0x00000000 #define STRETCH_SOURCE_4BPP 0x00000008 #define STRETCH_SOURCE_8BPP 0x00000010 #define STRETCH_SOURCE_16BPP 0x00000020 #define STRETCH_SOURCE_24BPP 0x00000040 #define STRETCH_SOURCE_32BPP 0x00000080 #define STRETCH_ONE2ONE_X 0x00000000 #define STRETCH_GROW_X 0x00000100 #define STRETCH_SHRINK_X 0x00000200 #define STRETCH_ONE2ONE_Y 0x00000000 #define STRETCH_GROW_Y 0x00000400 #define STRETCH_SHRINK_Y 0x00000800 ULONG aStretch[0x900]; #endif // DBG BOOL DbgStretchBlt( SURFOBJ* psoDst, SURFOBJ* psoSrc, SURFOBJ* psoMask, CLIPOBJ* pco, XLATEOBJ* pxlo, COLORADJUSTMENT* pca, POINTL* pptlHTOrg, RECTL* prclDst, RECTL* prclSrc, POINTL* pptlMask, ULONG iMode) { BOOL u; if (gbNull) return(TRUE); SYNCH_ENTER(); DISPDBG((5, "DrvStretchBlt")); #if SYNCHRONIZEACCESS_WORKS { // Our DrvStretchBlt routine calls back to EngStretchBlt, which // calls back to our DrvCopyBits routine -- so we have to be // re-entrant for synchronization... SYNCH_LEAVE(); } #endif // SYNCHRONIZEACCESS_WORKS #if DBG { int i; SIZEL sizlSrc; SIZEL sizlDst; i = (psoSrc->iType == STYPE_BITMAP) ? STRETCH_DOWNLOAD : STRETCH_COPY; i |= (iMode == COLORONCOLOR) ? STRETCH_COLORONCOLOR : (iMode == BLACKONWHITE) ? STRETCH_BLACKONWHITE : STRETCH_WHITEONBLACK; i |= (psoSrc->iBitmapFormat == BMF_1BPP) ? STRETCH_SOURCE_1BPP : (psoSrc->iBitmapFormat == BMF_4BPP) ? STRETCH_SOURCE_4BPP : (psoSrc->iBitmapFormat == BMF_8BPP) ? STRETCH_SOURCE_8BPP : (psoSrc->iBitmapFormat == BMF_16BPP) ? STRETCH_SOURCE_16BPP : (psoSrc->iBitmapFormat == BMF_24BPP) ? STRETCH_SOURCE_24BPP : STRETCH_SOURCE_32BPP; sizlSrc.cx = prclSrc->right - prclSrc->left; if((int)sizlSrc.cx < 0) sizlSrc.cx = (ULONG)-(int)sizlSrc.cx; sizlSrc.cy = prclSrc->bottom - prclSrc->top; if((int)sizlSrc.cy < 0) sizlSrc.cy = (ULONG)-(int)sizlSrc.cy; sizlDst.cx = prclDst->right - prclDst->left; if((int)sizlDst.cx < 0) sizlDst.cx = (ULONG)-(int)sizlDst.cx; sizlDst.cy = prclDst->bottom - prclDst->top; if((int)sizlDst.cy < 0) sizlDst.cy = (ULONG)-(int)sizlDst.cy; i |= (sizlSrc.cx == sizlDst.cx) ? STRETCH_ONE2ONE_X : (sizlSrc.cx < sizlDst.cx) ? STRETCH_GROW_X : STRETCH_SHRINK_X; i |= (sizlSrc.cy == sizlDst.cy) ? STRETCH_ONE2ONE_Y : (sizlSrc.cy < sizlDst.cy) ? STRETCH_GROW_Y : STRETCH_SHRINK_Y; ++aStretch[i]; } #endif u = DrvStretchBlt(psoDst, psoSrc, psoMask, pco, pxlo, pca, pptlHTOrg, prclDst, prclSrc, pptlMask, iMode); #if SYNCHRONIZEACCESS_WORKS { SYNCH_ENTER(); } #endif // SYNCHRONIZEACCESS_WORKS DISPDBG((6, "DrvStretchBlt done")); SYNCH_LEAVE(); return(u); } #endif // DRV_STRETCH_SUPPORTED //@@END_DDKSPLIT ULONG DbgEscape( SURFOBJ *pso, ULONG iEsc, ULONG cjIn, VOID *pvIn, ULONG cjOut, VOID *pvOut) { ULONG u; if (gbNull) return(TRUE); SYNCH_ENTER(); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); } #endif DISPDBG((5, "DrvEscape")); u = DrvEscape(pso, iEsc, cjIn, pvIn, cjOut, pvOut); DISPDBG((6, "DrvEscape done")); SYNCH_LEAVE(); return(u); } ULONG DbgDrawEscape( SURFOBJ *pso, ULONG iEsc, CLIPOBJ *pco, RECTL *prcl, ULONG cjIn, VOID *pvIn) { ULONG u; if (gbNull) return(TRUE); SYNCH_ENTER(); #if DBG { PPDEV ppdev = (PPDEV)pso->dhpdev; CHECK_MEMORY_VIEW(ppdev); } #endif DISPDBG((5, "DrvDrawEscape")); // Nothing to do.... u = (ULONG)-1; DISPDBG((6, "DrvDrawEscape done")); SYNCH_LEAVE(); return(u); } BOOL DbgResetPDEV( DHPDEV dhpdevOld, DHPDEV dhpdevNew) { BOOL bRet; SYNCH_ENTER(); DISPDBG((5, ">> DrvResetPDEV")); bRet = DrvResetPDEV(dhpdevOld, dhpdevNew); DISPDBG((6, "<< DrvResetPDEV")); SYNCH_LEAVE(); return(bRet); } VOID DbgSynchronize( DHPDEV dhpdev, RECTL *prcl) { DISPDBG((5, "DbgSynchronize")); // // don't do SYNCH_ENTER checks here as we will be called from within // an Eng routine that is called from within a Drv function. // DrvSynchronize( dhpdev, prcl); DISPDBG((6, "DbgSynchronize done")); } #if WNT_DDRAW BOOL DbgGetDirectDrawInfo( DHPDEV dhpdev, DD_HALINFO* pHalInfo, DWORD* lpdwNumHeaps, VIDEOMEMORY* pvmList, DWORD* lpdwNumFourCC, DWORD* lpdwFourCC) { BOOL b; DISPDBG((5, ">> DbgQueryDirectDrawInfo")); b = DrvGetDirectDrawInfo(dhpdev, pHalInfo, lpdwNumHeaps, pvmList, lpdwNumFourCC, lpdwFourCC); DISPDBG((6, "<< DbgQueryDirectDrawInfo")); return(b); } BOOL DbgEnableDirectDraw( DHPDEV dhpdev, DD_CALLBACKS* pCallBacks, DD_SURFACECALLBACKS* pSurfaceCallBacks, DD_PALETTECALLBACKS* pPaletteCallBacks) { BOOL b; SYNCH_ENTER(); DISPDBG((5, ">> DbgEnableDirectDraw")); b = DrvEnableDirectDraw(dhpdev, pCallBacks, pSurfaceCallBacks, pPaletteCallBacks); DISPDBG((6, "<< DbgEnableDirectDraw")); SYNCH_LEAVE(); return(b); } VOID DbgDisableDirectDraw( DHPDEV dhpdev) { SYNCH_ENTER(); DISPDBG((5, ">> DbgDisableDirectDraw")); DrvDisableDirectDraw(dhpdev); DISPDBG((6, "<< DbgDisableDirectDraw")); SYNCH_LEAVE(); } #endif // WNT_DDRAW #if(_WIN32_WINNT >= 0x500) BOOL DbgIcmSetDeviceGammaRamp( DHPDEV dhpdev, ULONG iFormat, LPVOID lpRamp) { BOOL b; SYNCH_ENTER(); DISPDBG((5, ">> DbgIcmSetDeviceGammaRamp")); b = DrvIcmSetDeviceGammaRamp(dhpdev, iFormat, lpRamp); DISPDBG((6, "<< DbgIcmSetDeviceGammaRamp")); SYNCH_LEAVE(); return(b); } BOOL DbgGradientFill( SURFOBJ *psoDest, CLIPOBJ *pco, XLATEOBJ *pxlo, TRIVERTEX *pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, RECTL *prclExtents, POINTL *pptlDitherOrg, ULONG ulMode) { BOOL b; SYNCH_ENTER(); DISPDBG((5, ">> DbgGradientFill")); b = DrvGradientFill(psoDest, pco, pxlo, pVertex, nVertex, pMesh, nMesh, prclExtents, pptlDitherOrg, ulMode); DISPDBG((6, "<< DbgGradientFill")); SYNCH_LEAVE(); return(b); } BOOL DbgAlphaBlend( SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDest, RECTL *prclSrc, BLENDOBJ *pBlendObj) { BOOL b; SYNCH_ENTER(); DISPDBG((5, ">> DbgAlphaBlend")); b = DrvAlphaBlend(psoDest, psoSrc, pco, pxlo, prclDest, prclSrc, pBlendObj); DISPDBG((6, "<< DbgAlphaBlend")); SYNCH_LEAVE(); return(b); } BOOL DbgTransparentBlt( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDst, RECTL *prclSrc, ULONG iTransColor, ULONG ulReserved) { BOOL b; SYNCH_ENTER(); DISPDBG((5, ">> DbgTransparentBlt")); b = DrvTransparentBlt(psoDst, psoSrc, pco, pxlo, prclDst, prclSrc, iTransColor, ulReserved); DISPDBG((6, "<< DbgTransparentBlt")); SYNCH_LEAVE(); return(b); } VOID DbgNotify( SURFOBJ *pso, ULONG iType, PVOID pvData) { SYNCH_ENTER(); DISPDBG((5, ">> DbgNotify")); DrvNotify(pso, iType, pvData); DISPDBG((6, "<< DbgNotify")); SYNCH_LEAVE(); } #endif // (_WIN32_WINNT >= 0x500) #endif // DBG || !SYNCHRONIZEACCESS_WORKS