VBoxDispDbg.h revision 40bd0fc692d21a6d579862d7ccdc20c2ccf361a5
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/* $Id$ */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/** @file
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * VBoxVideo Display D3D User mode dll
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/*
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * Copyright (C) 2011 Oracle Corporation
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper *
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * This file is part of VirtualBox Open Source Edition (OSE), as
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * available from http://www.virtualbox.org. This file is free software;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * you can redistribute it and/or modify it under the terms of the GNU
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * General Public License (GPL) as published by the Free Software
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * Foundation, in version 2 as it comes in the "COPYING" file of the
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#ifndef ___VBoxDispDbg_h__
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#define ___VBoxDispDbg_h__
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#ifdef DEBUG
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/* debugging configuration flags */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/* generic debugging facilities & extra data checks */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define VBOXWDDMDISP_DEBUG
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# if defined(DEBUG_misha) || defined(DEBUG_leo)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/* for some reason when debugging with VirtualKD, user-mode DbgPrint's are discarded
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * the workaround so far is to pass the log info to the kernel driver and DbgPrint'ed from there,
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper * which is enabled by this define */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define VBOXWDDMDISP_DEBUG_PRINTDRV
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko/* use OutputDebugString */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define VBOXWDDMDISP_DEBUG_PRINT
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/* adds vectored exception handler to be able to catch non-debug UM exceptions in kernel debugger */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define VBOXWDDMDISP_DEBUG_VEHANDLER
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper/* disable shared resource creation with wine */
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper//# define VBOXWDDMDISP_DEBUG_NOSHARED
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# endif
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Madden#endif
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Madden
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko#if 0
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko# ifdef Assert
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# undef Assert
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define Assert(_a) do{}while(0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# ifdef AssertBreakpoint
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# undef AssertBreakpoint
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define AssertBreakpoint() do{}while(0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# ifdef AssertFailed
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# undef AssertFailed
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define AssertFailed() do{}while(0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#ifdef VBOXWDDMDISP_DEBUG_VEHANDLER
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepervoid vboxVDbgVEHandlerRegister();
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepervoid vboxVDbgVEHandlerUnregister();
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#ifdef VBOXWDDMDISP_DEBUG_PRINTDRV
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define DbgPrintDrv(_m) do { vboxDispLogDrvF _m; } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define DbgPrintDrvRel(_m) do { vboxDispLogDrvF _m; } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define DbgPrintDrvFlow(_m) do { } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#else
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define DbgPrintDrv(_m) do { } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintDrvRel(_m) do { } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintDrvFlow(_m) do { } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major#endif
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major#ifdef VBOXWDDMDISP_DEBUG_PRINT
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintUsr(_m) do { vboxDispLogDbgPrintF _m; } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintUsrRel(_m) do { vboxDispLogDbgPrintF _m; } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintUsrFlow(_m) do { } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major#else
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintUsr(_m) do { } while (0)
8050adad93f1618eec6be88e39b822bea18a62a5Peter Major# define DbgPrintUsrRel(_m) do { } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define DbgPrintUsrFlow(_m) do { } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#ifdef DEBUG_misha
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define WARN_BREAK() do { AssertFailed(); } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#else
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper# define WARN_BREAK() do { } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#endif
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#define WARN(_m) do { \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper Log(_m); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper DbgPrintUsr(_m); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper DbgPrintDrv(_m); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper WARN_BREAK(); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#define vboxVDbgPrint(_m) do { \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper Log(_m); \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko DbgPrintUsr(_m); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper DbgPrintDrv(_m); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#define vboxVDbgPrintF(_m) do { \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko LogFlow(_m); \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko DbgPrintUsrFlow(_m); \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko DbgPrintDrvFlow(_m); \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko } while (0)
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko#define vboxVDbgPrintR(_m) do { \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko LogRel(_m); \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko DbgPrintUsrRel(_m); \
be8ae89dc821957bb97b37f72b55e70677b19e61sachiko DbgPrintDrvRel(_m); \
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper } while (0)
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper#ifdef VBOXWDDMDISP_DEBUG
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeperextern DWORD g_VBoxVDbgFDumpSetTexture;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeperextern DWORD g_VBoxVDbgFDumpDrawPrim;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeperextern DWORD g_VBoxVDbgFDumpTexBlt;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeperextern DWORD g_VBoxVDbgFDumpBlt;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeperextern DWORD g_VBoxVDbgFDumpRtSynch;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeperextern DWORD g_VBoxVDbgFDumpFlush;
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Maddenextern DWORD g_VBoxVDbgFDumpShared;
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Maddenextern DWORD g_VBoxVDbgFDumpLock;
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Maddenextern DWORD g_VBoxVDbgFDumpUnlock;
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Madden
a0e65fdaa1ba8bc5e1029449a643b62da3687defNeil Maddenextern DWORD g_VBoxVDbgFBreakShared;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepervoid vboxDispLogDrvF(char * szString, ...);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepervoid vboxDispLogDrv(char * szString);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepervoid vboxDispLogDbgPrintF(char * szString, ...);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepertypedef struct VBOXWDDMDISP_ALLOCATION *PVBOXWDDMDISP_ALLOCATION;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reepertypedef struct VBOXWDDMDISP_RESOURCE *PVBOXWDDMDISP_RESOURCE;
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de Reeper
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de ReeperVOID vboxVDbgDoDumpSurfRectByAlloc(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, const RECT *pRect, const char* pSuffix);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de ReeperVOID vboxVDbgDoDumpAllocRect(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, const RECT *pRect, const char* pSuffix);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de ReeperVOID vboxVDbgDoDumpSurfRectByRc(const char * pPrefix, const PVBOXWDDMDISP_RESOURCE pRc, uint32_t iAlloc, const RECT *pRect, const char* pSuffix);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de ReeperVOID vboxVDbgDoDumpSurfRect(const char * pPrefix, IDirect3DSurface9 *pSurf, const RECT *pRect, const char * pSuffix, bool bBreak);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de ReeperVOID vboxVDbgDoDumpSurf(const char * pPrefix, IDirect3DSurface9 *pSurf, const char * pSuffix);
7fadb5ee267a4d808110b0c3e704de440902cb83Mark de ReeperVOID vboxVDbgDoDumpRcRect(const char * pPrefix, IDirect3DResource9 *pRc, const RECT *pRect, const char * pSuffix);
VOID vboxVDbgDoDumpRcRectByRc(const char * pPrefix, const PVBOXWDDMDISP_RESOURCE pRc, const RECT *pRect, const char* pSuffix);
VOID vboxVDbgDoDumpRcRectByAlloc(const char * pPrefix, const PVBOXWDDMDISP_ALLOCATION pAlloc, IDirect3DResource9 *pD3DIf, const RECT *pRect, const char* pSuffix);
VOID vboxVDbgDoDumpTex(const char * pPrefix, IDirect3DBaseTexture9 *pTexBase, const char * pSuffix);
VOID vboxVDbgDoDumpRt(const char * pPrefix, struct VBOXWDDMDISP_DEVICE *pDevice, const char * pSuffix);
void vboxVDbgDoPrintRect(const char * pPrefix, const RECT *pRect, const char * pSuffix);
void vboxVDbgDoPrintAlloc(const char * pPrefix, const PVBOXWDDMDISP_RESOURCE pRc, uint32_t iAlloc, const char * pSuffix);
VOID vboxVDbgDoDumpLockSurfTex(const char * pPrefix, const D3DDDIARG_LOCK* pData, const char * pSuffix, bool fBreak);
VOID vboxVDbgDoDumpUnlockSurfTex(const char * pPrefix, const D3DDDIARG_UNLOCK* pData, const char * pSuffix, bool fBreak);
extern DWORD g_VBoxVDbgPid;
#define VBOXVDBG_IS_PID(_pid) ((_pid) == (g_VBoxVDbgPid ? g_VBoxVDbgPid : (g_VBoxVDbgPid = GetCurrentProcessId())))
#define VBOXVDBG_IS_DUMP_ALLOWED_PID(_pid) (((int)(_pid)) > 0 ? VBOXVDBG_IS_PID(_pid) : !VBOXVDBG_IS_PID(-((int)(_pid))))
#define VBOXVDBG_IS_DUMP_ALLOWED(_type) ( \
g_VBoxVDbgFDump##_type \
&& (g_VBoxVDbgFDump##_type == 1 \
|| VBOXVDBG_IS_DUMP_ALLOWED_PID(g_VBoxVDbgFDump##_type) \
) \
)
#define VBOXVDBG_IS_BREAK_ALLOWED(_type) ( \
g_VBoxVDbgFBreak##_type \
&& (g_VBoxVDbgFBreak##_type == 1 \
|| VBOXVDBG_IS_DUMP_ALLOWED_PID(g_VBoxVDbgFBreak##_type) \
) \
)
#define VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) (\
(_pRc)->RcDesc.fFlags.SharedResource \
&& VBOXVDBG_IS_DUMP_ALLOWED(Shared) \
)
#define VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc) (\
(_pRc)->RcDesc.fFlags.SharedResource \
&& VBOXVDBG_IS_BREAK_ALLOWED(Shared) \
)
#define VBOXVDBG_BREAK_SHARED(_pRc) do { \
if (VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc)) { \
vboxVDbgPrint(("Break on shared access: Rc(0x%p), SharedHandle(0x%p)\n", (_pRc), (_pRc)->aAllocations[0].hSharedHandle)); \
AssertFailed(); \
} \
} while (0)
#define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
{ \
vboxVDbgDoDumpRt("==>"__FUNCTION__": RenderTarget Dump\n", (_pDevice), "\n"); \
}\
} while (0)
#define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
{ \
vboxVDbgDoDumpRt("<=="__FUNCTION__": RenderTarget Dump\n", (_pDevice), "\n"); \
}\
} while (0)
#define VBOXVDBG_DUMP_SETTEXTURE(_pRc) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(SetTexture) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) \
) \
{ \
vboxVDbgDoDumpRcRectByRc("== "__FUNCTION__": ", _pRc, NULL, "\n"); \
} \
} while (0)
#define VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
) \
{ \
RECT _DstRect; \
vboxWddmRectMoved(&_DstRect, (_pSrcRect), (_pDstPoint)->x, (_pDstPoint)->y); \
vboxVDbgDoDumpRcRectByRc("==>"__FUNCTION__" Src: ", (_pSrcRc), (_pSrcRect), "\n"); \
vboxVDbgDoDumpRcRectByRc("==>"__FUNCTION__" Dst: ", (_pDstRc), &_DstRect, "\n"); \
} \
} while (0)
#define VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
) \
{ \
RECT _DstRect; \
vboxWddmRectMoved(&_DstRect, (_pSrcRect), (_pDstPoint)->x, (_pDstPoint)->y); \
vboxVDbgDoDumpRcRectByRc("<=="__FUNCTION__" Src: ", (_pSrcRc), (_pSrcRect), "\n"); \
vboxVDbgDoDumpRcRectByRc("<=="__FUNCTION__" Dst: ", (_pDstRc), &_DstRect, "\n"); \
} \
} while (0)
#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Blt) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pSrcAlloc)->pRc) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pDstAlloc)->pRc) \
) \
{ \
vboxVDbgDoDumpRcRectByAlloc("==>"__FUNCTION__" Src: ", (_pSrcAlloc), (_pSrcSurf), (_pSrcRect), "\n"); \
vboxVDbgDoDumpRcRectByAlloc("==>"__FUNCTION__" Dst: ", (_pDstAlloc), (_pDstSurf), (_pDstRect), "\n"); \
} \
} while (0)
#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Blt) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pSrcAlloc)->pRc) \
|| VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pDstAlloc)->pRc) \
) \
{ \
vboxVDbgDoDumpRcRectByAlloc("<=="__FUNCTION__" Src: ", (_pSrcAlloc), (_pSrcSurf), (_pSrcRect), "\n"); \
vboxVDbgDoDumpRcRectByAlloc("<=="__FUNCTION__" Dst: ", (_pDstAlloc), (_pDstSurf), (_pDstRect), "\n"); \
} \
} while (0)
#define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(RtSynch)) \
{ \
vboxVDbgDoDumpSurfRect("== "__FUNCTION__" Bb:\n", (_pBbSurf), NULL, "\n", true); \
} \
} while (0)
#define VBOXVDBG_DUMP_FLUSH(_pDevice) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Flush)) \
{ \
vboxVDbgDoDumpRt("== "__FUNCTION__": RenderTarget Dump\n", (_pDevice), "\n"); \
}\
} while (0)
#define VBOXVDBG_DUMP_LOCK_ST(_pData) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Lock) \
|| VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \
) \
{ \
vboxVDbgDoDumpLockSurfTex("== "__FUNCTION__": ", (_pData), "\n", VBOXVDBG_IS_DUMP_ALLOWED(Lock)); \
} \
} while (0)
#define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \
) \
{ \
vboxVDbgDoDumpUnlockSurfTex("== "__FUNCTION__": ", (_pData), "\n", true); \
} \
} while (0)
#else
#define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { } while (0)
#define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { } while (0)
#define VBOXVDBG_DUMP_SETTEXTURE(_pRc) do { } while (0)
#define VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { } while (0)
#define VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { } while (0)
#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { } while (0)
#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { } while (0)
#define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { } while (0)
#define VBOXVDBG_DUMP_FLUSH(_pDevice) do { } while (0)
#define VBOXVDBG_DUMP_LOCK_ST(_pData) do { } while (0)
#define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { } while (0)
#define VBOXVDBG_BREAK_SHARED(_pRc) do { } while (0)
#endif
#endif /* #ifndef ___VBoxDispDbg_h__ */