Changeset 39160 in vbox for trunk/src/VBox/Additions/WINNT
- Timestamp:
- Nov 1, 2011 2:35:23 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 74625
- Location:
- trunk/src/VBox/Additions/WINNT
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/common/VBoxVideoLog.h
r39150 r39160 24 24 #endif 25 25 26 #ifndef VBOX_VIDEO_LOG_LOGGER 27 # define VBOX_VIDEO_LOG_LOGGER Log 28 #endif 29 30 #ifndef VBOX_VIDEO_LOGREL_LOGGER 31 # define VBOX_VIDEO_LOGREL_LOGGER LogRel 32 #endif 33 34 #ifndef VBOX_VIDEO_LOGFLOW_LOGGER 35 # define VBOX_VIDEO_LOGFLOW_LOGGER LogFlow 36 #endif 37 38 #ifndef VBOX_VIDEO_LOG_FN_FMT 39 # define VBOX_VIDEO_LOG_FN_FMT LOG_FN_FMT 40 #endif 41 26 42 /* Uncomment to show file/line info in the log */ 27 43 /*#define VBOX_VIDEO_LOG_SHOWLINEINFO*/ 28 44 29 #define VBOX_VIDEO_LOG_PREFIX_FMT VBOX_VIDEO_LOG_NAME"::" LOG_FN_FMT": "45 #define VBOX_VIDEO_LOG_PREFIX_FMT VBOX_VIDEO_LOG_NAME"::"VBOX_VIDEO_LOG_FN_FMT": " 30 46 #define VBOX_VIDEO_LOG_PREFIX_PARMS __PRETTY_FUNCTION__ 31 47 … … 68 84 69 85 #ifdef VBOX_WDDM_MINIPORT 70 # define _WARN_LOGGER LogRel86 # define _WARN_LOGGER VBOX_VIDEO_LOGREL_LOGGER 71 87 #else 72 # define _WARN_LOGGER Log88 # define _WARN_LOGGER VBOX_VIDEO_LOG_LOGGER 73 89 #endif 74 90 … … 94 110 } while (0) 95 111 96 #define LOG(_a) _LOGMSG( Log, _a)97 #define LOGREL(_a) _LOGMSG( LogRel, _a)98 #define LOGF(_a) _LOGMSG( LogFlow, _a)112 #define LOG(_a) _LOGMSG(VBOX_VIDEO_LOG_LOGGER, _a) 113 #define LOGREL(_a) _LOGMSG(VBOX_VIDEO_LOGREL_LOGGER, _a) 114 #define LOGF(_a) _LOGMSG(VBOX_VIDEO_LOGFLOW_LOGGER, _a) 99 115 #define LOGF_ENTER() LOGF(("ENTER")) 100 116 #define LOGF_LEAVE() LOGF(("LEAVE")) 101 #define LOG_EXACT(_a) _LOGMSG_EXACT(Log, _a) 102 #define LOGREL_EXACT(_a) _LOGMSG_EXACT(LogRel, _a) 117 #define LOG_EXACT(_a) _LOGMSG_EXACT(VBOX_VIDEO_LOG_LOGGER, _a) 118 #define LOGREL_EXACT(_a) _LOGMSG_EXACT(VBOX_VIDEO_LOGREL_LOGGER, _a) 119 #define LOGF_EXACT(_a) _LOGMSG_EXACT(VBOX_VIDEO_LOGFLOW_LOGGER, _a) 103 120 /* we can not print paged strings to RT logger, do it this way */ 104 121 #define LOG_STRA(_a) do {\ 105 _LOGMSG_STR( Log, _a, "c"); \122 _LOGMSG_STR(VBOX_VIDEO_LOG_LOGGER, _a, "c"); \ 106 123 } while (0) 107 124 #define LOG_STRW(_a) do {\ 108 _LOGMSG_STR( Log, _a, "c"); \125 _LOGMSG_STR(VBOX_VIDEO_LOG_LOGGER, _a, "c"); \ 109 126 } while (0) 110 127 #define LOGREL_STRA(_a) do {\ 111 _LOGMSG_STR( LogRel, _a, "c"); \128 _LOGMSG_STR(VBOX_VIDEO_LOGREL_LOGGER, _a, "c"); \ 112 129 } while (0) 113 130 #define LOGREL_STRW(_a) do {\ 114 _LOGMSG_STR( LogRel, _a, "c"); \131 _LOGMSG_STR(VBOX_VIDEO_LOGREL_LOGGER, _a, "c"); \ 115 132 } while (0) 116 133 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/common/wddm/VBoxMPIf.h
r38982 r39160 370 370 } VBOXDISPIFESCAPE_DBGPRINT, *PVBOXDISPIFESCAPE_DBGPRINT; 371 371 AssertCompile(RT_OFFSETOF(VBOXDISPIFESCAPE_DBGPRINT, EscapeHdr) == 0); 372 373 typedef enum 374 { 375 VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE_UNDEFINED = 0, 376 VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE_D3DCAPS9 = 1, 377 VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE_DUMMY32BIT = 0x7fffffff 378 } VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE; 379 380 typedef struct VBOXDISPIFESCAPE_DBGDUMPBUF_FLAGS 381 { 382 union 383 { 384 struct 385 { 386 UINT WoW64 : 1; 387 UINT Reserved : 31; /* reserved */ 388 }; 389 UINT Value; 390 }; 391 } VBOXDISPIFESCAPE_DBGDUMPBUF_FLAGS, *PVBOXDISPIFESCAPE_DBGDUMPBUF_FLAGS; 392 393 typedef struct VBOXDISPIFESCAPE_DBGDUMPBUF 394 { 395 VBOXDISPIFESCAPE EscapeHdr; 396 VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE enmType; 397 VBOXDISPIFESCAPE_DBGDUMPBUF_FLAGS Flags; 398 char aBuf[1]; 399 } VBOXDISPIFESCAPE_DBGDUMPBUF, *PVBOXDISPIFESCAPE_DBGDUMPBUF; 400 AssertCompile(RT_OFFSETOF(VBOXDISPIFESCAPE_DBGDUMPBUF, EscapeHdr) == 0); 372 401 373 402 typedef struct VBOXSCREENLAYOUT_ELEMENT -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/Makefile.kmk
r37273 r39160 82 82 DLLS += VBoxDispD3D 83 83 VBoxDispD3D_TEMPLATE = VBOXGUESTR3DLL 84 VBoxDispD3D_DEFS = UNICODE _UNICODE VBOX_WITH_WDDM VBOXWDDMDISP LOG_TO_BACKDOOR 84 VBoxDispD3D_DEFS = UNICODE _UNICODE VBOX_WITH_WDDM VBOXWDDMDISP LOG_TO_BACKDOOR LOG_TO_BACKDOOR_DRV 85 85 ifdef DEBUG_misha 86 86 VBoxDispD3D_DEFS += LOG_ENABLED -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
r39150 r39160 3342 3342 { 3343 3343 HRESULT hr = pAdapter->pD3D9If->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pCaps); 3344 Assert(hr == S_OK); 3345 if (hr == S_OK) 3346 { 3347 pCaps->Caps2 |= D3DCAPS2_CANSHARERESOURCE | 0x00080000 /*D3DCAPS2_CANRENDERWINDOWED*/; 3348 pCaps->DevCaps |= D3DDEVCAPS_FLOATTLVERTEX /* <- must be set according to the docs */ 3349 /*| D3DDEVCAPS_HWVERTEXBUFFER | D3DDEVCAPS_HWINDEXBUFFER | D3DDEVCAPS_SUBVOLUMELOCK */; 3350 pCaps->PrimitiveMiscCaps |= D3DPMISCCAPS_INDEPENDENTWRITEMASKS 3351 | D3DPMISCCAPS_FOGINFVF 3352 | D3DPMISCCAPS_SEPARATEALPHABLEND | D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS; 3353 pCaps->RasterCaps |= D3DPRASTERCAPS_SUBPIXEL | D3DPRASTERCAPS_STIPPLE | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_COLORPERSPECTIVE /* keep */; 3354 pCaps->TextureCaps |= D3DPTEXTURECAPS_TRANSPARENCY | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE; 3355 pCaps->TextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE; 3356 pCaps->VolumeTextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE; 3357 pCaps->GuardBandLeft = -8192.; 3358 pCaps->GuardBandTop = -8192.; 3359 pCaps->GuardBandRight = 8192.; 3360 pCaps->GuardBandBottom = 8192.; 3361 pCaps->StencilCaps |= D3DSTENCILCAPS_TWOSIDED; 3362 pCaps->DeclTypes |= D3DDTCAPS_FLOAT16_2 | D3DDTCAPS_FLOAT16_4; 3363 pCaps->VS20Caps.DynamicFlowControlDepth = 24; 3364 pCaps->VS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS; 3365 pCaps->PS20Caps.DynamicFlowControlDepth = 24; 3366 pCaps->PS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS; 3367 pCaps->VertexTextureFilterCaps |= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MAGFPOINT; 3344 if (FAILED(hr)) 3345 { 3346 WARN(("GetDeviceCaps failed hr(0x%x)",hr)); 3347 return hr; 3348 } 3349 3350 pCaps->Caps2 |= D3DCAPS2_CANSHARERESOURCE | 0x00080000 /*D3DCAPS2_CANRENDERWINDOWED*/; 3351 pCaps->DevCaps |= D3DDEVCAPS_FLOATTLVERTEX /* <- must be set according to the docs */ 3352 /*| D3DDEVCAPS_HWVERTEXBUFFER | D3DDEVCAPS_HWINDEXBUFFER | D3DDEVCAPS_SUBVOLUMELOCK */; 3353 pCaps->PrimitiveMiscCaps |= D3DPMISCCAPS_INDEPENDENTWRITEMASKS 3354 | D3DPMISCCAPS_FOGINFVF 3355 | D3DPMISCCAPS_SEPARATEALPHABLEND | D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS; 3356 pCaps->RasterCaps |= D3DPRASTERCAPS_SUBPIXEL | D3DPRASTERCAPS_STIPPLE | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_COLORPERSPECTIVE /* keep */; 3357 pCaps->TextureCaps |= D3DPTEXTURECAPS_TRANSPARENCY | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE; 3358 pCaps->TextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE; 3359 pCaps->VolumeTextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE; 3360 pCaps->GuardBandLeft = -8192.; 3361 pCaps->GuardBandTop = -8192.; 3362 pCaps->GuardBandRight = 8192.; 3363 pCaps->GuardBandBottom = 8192.; 3364 pCaps->StencilCaps |= D3DSTENCILCAPS_TWOSIDED; 3365 pCaps->DeclTypes |= D3DDTCAPS_FLOAT16_2 | D3DDTCAPS_FLOAT16_4; 3366 pCaps->VS20Caps.DynamicFlowControlDepth = 24; 3367 pCaps->VS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS; 3368 pCaps->PS20Caps.DynamicFlowControlDepth = 24; 3369 pCaps->PS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS; 3370 pCaps->VertexTextureFilterCaps |= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MAGFPOINT; 3368 3371 #if 1 /* workaround for wine not returning InstructionSlots correctly for shaders v3.0 */ 3369 3370 3371 3372 3373 3372 if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300) 3373 { 3374 pCaps->MaxVertexShader30InstructionSlots = RT_MIN(32768, pCaps->MaxVertexShader30InstructionSlots); 3375 pCaps->MaxPixelShader30InstructionSlots = RT_MIN(32768, pCaps->MaxPixelShader30InstructionSlots); 3376 } 3374 3377 #endif 3375 3378 #ifdef DEBUG 3376 if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300) 3377 { 3378 Assert(pCaps->MaxVertexShader30InstructionSlots >= 512); 3379 Assert(pCaps->MaxVertexShader30InstructionSlots <= 32768); 3380 Assert(pCaps->MaxPixelShader30InstructionSlots >= 512); 3381 Assert(pCaps->MaxPixelShader30InstructionSlots <= 32768); 3382 } 3383 else if ((pCaps->VertexShaderVersion & 0xff00) == 0x0200) 3384 { 3385 Assert(pCaps->MaxVertexShader30InstructionSlots == 0); 3386 Assert(pCaps->MaxPixelShader30InstructionSlots == 0); 3387 } 3388 else 3389 { 3390 Assert(0); 3391 } 3392 #endif 3393 } 3394 3395 return hr; 3379 if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300) 3380 { 3381 Assert(pCaps->MaxVertexShader30InstructionSlots >= 512); 3382 Assert(pCaps->MaxVertexShader30InstructionSlots <= 32768); 3383 Assert(pCaps->MaxPixelShader30InstructionSlots >= 512); 3384 Assert(pCaps->MaxPixelShader30InstructionSlots <= 32768); 3385 } 3386 else if ((pCaps->VertexShaderVersion & 0xff00) == 0x0200) 3387 { 3388 Assert(pCaps->MaxVertexShader30InstructionSlots == 0); 3389 Assert(pCaps->MaxPixelShader30InstructionSlots == 0); 3390 } 3391 else 3392 { 3393 Assert(0); 3394 } 3395 #endif 3396 3397 vboxDispDumpD3DCAPS9(pCaps); 3398 3399 return S_OK; 3396 3400 } 3397 3401 … … 7630 7634 { 7631 7635 7636 LOGREL(("Built %s %s", __DATE__, __TIME__)); 7637 7632 7638 VBOXWDDM_QI Query; 7633 7639 D3DDDICB_QUERYADAPTERINFO DdiQuery; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp
r39132 r39160 80 80 81 81 DWORD g_VBoxVDbgPid = 0; 82 typedef enum 83 { 84 VBOXDISPDBG_STATE_UNINITIALIZED = 0, 85 VBOXDISPDBG_STATE_INITIALIZING, 86 VBOXDISPDBG_STATE_INITIALIZED, 87 } VBOXDISPDBG_STATE; 88 89 typedef struct VBOXDISPDBG 90 { 91 VBOXDISPKMT_CALLBACKS KmtCallbacks; 92 VBOXDISPDBG_STATE enmState; 93 } VBOXDISPDBG, *PVBOXDISPDBG; 94 95 static VBOXDISPDBG g_VBoxDispDbg = {0}; 96 97 PVBOXDISPDBG vboxDispDbgGet() 98 { 99 if (ASMAtomicCmpXchgU32((volatile uint32_t *)&g_VBoxDispDbg.enmState, VBOXDISPDBG_STATE_INITIALIZING, VBOXDISPDBG_STATE_UNINITIALIZED)) 100 { 101 HRESULT hr = vboxDispKmtCallbacksInit(&g_VBoxDispDbg.KmtCallbacks); 102 Assert(hr == S_OK); 103 if (hr == S_OK) 104 { 105 ASMAtomicWriteU32((volatile uint32_t *)&g_VBoxDispDbg.enmState, VBOXDISPDBG_STATE_INITIALIZED); 106 return &g_VBoxDispDbg; 107 } 108 else 109 { 110 ASMAtomicWriteU32((volatile uint32_t *)&g_VBoxDispDbg.enmState, VBOXDISPDBG_STATE_UNINITIALIZED); 111 } 112 } 113 else if (ASMAtomicReadU32((volatile uint32_t *)&g_VBoxDispDbg.enmState) == VBOXDISPDBG_STATE_INITIALIZED) 114 { 115 return &g_VBoxDispDbg; 116 } 117 Assert(0); 118 return NULL; 119 } 120 121 void vboxDispLogDrv(char * szString) 122 { 123 PVBOXDISPDBG pDbg = vboxDispDbgGet(); 124 if (!pDbg) 125 { 126 /* do not use WARN her esince this would lead to a recursion */ 127 WARN_BREAK(); 128 return; 129 } 130 131 VBOXDISPKMT_ADAPTER Adapter; 132 HRESULT hr = vboxDispKmtOpenAdapter(&pDbg->KmtCallbacks, &Adapter); 133 if (hr == S_OK) 134 { 135 uint32_t cbString = (uint32_t)strlen(szString) + 1; 136 uint32_t cbCmd = RT_OFFSETOF(VBOXDISPIFESCAPE_DBGPRINT, aStringBuf[cbString]); 137 PVBOXDISPIFESCAPE_DBGPRINT pCmd = (PVBOXDISPIFESCAPE_DBGPRINT)RTMemAllocZ(cbCmd); 138 if (pCmd) 139 { 140 pCmd->EscapeHdr.escapeCode = VBOXESC_DBGPRINT; 141 memcpy(pCmd->aStringBuf, szString, cbString); 142 143 D3DKMT_ESCAPE EscapeData = {0}; 144 EscapeData.hAdapter = Adapter.hAdapter; 145 //EscapeData.hDevice = NULL; 146 EscapeData.Type = D3DKMT_ESCAPE_DRIVERPRIVATE; 147 // EscapeData.Flags.HardwareAccess = 1; 148 EscapeData.pPrivateDriverData = pCmd; 149 EscapeData.PrivateDriverDataSize = cbCmd; 150 //EscapeData.hContext = NULL; 151 152 int Status = pDbg->KmtCallbacks.pfnD3DKMTEscape(&EscapeData); 153 if (Status) 154 { 155 WARN_BREAK(); 156 } 157 158 RTMemFree(pCmd); 159 } 160 else 161 { 162 WARN_BREAK(); 163 } 164 hr = vboxDispKmtCloseAdapter(&Adapter); 165 if(hr != S_OK) 166 { 167 WARN_BREAK(); 168 } 169 } 170 } 171 172 void vboxDispLogDrvF(char * szString, ...) 82 83 void vboxDispLogDbgPrintF(char * szString, ...) 173 84 { 174 85 char szBuffer[4096] = {0}; … … 178 89 va_end(pArgList); 179 90 180 vboxDispLogDrv(szBuffer);181 }182 183 void vboxDispLogDbgPrintF(char * szString, ...)184 {185 char szBuffer[4096] = {0};186 va_list pArgList;187 va_start(pArgList, szString);188 _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), szString, pArgList);189 va_end(pArgList);190 191 91 OutputDebugStringA(szBuffer); 192 92 } 193 194 93 195 94 VOID vboxVDbgDoDumpSurfRectByAlloc(const char * pPrefix, PVBOXWDDMDISP_ALLOCATION pAlloc, const RECT *pRect, const char* pSuffix) … … 771 670 772 671 #endif 672 673 #if defined(VBOXWDDMDISP_DEBUG) || defined(LOG_TO_BACKDOOR_DRV) 674 typedef enum 675 { 676 VBOXDISPDBG_STATE_UNINITIALIZED = 0, 677 VBOXDISPDBG_STATE_INITIALIZING, 678 VBOXDISPDBG_STATE_INITIALIZED, 679 } VBOXDISPDBG_STATE; 680 681 typedef struct VBOXDISPDBG 682 { 683 VBOXDISPKMT_CALLBACKS KmtCallbacks; 684 VBOXDISPDBG_STATE enmState; 685 } VBOXDISPDBG, *PVBOXDISPDBG; 686 687 static VBOXDISPDBG g_VBoxDispDbg = {0}; 688 689 PVBOXDISPDBG vboxDispDbgGet() 690 { 691 if (ASMAtomicCmpXchgU32((volatile uint32_t *)&g_VBoxDispDbg.enmState, VBOXDISPDBG_STATE_INITIALIZING, VBOXDISPDBG_STATE_UNINITIALIZED)) 692 { 693 HRESULT hr = vboxDispKmtCallbacksInit(&g_VBoxDispDbg.KmtCallbacks); 694 Assert(hr == S_OK); 695 if (hr == S_OK) 696 { 697 ASMAtomicWriteU32((volatile uint32_t *)&g_VBoxDispDbg.enmState, VBOXDISPDBG_STATE_INITIALIZED); 698 return &g_VBoxDispDbg; 699 } 700 else 701 { 702 ASMAtomicWriteU32((volatile uint32_t *)&g_VBoxDispDbg.enmState, VBOXDISPDBG_STATE_UNINITIALIZED); 703 } 704 } 705 else if (ASMAtomicReadU32((volatile uint32_t *)&g_VBoxDispDbg.enmState) == VBOXDISPDBG_STATE_INITIALIZED) 706 { 707 return &g_VBoxDispDbg; 708 } 709 Assert(0); 710 return NULL; 711 } 712 713 void vboxDispLogDrv(char * szString) 714 { 715 PVBOXDISPDBG pDbg = vboxDispDbgGet(); 716 if (!pDbg) 717 { 718 /* do not use WARN her esince this would lead to a recursion */ 719 BP_WARN(); 720 return; 721 } 722 723 VBOXDISPKMT_ADAPTER Adapter; 724 HRESULT hr = vboxDispKmtOpenAdapter(&pDbg->KmtCallbacks, &Adapter); 725 if (hr == S_OK) 726 { 727 uint32_t cbString = (uint32_t)strlen(szString) + 1; 728 uint32_t cbCmd = RT_OFFSETOF(VBOXDISPIFESCAPE_DBGPRINT, aStringBuf[cbString]); 729 PVBOXDISPIFESCAPE_DBGPRINT pCmd = (PVBOXDISPIFESCAPE_DBGPRINT)RTMemAllocZ(cbCmd); 730 if (pCmd) 731 { 732 pCmd->EscapeHdr.escapeCode = VBOXESC_DBGPRINT; 733 memcpy(pCmd->aStringBuf, szString, cbString); 734 735 D3DKMT_ESCAPE EscapeData = {0}; 736 EscapeData.hAdapter = Adapter.hAdapter; 737 //EscapeData.hDevice = NULL; 738 EscapeData.Type = D3DKMT_ESCAPE_DRIVERPRIVATE; 739 // EscapeData.Flags.HardwareAccess = 1; 740 EscapeData.pPrivateDriverData = pCmd; 741 EscapeData.PrivateDriverDataSize = cbCmd; 742 //EscapeData.hContext = NULL; 743 744 int Status = pDbg->KmtCallbacks.pfnD3DKMTEscape(&EscapeData); 745 if (Status) 746 { 747 BP_WARN(); 748 } 749 750 RTMemFree(pCmd); 751 } 752 else 753 { 754 BP_WARN(); 755 } 756 hr = vboxDispKmtCloseAdapter(&Adapter); 757 if(hr != S_OK) 758 { 759 BP_WARN(); 760 } 761 } 762 } 763 764 void vboxDispLogDrvF(char * szString, ...) 765 { 766 char szBuffer[4096] = {0}; 767 va_list pArgList; 768 va_start(pArgList, szString); 769 _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), szString, pArgList); 770 va_end(pArgList); 771 772 vboxDispLogDrv(szBuffer); 773 } 774 775 static void vboxDispDumpBufDrv(void *pvBuf, uint32_t cbBuf, VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE enmBuf) 776 { 777 PVBOXDISPDBG pDbg = vboxDispDbgGet(); 778 if (!pDbg) 779 { 780 /* do not use WARN her esince this would lead to a recursion */ 781 BP_WARN(); 782 return; 783 } 784 785 VBOXDISPKMT_ADAPTER Adapter; 786 HRESULT hr = vboxDispKmtOpenAdapter(&pDbg->KmtCallbacks, &Adapter); 787 if (hr == S_OK) 788 { 789 uint32_t cbCmd = RT_OFFSETOF(VBOXDISPIFESCAPE_DBGDUMPBUF, aBuf[cbBuf]); 790 PVBOXDISPIFESCAPE_DBGDUMPBUF pCmd = (PVBOXDISPIFESCAPE_DBGDUMPBUF)RTMemAllocZ(cbCmd); 791 if (pCmd) 792 { 793 pCmd->EscapeHdr.escapeCode = VBOXESC_DBGDUMPBUF; 794 pCmd->enmType = enmBuf; 795 #ifdef VBOX_WDDM_WOW64 796 pCmd->Flags.WoW64 = 1; 797 #endif 798 memcpy(pCmd->aBuf, pvBuf, cbBuf); 799 800 D3DKMT_ESCAPE EscapeData = {0}; 801 EscapeData.hAdapter = Adapter.hAdapter; 802 //EscapeData.hDevice = NULL; 803 EscapeData.Type = D3DKMT_ESCAPE_DRIVERPRIVATE; 804 // EscapeData.Flags.HardwareAccess = 1; 805 EscapeData.pPrivateDriverData = pCmd; 806 EscapeData.PrivateDriverDataSize = cbCmd; 807 //EscapeData.hContext = NULL; 808 809 int Status = pDbg->KmtCallbacks.pfnD3DKMTEscape(&EscapeData); 810 if (Status) 811 { 812 BP_WARN(); 813 } 814 815 RTMemFree(pCmd); 816 } 817 else 818 { 819 BP_WARN(); 820 } 821 hr = vboxDispKmtCloseAdapter(&Adapter); 822 if(hr != S_OK) 823 { 824 BP_WARN(); 825 } 826 } 827 } 828 829 void vboxDispDumpD3DCAPS9Drv(D3DCAPS9 *pCaps) 830 { 831 vboxDispDumpBufDrv(pCaps, sizeof (*pCaps), VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE_D3DCAPS9); 832 } 833 #endif -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h
r39155 r39160 19 19 #ifndef ___VBoxDispDbg_h__ 20 20 #define ___VBoxDispDbg_h__ 21 22 #define VBOX_VIDEO_LOG_NAME "VBoxD3D" 23 #define VBOX_VIDEO_LOG_LOGGER vboxVDbgInternalLogLogger 24 #define VBOX_VIDEO_LOGREL_LOGGER vboxVDbgInternalLogRelLogger 25 #define VBOX_VIDEO_LOGFLOW_LOGGER vboxVDbgInternalLogFlowLogger 26 #define VBOX_VIDEO_LOG_FN_FMT "%s" 27 28 #include "../../common/VBoxVideoLog.h" 21 29 22 30 #ifdef DEBUG … … 90 98 #endif 91 99 92 #if def VBOXWDDMDISP_DEBUG_PRINTDRV100 #if defined(LOG_TO_BACKDOOR_DRV) || defined(VBOXWDDMDISP_DEBUG_PRINTDRV) 93 101 # define DbgPrintDrv(_m) do { vboxDispLogDrvF _m; } while (0) 94 102 # define DbgPrintDrvRel(_m) do { vboxDispLogDrvF _m; } while (0) 95 # define DbgPrintDrvFlow(_m) do { } while (0)103 # define DbgPrintDrvFlow(_m) do { vboxDispLogDrvF _m; } while (0) 96 104 #else 97 105 # define DbgPrintDrv(_m) do { } while (0) … … 109 117 # define DbgPrintUsrFlow(_m) do { } while (0) 110 118 #endif 111 #ifdef DEBUG_misha112 # define WARN_BREAK() do { AssertFailed(); } while (0)113 #else114 # define WARN_BREAK() do { } while (0)115 #endif116 119 117 120 #ifdef VBOXWDDMDISP_DEBUG … … 125 128 #endif 126 129 127 #define WARN(_m) do { \ 130 /* @todo: remove these from the code and from here */ 131 #define vboxVDbgPrint(_m) LOG_EXACT(_m) 132 #define vboxVDbgPrintF(_m) LOGF_EXACT(_m) 133 #define vboxVDbgPrintR(_m) LOGREL_EXACT(_m) 134 135 #define vboxVDbgInternalLogLogger(_m) do { \ 128 136 vboxVDbgInternalLog( \ 129 137 Log(_m); \ … … 131 139 DbgPrintDrv(_m); \ 132 140 ); \ 133 WARN_BREAK(); \ 134 } while (0) 135 #define vboxVDbgPrint(_m) do { \ 136 vboxVDbgInternalLog( \ 137 Log(_m); \ 138 DbgPrintUsr(_m); \ 139 DbgPrintDrv(_m); \ 140 ); \ 141 } while (0) 142 #define vboxVDbgPrintF(_m) do { \ 141 } while (0) 142 143 #define vboxVDbgInternalLogFlowLogger(_m) do { \ 143 144 vboxVDbgInternalLogFlow( \ 144 145 LogFlow(_m); \ … … 147 148 ); \ 148 149 } while (0) 149 #define vboxVDbgPrintR(_m) do { \ 150 151 #define vboxVDbgInternalLogRelLogger(_m) do { \ 150 152 vboxVDbgInternalLogRel( \ 151 153 LogRel(_m); \ … … 155 157 } while (0) 156 158 157 #define LOG vboxVDbgPrint 158 #define LOGREL vboxVDbgPrintR 159 #define LOGFLOW vboxVDbgPrintF 160 161 #ifdef VBOXWDDMDISP_DEBUG 159 #if defined(VBOXWDDMDISP_DEBUG) || defined(LOG_TO_BACKDOOR_DRV) 162 160 163 161 void vboxDispLogDrvF(char * szString, ...); 164 162 void vboxDispLogDrv(char * szString); 163 void vboxDispDumpD3DCAPS9Drv(D3DCAPS9 *pCaps); 164 165 # define vboxDispDumpD3DCAPS9(_pCaps) do { vboxDispDumpD3DCAPS9Drv(_pCaps); } while (0) 166 #else 167 # define vboxDispDumpD3DCAPS9(_pCaps) do { } while (0) 168 #endif 169 170 #ifdef VBOXWDDMDISP_DEBUG 171 165 172 void vboxDispLogDbgPrintF(char * szString, ...); 166 173 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
r38982 r39160 1474 1474 } 1475 1475 1476 /* dump user-mode driver debug info */ 1477 static char g_aVBoxUmdD3DCAPS9[304]; 1478 static VBOXDISPIFESCAPE_DBGDUMPBUF_FLAGS g_VBoxUmdD3DCAPS9Flags; 1479 static BOOLEAN g_bVBoxUmdD3DCAPS9IsInited = FALSE; 1480 1481 static void vboxUmdDumpDword(DWORD *pvData, DWORD cData) 1482 { 1483 char aBuf[16*4]; 1484 DWORD dw1, dw2, dw3, dw4; 1485 for (UINT i = 0; i < (cData & (~3)); i+=4) 1486 { 1487 dw1 = *pvData++; 1488 dw2 = *pvData++; 1489 dw3 = *pvData++; 1490 dw4 = *pvData++; 1491 sprintf(aBuf, "0x%08x, 0x%08x, 0x%08x, 0x%08x,\n", dw1, dw2, dw3, dw4); 1492 LOGREL(("%s", aBuf)); 1493 } 1494 1495 cData = cData % 4; 1496 switch (cData) 1497 { 1498 case 3: 1499 dw1 = *pvData++; 1500 dw2 = *pvData++; 1501 dw3 = *pvData++; 1502 sprintf(aBuf, "0x%08x, 0x%08x, 0x%08x\n", dw1, dw2, dw3); 1503 LOGREL(("%s", aBuf)); 1504 break; 1505 case 2: 1506 dw1 = *pvData++; 1507 dw2 = *pvData++; 1508 sprintf(aBuf, "0x%08x, 0x%08x\n", dw1, dw2); 1509 LOGREL(("%s", aBuf)); 1510 break; 1511 case 1: 1512 dw1 = *pvData++; 1513 sprintf(aBuf, "0x%8x\n", dw1); 1514 LOGREL(("%s", aBuf)); 1515 break; 1516 default: 1517 break; 1518 } 1519 } 1520 1521 static void vboxUmdDumpD3DCAPS9(void *pvData, PVBOXDISPIFESCAPE_DBGDUMPBUF_FLAGS pFlags) 1522 { 1523 AssertCompile(!(sizeof (g_aVBoxUmdD3DCAPS9) % sizeof (DWORD))); 1524 LOGREL(("*****Start Dumping D3DCAPS9:*******")); 1525 LOGREL(("WoW64 flag(%d)", (UINT)pFlags->WoW64)); 1526 vboxUmdDumpDword((DWORD*)pvData, sizeof (g_aVBoxUmdD3DCAPS9) / sizeof (DWORD)); 1527 LOGREL(("*****End Dumping D3DCAPS9**********")); 1528 } 1529 1530 NTSTATUS vboxUmdDumpBuf(PVBOXDISPIFESCAPE_DBGDUMPBUF pBuf, uint32_t cbBuffer) 1531 { 1532 if (cbBuffer < RT_OFFSETOF(VBOXDISPIFESCAPE_DBGDUMPBUF, aBuf[0])) 1533 { 1534 WARN(("Buffer too small")); 1535 return STATUS_BUFFER_TOO_SMALL; 1536 } 1537 1538 NTSTATUS Status = STATUS_SUCCESS; 1539 uint32_t cbString = cbBuffer - RT_OFFSETOF(VBOXDISPIFESCAPE_DBGDUMPBUF, aBuf[0]); 1540 switch (pBuf->enmType) 1541 { 1542 case VBOXDISPIFESCAPE_DBGDUMPBUF_TYPE_D3DCAPS9: 1543 { 1544 if (cbString != sizeof (g_aVBoxUmdD3DCAPS9)) 1545 { 1546 WARN(("wrong caps size, expected %d, but was %d", sizeof (g_aVBoxUmdD3DCAPS9), cbString)); 1547 Status = STATUS_INVALID_PARAMETER; 1548 break; 1549 } 1550 1551 if (g_bVBoxUmdD3DCAPS9IsInited) 1552 { 1553 if (!memcmp(g_aVBoxUmdD3DCAPS9, pBuf->aBuf, sizeof (g_aVBoxUmdD3DCAPS9))) 1554 break; 1555 1556 WARN(("caps do not match!")); 1557 vboxUmdDumpD3DCAPS9(pBuf->aBuf, &pBuf->Flags); 1558 break; 1559 } 1560 1561 memcpy(g_aVBoxUmdD3DCAPS9, pBuf->aBuf, sizeof (g_aVBoxUmdD3DCAPS9)); 1562 g_VBoxUmdD3DCAPS9Flags = pBuf->Flags; 1563 g_bVBoxUmdD3DCAPS9IsInited = TRUE; 1564 vboxUmdDumpD3DCAPS9(pBuf->aBuf, &pBuf->Flags); 1565 } 1566 } 1567 1568 return Status; 1569 } 1570 1476 1571 #if 0 1477 1572 VOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt) -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.h
r38982 r39160 151 151 VOID vboxWddmCounterU32Wait(uint32_t volatile * pu32, uint32_t u32Val); 152 152 153 NTSTATUS vboxUmdDumpBuf(PVBOXDISPIFESCAPE_DBGDUMPBUF pBuf, uint32_t cbBuffer); 154 153 155 #if 0 154 156 /* wine shrc handle -> allocation map */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
r39150 r39160 3843 3843 DbgPrint("%s", pDbgPrint->aStringBuf); 3844 3844 #else 3845 LOGREL (("%s", pDbgPrint->aStringBuf));3845 LOGREL_EXACT(("%s", pDbgPrint->aStringBuf)); 3846 3846 #endif 3847 3847 } 3848 3848 Status = STATUS_SUCCESS; 3849 break; 3850 } 3851 case VBOXESC_DBGDUMPBUF: 3852 { 3853 Status = vboxUmdDumpBuf((PVBOXDISPIFESCAPE_DBGDUMPBUF)pEscapeHdr, pEscape->PrivateDriverDataSize); 3849 3854 break; 3850 3855 } -
trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h
r38982 r39160 32 32 # define VBOXESC_SHRC_ADDREF 0xABCD900B 33 33 # define VBOXESC_SHRC_RELEASE 0xABCD900C 34 # define VBOXESC_DBGDUMPBUF 0xABCD900D 34 35 35 36 typedef struct
Note:
See TracChangeset
for help on using the changeset viewer.