9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBoxVideo Display D3D User mode dll
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync *
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.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifndef ___VBoxDispDbg_h__
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define ___VBoxDispDbg_h__
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOG_NAME "VBoxD3D"
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOG_LOGGER vboxVDbgInternalLogLogger
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOGREL_LOGGER vboxVDbgInternalLogRelLogger
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOGFLOW_LOGGER vboxVDbgInternalLogFlowLogger
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define VBOX_VIDEO_LOG_FN_FMT "%s"
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#include "../../common/VBoxVideoLog.h"
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef DEBUG
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* debugging configuration flags */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* generic debugging facilities & extra data checks */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define VBOXWDDMDISP_DEBUG
6ff14916eae1a5211d0fd98247f489cc0bd0959bvboxsync# if defined(DEBUG_misha) || defined(DEBUG_leo)
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
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync//# define VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync//# define VBOXWDDMDISP_DEBUG_TIMER
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# endif
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
dc4c9f05c58012e8b1f0bfdd12b2e14fc2f228devboxsync# ifndef IN_VBOXCRHGSMI
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync/* debug config vars */
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpSetTexture;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpDrawPrim;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpTexBlt;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpBlt;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpRtSynch;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpFlush;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpShared;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpLock;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFDumpUnlock;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgFDumpPresentEnter;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgFDumpPresentLeave;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgFDumpScSync;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFBreakShared;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsyncextern DWORD g_VBoxVDbgFBreakDdi;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsyncextern DWORD g_VBoxVDbgFCheckSysMemSync;
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsyncextern DWORD g_VBoxVDbgFCheckBlt;
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsyncextern DWORD g_VBoxVDbgFCheckTexBlt;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgFCheckScSync;
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsyncextern DWORD g_VBoxVDbgFSkipCheckTexBltDwmWndUpdate;
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgCfgMaxDirectRts;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgCfgForceDummyDevCreate;
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern struct VBOXWDDMDISP_DEVICE *g_VBoxVDbgInternalDevice;
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern struct VBOXWDDMDISP_RESOURCE *g_VBoxVDbgInternalRc;
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsyncextern DWORD g_VBoxVDbgCfgCreateSwapchainOnDdiOnce;
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
dc4c9f05c58012e8b1f0bfdd12b2e14fc2f228devboxsync# endif /* #ifndef IN_VBOXCRHGSMI */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync/* log enable flags */
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsyncextern DWORD g_VBoxVDbgFLogRel;
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsyncextern DWORD g_VBoxVDbgFLog;
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsyncextern DWORD g_VBoxVDbgFLogFlow;
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync#endif
362dc4fd9bc75c6b08dfe5460f2ce774bde8d6dfvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOXWDDMDISP_DEBUG_VEHANDLER
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVDbgVEHandlerRegister();
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVDbgVEHandlerUnregister();
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
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#else
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintDrv(_m) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintDrvRel(_m) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintDrvFlow(_m) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOXWDDMDISP_DEBUG_PRINT
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)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#else
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintUsr(_m) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintUsrRel(_m) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# define DbgPrintUsrFlow(_m) do { } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
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#else
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLog(_p) do {} while (0)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLogFlow(_p) do {} while (0)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define vboxVDbgInternalLogRel(_p) do { _p } while (0)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#endif
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync/* @todo: remove these from the code and from here */
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define vboxVDbgPrint(_m) LOG_EXACT(_m)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define vboxVDbgPrintF(_m) LOGF_EXACT(_m)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define vboxVDbgPrintR(_m) LOGREL_EXACT(_m)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define vboxVDbgInternalLogLogger(_m) do { \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync vboxVDbgInternalLog( \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync Log(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync DbgPrintUsr(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync DbgPrintDrv(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync ); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define vboxVDbgInternalLogFlowLogger(_m) do { \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync vboxVDbgInternalLogFlow( \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync LogFlow(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync DbgPrintUsrFlow(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync DbgPrintDrvFlow(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync ); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#define vboxVDbgInternalLogRelLogger(_m) do { \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync vboxVDbgInternalLogRel( \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync LogRel(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync DbgPrintUsrRel(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync DbgPrintDrvRel(_m); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync ); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
60f8621fe04135087a54770ae9eff81fb0dae278vboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
60f8621fe04135087a54770ae9eff81fb0dae278vboxsyncextern DWORD g_VBoxVDbgPid;
60f8621fe04135087a54770ae9eff81fb0dae278vboxsyncextern LONG g_VBoxVDbgFIsDwm;
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"))))
60f8621fe04135087a54770ae9eff81fb0dae278vboxsyncBOOL vboxVDbgDoCheckExe(const char * pszName);
60f8621fe04135087a54770ae9eff81fb0dae278vboxsync#endif
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#if defined(VBOXWDDMDISP_DEBUG) || defined(LOG_TO_BACKDOOR_DRV)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_STRCASE(_t) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync case _t: return #_t;
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_STRCASE_UNKNOWN() \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync default: Assert(0); return "Unknown";
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncstatic DECLINLINE(const char*) vboxDispLogD3DRcType(D3DRESOURCETYPE enmType)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync{
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync switch (enmType)
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync {
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_SURFACE);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_VOLUME);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_TEXTURE);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_VOLUMETEXTURE);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_CUBETEXTURE);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_VERTEXBUFFER);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE(D3DRTYPE_INDEXBUFFER);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_STRCASE_UNKNOWN();
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync }
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync}
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync
384478d3896257fbce9ceb8c01e74040b969e6d7vboxsync#include "VBoxDispMpLogger.h"
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
384478d3896257fbce9ceb8c01e74040b969e6d7vboxsyncVBOXDISPMPLOGGER_DECL(void) VBoxDispMpLoggerDumpD3DCAPS9(struct _D3DCAPS9 *pCaps);
384478d3896257fbce9ceb8c01e74040b969e6d7vboxsync
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsyncvoid vboxDispLogDrvF(char * szString, ...);
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync
384478d3896257fbce9ceb8c01e74040b969e6d7vboxsync# define vboxDispDumpD3DCAPS9(_pCaps) do { VBoxDispMpLoggerDumpD3DCAPS9(_pCaps); } while (0)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#else
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync# define vboxDispDumpD3DCAPS9(_pCaps) do { } while (0)
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#endif
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync#ifdef VBOXWDDMDISP_DEBUG
706ec8d33965b04fc59fb0b1b0981b81ae23600dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxDispLogDbgPrintF(char * szString, ...);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
dc4c9f05c58012e8b1f0bfdd12b2e14fc2f228devboxsync# ifndef IN_VBOXCRHGSMI
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXWDDMDISP_ALLOCATION *PVBOXWDDMDISP_ALLOCATION;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXWDDMDISP_RESOURCE *PVBOXWDDMDISP_RESOURCE;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPEF_FLOW 0x00000001
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPEF_CONTENTS 0x00000002
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPEF_DONT_BREAK_ON_CONTENTS 0x00000004
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_DUMP_TYPEF_BREAK_ON_FLOW 0x00000008
7de21438395845af0147c375a00fed8f172354f6vboxsync#define VBOXVDBG_DUMP_TYPEF_SHARED_ONLY 0x00000010
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync
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
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) ( \
7de21438395845af0147c375a00fed8f172354f6vboxsync VBOXVDBG_DUMP_TYPE_ENABLED(_fFlags) \
7de21438395845af0147c375a00fed8f172354f6vboxsync && ( \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync VBOXVDBG_DUMP_FLAGS_IS_CLEARED(_fFlags, VBOXVDBG_DUMP_TYPEF_SHARED_ONLY) \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync || ((_pInfo)->pAlloc && (_pInfo)->pAlloc->pRc->aAllocations[0].hSharedHandle) \
7de21438395845af0147c375a00fed8f172354f6vboxsync ))
7de21438395845af0147c375a00fed8f172354f6vboxsync
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_SET( \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_CLEAR(_fFlags, VBOXVDBG_DUMP_TYPEF_CONTENTS), \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_TYPEF_FLOW) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync )
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync
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);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
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);
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
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);
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
6902a98267d5180fb081cb5273751d0a628bf04dvboxsyncBOOL vboxVDbgDoCheckRectsMatch(const VBOXWDDMDISP_RESOURCE *pDstRc, uint32_t iDstAlloc,
6902a98267d5180fb081cb5273751d0a628bf04dvboxsync const VBOXWDDMDISP_RESOURCE *pSrcRc, uint32_t iSrcAlloc,
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync const RECT *pDstRect,
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync const RECT *pSrcRect,
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync BOOL fBreakOnMismatch);
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsyncVOID vboxVDbgDoPrintLopLastCmd(const char* pszDesc);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsyncHRESULT vboxVDbgTimerStart(HANDLE hTimerQueue, HANDLE *phTimer, DWORD msTimeout);
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsyncHRESULT vboxVDbgTimerStop(HANDLE hTimerQueue, HANDLE hTimer);
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync
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))))
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync
cf5a77c331ff5d2e6851345fef307d6ceee73097vboxsync#define VBOXVDBG_ASSERT_IS_DWM(_bDwm) do { \
cf5a77c331ff5d2e6851345fef307d6ceee73097vboxsync Assert((!VBOXVDBG_IS_DWM()) == (!(_bDwm))); \
cf5a77c331ff5d2e6851345fef307d6ceee73097vboxsync } while (0)
cf5a77c331ff5d2e6851345fef307d6ceee73097vboxsync
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)) )
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_IS_BREAK_ALLOWED(_type) ( !!VBOXVDBG_BREAK_FLAGS_FOR_TYPE(_type) )
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync#define VBOXVDBG_IS_CHECK_ALLOWED(_type) ( !!VBOXVDBG_CHECK_FLAGS_FOR_TYPE(_type) )
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync#define VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) (\
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync (_pRc)->RcDesc.fFlags.SharedResource \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync && VBOXVDBG_IS_DUMP_ALLOWED(Shared) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync )
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc) (\
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync (_pRc)->RcDesc.fFlags.SharedResource \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync && VBOXVDBG_IS_BREAK_ALLOWED(Shared) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync )
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVDBG_BREAK_SHARED(_pRc) do { \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync if (VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc)) { \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync vboxVDbgPrint(("Break on shared access: Rc(0x%p), SharedHandle(0x%p)\n", (_pRc), (_pRc)->aAllocations[0].hSharedHandle)); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync AssertFailed(); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } while (0)
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define VBOXVDBG_BREAK_DDI() do { \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync if (VBOXVDBG_IS_BREAK_ALLOWED(Ddi)) { \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync AssertFailed(); \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync } \
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync } while (0)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_LOOP_LAST() do { vboxVDbgLoop = 0; } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_LOOP(_op) do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DWORD vboxVDbgLoop = 1; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _op; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (vboxVDbgLoop); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#define VBOXVDBG_CHECK_SMSYNC(_pRc) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (VBOXVDBG_IS_CHECK_ALLOWED(SysMemSync)) { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync vboxWddmDbgRcSynchMemCheck((_pRc)); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
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
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_CHECK_RECTS(_opRests, _opDump, _pszOpName, _pDstRc, _iDstAlloc, _pSrcRc, _iSrcAlloc, _pDstRect, _pSrcRect) do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_LOOP(\
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_RECTS_INIT(0); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _opRests; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync if (vboxVDbgDoCheckRectsMatch(_pDstRc, _iDstAlloc, _pSrcRc, _iSrcAlloc, _pDstRect, _pSrcRect, FALSE)) { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_LOOP_LAST(); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync else \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_RECTS_FORCE(); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync vboxVDbgPrint(("vboxVDbgDoCheckRectsMatch failed! The " _pszOpName " will be re-done so it can be debugged\n")); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync vboxVDbgDoPrintLopLastCmd("Don't redo the" _pszOpName); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync Assert(0); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _opDump; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync ); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#define VBOXVDBG_DEV_CHECK_SHARED(_pDevice, _pIsShared) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync *(_pIsShared) = FALSE; \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync for (UINT i = 0; i < (_pDevice)->cRTs; ++i) { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync PVBOXWDDMDISP_ALLOCATION pRtVar = (_pDevice)->apRTs[i]; \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (pRtVar->pRc->RcDesc.fFlags.SharedResource) { *(_pIsShared) = TRUE; break; } \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync if (!*(_pIsShared)) { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync for (UINT i = 0, iSampler = 0; iSampler < (_pDevice)->cSamplerTextures; ++i) { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync Assert(i < RT_ELEMENTS((_pDevice)->aSamplerTextures)); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync if (!(_pDevice)->aSamplerTextures[i]) continue; \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync ++iSampler; \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync if (!(_pDevice)->aSamplerTextures[i]->RcDesc.fFlags.SharedResource) continue; \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync *(_pIsShared) = TRUE; break; \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#define VBOXVDBG_IS_DUMP_SHARED_ALLOWED_DEV(_pDevice, _pIsAllowed) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBOXVDBG_DEV_CHECK_SHARED(_pDevice, _pIsAllowed); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (*(_pIsAllowed)) \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync *(_pIsAllowed) = VBOXVDBG_IS_DUMP_ALLOWED(Shared); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync#define VBOXVDBG_IS_BREAK_SHARED_ALLOWED_DEV(_pDevice, _pIsAllowed) do { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync VBOXVDBG_DEV_CHECK_SHARED(_pDevice, _pIsAllowed); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync if (*(_pIsAllowed)) \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync *(_pIsAllowed) = VBOXVDBG_IS_BREAK_ALLOWED(Shared); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } while (0)
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync BOOL fDumpShaded = FALSE; \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBOXVDBG_IS_DUMP_SHARED_ALLOWED_DEV(_pDevice, &fDumpShaded); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (fDumpShaded \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync || VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync { \
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 }\
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync BOOL fDumpShaded = FALSE; \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBOXVDBG_IS_DUMP_SHARED_ALLOWED_DEV(_pDevice, &fDumpShaded); \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (fDumpShaded \
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync || VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync { \
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 }\
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync#define VBOXVDBG_BREAK_SHARED_DEV(_pDevice) do { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync BOOL fBreakShaded = FALSE; \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync VBOXVDBG_IS_BREAK_SHARED_ALLOWED_DEV(_pDevice, &fBreakShaded); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync if (fBreakShaded) { \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync vboxVDbgPrint((__FUNCTION__"== Break on shared access\n")); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync AssertFailed(); \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } \
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync } while (0)
7c0d72e9b85a62859b5fff2c7c8a072ba63141e1vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_SETTEXTURE(_pRc) do { \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(SetTexture) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync ) \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("== "__FUNCTION__": ", &(_pRc)->aAllocations[0], NULL, NULL, "", \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync VBOXVDBG_DUMP_FLAGS_FOR_TYPE(SetTexture) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared)); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync ) \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync RECT SrcRect = *(_pSrcRect); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECT _DstRect; \
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 } \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync if (VBOXVDBG_DUMP_RECTS_FORCED() \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync || VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync ) \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync RECT SrcRect = *(_pSrcRect); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECT _DstRect; \
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 } \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_STRETCH_RECT(_type, _str, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(_type) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pSrcAlloc)->pRc) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pDstAlloc)->pRc) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync ) \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync { \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync DWORD fFlags = VBOXVDBG_DUMP_FLAGS_FOR_TYPE(_type) | VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Shared); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync if (VBOXVDBG_DUMP_TYPE_CONTENTS(fFlags) && \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync ((_pSrcSurf) == (_pDstSurf) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync && ( ((_pSrcRect) && (_pDstRect) && !memcmp((_pSrcRect), (_pDstRect), sizeof (_pDstRect))) \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync || ((_pSrcRect) == (_pDstRect)) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync )) ) \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgPrint((_str #_type ": skipping content dump of the same rect for one surfcace\n")); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync fFlags = VBOXVDBG_DUMP_TYPE_GET_FLOW_ONLY(fFlags); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync } \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync RECT Rect, *pRect; \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync if (_pSrcRect) \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync Rect = *((RECT*)(_pSrcRect)); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync pRect = &Rect; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync else \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync pRect = NULL; \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpRcRect(_str __FUNCTION__" Src: ", (_pSrcAlloc), (_pSrcSurf), pRect, "", fFlags); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync if (_pDstRect) \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync Rect = *((RECT*)(_pDstRect)); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync pRect = &Rect; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync else \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync pRect = NULL; \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync vboxVDbgDoDumpRcRect(_str __FUNCTION__" Dst: ", (_pDstAlloc), (_pDstSurf), pRect, "", fFlags); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
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
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
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
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
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_IS_SKIP_DWM_WND_UPDATE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) ( \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync g_VBoxVDbgFSkipCheckTexBltDwmWndUpdate \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && ( \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_IS_DWM() \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->RcDesc.enmFormat == D3DDDIFMT_A8R8G8B8 \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->cAllocations == 1 \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->RcDesc.enmPool == D3DDDIPOOL_VIDEOMEMORY \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->RcDesc.enmFormat == D3DDDIFMT_A8R8G8B8 \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->RcDesc.fFlags.RenderTarget \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->RcDesc.fFlags.NotLockable \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pDstRc)->cAllocations == 1 \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->aAllocations[0].SurfDesc.width == (_pDstRc)->aAllocations[0].SurfDesc.width \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync && (_pSrcRc)->aAllocations[0].SurfDesc.height == (_pDstRc)->aAllocations[0].SurfDesc.height \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync ) \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync )
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync#define VBOXVDBG_CHECK_TEXBLT(_opTexBlt, _pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync if (VBOXVDBG_IS_CHECK_ALLOWED(TexBlt)) { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync if (VBOXVDBG_IS_SKIP_DWM_WND_UPDATE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint)) \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync vboxVDbgPrint(("TEXBLT: skipping check for dwm wnd update\n")); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync else \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync RECT DstRect; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DstRect.left = (_pDstPoint)->x; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DstRect.right = (_pDstPoint)->x + (_pSrcRect)->right - (_pSrcRect)->left; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DstRect.top = (_pDstPoint)->y; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync DstRect.bottom = (_pDstPoint)->y + (_pSrcRect)->bottom - (_pSrcRect)->top; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_CHECK_RECTS(\
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _opTexBlt ,\
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint), \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync "TexBlt", \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _pDstRc, 0, _pSrcRc, 0, &DstRect, _pSrcRect); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync break; \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_RECTS_INIT(0); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _opTexBlt;\
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } while (0)
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CHECK_STRETCH_RECT(_type, _op, _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (VBOXVDBG_IS_CHECK_ALLOWED(_type)) { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_CHECK_RECTS(\
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync _op ,\
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect), \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync #_type , \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync _pDstAlloc->pRc, _pDstAlloc->iAlloc, _pSrcAlloc->pRc, _pSrcAlloc->iAlloc, _pDstRect, _pSrcRect); \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync } \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync else \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync { \
ac7e45442a6e3b7c01faa0cdc1c48daee049ff59vboxsync VBOXVDBG_DUMP_RECTS_INIT(0); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "==>", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync _op;\
cafde3c9008a124039e59720afbbc49002521ebfvboxsync VBOXVDBG_DUMP_STRETCH_RECT(_type, "<==", _pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect); \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } while (0)
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync
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
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)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync#define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(RtSynch)) \
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("== "__FUNCTION__" Bb:\n", NULL, (_pBbSurf), NULL, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(RtSynch)); \
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync } \
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync } while (0)
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_PRESENT_ENTER(_pDevice, _pSwapchain) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(PresentEnter)) { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (!(_pSwapchain)->fFlags.bRtReportingPresent) { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpBb("==>"__FUNCTION__" Bb:\n", (_pSwapchain)->pSwapChainIf, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentEnter)); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync else { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync PVBOXWDDMDISP_ALLOCATION pCurBb = vboxWddmSwapchainGetBb((_pSwapchain))->pAlloc; \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync IDirect3DSurface9 *pSurf; \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync HRESULT hr = vboxWddmSwapchainSurfGet(_pDevice, _pSwapchain, pCurBb, &pSurf); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync Assert(hr == S_OK); \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRcRect("== "__FUNCTION__" Bb:\n", pCurBb, pSurf, NULL, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentEnter)); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync pSurf->Release(); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_DUMP_PRESENT_LEAVE(_pDevice, _pSwapchain) do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(PresentLeave)) { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (!(_pSwapchain)->fFlags.bRtReportingPresent) { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpFb("<=="__FUNCTION__" Fb:\n", (_pSwapchain)->pSwapChainIf, "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(PresentLeave)); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync else { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync vboxVDbgPrint(("PRESENT_LEAVE: unsupported for Rt Reporting mode\n")); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync#define VBOXVDBG_DUMP_FLUSH(_pDevice) do { \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(Flush)) \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpRt("== "__FUNCTION__": Rt: ", (_pDevice), "", \
37cf8eb3fafc4e145971ff322c53b41cc5c98f70vboxsync VBOXVDBG_DUMP_FLAGS_CLEAR(VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Flush), VBOXVDBG_DUMP_TYPEF_SHARED_ONLY)); \
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync }\
2ecff1c2f70f10cf06821afc18116b764c53fb5evboxsync } while (0)
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVDBG_DUMP_LOCK_ST(_pData) do { \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(Lock) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync || VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync ) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpLockSurfTex("== "__FUNCTION__": ", (_pData), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Lock)); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } while (0)
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync if (VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync ) \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync { \
bcd15685b4ddca4d91544371d4c0cd79a4bf69fevboxsync vboxVDbgDoDumpUnlockSurfTex("== "__FUNCTION__": ", (_pData), "", VBOXVDBG_DUMP_FLAGS_FOR_TYPE(Unlock)); \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } \
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync } while (0)
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
cafde3c9008a124039e59720afbbc49002521ebfvboxsync#define VBOXVDBG_CREATE_CHECK_SWAPCHAIN() do { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync if (g_VBoxVDbgCfgCreateSwapchainOnDdiOnce && g_VBoxVDbgInternalRc) { \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync PVBOXWDDMDISP_SWAPCHAIN pSwapchain; \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync HRESULT hr = vboxWddmSwapchainCreateIfForRc(g_VBoxVDbgInternalDevice, g_VBoxVDbgInternalRc, &pSwapchain); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync Assert(hr == S_OK); \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync g_VBoxVDbgInternalRc = NULL; \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync g_VBoxVDbgCfgCreateSwapchainOnDdiOnce = 0; \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } \
cafde3c9008a124039e59720afbbc49002521ebfvboxsync } while (0)
cafde3c9008a124039e59720afbbc49002521ebfvboxsync
dc4c9f05c58012e8b1f0bfdd12b2e14fc2f228devboxsync# endif /* # ifndef IN_VBOXCRHGSMI */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#else
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)
a316239ff79e32378f26a4c9b77b5906d4653850vboxsync#define VBOXVDBG_BREAK_DDI() 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
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /* #ifndef ___VBoxDispDbg_h__ */