9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBoxVideo Display D3D User mode dll
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * available from http://www.virtualbox.org. This file is free software;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * General Public License (GPL) as published by the Free Software
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOG_LOGGER vboxVDbgInternalLogLogger
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOGREL_LOGGER vboxVDbgInternalLogRelLogger
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOGFLOW_LOGGER vboxVDbgInternalLogFlowLogger
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#include "../../common/VBoxVideoLog.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* debugging configuration flags */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* generic debugging facilities & extra data checks */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* for some reason when debugging with VirtualKD, user-mode DbgPrint's are discarded
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * the workaround so far is to pass the log info to the kernel driver and DbgPrint'ed from there,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * which is enabled by this define */
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync//# define VBOXWDDMDISP_DEBUG_PRINTDRV
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* use OutputDebugString */
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync//# define VBOXWDDMDISP_DEBUG_PRINT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* adds vectored exception handler to be able to catch non-debug UM exceptions in kernel debugger */
537fd29f53a2dbf9a93091bb52a3ddb7f16ba97evboxsync//# define VBOXWDDMDISP_DEBUG_VEHANDLER
40bd0fc692d21a6d579862d7ccdc20c2ccf361a5vboxsync/* disable shared resource creation with wine */
40bd0fc692d21a6d579862d7ccdc20c2ccf361a5vboxsync//# define VBOXWDDMDISP_DEBUG_NOSHARED
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync//# define VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync//# define VBOXWDDMDISP_DEBUG_TIMER
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync/* debug config vars */
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsyncextern DWORD g_VBoxVDbgFSkipCheckTexBltDwmWndUpdate;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern struct VBOXWDDMDISP_DEVICE *g_VBoxVDbgInternalDevice;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern struct VBOXWDDMDISP_RESOURCE *g_VBoxVDbgInternalRc;
dc4c9f05c58012e8b1f0bfdd12b2e14fc2f228devboxsync# endif /* #ifndef IN_VBOXCRHGSMI */
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync/* log enable flags */
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#if defined(LOG_TO_BACKDOOR_DRV) || defined(VBOXWDDMDISP_DEBUG_PRINTDRV)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync# define DbgPrintDrv(_m) do { vboxDispLogDrvF _m; } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync# define DbgPrintDrvRel(_m) do { vboxDispLogDrvF _m; } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync# define DbgPrintDrvFlow(_m) do { vboxDispLogDrvF _m; } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintUsr(_m) do { vboxDispLogDbgPrintF _m; } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintUsrRel(_m) do { vboxDispLogDbgPrintF _m; } while (0)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync# define DbgPrintUsrFlow(_m) do { vboxDispLogDbgPrintF _m; } while (0)
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLog(_p) if (g_VBoxVDbgFLog) { _p }
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLogFlow(_p) if (g_VBoxVDbgFLogFlow) { _p }
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLogRel(_p) if (g_VBoxVDbgFLogRel) { _p }
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLogRel(_p) do { _p } while (0)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync/* @todo: remove these from the code and from here */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
60f8621fe04135087a54770ae9eff81fb0dae278vboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
60f8621fe04135087a54770ae9eff81fb0dae278vboxsync#define VBOXVDBG_CHECK_EXE(_pszName) (vboxVDbgDoCheckExe(_pszName))
60f8621fe04135087a54770ae9eff81fb0dae278vboxsync#define VBOXVDBG_IS_DWM() (!!(g_VBoxVDbgFIsDwm >=0 ? g_VBoxVDbgFIsDwm : (g_VBoxVDbgFIsDwm = VBOXVDBG_CHECK_EXE("dwm.exe"))))
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(LOG_TO_BACKDOOR_DRV)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncstatic DECLINLINE(const char*) vboxDispLogD3DRcType(D3DRESOURCETYPE enmType)
384478d3896257fbce9ceb8c01e74040b969e6d7vboxsyncVBOXDISPMPLOGGER_DECL(void) VBoxDispMpLoggerDumpD3DCAPS9(struct _D3DCAPS9 *pCaps);
384478d3896257fbce9ceb8c01e74040b969e6d7vboxsync# define vboxDispDumpD3DCAPS9(_pCaps) do { VBoxDispMpLoggerDumpD3DCAPS9(_pCaps); } while (0)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync# define vboxDispDumpD3DCAPS9(_pCaps) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXWDDMDISP_ALLOCATION *PVBOXWDDMDISP_ALLOCATION;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXWDDMDISP_RESOURCE *PVBOXWDDMDISP_RESOURCE;
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPEF_DONT_BREAK_ON_CONTENTS 0x00000004
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPEF_BREAK_ON_FLOW 0x00000008
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_FLAGS_IS_SETANY(_fFlags, _Value) (((_fFlags) & (_Value)) != 0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_FLAGS_IS_SET(_fFlags, _Value) (((_fFlags) & (_Value)) == (_Value))
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_FLAGS_IS_CLEARED(_fFlags, _Value) (((_fFlags) & (_Value)) == 0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_FLAGS_CLEAR(_fFlags, _Value) ((_fFlags) & (~(_Value)))
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_FLAGS_SET(_fFlags, _Value) ((_fFlags) | (_Value))
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPE_ENABLED(_fFlags) (VBOXVDBG_DUMP_FLAGS_IS_SETANY(_fFlags, VBOXVDBG_DUMP_TYPEF_FLOW | VBOXVDBG_DUMP_TYPEF_CONTENTS))
7de21438395845af0147c375a00fed8f172354f6vboxsync#define VBOXVDBG_DUMP_TYPE_ENABLED_FOR_INFO(_pInfo, _fFlags) ( \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync VBOXVDBG_DUMP_FLAGS_IS_CLEARED(_fFlags, VBOXVDBG_DUMP_TYPEF_SHARED_ONLY) \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync || ((_pInfo)->pAlloc && (_pInfo)->pAlloc->pRc->aAllocations[0].hSharedHandle) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPE_FLOW_ONLY(_fFlags) (VBOXVDBG_DUMP_FLAGS_IS_SET(_fFlags, VBOXVDBG_DUMP_TYPEF_FLOW) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync && VBOXVDBG_DUMP_FLAGS_IS_CLEARED(_fFlags, VBOXVDBG_DUMP_TYPEF_CONTENTS))
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPE_CONTENTS(_fFlags) (VBOXVDBG_DUMP_FLAGS_IS_SET(_fFlags, VBOXVDBG_DUMP_TYPEF_CONTENTS))
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPE_GET_FLOW_ONLY(_fFlags) ( \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_CLEAR(_fFlags, VBOXVDBG_DUMP_TYPEF_CONTENTS), \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpAllocRect(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, RECT *pRect, const char* pSuffix, DWORD fFlags);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpRcRect(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, IDirect3DResource9 *pD3DRc, RECT *pRect, const char * pSuffix, DWORD fFlags);
6902a98267d5180fb081cb5273751d0a628bf04dvboxsyncVOID vboxVDbgDoDumpLockUnlockSurfTex(const char * pPrefix, const VBOXWDDMDISP_ALLOCATION *pAlloc, const char * pSuffix, DWORD fFlags);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpRt(const char * pPrefix, struct VBOXWDDMDISP_DEVICE *pDevice, const char * pSuffix, DWORD fFlags);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpBb(const char * pPrefix, IDirect3DSwapChain9 *pSwapchainIf, const char * pSuffix, DWORD fFlags);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpFb(const char * pPrefix, IDirect3DSwapChain9 *pSwapchainIf, const char * pSuffix, DWORD fFlags);
7de21438395845af0147c375a00fed8f172354f6vboxsyncVOID vboxVDbgDoDumpSamplers(const char * pPrefix, struct VBOXWDDMDISP_DEVICE *pDevice, const char * pSuffix, DWORD fFlags);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVDbgDoPrintRect(const char * pPrefix, const RECT *pRect, const char * pSuffix);
6902a98267d5180fb081cb5273751d0a628bf04dvboxsyncvoid vboxVDbgDoPrintAlloc(const char * pPrefix, const VBOXWDDMDISP_RESOURCE *pRc, uint32_t iAlloc, const char * pSuffix);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpLockSurfTex(const char * pPrefix, const D3DDDIARG_LOCK* pData, const char * pSuffix, DWORD fFlags);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncVOID vboxVDbgDoDumpUnlockSurfTex(const char * pPrefix, const D3DDDIARG_UNLOCK* pData, const char * pSuffix, DWORD fFlags);
6902a98267d5180fb081cb5273751d0a628bf04dvboxsyncBOOL vboxVDbgDoCheckRectsMatch(const VBOXWDDMDISP_RESOURCE *pDstRc, uint32_t iDstAlloc,
6902a98267d5180fb081cb5273751d0a628bf04dvboxsync const VBOXWDDMDISP_RESOURCE *pSrcRc, uint32_t iSrcAlloc,
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsyncVOID vboxVDbgDoPrintLopLastCmd(const char* pszDesc);
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsyncHRESULT vboxVDbgTimerStart(HANDLE hTimerQueue, HANDLE *phTimer, DWORD msTimeout);
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsyncHRESULT vboxVDbgTimerStop(HANDLE hTimerQueue, HANDLE hTimer);
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync#define VBOXVDBG_IS_PID(_pid) ((_pid) == (g_VBoxVDbgPid ? g_VBoxVDbgPid : (g_VBoxVDbgPid = GetCurrentProcessId())))
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync#define VBOXVDBG_IS_DUMP_ALLOWED_PID(_pid) (((int)(_pid)) > 0 ? VBOXVDBG_IS_PID(_pid) : !VBOXVDBG_IS_PID(-((int)(_pid))))
cf5a77c331ff5d2e6851345fef307d6ceee73097vboxsync } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_FLAGS_FOR_TYPE(_type) g_VBoxVDbgFDump##_type
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_BREAK_FLAGS_FOR_TYPE(_type) g_VBoxVDbgFBreak##_type
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_CHECK_FLAGS_FOR_TYPE(_type) g_VBoxVDbgFCheck##_type
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_IS_DUMP_ALLOWED(_type) ( VBOXVDBG_DUMP_TYPE_ENABLED(VBOXVDBG_DUMP_FLAGS_FOR_TYPE(_type)) )
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_IS_BREAK_ALLOWED(_type) ( !!VBOXVDBG_BREAK_FLAGS_FOR_TYPE(_type) )
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_IS_CHECK_ALLOWED(_type) ( !!VBOXVDBG_CHECK_FLAGS_FOR_TYPE(_type) )
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync vboxVDbgPrint(("Break on shared access: Rc(0x%p), SharedHandle(0x%p)\n", (_pRc), (_pRc)->aAllocations[0].hSharedHandle)); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } while (0)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_LOOP_LAST() do { vboxVDbgLoop = 0; } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_DUMP_RECTS_INIT(_d) DWORD vboxVDbgDumpRects = _d;
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_DUMP_RECTS_FORCE() vboxVDbgDumpRects = 1;
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_DUMP_RECTS_FORCED() (!!vboxVDbgDumpRects)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_CHECK_RECTS(_opRests, _opDump, _pszOpName, _pDstRc, _iDstAlloc, _pSrcRc, _iSrcAlloc, _pDstRect, _pSrcRect) do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync if (vboxVDbgDoCheckRectsMatch(_pDstRc, _iDstAlloc, _pSrcRc, _iSrcAlloc, _pDstRect, _pSrcRect, FALSE)) { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync vboxVDbgPrint(("vboxVDbgDoCheckRectsMatch failed! The " _pszOpName " will be re-done so it can be debugged\n")); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync vboxVDbgDoPrintLopLastCmd("Don't redo the" _pszOpName); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#define VBOXVDBG_DEV_CHECK_SHARED(_pDevice, _pIsShared) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync PVBOXWDDMDISP_ALLOCATION pRtVar = (_pDevice)->apRTs[i]; \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (pRtVar->pRc->RcDesc.fFlags.SharedResource) { *(_pIsShared) = TRUE; break; } \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync for (UINT i = 0, iSampler = 0; iSampler < (_pDevice)->cSamplerTextures; ++i) { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync Assert(i < RT_ELEMENTS((_pDevice)->aSamplerTextures)); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync if (!(_pDevice)->aSamplerTextures[i]->RcDesc.fFlags.SharedResource) continue; \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#define VBOXVDBG_IS_DUMP_SHARED_ALLOWED_DEV(_pDevice, _pIsAllowed) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBOXVDBG_DEV_CHECK_SHARED(_pDevice, _pIsAllowed); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync *(_pIsAllowed) = VBOXVDBG_IS_DUMP_ALLOWED(Shared); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0)
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync#define VBOXVDBG_IS_BREAK_SHARED_ALLOWED_DEV(_pDevice, _pIsAllowed) do { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync VBOXVDBG_DEV_CHECK_SHARED(_pDevice, _pIsAllowed); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync *(_pIsAllowed) = VBOXVDBG_IS_BREAK_ALLOWED(Shared); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBOXVDBG_IS_DUMP_SHARED_ALLOWED_DEV(_pDevice, &fDumpShaded); \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpRt("==>"__FUNCTION__": Rt: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpSamplers("==>"__FUNCTION__": Sl: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBOXVDBG_IS_DUMP_SHARED_ALLOWED_DEV(_pDevice, &fDumpShaded); \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpRt("<=="__FUNCTION__": Rt: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpSamplers("<=="__FUNCTION__": Sl: ", (_pDevice), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(DrawPrim)); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync VBOXVDBG_IS_BREAK_SHARED_ALLOWED_DEV(_pDevice, &fBreakShaded); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync vboxVDbgPrint((__FUNCTION__"== Break on shared access\n")); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("== "__FUNCTION__": ", &(_pRc)->aAllocations[0], NULL, NULL, "", \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_FOR_TYPE(SetTexture) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared)); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxWddmRectMoved(&_DstRect, &SrcRect, (_pDstPoint)->x, (_pDstPoint)->y); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("==> "__FUNCTION__": Src: ", &(_pSrcRc)->aAllocations[0], NULL, &SrcRect, "", \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_FOR_TYPE(TexBlt) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared)); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("==> "__FUNCTION__": Dst: ", &(_pDstRc)->aAllocations[0], NULL, &_DstRect, "", \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_FOR_TYPE(TexBlt) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared)); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxWddmRectMoved(&_DstRect, &SrcRect, (_pDstPoint)->x, (_pDstPoint)->y); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("<== "__FUNCTION__": Src: ", &(_pSrcRc)->aAllocations[0], NULL, &SrcRect, "", \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_FOR_TYPE(TexBlt) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared)); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("<== "__FUNCTION__": Dst: ", &(_pDstRc)->aAllocations[0], NULL, &_DstRect, "", \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_FOR_TYPE(TexBlt) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared)); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_STRETCH_RECT(_type, _str, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pSrcAlloc)->pRc) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pDstAlloc)->pRc) \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync DWORD fFlags = VBOXVDBG_DUMP_FLAGS_FOR_TYPE(_type) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync && ( ((_pSrcRect) && (_pDstRect) && !memcmp((_pSrcRect), (_pDstRect), sizeof (_pDstRect))) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgPrint((_str #_type ": skipping content dump of the same rect for one surfcace\n")); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync fFlags = VBOXVDBG_DUMP_TYPE_GET_FLOW_ONLY(fFlags); \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpRcRect(_str __FUNCTION__" Src: ", (_pSrcAlloc), (_pSrcSurf), pRect, "", fFlags); \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpRcRect(_str __FUNCTION__" Dst: ", (_pDstAlloc), (_pDstSurf), pRect, "", fFlags); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(Blt, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(Blt, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_SWAPCHAIN_SYNC_ENTER(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(ScSync, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_SWAPCHAIN_SYNC_LEAVE(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(ScSync, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_IS_SKIP_DWM_WND_UPDATE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) ( \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->RcDesc.enmFormat == D3DDDIFMT_A8R8G8B8 \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->RcDesc.enmPool == D3DDDIPOOL_VIDEOMEMORY \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->RcDesc.enmFormat == D3DDDIFMT_A8R8G8B8 \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->aAllocations[0].SurfDesc.width == (_pDstRc)->aAllocations[0].SurfDesc.width \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->aAllocations[0].SurfDesc.height == (_pDstRc)->aAllocations[0].SurfDesc.height \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_CHECK_TEXBLT(_opTexBlt, _pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync if (VBOXVDBG_IS_SKIP_DWM_WND_UPDATE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint)) \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync vboxVDbgPrint(("TEXBLT: skipping check for dwm wnd update\n")); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DstRect.right = (_pDstPoint)->x + (_pSrcRect)->right - (_pSrcRect)->left; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DstRect.bottom = (_pDstPoint)->y + (_pSrcRect)->bottom - (_pSrcRect)->top; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint), \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync "TexBlt", \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CHECK_STRETCH_RECT(_type, _op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect), \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _pDstAlloc->pRc, _pDstAlloc->iAlloc, _pSrcAlloc->pRc, _pSrcAlloc->iAlloc, _pDstRect, _pSrcRect); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CHECK_BLT(_opBlt, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_CHECK_STRETCH_RECT(Blt, _opBlt, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CHECK_SWAPCHAIN_SYNC(_op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_CHECK_STRETCH_RECT(ScSync, _op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("== "__FUNCTION__" Bb:\n", NULL, (_pBbSurf), NULL, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(RtSynch)); \
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_PRESENT_ENTER(_pDevice, _pSwapchain) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (!(_pSwapchain)->fFlags.bRtReportingPresent) { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpBb("==>"__FUNCTION__" Bb:\n", (_pSwapchain)->pSwapChainIf, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentEnter)); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync PVBOXWDDMDISP_ALLOCATION pCurBb = vboxWddmSwapchainGetBb((_pSwapchain))->pAlloc; \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync HRESULT hr = vboxWddmSwapchainSurfGet(_pDevice, _pSwapchain, pCurBb, &pSurf); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("== "__FUNCTION__" Bb:\n", pCurBb, pSurf, NULL, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentEnter)); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_PRESENT_LEAVE(_pDevice, _pSwapchain) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (!(_pSwapchain)->fFlags.bRtReportingPresent) { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpFb("<=="__FUNCTION__" Fb:\n", (_pSwapchain)->pSwapChainIf, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentLeave)); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync vboxVDbgPrint(("PRESENT_LEAVE: unsupported for Rt Reporting mode\n")); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRt("== "__FUNCTION__": Rt: ", (_pDevice), "", \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync VBOXVDBG_DUMP_FLAGS_CLEAR(VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Flush), VBOXVDBG_DUMP_TYPEF_SHARED_ONLY)); \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpLockSurfTex("== "__FUNCTION__": ", (_pData), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Lock)); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } while (0)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpUnlockSurfTex("== "__FUNCTION__": ", (_pData), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Unlock)); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (g_VBoxVDbgCfgCreateSwapchainOnDdiOnce && g_VBoxVDbgInternalRc) { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync HRESULT hr = vboxWddmSwapchainCreateIfForRc(g_VBoxVDbgInternalDevice, g_VBoxVDbgInternalRc, &pSwapchain); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } while (0)
dc4c9f05c58012e8b1f0bfdd12b2e14fc2f228devboxsync# endif /* # ifndef IN_VBOXCRHGSMI */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_SETTEXTURE(_pRc) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { } while (0)
df51b4a28e2ae29259bee60f18b197c0cffacbd3vboxsync#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { } while (0)
df51b4a28e2ae29259bee60f18b197c0cffacbd3vboxsync#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { } while (0)
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync#define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { } while (0)
df51b4a28e2ae29259bee60f18b197c0cffacbd3vboxsync#define VBOXVDBG_DUMP_FLUSH(_pDevice) do { } while (0)
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVDBG_DUMP_LOCK_ST(_pData) do { } while (0)
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_PRESENT_ENTER(_pDevice, _pSwapchain) do { } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_PRESENT_LEAVE(_pDevice, _pSwapchain) do { } while (0)
4bab21dee70b962988fef2fd7f41d894a9d0011fvboxsync#define VBOXVDBG_BREAK_SHARED(_pRc) do { } while (0)
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync#define VBOXVDBG_BREAK_SHARED_DEV(_pDevice) do { } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#define VBOXVDBG_CHECK_SMSYNC(_pRc) do { } while (0)
608a833f523bca875b7b97cec1b4b5418569ea85vboxsync#define VBOXVDBG_CHECK_BLT(_opBlt, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { _opBlt; } while (0)
608a833f523bca875b7b97cec1b4b5418569ea85vboxsync#define VBOXVDBG_CHECK_TEXBLT(_opTexBlt, _pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { _opTexBlt; } while (0)
608a833f523bca875b7b97cec1b4b5418569ea85vboxsync#define VBOXVDBG_ASSERT_IS_DWM(_bDwm) do { } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CHECK_SWAPCHAIN_SYNC(_op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { _op; } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CREATE_CHECK_SWAPCHAIN() do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /* #ifndef ___VBoxDispDbg_h__ */