Changeset 100053 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Video
- Timestamp:
- Jun 2, 2023 3:22:18 PM (21 months ago)
- svn:sync-xref-src-repo-rev:
- 157732
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/gallium
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/gallium/Svga.cpp
r100010 r100053 223 223 } 224 224 225 static NTSTATUS svgaCreateMiniportMob(VBOXWDDM_EXT_VMSVGA *pSvga) 226 { 227 NTSTATUS Status; 228 229 uint32_t const cbMiniportMob = RT_ALIGN_32(sizeof(VMSVGAMINIPORTMOB), PAGE_SIZE); 230 RTR0MEMOBJ hMemObjMiniportMob; 231 int rc = RTR0MemObjAllocPageTag(&hMemObjMiniportMob, cbMiniportMob, 232 false /* executable R0 mapping */, "VMSVGAMOB0"); 233 if (RT_SUCCESS(rc)) 234 { 235 Status = SvgaMobCreate(pSvga, &pSvga->pMiniportMob, cbMiniportMob / PAGE_SIZE, 0); 236 if (NT_SUCCESS(Status)) 237 { 238 Status = SvgaMobSetMemObj(pSvga->pMiniportMob, hMemObjMiniportMob); 239 if (NT_SUCCESS(Status)) 240 { 241 void *pvCmd = SvgaCmdBuf3dCmdReserve(pSvga, SVGA_3D_CMD_DEFINE_GB_MOB64, sizeof(SVGA3dCmdDefineGBMob64), SVGA3D_INVALID_ID); 242 if (pvCmd) 243 { 244 SVGA3dCmdDefineGBMob64 *pCmd = (SVGA3dCmdDefineGBMob64 *)pvCmd; 245 pCmd->mobid = VMSVGAMOB_ID(pSvga->pMiniportMob); 246 pCmd->ptDepth = pSvga->pMiniportMob->gbo.enmMobFormat; 247 pCmd->base = pSvga->pMiniportMob->gbo.base; 248 pCmd->sizeInBytes = pSvga->pMiniportMob->gbo.cbGbo; 249 SvgaCmdBufCommit(pSvga, sizeof(*pCmd)); 250 251 pSvga->pMiniportMobData = (VMSVGAMINIPORTMOB volatile *)RTR0MemObjAddress(hMemObjMiniportMob); 252 memset((void *)pSvga->pMiniportMobData, 0, cbMiniportMob); 253 RTListInit(&pSvga->listMobDeferredDestruction); 254 //pSvga->u64MobFence = 0; 255 } 256 else 257 AssertFailedStmt(Status = STATUS_INSUFFICIENT_RESOURCES); 258 } 259 } 260 } 261 else 262 AssertFailedStmt(Status = STATUS_INSUFFICIENT_RESOURCES); 263 264 return Status; 265 } 266 225 267 static void svgaHwStop(VBOXWDDM_EXT_VMSVGA *pSvga) 226 268 { … … 339 381 } 340 382 341 /* Free the miniport mob at last. Can't use SvgaMobDestroy here because it tells the host to write a fence 342 * value to this mob. */ 343 void *pvCmd = SvgaCmdBuf3dCmdReserve(pSvga, SVGA_3D_CMD_DESTROY_GB_MOB, sizeof(SVGA3dCmdDestroyGBMob), SVGA3D_INVALID_ID); 344 if (pvCmd) 345 { 346 SVGA3dCmdDestroyGBMob *pCmd = (SVGA3dCmdDestroyGBMob *)pvCmd; 347 pCmd->mobid = VMSVGAMOB_ID(pSvga->pMiniportMob); 348 SvgaCmdBufCommit(pSvga, sizeof(*pCmd)); 349 } 350 else 351 AssertFailed(); 383 if (RT_BOOL(pSvga->u32Caps & SVGA_CAP_DX)) 384 { 385 /* Free the miniport mob at last. Can't use SvgaMobDestroy here because it tells the host to write a fence 386 * value to this mob. */ 387 void *pvCmd = SvgaCmdBuf3dCmdReserve(pSvga, SVGA_3D_CMD_DESTROY_GB_MOB, sizeof(SVGA3dCmdDestroyGBMob), SVGA3D_INVALID_ID); 388 if (pvCmd) 389 { 390 SVGA3dCmdDestroyGBMob *pCmd = (SVGA3dCmdDestroyGBMob *)pvCmd; 391 pCmd->mobid = VMSVGAMOB_ID(pSvga->pMiniportMob); 392 SvgaCmdBufCommit(pSvga, sizeof(*pCmd)); 393 } 394 else 395 AssertFailed(); 396 } 352 397 353 398 svgaHwStop(pSvga); 354 399 355 SvgaMobFree(pSvga, pSvga->pMiniportMob); /* After svgaHwStop because it waits for command buffer completion. */ 400 if (RT_BOOL(pSvga->u32Caps & SVGA_CAP_DX)) 401 SvgaMobFree(pSvga, pSvga->pMiniportMob); /* After svgaHwStop because it waits for command buffer completion. */ 356 402 357 403 Status = pDxgkInterface->DxgkCbUnmapMemory(pDxgkInterface->DeviceHandle, … … 433 479 if (NT_SUCCESS(Status)) 434 480 { 435 uint32_t const cbMiniportMob = RT_ALIGN_32(sizeof(VMSVGAMINIPORTMOB), PAGE_SIZE); 436 RTR0MEMOBJ hMemObjMiniportMob; 437 int rc = RTR0MemObjAllocPageTag(&hMemObjMiniportMob, cbMiniportMob, 438 false /* executable R0 mapping */, "VMSVGAMOB0"); 439 if (RT_SUCCESS(rc)) 440 { 441 Status = SvgaMobCreate(pSvga, &pSvga->pMiniportMob, cbMiniportMob / PAGE_SIZE, 0); 442 if (NT_SUCCESS(Status)) 443 { 444 Status = SvgaMobSetMemObj(pSvga->pMiniportMob, hMemObjMiniportMob); 445 if (NT_SUCCESS(Status)) 446 { 447 void *pvCmd = SvgaCmdBuf3dCmdReserve(pSvga, SVGA_3D_CMD_DEFINE_GB_MOB64, sizeof(SVGA3dCmdDefineGBMob64), SVGA3D_INVALID_ID); 448 if (pvCmd) 449 { 450 SVGA3dCmdDefineGBMob64 *pCmd = (SVGA3dCmdDefineGBMob64 *)pvCmd; 451 pCmd->mobid = VMSVGAMOB_ID(pSvga->pMiniportMob); 452 pCmd->ptDepth = pSvga->pMiniportMob->gbo.enmMobFormat; 453 pCmd->base = pSvga->pMiniportMob->gbo.base; 454 pCmd->sizeInBytes = pSvga->pMiniportMob->gbo.cbGbo; 455 SvgaCmdBufCommit(pSvga, sizeof(*pCmd)); 456 457 pSvga->pMiniportMobData = (VMSVGAMINIPORTMOB volatile *)RTR0MemObjAddress(hMemObjMiniportMob); 458 memset((void *)pSvga->pMiniportMobData, 0, cbMiniportMob); 459 RTListInit(&pSvga->listMobDeferredDestruction); 460 //pSvga->u64MobFence = 0; 461 } 462 else 463 AssertFailedStmt(Status = STATUS_INSUFFICIENT_RESOURCES); 464 } 465 } 466 } 467 else 468 AssertFailedStmt(Status = STATUS_INSUFFICIENT_RESOURCES); 481 if (RT_BOOL(pSvga->u32Caps & SVGA_CAP_DX)) 482 Status = svgaCreateMiniportMob(pSvga); 469 483 } 470 484 } -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/gallium/VBoxMPDX.cpp
r99998 r100053 985 985 NTSTATUS DxgkDdiDXBuildPagingBuffer(PVBOXMP_DEVEXT pDevExt, DXGKARG_BUILDPAGINGBUFFER *pBuildPagingBuffer) 986 986 { 987 AssertReturn(pBuildPagingBuffer->DmaBufferPrivateDataSize >= sizeof(GARENDERDATA), STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER); 987 if (pBuildPagingBuffer->DmaBufferPrivateDataSize < sizeof(GARENDERDATA)) 988 return STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER; 988 989 989 990 NTSTATUS Status = STATUS_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.