Changeset 79817 in vbox
- Timestamp:
- Jul 16, 2019 5:56:18 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/3D/win/VBoxGL/GaDrvEnvKMT.cpp
r79782 r79817 406 406 uint32_t cbReq; 407 407 408 /* First check if the format is supported. */409 D3DDDIFORMAT const ddiFormat = svgaToD3DDDIFormat((SVGA3dSurfaceFormat)pCreateParms->format);410 if (ddiFormat == D3DDDIFMT_UNKNOWN)411 return -1;412 413 408 /* Size of the SVGA request data */ 414 409 cbReq = sizeof(GASURFCREATE) + cSizes * sizeof(GASURFSIZE); … … 448 443 if (pCreateParms->flags & SVGA3D_SURFACE_HINT_RENDERTARGET) 449 444 { 450 GAWDDMSURFACEINFO *pSurfaceInfo = (GAWDDMSURFACEINFO *)malloc(sizeof(GAWDDMSURFACEINFO)); 451 if (pSurfaceInfo) 445 /* First check if the format is supported. */ 446 D3DDDIFORMAT const ddiFormat = svgaToD3DDDIFormat((SVGA3dSurfaceFormat)pCreateParms->format); 447 if (ddiFormat != D3DDDIFMT_UNKNOWN) 452 448 { 453 memset(pSurfaceInfo, 0, sizeof(GAWDDMSURFACEINFO)); 454 455 VBOXWDDM_ALLOCINFO wddmAllocInfo; 456 memset(&wddmAllocInfo, 0, sizeof(wddmAllocInfo)); 457 458 wddmAllocInfo.enmType = VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC; 459 wddmAllocInfo.fFlags.RenderTarget = 1; 460 wddmAllocInfo.hSharedHandle = 0; 461 wddmAllocInfo.hostID = pData->u32Sid; 462 wddmAllocInfo.SurfDesc.slicePitch = 0; 463 wddmAllocInfo.SurfDesc.depth = paSizes[0].cDepth; 464 wddmAllocInfo.SurfDesc.width = paSizes[0].cWidth; 465 wddmAllocInfo.SurfDesc.height = paSizes[0].cHeight; 466 wddmAllocInfo.SurfDesc.format = ddiFormat; 467 wddmAllocInfo.SurfDesc.VidPnSourceId = 0; 468 wddmAllocInfo.SurfDesc.bpp = vboxWddmCalcBitsPerPixel(wddmAllocInfo.SurfDesc.format); 469 wddmAllocInfo.SurfDesc.pitch = vboxWddmCalcPitch(wddmAllocInfo.SurfDesc.width, 470 wddmAllocInfo.SurfDesc.format); 471 wddmAllocInfo.SurfDesc.cbSize = vboxWddmCalcSize(wddmAllocInfo.SurfDesc.pitch, 472 wddmAllocInfo.SurfDesc.height, 473 wddmAllocInfo.SurfDesc.format); 474 wddmAllocInfo.SurfDesc.d3dWidth = vboxWddmCalcWidthForPitch(wddmAllocInfo.SurfDesc.pitch, 475 wddmAllocInfo.SurfDesc.format); 476 477 D3DDDI_ALLOCATIONINFO AllocationInfo; 478 memset(&AllocationInfo, 0, sizeof(AllocationInfo)); 479 // AllocationInfo.hAllocation = NULL; 480 // AllocationInfo.pSystemMem = NULL; 481 AllocationInfo.pPrivateDriverData = &wddmAllocInfo; 482 AllocationInfo.PrivateDriverDataSize = sizeof(wddmAllocInfo); 483 484 D3DKMT_CREATEALLOCATION CreateAllocation; 485 memset(&CreateAllocation, 0, sizeof(CreateAllocation)); 486 CreateAllocation.hDevice = pThis->mKmtCallbacks.hDevice; 487 CreateAllocation.NumAllocations = 1; 488 CreateAllocation.pAllocationInfo = &AllocationInfo; 489 490 Status = pThis->mKmtCallbacks.d3dkmt->pfnD3DKMTCreateAllocation(&CreateAllocation); 491 if (Status == STATUS_SUCCESS) 449 GAWDDMSURFACEINFO *pSurfaceInfo = (GAWDDMSURFACEINFO *)malloc(sizeof(GAWDDMSURFACEINFO)); 450 if (pSurfaceInfo) 492 451 { 493 pSurfaceInfo->Core.Key = pData->u32Sid; 494 pSurfaceInfo->hAllocation = AllocationInfo.hAllocation; 495 if (!RTAvlU32Insert(&pThis->mSurfaceTree, &pSurfaceInfo->Core)) 452 memset(pSurfaceInfo, 0, sizeof(GAWDDMSURFACEINFO)); 453 454 VBOXWDDM_ALLOCINFO wddmAllocInfo; 455 memset(&wddmAllocInfo, 0, sizeof(wddmAllocInfo)); 456 457 wddmAllocInfo.enmType = VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC; 458 wddmAllocInfo.fFlags.RenderTarget = 1; 459 wddmAllocInfo.hSharedHandle = 0; 460 wddmAllocInfo.hostID = pData->u32Sid; 461 wddmAllocInfo.SurfDesc.slicePitch = 0; 462 wddmAllocInfo.SurfDesc.depth = paSizes[0].cDepth; 463 wddmAllocInfo.SurfDesc.width = paSizes[0].cWidth; 464 wddmAllocInfo.SurfDesc.height = paSizes[0].cHeight; 465 wddmAllocInfo.SurfDesc.format = ddiFormat; 466 wddmAllocInfo.SurfDesc.VidPnSourceId = 0; 467 wddmAllocInfo.SurfDesc.bpp = vboxWddmCalcBitsPerPixel(wddmAllocInfo.SurfDesc.format); 468 wddmAllocInfo.SurfDesc.pitch = vboxWddmCalcPitch(wddmAllocInfo.SurfDesc.width, 469 wddmAllocInfo.SurfDesc.format); 470 wddmAllocInfo.SurfDesc.cbSize = vboxWddmCalcSize(wddmAllocInfo.SurfDesc.pitch, 471 wddmAllocInfo.SurfDesc.height, 472 wddmAllocInfo.SurfDesc.format); 473 wddmAllocInfo.SurfDesc.d3dWidth = vboxWddmCalcWidthForPitch(wddmAllocInfo.SurfDesc.pitch, 474 wddmAllocInfo.SurfDesc.format); 475 476 D3DDDI_ALLOCATIONINFO AllocationInfo; 477 memset(&AllocationInfo, 0, sizeof(AllocationInfo)); 478 // AllocationInfo.hAllocation = NULL; 479 // AllocationInfo.pSystemMem = NULL; 480 AllocationInfo.pPrivateDriverData = &wddmAllocInfo; 481 AllocationInfo.PrivateDriverDataSize = sizeof(wddmAllocInfo); 482 483 D3DKMT_CREATEALLOCATION CreateAllocation; 484 memset(&CreateAllocation, 0, sizeof(CreateAllocation)); 485 CreateAllocation.hDevice = pThis->mKmtCallbacks.hDevice; 486 CreateAllocation.NumAllocations = 1; 487 CreateAllocation.pAllocationInfo = &AllocationInfo; 488 489 Status = pThis->mKmtCallbacks.d3dkmt->pfnD3DKMTCreateAllocation(&CreateAllocation); 490 if (Status == STATUS_SUCCESS) 496 491 { 497 Status = STATUS_NOT_SUPPORTED; 492 pSurfaceInfo->Core.Key = pData->u32Sid; 493 pSurfaceInfo->hAllocation = AllocationInfo.hAllocation; 494 if (!RTAvlU32Insert(&pThis->mSurfaceTree, &pSurfaceInfo->Core)) 495 { 496 Status = STATUS_NOT_SUPPORTED; 497 } 498 } 499 500 if (Status != STATUS_SUCCESS) 501 { 502 free(pSurfaceInfo); 498 503 } 499 504 } 500 501 if (Status != STATUS_SUCCESS) 505 else 502 506 { 503 free(pSurfaceInfo);507 Status = STATUS_NOT_SUPPORTED; 504 508 } 505 509 } 506 510 else 507 511 { 512 /* Unsupported render target format. */ 508 513 Status = STATUS_NOT_SUPPORTED; 509 514 }
Note:
See TracChangeset
for help on using the changeset viewer.

