|
|
/******************************Module*Header**********************************\
* * *************** * * SAMPLE CODE * * *************** * * Module Name: debug.h * * Debugging support interfaces. * * Copyright (c) 1994-1998 3Dlabs Inc. Ltd. All rights reserved. * Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved. \*****************************************************************************/
extern VOID DebugPrint( LONG DebugPrintLevel, PCHAR DebugMessage, ... );
#if DBG
// In order to enable per component debugging, DebugFilter will
// contain the bit pattern that will turn on messages for them.
// Debug messages with a debuglevel of 0 will be printed regardless
// of the filter in effect.The DWORD in which the DebugFilter is
// stored and the patterns of the filter masks will allow up to
// 4 separate components to be tracked, each one with 8 separate
// subcomponents.
// Note: During the transition phase to this new functionality, a
// filter of 0 will print ALL messages, but will later be switched
// to print NONE (expect of course , those at level 0)
extern DWORD DebugFilter; extern DWORD DebugPrintFilter;
#define DEBUG_FILTER_D3D 0x000000FF
#define DEBUG_FILTER_DD 0x0000FF00
#define DEBUG_FILTER_GDI 0x00FF0000
#define MINOR_DEBUG
#define DISPDBG(arg) DebugPrint arg
#define DBG_COMPONENT(arg, component) \
{ DebugPrintFilter = component; \ DebugPrint arg ; \ DebugPrintFilter = 0; \ }
#define DBG_D3D(arg) DBG_COMPONENT(arg,DEBUG_FILTER_D3D)
#define DBG_DD(arg) DBG_COMPONENT(arg,DEBUG_FILTER_DD)
#define DBG_GDI(arg) DBG_COMPONENT(arg,DEBUG_FILTER_GDI)
#define RIP(x) { DebugPrint(-1000, x); DebugBreak();}
#define ASSERTDD(x, y) if (!(x)) RIP (y)
extern VOID __cdecl DebugMsg(PCHAR DebugMessage, ...); extern void DumpSurface(LONG Level, LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface, LPDDSURFACEDESC lpDDSurfaceDesc); extern void DecodeBlend(LONG Level, DWORD i );
#define DUMPSURFACE(a, b, c) DumpSurface(a, b, c);
#define DECODEBLEND(a, b) DecodeBlend(a, b);
#define PRINTALLP2REGISTER PrintAllP2Registers
#define PRINTDIFFP2REGISTER PrintDifferentP2Registers
#define SAVEALLP2REGISTER SaveAllP2Registers
VOID PrintAllP2Registers( ULONG ulDebugLevel, PPDev ppdev); VOID SaveAllP2Registers( PPDev ppdev); VOID PrintDifferentP2Registers(ULONG ulDebugLevel, PPDev ppdev);
#if TRACKMEMALLOC
//------------------------------------------------------------------------------
//
// Memory Tracker
//
//------------------------------------------------------------------------------
VOID MemTrackerAddInstance(); VOID MemTrackerRemInstance(); PVOID MemTrackerAllocateMem(PVOID p, LONG lSize, PCHAR pModule, LONG lLineNo, BOOL bStopWhenFreed); VOID MemTrackerFreeMem( VOID *p); VOID MemTrackerDebugChk();
#define MEMTRACKERADDINSTANCE MemTrackerAddInstance
#define MEMTRACKERREMINSTANCE MemTrackerRemInstance
#define MEMTRACKERALLOCATEMEM MemTrackerAllocateMem
#define MEMTRACKERFREEMEM MemTrackerFreeMem
#define MEMTRACKERDEBUGCHK MemTrackerDebugChk
#else
#define MEMTRACKERADDINSTANCE / ## /
#define MEMTRACKERREMINSTANCE / ## /
#define MEMTRACKERALLOCATEMEM / ## /
#define MEMTRACKERFREEMEM / ## /
#define MEMTRACKERDEBUGCHK / ## /
#endif
//------------------------------------------------------------------------------
//
// THUNK_LAYER
//
// By Setting THUNK_LAYER equal to 1 you are adding a wrapper call on top of
// all DDI rendering functions. In this thunk layer of wrapper calls
// several usefull debugging features are enabled.
//
// Surface checks--which can help catch errant rendering routines
// Event logging---which can record rendering evernts to a log file
//
//------------------------------------------------------------------------------
#define THUNK_LAYER 0
#if THUNK_LAYER
BOOL xDrvBitBlt(SURFOBJ* psoDst, SURFOBJ* psoSrc, SURFOBJ* psoMsk, CLIPOBJ* pco, XLATEOBJ* pxlo, RECTL* prclDst, POINTL* pptlSrc, POINTL* pptlMsk, BRUSHOBJ* pbo, POINTL* pptlBrush, ROP4 rop4);
BOOL xDrvCopyBits( SURFOBJ* psoDst, SURFOBJ* psoSrc, CLIPOBJ* pco, XLATEOBJ* pxlo, RECTL* prclDst, POINTL* pptlSrc);
BOOL xDrvTransparentBlt( SURFOBJ * psoDst, SURFOBJ * psoSrc, CLIPOBJ * pco, XLATEOBJ * pxlo, RECTL * prclDst, RECTL * prclSrc, ULONG iTransColor, ULONG ulReserved);
BOOL xDrvAlphaBlend( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDst, RECTL *prclSrc, BLENDOBJ *pBlendObj);
BOOL xDrvGradientFill( SURFOBJ *psoDst, CLIPOBJ *pco, XLATEOBJ *pxlo, TRIVERTEX *pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, RECTL *prclExtents, POINTL *pptlDitherOrg, ULONG ulMode );
BOOL xDrvTextOut(SURFOBJ* pso, STROBJ* pstro, FONTOBJ* pfo, CLIPOBJ* pco, RECTL* prclExtra, RECTL* prclOpaque, BRUSHOBJ* pboFore, BRUSHOBJ* pboOpaque, POINTL* pptlBrush, MIX mix);
BOOL xDrvFillPath( SURFOBJ* pso, PATHOBJ* ppo, CLIPOBJ* pco, BRUSHOBJ* pbo, POINTL* pptlBrush, MIX mix, FLONG flOptions);
BOOL xDrvLineTo( SURFOBJ* pso, CLIPOBJ* pco, BRUSHOBJ* pbo, LONG x1, LONG y1, LONG x2, LONG y2, RECTL* prclBounds, MIX mix);
BOOL xDrvStrokePath( SURFOBJ* pso, PATHOBJ* ppo, CLIPOBJ* pco, XFORMOBJ* pxo, BRUSHOBJ* pbo, POINTL* pptlBrush, LINEATTRS* pla, MIX mix);
#endif
#else
#define DISPDBG(arg)
#define DBG_D3D(arg)
#define DBG_DD(arg)
#define DBG_GDI(arg)
#define RIP(x)
#define ASSERTDD(x, y)
#define DUMPSURFACE(a, b, c)
#define DECODEBLEND(a, b)
#define MEMTRACKERADDINSTANCE / ## /
#define MEMTRACKERREMINSTANCE / ## /
#define MEMTRACKERALLOCATEMEM / ## /
#define MEMTRACKERFREEMEM / ## /
#define MEMTRACKERDEBUGCHK / ## /
#define PRINTALLP2REGISTER / ## /
#define PRINTDIFFP2REGISTER / ## /
#define SAVEALLP2REGISTER / ## /
#endif
#define DebugBreak EngDebugBreak
#define MAKE_BITMAPS_OPAQUE 0
//@@BEGIN_DDKSPLIT
#if GDI_TEST
//
// GDI debug functions
//
void vPuntAfter(ULONG flags, SURFOBJ * psoSrc, SURFOBJ * psoDst);
ULONG vPuntBefore(SURFOBJ * psoSrc, SURFOBJ * psoDst); #endif
//@@END_DDKSPLIT
|