VBoxDispDbg.cpp 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.
*/
/* @todo: move this to VBoxDispD3DCmn.h ? */
# include <windows.h>
# pragma warning(default : 4163)
# else
# include <windows.h>
# endif
#include "VBoxDispD3DCmn.h"
#include <stdio.h>
#include <stdarg.h>
static DWORD g_VBoxVDbgFIsModuleNameInited = 0;
static char g_VBoxVDbgModuleName[MAX_PATH];
char *vboxVDbgDoGetModuleName()
{
{
if (!cName)
{
return NULL;
}
}
return g_VBoxVDbgModuleName;
}
static void vboxDispLogDbgFormatStringV(char * szBuffer, uint32_t cbBuffer, const char * szString, va_list pArgList)
{
uint32_t cbWritten = sprintf(szBuffer, "['%s' 0x%x.0x%x] Disp: ", vboxVDbgDoGetModuleName(), GetCurrentProcessId(), GetCurrentThreadId());
{
return;
}
}
#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
DWORD g_VBoxVDbgPid = 0;
#endif
#ifdef VBOXWDDMDISP_DEBUG
DWORD g_VBoxVDbgFLogFlow = 0;
# ifndef IN_VBOXCRHGSMI
#define VBOXWDDMDISP_DEBUG_DUMP_DEFAULT 0
DWORD g_VBoxVDbgFBreakDdi = 0;
DWORD g_VBoxVDbgFCheckBlt = 0;
void vboxDispLogDbgPrintF(char * szString, ...)
{
char szBuffer[4096] = {0};
}
{
}
VOID vboxVDbgDoPrintDumpCmd(const char* pszDesc, const void *pvData, uint32_t width, uint32_t height, uint32_t bpp, uint32_t pitch)
{
char Cmd[1024];
}
{
}
typedef struct VBOXVDBG_DUMP_INFO
{
const VBOXWDDMDISP_ALLOCATION *pAlloc;
typedef DECLCALLBACK(void) FNVBOXVDBG_CONTENTS_DUMPER(PVBOXVDBG_DUMP_INFO pInfo, BOOLEAN fBreak, void *pvDumper);
static VOID vboxVDbgDoDumpSummary(const char * pPrefix, PVBOXVDBG_DUMP_INFO pInfo, const char * pSuffix)
{
char rectBuf[24];
else
vboxVDbgPrint(("%s Sh(0x%p), Rc(0x%p), pAlloc(0x%x), pD3DIf(0x%p), Type(%s), Rect(%s), Locks(%d) %s",
}
{
return;
{
|| (!bLogOnly && VBOXVDBG_DUMP_FLAGS_IS_CLEARED(fFlags, VBOXVDBG_DUMP_TYPEF_DONT_BREAK_ON_CONTENTS)))
Assert(0);
return;
}
pfnCd(pInfo, VBOXVDBG_DUMP_FLAGS_IS_CLEARED(fFlags, VBOXVDBG_DUMP_TYPEF_DONT_BREAK_ON_CONTENTS), pvCd);
}
static DECLCALLBACK(void) vboxVDbgAllocRectContentsDumperCb(PVBOXVDBG_DUMP_INFO pInfo, BOOLEAN fBreak, void *pvDumper)
{
{
vboxVDbgDoPrintDumpCmd("Surf Info", LockData.pData, pAlloc->SurfDesc.d3dWidth, pAlloc->SurfDesc.height, bpp, pAlloc->SurfDesc.pitch);
if (pRect)
{
vboxVDbgDoPrintDumpCmd("Rect Info", ((uint8_t*)LockData.pData) + (pRect->top * pAlloc->SurfDesc.pitch) + ((pRect->left * bpp) >> 3),
}
Assert(0);
}
}
VOID vboxVDbgDoDumpAllocRect(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, RECT *pRect, const char* pSuffix, DWORD fFlags)
{
}
static DECLCALLBACK(void) vboxVDbgRcRectContentsDumperCb(PVBOXVDBG_DUMP_INFO pInfo, BOOLEAN fBreak, void *pvDumper)
{
{
return;
}
{
{
if (pRect)
{
vboxVDbgDoPrintDumpCmd("Rect Info", ((uint8_t*)Lr.pBits) + (pRect->top * Lr.Pitch) + ((pRect->left * bpp) >> 3),
}
if (fBreak)
{
Assert(0);
}
}
}
}
{
}
VOID vboxVDbgDoDumpBb(const char * pPrefix, IDirect3DSwapChain9 *pSwapchainIf, const char * pSuffix, DWORD fFlags)
{
{
return;
}
}
VOID vboxVDbgDoDumpFb(const char * pPrefix, IDirect3DSwapChain9 *pSwapchainIf, const char * pSuffix, DWORD fFlags)
{
{
return;
}
}
#define VBOXVDBG_STRCASE(_t) \
#define VBOXVDBG_STRCASE_UNKNOWN() \
default: Assert(0); return "Unknown";
{
switch (enmFace)
{
}
}
VOID vboxVDbgDoDumpRt(const char * pPrefix, PVBOXWDDMDISP_DEVICE pDevice, const char * pSuffix, DWORD fFlags)
{
{
{
// Assert(pAlloc->pD3DIf == pRt);
}
else
{
}
}
}
VOID vboxVDbgDoDumpSamplers(const char * pPrefix, PVBOXWDDMDISP_DEVICE pDevice, const char * pSuffix, DWORD fFlags)
{
{
if (!pDevice->aSamplerTextures[i]) continue;
{
}
++iSampler;
}
}
static DECLCALLBACK(void) vboxVDbgLockUnlockSurfTexContentsDumperCb(PVBOXVDBG_DUMP_INFO pInfo, BOOLEAN fBreak, void *pvDumper)
{
void *pvData;
{
}
else
{
}
{
}
else
{
}
if (fBreak)
{
Assert(0);
}
}
VOID vboxVDbgDoDumpLockUnlockSurfTex(const char * pPrefix, const VBOXWDDMDISP_ALLOCATION *pAlloc, const char * pSuffix, DWORD fFlags)
{
{
}
else
{
}
}
VOID vboxVDbgDoDumpLockSurfTex(const char * pPrefix, const D3DDDIARG_LOCK* pData, const char * pSuffix, DWORD fFlags)
{
#ifdef VBOXWDDMDISP_DEBUG
#endif
}
VOID vboxVDbgDoDumpUnlockSurfTex(const char * pPrefix, const D3DDDIARG_UNLOCK* pData, const char * pSuffix, DWORD fFlags)
{
}
BOOL vboxVDbgDoCheckLRects(D3DLOCKED_RECT *pDstLRect, const RECT *pDstRect, D3DLOCKED_RECT *pSrcLRect, const RECT *pSrcRect, DWORD bpp, BOOL fBreakOnMismatch)
{
{
WARN(("stretched comparison not supported!!"));
return FALSE;
}
{
{
vboxVDbgPrint(("not match!\n"));
if (fBreakOnMismatch)
Assert(0);
break;
}
}
return fMatch;
}
{
if (!pDstRect)
{
}
if (!pSrcRect)
{
}
{
{
vboxVDbgPrint(("matching same rect of one allocation, skipping..\n"));
return TRUE;
}
WARN(("matching different rects of the same allocation, unsupported!"));
return FALSE;
}
{
WARN(("matching different formats, unsupported!"));
return FALSE;
}
if (!bpp)
{
WARN(("uninited bpp! unsupported!"));
return FALSE;
}
{
WARN(("stretched comparison not supported!!"));
return FALSE;
}
HRESULT hr = VBoxD3DIfLockRect((VBOXWDDMDISP_RESOURCE *)pDstRc, iDstAlloc, &DstLRect, pDstRect, D3DLOCK_READONLY);
{
return FALSE;
}
hr = VBoxD3DIfLockRect((VBOXWDDMDISP_RESOURCE *)pSrcRc, iSrcAlloc, &SrcLRect, pSrcRect, D3DLOCK_READONLY);
{
return FALSE;
}
return fMatch;
}
void vboxVDbgDoPrintAlloc(const char * pPrefix, const VBOXWDDMDISP_RESOURCE *pRc, uint32_t iAlloc, const char * pSuffix)
{
if (bPrimary)
{
}
pAlloc->SurfDesc.d3dWidth, pAlloc->SurfDesc.width, pAlloc->SurfDesc.height, pAlloc->SurfDesc.format,
bPrimary ?
: "?Everage? Alloc",
pSuffix));
}
{
vboxVDbgPrint(("%s left(%d), top(%d), right(%d), bottom(%d) %s", pPrefix, pRect->left, pRect->top, pRect->right, pRect->bottom, pSuffix));
}
# endif
{
Assert(0);
}
{
NULL,
msTimeout, /* ms*/
0,
{
return E_FAIL;
}
return S_OK;
}
{
{
}
return S_OK;
}
#endif
#if defined(VBOXWDDMDISP_DEBUG) || defined(VBOX_WDDMDISP_WITH_PROFILE)
{
char *pszModule = vboxVDbgDoGetModuleName();
if (!pszModule)
return FALSE;
return FALSE;
return FALSE;
return TRUE;
}
#endif
#ifdef VBOXWDDMDISP_DEBUG_VEHANDLER
{
switch (pExceptionRecord->ExceptionCode)
{
case EXCEPTION_BREAKPOINT:
case EXCEPTION_STACK_OVERFLOW:
AssertRelease(0);
break;
default:
break;
}
return EXCEPTION_CONTINUE_SEARCH;
}
void vboxVDbgVEHandlerRegister()
{
}
void vboxVDbgVEHandlerUnregister()
{
}
#endif
#if defined(VBOXWDDMDISP_DEBUG) || defined(LOG_TO_BACKDOOR_DRV)
void vboxDispLogDrvF(char * szString, ...)
{
char szBuffer[4096] = {0};
}
#endif