VBoxDispDbg.h revision 6902a98267d5180fb081cb5273751d0a628bf04d
/* $Id$ */
/** @file
* VBoxVideo Display D3D User mode dll
*/
/*
* Copyright (C) 2011-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef ___VBoxDispDbg_h__
#define ___VBoxDispDbg_h__
#define VBOX_VIDEO_LOG_NAME "VBoxD3D"
#define VBOX_VIDEO_LOG_FN_FMT "%s"
#include "../../common/VBoxVideoLog.h"
#ifdef DEBUG
/* debugging configuration flags */
/* generic debugging facilities & extra data checks */
# define VBOXWDDMDISP_DEBUG
# if defined(DEBUG_misha) || defined(DEBUG_leo)
/* for some reason when debugging with VirtualKD, user-mode DbgPrint's are discarded
* the workaround so far is to pass the log info to the kernel driver and DbgPrint'ed from there,
* which is enabled by this define */
//# define VBOXWDDMDISP_DEBUG_PRINTDRV
/* use OutputDebugString */
//# define VBOXWDDMDISP_DEBUG_PRINT
/* adds vectored exception handler to be able to catch non-debug UM exceptions in kernel debugger */
//# define VBOXWDDMDISP_DEBUG_VEHANDLER
/* disable shared resource creation with wine */
//# define VBOXWDDMDISP_DEBUG_NOSHARED
//# define VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
//# define VBOXWDDMDISP_DEBUG_TIMER
# endif
/* log enable flags */
extern DWORD g_VBoxVDbgFLogRel;
extern DWORD g_VBoxVDbgFLog;
extern DWORD g_VBoxVDbgFLogFlow;
# ifndef IN_VBOXCRHGSMI
/* debug config vars */
extern DWORD g_VBoxVDbgFDumpSetTexture;
extern DWORD g_VBoxVDbgFDumpDrawPrim;
extern DWORD g_VBoxVDbgFDumpTexBlt;
extern DWORD g_VBoxVDbgFDumpBlt;
extern DWORD g_VBoxVDbgFDumpRtSynch;
extern DWORD g_VBoxVDbgFDumpFlush;
extern DWORD g_VBoxVDbgFDumpShared;
extern DWORD g_VBoxVDbgFDumpLock;
extern DWORD g_VBoxVDbgFDumpUnlock;
extern DWORD g_VBoxVDbgFDumpPresentEnter;
extern DWORD g_VBoxVDbgFDumpPresentLeave;
extern DWORD g_VBoxVDbgFDumpScSync;
extern DWORD g_VBoxVDbgFBreakShared;
extern DWORD g_VBoxVDbgFBreakDdi;
extern DWORD g_VBoxVDbgFCheckSysMemSync;
extern DWORD g_VBoxVDbgFCheckBlt;
extern DWORD g_VBoxVDbgFCheckTexBlt;
extern DWORD g_VBoxVDbgFCheckScSync;
extern DWORD g_VBoxVDbgCfgMaxDirectRts;
extern struct VBOXWDDMDISP_DEVICE *g_VBoxVDbgInternalDevice;
extern struct VBOXWDDMDISP_RESOURCE *g_VBoxVDbgInternalRc;
# endif /* #ifndef IN_VBOXCRHGSMI */
#endif
#ifdef VBOXWDDMDISP_DEBUG_VEHANDLER
void vboxVDbgVEHandlerRegister();
void vboxVDbgVEHandlerUnregister();
#endif
#if defined(LOG_TO_BACKDOOR_DRV) || defined(VBOXWDDMDISP_DEBUG_PRINTDRV)
#else
# define DbgPrintDrv(_m) do { } while (0)
# define DbgPrintDrvRel(_m) do { } while (0)
# define DbgPrintDrvFlow(_m) do { } while (0)
#endif
#ifdef VBOXWDDMDISP_DEBUG_PRINT
#else
# define DbgPrintUsr(_m) do { } while (0)
# define DbgPrintUsrRel(_m) do { } while (0)
# define DbgPrintUsrFlow(_m) do { } while (0)
#endif
#ifdef VBOXWDDMDISP_DEBUG
#else
#define vboxVDbgInternalLog(_p) do {} while (0)
#define vboxVDbgInternalLogFlow(_p) do {} while (0)
#endif
/* @todo: remove these from the code and from here */
#define vboxVDbgInternalLogLogger(_m) do { \
DbgPrintUsr(_m); \
DbgPrintDrv(_m); \
); \
} while (0)
#define vboxVDbgInternalLogFlowLogger(_m) do { \
DbgPrintUsrFlow(_m); \
DbgPrintDrvFlow(_m); \
); \
} while (0)
#define vboxVDbgInternalLogRelLogger(_m) do { \
DbgPrintUsrRel(_m); \
DbgPrintDrvRel(_m); \
); \
} while (0)
#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
extern DWORD g_VBoxVDbgPid;
extern LONG g_VBoxVDbgFIsDwm;
#define VBOXVDBG_IS_DWM() (!!(g_VBoxVDbgFIsDwm >=0 ? g_VBoxVDbgFIsDwm : (g_VBoxVDbgFIsDwm = VBOXVDBG_CHECK_EXE("dwm.exe"))))
#endif
#if defined(VBOXWDDMDISP_DEBUG) || defined(LOG_TO_BACKDOOR_DRV)
#define VBOXVDBG_STRCASE(_t) \
#define VBOXVDBG_STRCASE_UNKNOWN() \
default: Assert(0); return "Unknown";
{
switch (enmType)
{
}
}
#include "VBoxDispMpLogger.h"
void vboxDispLogDrvF(char * szString, ...);
#else
# define vboxDispDumpD3DCAPS9(_pCaps) do { } while (0)
#endif
#ifdef VBOXWDDMDISP_DEBUG
void vboxDispLogDbgPrintF(char * szString, ...);
# ifndef IN_VBOXCRHGSMI
typedef struct VBOXWDDMDISP_ALLOCATION *PVBOXWDDMDISP_ALLOCATION;
typedef struct VBOXWDDMDISP_RESOURCE *PVBOXWDDMDISP_RESOURCE;
#define VBOXVDBG_DUMP_TYPEF_FLOW 0x00000001
#define VBOXVDBG_DUMP_TYPEF_CONTENTS 0x00000002
#define VBOXVDBG_DUMP_TYPEF_DONT_BREAK_ON_CONTENTS 0x00000004
#define VBOXVDBG_DUMP_TYPEF_BREAK_ON_FLOW 0x00000008
#define VBOXVDBG_DUMP_TYPEF_SHARED_ONLY 0x00000010
#define VBOXVDBG_DUMP_TYPE_ENABLED(_fFlags) (VBOXVDBG_DUMP_FLAGS_IS_SETANY(_fFlags, VBOXVDBG_DUMP_TYPEF_FLOW | VBOXVDBG_DUMP_TYPEF_CONTENTS))
&& ( \
))
#define VBOXVDBG_DUMP_TYPE_FLOW_ONLY(_fFlags) (VBOXVDBG_DUMP_FLAGS_IS_SET(_fFlags, VBOXVDBG_DUMP_TYPEF_FLOW) \
#define VBOXVDBG_DUMP_TYPE_CONTENTS(_fFlags) (VBOXVDBG_DUMP_FLAGS_IS_SET(_fFlags, VBOXVDBG_DUMP_TYPEF_CONTENTS))
#define VBOXVDBG_DUMP_TYPE_GET_FLOW_ONLY(_fFlags) ( \
)
VOID vboxVDbgDoDumpAllocRect(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, RECT *pRect, const char* pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpRcRect(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, IDirect3DResource9 *pD3DRc, RECT *pRect, const char * pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpLockUnlockSurfTex(const char * pPrefix, const VBOXWDDMDISP_ALLOCATION *pAlloc, const char * pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpRt(const char * pPrefix, struct VBOXWDDMDISP_DEVICE *pDevice, const char * pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpBb(const char * pPrefix, IDirect3DSwapChain9 *pSwapchainIf, const char * pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpFb(const char * pPrefix, IDirect3DSwapChain9 *pSwapchainIf, const char * pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpSamplers(const char * pPrefix, struct VBOXWDDMDISP_DEVICE *pDevice, const char * pSuffix, DWORD fFlags);
void vboxVDbgDoPrintAlloc(const char * pPrefix, const VBOXWDDMDISP_RESOURCE *pRc, uint32_t iAlloc, const char * pSuffix);
VOID vboxVDbgDoDumpLockSurfTex(const char * pPrefix, const D3DDDIARG_LOCK* pData, const char * pSuffix, DWORD fFlags);
VOID vboxVDbgDoDumpUnlockSurfTex(const char * pPrefix, const D3DDDIARG_UNLOCK* pData, const char * pSuffix, DWORD fFlags);
#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_ASSERT_IS_DWM(_bDwm) do { \
} while (0)
#define VBOXVDBG_IS_DUMP_ALLOWED(_type) ( VBOXVDBG_DUMP_TYPE_ENABLED(VBOXVDBG_DUMP_FLAGS_FOR_TYPE(_type)) )
#define VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) (\
)
#define VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc) (\
)
#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_BREAK_DDI() do { \
if (VBOXVDBG_IS_BREAK_ALLOWED(Ddi)) { \
AssertFailed(); \
} \
} while (0)
#define VBOXVDBG_LOOP_LAST() do { vboxVDbgLoop = 0; } while (0)
#define VBOXVDBG_LOOP(_op) do { \
do { \
_op; \
} while (vboxVDbgLoop); \
} while (0)
#define VBOXVDBG_CHECK_SMSYNC(_pRc) do { \
if (VBOXVDBG_IS_CHECK_ALLOWED(SysMemSync)) { \
} \
} while (0)
#define VBOXVDBG_DUMP_RECTS_FORCED() (!!vboxVDbgDumpRects)
#define VBOXVDBG_CHECK_RECTS(_opRests, _opDump, _pszOpName, _pDstRc, _iDstAlloc, _pSrcRc, _iSrcAlloc, _pDstRect, _pSrcRect) do { \
VBOXVDBG_DUMP_RECTS_INIT(0); \
_opRests; \
if (vboxVDbgDoCheckRectsMatch(_pDstRc, _iDstAlloc, _pSrcRc, _iSrcAlloc, _pDstRect, _pSrcRect, FALSE)) { \
VBOXVDBG_LOOP_LAST(); \
} \
else \
{ \
vboxVDbgPrint(("vboxVDbgDoCheckRectsMatch failed! The " _pszOpName " will be re-done so it can be debugged\n")); \
Assert(0); \
} \
_opDump; \
); \
} while (0)
*(_pIsShared) = FALSE; \
} \
if (!*(_pIsShared)) { \
if (!(_pDevice)->aSamplerTextures[i]) continue; \
++iSampler; \
*(_pIsShared) = TRUE; break; \
} \
} \
} while (0)
if (*(_pIsAllowed)) \
{ \
} \
} while (0)
if (*(_pIsAllowed)) \
{ \
} \
} while (0)
#define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { \
if (fDumpShaded \
|| VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
{ \
vboxVDbgDoDumpRt("==>"__FUNCTION__": Rt: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
vboxVDbgDoDumpSamplers("==>"__FUNCTION__": Sl: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
}\
} while (0)
#define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { \
if (fDumpShaded \
|| VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
{ \
vboxVDbgDoDumpRt("<=="__FUNCTION__": Rt: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
vboxVDbgDoDumpSamplers("<=="__FUNCTION__": Sl: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
}\
} while (0)
#define VBOXVDBG_BREAK_SHARED_DEV(_pDevice) do { \
if (fBreakShaded) { \
AssertFailed(); \
} \
} while (0)
#define VBOXVDBG_DUMP_SETTEXTURE(_pRc) do { \
) \
{ \
} \
} while (0)
if (VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
) \
{ \
vboxVDbgDoDumpRcRect("==> "__FUNCTION__": Src: ", &(_pSrcRc)->aAllocations[0], NULL, &SrcRect, "", \
vboxVDbgDoDumpRcRect("==> "__FUNCTION__": Dst: ", &(_pDstRc)->aAllocations[0], NULL, &_DstRect, "", \
} \
} while (0)
if (VBOXVDBG_DUMP_RECTS_FORCED() \
) \
{ \
vboxVDbgDoDumpRcRect("<== "__FUNCTION__": Src: ", &(_pSrcRc)->aAllocations[0], NULL, &SrcRect, "", \
vboxVDbgDoDumpRcRect("<== "__FUNCTION__": Dst: ", &(_pDstRc)->aAllocations[0], NULL, &_DstRect, "", \
} \
} while (0)
#define VBOXVDBG_DUMP_STRETCH_RECT(_type, _str, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(_type) \
) \
{ \
if (VBOXVDBG_DUMP_TYPE_CONTENTS(fFlags) && \
)) ) \
{ \
} \
if (_pSrcRect) \
{ \
} \
else \
if (_pDstRect) \
{ \
} \
else \
} \
} while (0)
#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
VBOXVDBG_DUMP_STRETCH_RECT(Blt, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
VBOXVDBG_DUMP_STRETCH_RECT(Blt, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
#define VBOXVDBG_DUMP_SWAPCHAIN_SYNC_ENTER(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
VBOXVDBG_DUMP_STRETCH_RECT(ScSync, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
#define VBOXVDBG_DUMP_SWAPCHAIN_SYNC_LEAVE(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
VBOXVDBG_DUMP_STRETCH_RECT(ScSync, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
&& ( \
VBOXVDBG_IS_DWM() \
) \
)
if (VBOXVDBG_IS_CHECK_ALLOWED(TexBlt)) { \
{ \
vboxVDbgPrint(("TEXBLT: skipping check for dwm wnd update\n")); \
} \
else \
{ \
_opTexBlt ,\
"TexBlt", \
break; \
} \
} \
VBOXVDBG_DUMP_RECTS_INIT(0); \
} while (0)
#define VBOXVDBG_CHECK_STRETCH_RECT(_type, _op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
if (VBOXVDBG_IS_CHECK_ALLOWED(_type)) { \
VBOXVDBG_DUMP_STRETCH_RECT(_type, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
_op ,\
VBOXVDBG_DUMP_STRETCH_RECT(_type, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect), \
#_type , \
} \
else \
{ \
VBOXVDBG_DUMP_RECTS_INIT(0); \
VBOXVDBG_DUMP_STRETCH_RECT(_type, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
_op;\
VBOXVDBG_DUMP_STRETCH_RECT(_type, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
} \
} while (0)
#define VBOXVDBG_CHECK_BLT(_opBlt, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
VBOXVDBG_CHECK_STRETCH_RECT(Blt, _opBlt, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
#define VBOXVDBG_CHECK_SWAPCHAIN_SYNC(_op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
VBOXVDBG_CHECK_STRETCH_RECT(ScSync, _op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
#define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(RtSynch)) \
{ \
vboxVDbgDoDumpRcRect("== "__FUNCTION__" Bb:\n", NULL, (_pBbSurf), NULL, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(RtSynch)); \
} \
} while (0)
if (VBOXVDBG_IS_DUMP_ALLOWED(PresentEnter)) { \
vboxVDbgDoDumpBb("==>"__FUNCTION__" Bb:\n", (_pSwapchain)->pSwapChainIf, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentEnter)); \
} \
else { \
vboxVDbgDoDumpRcRect("== "__FUNCTION__" Bb:\n", pCurBb, pSurf, NULL, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentEnter)); \
} \
} \
} while (0)
if (VBOXVDBG_IS_DUMP_ALLOWED(PresentLeave)) { \
vboxVDbgDoDumpFb("<=="__FUNCTION__" Fb:\n", (_pSwapchain)->pSwapChainIf, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentLeave)); \
} \
else { \
vboxVDbgPrint(("PRESENT_LEAVE: unsupported for Rt Reporting mode\n")); \
} \
} \
} while (0)
#define VBOXVDBG_DUMP_FLUSH(_pDevice) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Flush)) \
{ \
}\
} while (0)
#define VBOXVDBG_DUMP_LOCK_ST(_pData) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Lock) \
) \
{ \
vboxVDbgDoDumpLockSurfTex("== "__FUNCTION__": ", (_pData), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Lock)); \
} \
} while (0)
#define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { \
if (VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \
) \
{ \
vboxVDbgDoDumpUnlockSurfTex("== "__FUNCTION__": ", (_pData), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Unlock)); \
} \
} while (0)
#define VBOXVDBG_CREATE_CHECK_SWAPCHAIN() do { \
HRESULT hr = vboxWddmSwapchainCreateIfForRc(g_VBoxVDbgInternalDevice, g_VBoxVDbgInternalRc, &pSwapchain); \
g_VBoxVDbgInternalRc = NULL; \
} \
} while (0)
# endif /* # ifndef IN_VBOXCRHGSMI */
#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_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)
#define VBOXVDBG_BREAK_SHARED_DEV(_pDevice) do { } while (0)
#define VBOXVDBG_BREAK_DDI() do { } while (0)
#define VBOXVDBG_CHECK_SMSYNC(_pRc) do { } while (0)
#define VBOXVDBG_CHECK_BLT(_opBlt, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { _opBlt; } while (0)
#define VBOXVDBG_CHECK_TEXBLT(_opTexBlt, _pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { _opTexBlt; } while (0)
#define VBOXVDBG_ASSERT_IS_DWM(_bDwm) do { } while (0)
#define VBOXVDBG_CHECK_SWAPCHAIN_SYNC(_op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { _op; } while (0)
#define VBOXVDBG_CREATE_CHECK_SWAPCHAIN() do { } while (0)
#endif
#endif /* #ifndef ___VBoxDispDbg_h__ */