Changeset 38112 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Video/disp
- Timestamp:
- Jul 22, 2011 1:26:19 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 73064
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
r37907 r38112 1023 1023 } 1024 1024 1025 #define VBOX_WDDM_SHRC_WO_NOTIFY 1025 1026 static BOOLEAN vboxWddmDalCheckAdd(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pAlloc, BOOLEAN fWrite) 1026 1027 { 1027 1028 if (!pAlloc->hSharedHandle /* only shared resources matter */ 1028 || !fWrite) /* only write op matter */ 1029 { 1029 #ifdef VBOX_WDDM_SHRC_WO_NOTIFY 1030 || !fWrite /* only write op matter */ 1031 #endif 1032 ) 1033 { 1034 #ifdef VBOX_WDDM_SHRC_WO_NOTIFY 1030 1035 Assert(!pAlloc->DirtyAllocListEntry.pNext || (!fWrite && pAlloc->hSharedHandle && pAlloc->fDirtyWrite)); 1036 #else 1037 Assert(!pAlloc->DirtyAllocListEntry.pNext); 1038 #endif 1031 1039 return FALSE; 1032 1040 } … … 1708 1716 1709 1717 Assert(cAllocsKm == Buf.SwapchainInfo.SwapchainInfo.cAllocs || !cAllocsKm); 1710 1718 HRESULT hr = S_OK; 1711 1719 if (cAllocsKm == Buf.SwapchainInfo.SwapchainInfo.cAllocs) 1712 1720 { … … 1717 1725 DdiEscape.pPrivateDriverData = &Buf.SwapchainInfo; 1718 1726 DdiEscape.PrivateDriverDataSize = RT_OFFSETOF(VBOXDISPIFESCAPE_SWAPCHAININFO, SwapchainInfo.ahAllocs[Buf.SwapchainInfo.SwapchainInfo.cAllocs]); 1719 HRESULThr = pDevice->RtCallbacks.pfnEscapeCb(pDevice->pAdapter->hAdapter, &DdiEscape);1727 hr = pDevice->RtCallbacks.pfnEscapeCb(pDevice->pAdapter->hAdapter, &DdiEscape); 1720 1728 #ifdef DEBUG_misha 1721 1729 Assert(hr == S_OK); … … 1725 1733 pSwapchain->hSwapchainKm = Buf.SwapchainInfo.SwapchainInfo.hSwapchainKm; 1726 1734 } 1727 1728 return hr; 1729 } 1735 } 1736 1730 1737 return S_OK; 1731 1738 } … … 1777 1784 pSwapchain->aRTs[i].pAlloc->pSwapchain = NULL; 1778 1785 } 1786 1787 /* first do a Km destroy to ensure all km->um region submissions are completed */ 1788 vboxWddmSwapchainKmDestroy(pDevice, pSwapchain); 1789 vboxDispMpInternalCancel(&pDevice->DefaultContext, pSwapchain); 1779 1790 vboxWddmSwapchainDestroyIf(pDevice, pSwapchain); 1780 vboxWddmSwapchainKmDestroy(pDevice, pSwapchain);1781 1791 vboxWddmSwapchainInit(pSwapchain); 1782 1792 } … … 2843 2853 if (hr == S_OK) 2844 2854 { 2845 vboxVDbgPrint(("VBoxDispD3D: DLL loaded OK\n")); 2846 return TRUE; 2855 hr = vboxDispMpInternalInit(); 2856 Assert(hr == S_OK); 2857 if (hr == S_OK) 2858 { 2859 vboxVDbgPrint(("VBoxDispD3D: DLL loaded OK\n")); 2860 return TRUE; 2861 } 2847 2862 } 2848 2863 VbglR3Term(); … … 2857 2872 vboxVDbgVEHandlerUnregister(); 2858 2873 #endif 2859 HRESULT hr = vboxDisp CmTerm();2874 HRESULT hr = vboxDispMpInternalTerm(); 2860 2875 Assert(hr == S_OK); 2861 2876 if (hr == S_OK) 2862 2877 { 2863 VbglR3Term(); 2864 /// @todo RTR3Term(); 2865 return TRUE; 2878 hr = vboxDispCmTerm(); 2879 Assert(hr == S_OK); 2880 if (hr == S_OK) 2881 { 2882 VbglR3Term(); 2883 /// @todo RTR3Term(); 2884 return TRUE; 2885 } 2866 2886 } 2867 2887 … … 3299 3319 pD3DIfTex = (IDirect3DTexture9*)pRc->aAllocations[0].pD3DIf; 3300 3320 3321 VBOXVDBG_BREAK_SHARED(pRc); 3301 3322 VBOXVDBG_DUMP_SETTEXTURE(pRc); 3302 3323 } … … 3305 3326 pD3DIfTex = (IDirect3DCubeTexture9*)pRc->aAllocations[0].pD3DIf; 3306 3327 3328 VBOXVDBG_BREAK_SHARED(pRc); 3307 3329 VBOXVDBG_DUMP_SETTEXTURE(pRc); 3308 3330 } … … 3433 3455 HRESULT hr = S_OK; 3434 3456 3435 VBOXVDBG_DUMP_DRAWPRIM_ENTER(pDevice 9If);3457 VBOXVDBG_DUMP_DRAWPRIM_ENTER(pDevice); 3436 3458 3437 3459 if (!pDevice->cStreamSources) … … 3491 3513 vboxWddmDalCheckAddRts(pDevice); 3492 3514 3493 VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice 9If);3515 VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice); 3494 3516 3495 3517 vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr)); … … 3506 3528 3507 3529 IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice); 3508 VBOXVDBG_DUMP_DRAWPRIM_ENTER(pDevice 9If);3530 VBOXVDBG_DUMP_DRAWPRIM_ENTER(pDevice); 3509 3531 3510 3532 #ifdef DEBUG … … 3542 3564 vboxWddmDalCheckAddRts(pDevice); 3543 3565 3544 VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice 9If);3566 VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice); 3545 3567 3546 3568 vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr)); … … 3614 3636 hr = pDevice9If->DrawPrimitive(pData->PrimitiveType, pData->FirstVertexOffset, pData->PrimitiveCount); 3615 3637 #else 3616 VBOXVDBG_DUMP_DRAWPRIM_ENTER(pDevice 9If);3638 VBOXVDBG_DUMP_DRAWPRIM_ENTER(pDevice); 3617 3639 3618 3640 #ifdef DEBUG … … 3662 3684 vboxWddmDalCheckAddRts(pDevice); 3663 3685 3664 VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice 9If);3686 VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice); 3665 3687 3666 3688 Assert(hr == S_OK); … … 4191 4213 Assert(pRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM); 4192 4214 } 4215 4216 VBOXVDBG_DUMP_LOCK_ST(pData); 4193 4217 } 4194 4218 } … … 4475 4499 Assert(pData->SubResourceIndex < pRc->cAllocations); 4476 4500 PVBOXWDDMDISP_ALLOCATION pLockAlloc = &pRc->aAllocations[pData->SubResourceIndex]; 4501 4502 VBOXVDBG_DUMP_UNLOCK_ST(pData); 4477 4503 4478 4504 --pLockAlloc->LockInfo.cLocks; … … 4993 5019 Assert(!!(pResource->Flags.SharedResource) == !!(hSharedHandle)); 4994 5020 pAllocation->hSharedHandle = hSharedHandle; 5021 #ifdef DEBUG_misha 5022 if (pResource->Flags.SharedResource) 5023 { 5024 vboxVDbgPrint(("\n\n********\nShared Texture pAlloc(0x%p) Handle(0x%x), (0n%d) CREATED, pid (0x%x), (0n%d)\n***********\n\n", 5025 pAllocation, hSharedHandle, hSharedHandle, GetCurrentProcessId(), GetCurrentProcessId())); 5026 } 5027 #endif 4995 5028 } 4996 5029 … … 5302 5335 { 5303 5336 PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[i]; 5337 #ifdef DEBUG_misha 5338 if (pAlloc->hSharedHandle) 5339 { 5340 vboxVDbgPrint(("\n\n********\nShared Texture pAlloc(0x%p) Handle(0x%x), (0n%d) DESTROYED, pid (0x%x), (0n%d)\n***********\n\n", 5341 pAlloc, pAlloc->hSharedHandle, pAlloc->hSharedHandle, GetCurrentProcessId(), GetCurrentProcessId())); 5342 } 5343 #endif 5304 5344 if (pAlloc->pD3DIf) 5305 5345 pAlloc->pD3DIf->Release(); … … 5585 5625 vboxWddmDalNotifyChange(pDevice); 5586 5626 5587 VBOXVDBG_DUMP_FLUSH(pDevice ->pDevice9If);5627 VBOXVDBG_DUMP_FLUSH(pDevice); 5588 5628 } 5589 5629 vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr)); … … 5970 6010 Assert(pSrcSurfIf); 5971 6011 5972 VBOXVDBG_DUMP_BLT_ENTER(pSrcRc, pSrcSurfIf, &pData->SrcRect, pDstRc, pDstSurfIf, &pData->DstRect); 6012 VBOXVDBG_BREAK_SHARED(pSrcRc); 6013 VBOXVDBG_BREAK_SHARED(pDstRc); 6014 VBOXVDBG_DUMP_BLT_ENTER(pSrcAlloc, pSrcSurfIf, &pData->SrcRect, pDstAlloc, pDstSurfIf, &pData->DstRect); 5973 6015 5974 6016 /* we support only Point & Linear, we ignore [Begin|Continue|End]PresentToDwm */ … … 5981 6023 Assert(hr == S_OK); 5982 6024 5983 VBOXVDBG_DUMP_BLT_LEAVE(pSrc Rc, pSrcSurfIf, &pData->SrcRect, pDstRc, pDstSurfIf, &pData->DstRect);6025 VBOXVDBG_DUMP_BLT_LEAVE(pSrcAlloc, pSrcSurfIf, &pData->SrcRect, pDstAlloc, pDstSurfIf, &pData->DstRect); 5984 6026 5985 6027 pSrcSurfIf->Release(); … … 6453 6495 { 6454 6496 // Assert(!pDevice->cScreens); 6497 /* destroy the device first, since destroying PVBOXWDDMDISP_SWAPCHAIN would result in a device window termination */ 6498 if (pDevice->pDevice9If) 6499 { 6500 pDevice->pDevice9If->Release(); 6501 } 6455 6502 vboxWddmSwapchainDestroyAll(pDevice); 6456 if (pDevice->pDevice9If)6457 {6458 pDevice->pDevice9If->Release();6459 }6460 6503 } 6461 6504 … … 6814 6857 6815 6858 #ifdef DEBUG_misha 6816 vboxVDbgPrint(("\n\n********\nShared Resource (0x%x), (0n%d) openned\n\n\n", hSharedHandle, hSharedHandle)); 6859 vboxVDbgPrint(("\n\n********\nShared Texture pAlloc(0x%p) Handle(0x%x), (0n%d) OPENED, pid (0x%x), (0n%d)\n***********\n\n", 6860 pAllocation, hSharedHandle, hSharedHandle, GetCurrentProcessId(), GetCurrentProcessId())); 6861 6817 6862 #endif 6818 6863 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.h
r37840 r38112 207 207 D3DDDI_LOCKFLAGS fFlags; 208 208 D3DLOCKED_RECT LockedRect; 209 #ifdef VBOXWDDMDISP_DEBUG 210 PVOID pvData; 211 #endif 209 212 } VBOXWDDMDISP_LOCKINFO; 210 213 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3DCmn.h
r36867 r38112 38 38 #include "common/wddm/VBoxMPIf.h" 39 39 #include "VBoxDispCm.h" 40 #include "VBoxDispMpInternal.h" 40 41 #include "VBoxDispKmt.h" 41 42 #ifdef VBOX_WITH_CRHGSMI -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3DIf.cpp
r36867 r38112 269 269 if (!GetClassInfo(hInstance, VBOXDISPWND_NAME, &wc)) 270 270 { 271 wc.style = CS_OWNDC;271 wc.style = 0;//CS_OWNDC; 272 272 wc.lpfnWndProc = WindowProc; 273 273 wc.cbClsExtra = 0; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp
r37870 r38112 50 50 51 51 #ifdef VBOXWDDMDISP_DEBUG 52 DWORD g_VBoxVDbgFDumpSetTexture = 0; 53 DWORD g_VBoxVDbgFDumpDrawPrim = 0; 54 DWORD g_VBoxVDbgFDumpTexBlt = 0; 55 DWORD g_VBoxVDbgFDumpBlt = 0; 56 DWORD g_VBoxVDbgFDumpRtSynch = 0; 57 DWORD g_VBoxVDbgFDumpFlush = 0; 58 DWORD g_VBoxVDbgFDumpShared = 0; 52 #define VBOXWDDMDISP_DEBUG_DUMP_DEFAULT 1 53 DWORD g_VBoxVDbgFDumpSetTexture = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 54 DWORD g_VBoxVDbgFDumpDrawPrim = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 55 DWORD g_VBoxVDbgFDumpTexBlt = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 56 DWORD g_VBoxVDbgFDumpBlt = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 57 DWORD g_VBoxVDbgFDumpRtSynch = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 58 DWORD g_VBoxVDbgFDumpFlush = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 59 DWORD g_VBoxVDbgFDumpShared = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 60 DWORD g_VBoxVDbgFDumpLock = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 61 DWORD g_VBoxVDbgFDumpUnlock = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 62 63 DWORD g_VBoxVDbgFBreakShared = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT; 59 64 60 65 DWORD g_VBoxVDbgPid = 0; … … 175 180 { 176 181 vboxVDbgDoDumpSurfRectByRc(pPrefix, pAlloc->pRc, pAlloc->iAlloc, pRect, pSuffix); 182 } 183 184 VOID vboxVDbgDoPrintDumpCmd(const void *pvData, uint32_t width, uint32_t height, uint32_t bpp, uint32_t pitch) 185 { 186 vboxVDbgPrint(("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">surface info</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n", 187 pvData, width, height, bpp, pitch, 188 pvData, width, height, bpp, pitch)); 177 189 } 178 190 … … 207 219 { 208 220 UINT bpp = vboxWddmCalcBitsPerPixel(pAlloc->SurfDesc.format); 209 vboxVDbgPrint(("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">surface info</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n", 210 LockData.pData, pAlloc->D3DWidth, pAlloc->SurfDesc.height, bpp, pAlloc->SurfDesc.pitch, 211 LockData.pData, pAlloc->D3DWidth, pAlloc->SurfDesc.height, bpp, pAlloc->SurfDesc.pitch)); 221 vboxVDbgDoPrintDumpCmd(LockData.pData, pAlloc->D3DWidth, pAlloc->SurfDesc.height, bpp, pAlloc->SurfDesc.pitch); 212 222 if (pRect) 213 223 { … … 215 225 Assert(pRect->bottom > pRect->top); 216 226 vboxVDbgDoPrintRect("rect: ", pRect, "\n"); 217 vboxVDbgPrint(("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">rect info</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n", 218 ((uint8_t*)LockData.pData) + (pRect->top * pAlloc->SurfDesc.pitch) + ((pRect->left * bpp) >> 3), 219 pRect->right - pRect->left, pRect->bottom - pRect->top, bpp, pAlloc->SurfDesc.pitch, 220 ((uint8_t*)LockData.pData) + (pRect->top * pAlloc->SurfDesc.pitch) + ((pRect->left * bpp) >> 3), 221 pRect->right - pRect->left, pRect->bottom - pRect->top, bpp, pAlloc->SurfDesc.pitch)); 227 vboxVDbgDoPrintDumpCmd(((uint8_t*)LockData.pData) + (pRect->top * pAlloc->SurfDesc.pitch) + ((pRect->left * bpp) >> 3), 228 pRect->right - pRect->left, pRect->bottom - pRect->top, bpp, pAlloc->SurfDesc.pitch); 222 229 } 223 230 Assert(0); … … 270 277 { 271 278 UINT bpp = vboxWddmCalcBitsPerPixel((D3DDDIFORMAT)Desc.Format); 272 vboxVDbgPrint(("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">surface info</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n", 273 Lr.pBits, Desc.Width, Desc.Height, bpp, Lr.Pitch, 274 Lr.pBits, Desc.Width, Desc.Height, bpp, Lr.Pitch)); 279 vboxVDbgDoPrintDumpCmd(Lr.pBits, Desc.Width, Desc.Height, bpp, Lr.Pitch); 275 280 if (pRect) 276 281 { … … 278 283 Assert(pRect->bottom > pRect->top); 279 284 vboxVDbgDoPrintRect("rect: ", pRect, "\n"); 280 vboxVDbgPrint(("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">rect info</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n", 281 ((uint8_t*)Lr.pBits) + (pRect->top * Lr.Pitch) + ((pRect->left * bpp) >> 3), 282 pRect->right - pRect->left, pRect->bottom - pRect->top, bpp, Lr.Pitch, 283 ((uint8_t*)Lr.pBits) + (pRect->top * Lr.Pitch) + ((pRect->left * bpp) >> 3), 284 pRect->right - pRect->left, pRect->bottom - pRect->top, bpp, Lr.Pitch)); 285 vboxVDbgDoPrintDumpCmd(((uint8_t*)Lr.pBits) + (pRect->top * Lr.Pitch) + ((pRect->left * bpp) >> 3), 286 pRect->right - pRect->left, pRect->bottom - pRect->top, bpp, Lr.Pitch); 285 287 } 286 288 … … 386 388 IDirect3DSurface9 *pSurf = (IDirect3DSurface9 *)pRc; 387 389 vboxVDbgDoDumpSurfRect("", pSurf, pRect, "\n", true); 390 break; 388 391 } 389 392 default: … … 398 401 } 399 402 403 VOID vboxVDbgDoDumpRcRectByAlloc(const char * pPrefix, const PVBOXWDDMDISP_ALLOCATION pAlloc, IDirect3DResource9 *pD3DIf, const RECT *pRect, const char* pSuffix) 404 { 405 if (pPrefix) 406 vboxVDbgPrint(("%s", pPrefix)); 407 408 if (!pD3DIf) 409 { 410 pD3DIf = (IDirect3DResource9*)pAlloc->pD3DIf; 411 } 412 413 vboxVDbgPrint(("Rc(0x%p), pAlloc(0x%x), pD3DIf(0x%p), SharedHandle(0x%p)\n", pAlloc->pRc, pAlloc, pD3DIf, pAlloc->pRc->aAllocations[0].hSharedHandle)); 414 415 vboxVDbgDoDumpRcRect("", pD3DIf, pRect, pSuffix); 416 } 417 400 418 VOID vboxVDbgDoDumpRcRectByRc(const char * pPrefix, const PVBOXWDDMDISP_RESOURCE pRc, const RECT *pRect, const char* pSuffix) 401 419 { 402 vboxVDbgDoDumpRcRect (pPrefix, (IDirect3DResource9*)pRc->aAllocations[0].pD3DIf, pRect, pSuffix);420 vboxVDbgDoDumpRcRectByAlloc(pPrefix, &pRc->aAllocations[0], NULL, pRect, pSuffix); 403 421 } 404 422 … … 408 426 } 409 427 410 VOID vboxVDbgDoDumpRt(const char * pPrefix, IDirect3DDevice9 *pDevice, const char * pSuffix) 411 { 412 IDirect3DSurface9 *pRt; 413 HRESULT hr = pDevice->GetRenderTarget(0, &pRt); 414 Assert(hr == S_OK); 415 if (hr == S_OK) 416 { 417 vboxVDbgDoDumpSurf(pPrefix, pRt, pSuffix); 428 VOID vboxVDbgDoDumpRt(const char * pPrefix, PVBOXWDDMDISP_DEVICE pDevice, const char * pSuffix) 429 { 430 for (UINT i = 0; i < pDevice->cRTs; ++i) 431 { 432 IDirect3DSurface9 *pRt; 433 PVBOXWDDMDISP_ALLOCATION pAlloc = pDevice->apRTs[i]; 434 IDirect3DDevice9 *pDeviceIf = pDevice->pDevice9If; 435 HRESULT hr = pDeviceIf->GetRenderTarget(i, &pRt); 436 Assert(hr == S_OK); 437 if (hr == S_OK) 438 { 439 // Assert(pAlloc->pD3DIf == pRt); 440 vboxVDbgDoDumpRcRectByAlloc(pPrefix, pAlloc, NULL, NULL, "\n"); 441 pRt->Release(); 442 } 443 else 444 { 445 vboxVDbgPrint((__FUNCTION__": ERROR getting rt: 0x%x", hr)); 446 } 447 } 448 } 449 450 VOID vboxVDbgDoDumpLockUnlockSurfTex(const char * pPrefix, const PVBOXWDDMDISP_ALLOCATION pAlloc, const char * pSuffix, bool fBreak) 451 { 452 if (pPrefix) 453 { 454 vboxVDbgPrint(("%s", pPrefix)); 455 } 456 457 Assert(!pAlloc->hSharedHandle); 458 459 UINT bpp = vboxWddmCalcBitsPerPixel(pAlloc->SurfDesc.format); 460 uint32_t width, height, pitch; 461 RECT Rect, *pRect; 462 void *pvData; 463 Assert(!pAlloc->LockInfo.fFlags.RangeValid); 464 Assert(!pAlloc->LockInfo.fFlags.BoxValid); 465 if (pAlloc->LockInfo.fFlags.AreaValid) 466 { 467 pRect = &pAlloc->LockInfo.Area; 468 width = pAlloc->LockInfo.Area.left - pAlloc->LockInfo.Area.right; 469 height = pAlloc->LockInfo.Area.bottom - pAlloc->LockInfo.Area.top; 418 470 } 419 471 else 420 472 { 421 vboxVDbgPrint((__FUNCTION__": ERROR getting rt: 0x%x", hr)); 422 } 473 width = pAlloc->SurfDesc.width; 474 height = pAlloc->SurfDesc.height; 475 Rect.top = 0; 476 Rect.bottom = height; 477 Rect.left = 0; 478 Rect.right = width; 479 pRect = &Rect; 480 } 481 482 if (pAlloc->LockInfo.fFlags.NotifyOnly) 483 { 484 pitch = pAlloc->SurfDesc.pitch; 485 pvData = ((uint8_t*)pAlloc->pvMem) + pitch*pRect->top + ((bpp*pRect->left) >> 3); 486 } 487 else 488 { 489 pvData = pAlloc->LockInfo.pvData; 490 } 491 492 vboxVDbgPrint(("pRc(0x%p) iAlloc(%d), type(%d), cLocks(%d)\n", pAlloc->pRc, pAlloc->iAlloc, pAlloc->enmD3DIfType, pAlloc->LockInfo.cLocks)); 493 494 vboxVDbgDoPrintDumpCmd(pvData, width, height, bpp, pitch); 495 496 if (fBreak) 497 { 498 Assert(0); 499 } 500 501 if (pSuffix) 502 { 503 vboxVDbgPrint(("%s", pSuffix)); 504 } 505 506 } 507 508 VOID vboxVDbgDoDumpLockSurfTex(const char * pPrefix, const D3DDDIARG_LOCK* pData, const char * pSuffix, bool fBreak) 509 { 510 const PVBOXWDDMDISP_RESOURCE pRc = (const PVBOXWDDMDISP_RESOURCE)pData->hResource; 511 const PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[pData->SubResourceIndex]; 512 pAlloc->LockInfo.pvData = pData->pSurfData; 513 vboxVDbgDoDumpLockUnlockSurfTex(pPrefix, pAlloc, pSuffix, fBreak); 514 } 515 516 VOID vboxVDbgDoDumpUnlockSurfTex(const char * pPrefix, const D3DDDIARG_UNLOCK* pData, const char * pSuffix, bool fBreak) 517 { 518 const PVBOXWDDMDISP_RESOURCE pRc = (const PVBOXWDDMDISP_RESOURCE)pData->hResource; 519 const PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[pData->SubResourceIndex]; 520 vboxVDbgDoDumpLockUnlockSurfTex(pPrefix, pAlloc, pSuffix, fBreak); 423 521 } 424 522 … … 426 524 { 427 525 Assert(pRc->cAllocations > iAlloc); 428 PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[iAlloc];526 const PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[iAlloc]; 429 527 BOOL bPrimary = pRc->RcDesc.fFlags.Primary; 430 528 BOOL bFrontBuf = FALSE; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h
r37870 r38112 111 111 extern DWORD g_VBoxVDbgFDumpFlush; 112 112 extern DWORD g_VBoxVDbgFDumpShared; 113 extern DWORD g_VBoxVDbgFDumpLock; 114 extern DWORD g_VBoxVDbgFDumpUnlock; 115 116 extern DWORD g_VBoxVDbgFBreakShared; 113 117 114 118 void vboxDispLogDrvF(char * szString, ...); … … 126 130 VOID vboxVDbgDoDumpRcRect(const char * pPrefix, IDirect3DResource9 *pRc, const RECT *pRect, const char * pSuffix); 127 131 VOID vboxVDbgDoDumpRcRectByRc(const char * pPrefix, const PVBOXWDDMDISP_RESOURCE pRc, const RECT *pRect, const char* pSuffix); 132 VOID vboxVDbgDoDumpRcRectByAlloc(const char * pPrefix, const PVBOXWDDMDISP_ALLOCATION pAlloc, IDirect3DResource9 *pD3DIf, const RECT *pRect, const char* pSuffix); 128 133 VOID vboxVDbgDoDumpTex(const char * pPrefix, IDirect3DBaseTexture9 *pTexBase, const char * pSuffix); 129 VOID vboxVDbgDoDumpRt(const char * pPrefix, IDirect3DDevice9*pDevice, const char * pSuffix);134 VOID vboxVDbgDoDumpRt(const char * pPrefix, struct VBOXWDDMDISP_DEVICE *pDevice, const char * pSuffix); 130 135 131 136 void vboxVDbgDoPrintRect(const char * pPrefix, const RECT *pRect, const char * pSuffix); 132 137 void vboxVDbgDoPrintAlloc(const char * pPrefix, const PVBOXWDDMDISP_RESOURCE pRc, uint32_t iAlloc, const char * pSuffix); 133 VOID vboxVDbgDoDumpRtData(char * pPrefix, IDirect3DDevice9 *pDevice, char * pSuffix); 138 139 VOID vboxVDbgDoDumpLockSurfTex(const char * pPrefix, const D3DDDIARG_LOCK* pData, const char * pSuffix, bool fBreak); 140 VOID vboxVDbgDoDumpUnlockSurfTex(const char * pPrefix, const D3DDDIARG_UNLOCK* pData, const char * pSuffix, bool fBreak); 141 134 142 135 143 extern DWORD g_VBoxVDbgPid; … … 144 152 ) 145 153 154 #define VBOXVDBG_IS_BREAK_ALLOWED(_type) ( \ 155 g_VBoxVDbgFBreak##_type \ 156 && (g_VBoxVDbgFBreak##_type == 1 \ 157 || VBOXVDBG_IS_DUMP_ALLOWED_PID(g_VBoxVDbgFBreak##_type) \ 158 ) \ 159 ) 160 146 161 #define VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) (\ 147 162 (_pRc)->RcDesc.fFlags.SharedResource \ … … 149 164 ) 150 165 166 #define VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc) (\ 167 (_pRc)->RcDesc.fFlags.SharedResource \ 168 && VBOXVDBG_IS_BREAK_ALLOWED(Shared) \ 169 ) 170 171 #define VBOXVDBG_BREAK_SHARED(_pRc) do { \ 172 if (VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc)) { \ 173 vboxVDbgPrint(("Break on shared access: Rc(0x%p), SharedHandle(0x%p)\n", (_pRc), (_pRc)->aAllocations[0].hSharedHandle)); \ 174 AssertFailed(); \ 175 } \ 176 } while (0) 177 151 178 #define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { \ 152 179 if (VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \ … … 168 195 ) \ 169 196 { \ 170 vboxVDbgPrint(("== "__FUNCTION__": Texture Dump, SharedHandle(0x%p)\n", (_pRc)->aAllocations[0].hSharedHandle)); \ 171 vboxVDbgDoDumpRcRectByRc("", _pRc, NULL, "\n"); \ 197 vboxVDbgDoDumpRcRectByRc("== "__FUNCTION__": ", _pRc, NULL, "\n"); \ 172 198 } \ 173 199 } while (0) … … 181 207 RECT _DstRect; \ 182 208 vboxWddmRectMoved(&_DstRect, (_pSrcRect), (_pDstPoint)->x, (_pDstPoint)->y); \ 183 vboxVDbgDoDumpRcRectByRc("==>"__FUNCTION__" Src: \n", (_pSrcRc), (_pSrcRect), "\n"); \184 vboxVDbgDoDumpRcRectByRc("==>"__FUNCTION__" Dst: \n", (_pDstRc), &_DstRect, "\n"); \209 vboxVDbgDoDumpRcRectByRc("==>"__FUNCTION__" Src: ", (_pSrcRc), (_pSrcRect), "\n"); \ 210 vboxVDbgDoDumpRcRectByRc("==>"__FUNCTION__" Dst: ", (_pDstRc), &_DstRect, "\n"); \ 185 211 } \ 186 212 } while (0) … … 194 220 RECT _DstRect; \ 195 221 vboxWddmRectMoved(&_DstRect, (_pSrcRect), (_pDstPoint)->x, (_pDstPoint)->y); \ 196 vboxVDbgDoDumpRcRectByRc("<=="__FUNCTION__" Src: \n", (_pSrcRc), (_pSrcRect), "\n"); \197 vboxVDbgDoDumpRcRectByRc("<=="__FUNCTION__" Dst: \n", (_pDstRc), &_DstRect, "\n"); \198 } \ 199 } while (0) 200 201 #define VBOXVDBG_DUMP_BLT_ENTER(_pSrc Rc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { \222 vboxVDbgDoDumpRcRectByRc("<=="__FUNCTION__" Src: ", (_pSrcRc), (_pSrcRect), "\n"); \ 223 vboxVDbgDoDumpRcRectByRc("<=="__FUNCTION__" Dst: ", (_pDstRc), &_DstRect, "\n"); \ 224 } \ 225 } while (0) 226 227 #define VBOXVDBG_DUMP_BLT_ENTER(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \ 202 228 if (VBOXVDBG_IS_DUMP_ALLOWED(Blt) \ 203 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \ 204 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \ 205 ) \ 206 { \ 207 vboxVDbgPrint(("==>"__FUNCTION__" Src: SharedHandle(0x%p)\n", (_pSrcRc)->aAllocations[0].hSharedHandle)); \ 208 vboxVDbgDoDumpSurfRect("", (_pSrcSurf), (_pSrcRect), "\n", true); \ 209 vboxVDbgPrint(("==>"__FUNCTION__" Dst: SharedHandle(0x%p)\n", (_pDstRc)->aAllocations[0].hSharedHandle)); \ 210 vboxVDbgDoDumpSurfRect("", (_pDstSurf), (_pDstRect), "\n", true); \ 211 } \ 212 } while (0) 213 214 #define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { \ 229 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pSrcAlloc)->pRc) \ 230 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pDstAlloc)->pRc) \ 231 ) \ 232 { \ 233 vboxVDbgDoDumpRcRectByAlloc("==>"__FUNCTION__" Src: ", (_pSrcAlloc), (_pSrcSurf), (_pSrcRect), "\n"); \ 234 vboxVDbgDoDumpRcRectByAlloc("==>"__FUNCTION__" Dst: ", (_pDstAlloc), (_pDstSurf), (_pDstRect), "\n"); \ 235 } \ 236 } while (0) 237 238 #define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcAlloc, _pSrcSurf, _pSrcRect, _pDstAlloc, _pDstSurf, _pDstRect) do { \ 215 239 if (VBOXVDBG_IS_DUMP_ALLOWED(Blt) \ 216 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \ 217 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \ 218 ) \ 219 { \ 220 vboxVDbgPrint(("<=="__FUNCTION__" Src: SharedHandle(0x%p)\n", (_pSrcRc)->aAllocations[0].hSharedHandle)); \ 221 vboxVDbgDoDumpSurfRect("", (_pSrcSurf), (_pSrcRect), "\n", true); \ 222 vboxVDbgPrint(("<=="__FUNCTION__" Dst: SharedHandle(0x%p)\n", (_pDstRc)->aAllocations[0].hSharedHandle)); \ 223 vboxVDbgDoDumpSurfRect("", (_pDstSurf), (_pDstRect), "\n", true); \ 240 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pSrcAlloc)->pRc) \ 241 || VBOXVDBG_IS_DUMP_SHARED_ALLOWED((_pDstAlloc)->pRc) \ 242 ) \ 243 { \ 244 vboxVDbgDoDumpRcRectByAlloc("<=="__FUNCTION__" Src: ", (_pSrcAlloc), (_pSrcSurf), (_pSrcRect), "\n"); \ 245 vboxVDbgDoDumpRcRectByAlloc("<=="__FUNCTION__" Dst: ", (_pDstAlloc), (_pDstSurf), (_pDstRect), "\n"); \ 224 246 } \ 225 247 } while (0) … … 238 260 }\ 239 261 } while (0) 262 263 #define VBOXVDBG_DUMP_LOCK_ST(_pData) do { \ 264 if (VBOXVDBG_IS_DUMP_ALLOWED(Lock) \ 265 || VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \ 266 ) \ 267 { \ 268 vboxVDbgDoDumpLockSurfTex("== "__FUNCTION__": ", (_pData), "\n", VBOXVDBG_IS_DUMP_ALLOWED(Lock)); \ 269 } \ 270 } while (0) 271 272 #define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { \ 273 if (VBOXVDBG_IS_DUMP_ALLOWED(Unlock) \ 274 ) \ 275 { \ 276 vboxVDbgDoDumpUnlockSurfTex("== "__FUNCTION__": ", (_pData), "\n", true); \ 277 } \ 278 } while (0) 279 240 280 #else 241 281 #define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { } while (0) … … 248 288 #define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { } while (0) 249 289 #define VBOXVDBG_DUMP_FLUSH(_pDevice) do { } while (0) 290 #define VBOXVDBG_DUMP_LOCK_ST(_pData) do { } while (0) 291 #define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { } while (0) 250 292 #endif 251 293 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispMp.cpp
r36867 r38112 30 30 typedef struct VBOXDISPMP 31 31 { 32 CRITICAL_SECTION CritSect; 32 33 PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pEscapeCmd; 33 34 uint32_t cbEscapeCmd; … … 54 55 } 55 56 57 DECLINLINE(VOID) vboxVideoCmIterCopyToBack(PVBOXVIDEOCM_ITERATOR pIter, PVBOXVIDEOCM_CMD_HDR pCur) 58 { 59 memcpy((((uint8_t*)pIter->pCur) + pIter->cbRemain), pCur, pCur->cbCmd); 60 pIter->cbRemain += pCur->cbCmd; 61 } 62 56 63 DECLINLINE(bool) vboxVideoCmIterHasNext(PVBOXVIDEOCM_ITERATOR pIter) 57 64 { … … 63 70 DECLCALLBACK(HRESULT) vboxDispMpEnableEvents() 64 71 { 72 EnterCriticalSection(&g_VBoxDispMp.CritSect); 65 73 g_VBoxDispMp.pEscapeCmd = NULL; 66 74 g_VBoxDispMp.cbEscapeCmd = 0; … … 69 77 vboxUhgsmiGlobalSetCurrent(); 70 78 #endif 79 LeaveCriticalSection(&g_VBoxDispMp.CritSect); 71 80 return S_OK; 72 81 } … … 75 84 DECLCALLBACK(HRESULT) vboxDispMpDisableEvents() 76 85 { 86 EnterCriticalSection(&g_VBoxDispMp.CritSect); 77 87 if (g_VBoxDispMp.pEscapeCmd) 88 { 78 89 RTMemFree(g_VBoxDispMp.pEscapeCmd); 90 g_VBoxDispMp.pEscapeCmd = NULL; 91 } 79 92 #ifdef VBOX_WITH_CRHGSMI 80 93 vboxUhgsmiGlobalClearCurrent(); 81 94 #endif 95 LeaveCriticalSection(&g_VBoxDispMp.CritSect); 82 96 return S_OK; 83 97 } … … 90 104 { 91 105 HRESULT hr = S_OK; 106 EnterCriticalSection(&g_VBoxDispMp.CritSect); 92 107 PVBOXVIDEOCM_CMD_HDR pHdr = vboxVideoCmIterNext(&g_VBoxDispMp.Iterator); 93 108 if (!pHdr) … … 100 115 g_VBoxDispMp.cbEscapeCmd = VBOXDISPMP_BUF_INITSIZE; 101 116 else 117 { 118 LeaveCriticalSection(&g_VBoxDispMp.CritSect); 102 119 return E_OUTOFMEMORY; 120 } 103 121 } 104 122 … … 150 168 PVBOXVIDEOCM_CMD_RECTS_INTERNAL pCmdInternal = (PVBOXVIDEOCM_CMD_RECTS_INTERNAL)(((uint8_t*)pHdr) + sizeof (VBOXVIDEOCM_CMD_HDR)); 151 169 PVBOXWDDMDISP_SWAPCHAIN pSwapchain = (PVBOXWDDMDISP_SWAPCHAIN)pCmdInternal->hSwapchainUm; 152 /* todo: synchronization */ 170 /* the miniport driver should ensure all swapchain-involved commands are completed before swapchain termination, 171 * so we should have it always valid here */ 153 172 Assert(pSwapchain); 173 Assert(pSwapchain->hWnd); 154 174 pRegions->hWnd = pSwapchain->hWnd; 155 175 pRegions->pRegions = &pCmdInternal->Cmd; 156 176 } 177 LeaveCriticalSection(&g_VBoxDispMp.CritSect); 157 178 return hr; 158 179 } … … 175 196 return S_OK; 176 197 } 198 199 HRESULT vboxDispMpInternalInit() 200 { 201 memset(&g_VBoxDispMp, 0, sizeof (g_VBoxDispMp)); 202 InitializeCriticalSection(&g_VBoxDispMp.CritSect); 203 return S_OK; 204 } 205 206 HRESULT vboxDispMpInternalTerm() 207 { 208 vboxDispMpDisableEvents(); 209 DeleteCriticalSection(&g_VBoxDispMp.CritSect); 210 return S_OK; 211 } 212 213 HRESULT vboxDispMpInternalCancel(VBOXWDDMDISP_CONTEXT *pContext, PVBOXWDDMDISP_SWAPCHAIN pSwapchain) 214 { 215 HRESULT hr = S_OK; 216 EnterCriticalSection(&g_VBoxDispMp.CritSect); 217 do 218 { 219 /* the pEscapeCmd is used as an indicator to whether the events capturing is active */ 220 if (!g_VBoxDispMp.pEscapeCmd) 221 break; 222 223 /* copy the iterator data to restore it back later */ 224 VBOXVIDEOCM_ITERATOR IterCopy = g_VBoxDispMp.Iterator; 225 226 /* first check if we have matching elements */ 227 PVBOXVIDEOCM_CMD_HDR pHdr; 228 bool fHasMatch = false; 229 while (pHdr = vboxVideoCmIterNext(&g_VBoxDispMp.Iterator)) 230 { 231 VBOXWDDMDISP_CONTEXT *pCurContext = (VBOXWDDMDISP_CONTEXT*)pHdr->u64UmData; 232 if (pCurContext != pContext) 233 continue; 234 235 if (!pSwapchain) 236 { 237 fHasMatch = true; 238 break; 239 } 240 241 PVBOXVIDEOCM_CMD_RECTS_INTERNAL pCmdInternal = (PVBOXVIDEOCM_CMD_RECTS_INTERNAL)(((uint8_t*)pHdr) + sizeof (VBOXVIDEOCM_CMD_HDR)); 242 PVBOXWDDMDISP_SWAPCHAIN pCurSwapchain = (PVBOXWDDMDISP_SWAPCHAIN)pCmdInternal->hSwapchainUm; 243 if (pCurSwapchain != pSwapchain) 244 continue; 245 246 fHasMatch = true; 247 break; 248 } 249 250 /* restore the iterator */ 251 g_VBoxDispMp.Iterator = IterCopy; 252 253 if (!fHasMatch) 254 break; 255 256 /* there are elements to remove */ 257 PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pEscapeCmd = (PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)RTMemAlloc(g_VBoxDispMp.cbEscapeCmd); 258 if (!pEscapeCmd) 259 { 260 WARN(("no memory")); 261 hr = E_OUTOFMEMORY; 262 break; 263 } 264 /* copy the header data */ 265 *pEscapeCmd = *g_VBoxDispMp.pEscapeCmd; 266 /* now copy the command data filtering out the canceled commands */ 267 pHdr = (PVBOXVIDEOCM_CMD_HDR)(((uint8_t*)pEscapeCmd) + sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)); 268 vboxVideoCmIterInit(&g_VBoxDispMp.Iterator, pHdr, 0); 269 while (pHdr = vboxVideoCmIterNext(&IterCopy)) 270 { 271 VBOXWDDMDISP_CONTEXT *pCurContext = (VBOXWDDMDISP_CONTEXT*)pHdr->u64UmData; 272 if (pCurContext != pContext) 273 { 274 vboxVideoCmIterCopyToBack(&g_VBoxDispMp.Iterator, pHdr); 275 continue; 276 } 277 278 if (!pSwapchain) 279 { 280 /* match, just continue */ 281 continue; 282 } 283 284 PVBOXVIDEOCM_CMD_RECTS_INTERNAL pCmdInternal = (PVBOXVIDEOCM_CMD_RECTS_INTERNAL)(((uint8_t*)pHdr) + sizeof (VBOXVIDEOCM_CMD_HDR)); 285 PVBOXWDDMDISP_SWAPCHAIN pCurSwapchain = (PVBOXWDDMDISP_SWAPCHAIN)pCmdInternal->hSwapchainUm; 286 if (pCurSwapchain != pSwapchain) 287 { 288 vboxVideoCmIterCopyToBack(&g_VBoxDispMp.Iterator, pHdr); 289 continue; 290 } 291 /* match, just continue */ 292 } 293 294 Assert(g_VBoxDispMp.pEscapeCmd); 295 RTMemFree(g_VBoxDispMp.pEscapeCmd); 296 Assert(pEscapeCmd); 297 g_VBoxDispMp.pEscapeCmd = pEscapeCmd; 298 } while (0); 299 300 LeaveCriticalSection(&g_VBoxDispMp.CritSect); 301 return hr; 302 } -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxScreen.cpp
r36867 r38112 282 282 if (!GetClassInfo(hInstance, VBOXSCREENMONWND_NAME, &wc)) 283 283 { 284 wc.style = CS_OWNDC;284 wc.style = 0;//CS_OWNDC; 285 285 wc.lpfnWndProc = vboxScreenMonWndProc; 286 286 wc.cbClsExtra = 0;
Note:
See TracChangeset
for help on using the changeset viewer.