Changeset 51157 in vbox for trunk/src/VBox/Additions/WINNT/Graphics
- Timestamp:
- Apr 28, 2014 5:21:49 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 93492
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
r51148 r51157 6323 6323 } 6324 6324 6325 static NTSTATUS vboxWddmCmCmdBltPrimNotPrimFill(VBOXCMDVBVA_BLT_HDR *pBltHdr, const VBOXWDDM_ALLOCATION *pPrimary, const VBOXWDDM_ALLOCATION *pAlloc, const DXGK_ALLOCATIONLIST *pList,6326 BOOLEAN fToPrimary, uint32_t *poffPatch, uint32_t *poffRects)6327 {6328 uint8_t fFlags;6329 pBltHdr->Hdr.u.u8PrimaryID = pPrimary->AllocData.SurfDesc.VidPnSourceId;6330 if (pAlloc->AllocData.hostID)6331 {6332 fFlags = VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY | VBOXCMDVBVA_OPF_OPERAND2_ISID;6333 VBOXCMDVBVA_BLT_PRIMARY *pBlt = (VBOXCMDVBVA_BLT_PRIMARY*)pBltHdr;6334 pBlt->alloc.u.id = pAlloc->AllocData.hostID;6335 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_PRIMARY, aRects);6336 }6337 else6338 {6339 D3DDDIFORMAT enmFormat = vboxWddmFmtNoAlphaFormat(pAlloc->AllocData.SurfDesc.format);6340 if (enmFormat != D3DDDIFMT_X8R8G8B8)6341 {6342 WARN(("unsupported format"));6343 return STATUS_INVALID_PARAMETER;6344 }6345 6346 if (pPrimary->AllocData.SurfDesc.width == pAlloc->AllocData.SurfDesc.width6347 && pPrimary->AllocData.SurfDesc.height == pAlloc->AllocData.SurfDesc.height)6348 {6349 fFlags = VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY;6350 VBOXCMDVBVA_BLT_PRIMARY *pBlt = (VBOXCMDVBVA_BLT_PRIMARY*)pBltHdr;6351 VBoxCVDdiFillAllocInfoOffVRAM(&pBlt->alloc, pList);6352 *poffPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_PRIMARY, alloc.u.offVRAM);6353 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_PRIMARY, aRects);6354 }6355 else6356 {6357 fFlags = VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY_GENERIC_A8R8G8B8;6358 VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8 *pBlt = (VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8*)pBltHdr;6359 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc, pAlloc, pList);6360 *poffPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8, alloc.Info.u.offVRAM);6361 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8, aRects);6362 }6363 }6364 6365 if (!fToPrimary)6366 fFlags |= VBOXCMDVBVA_OPF_BLT_DIR_IN_2;6367 6368 pBltHdr->Hdr.u8Flags |= fFlags;6369 return STATUS_SUCCESS;6370 }6371 6372 6325 static NTSTATUS vboxWddmCmCmdBltIdNotIdFill(VBOXCMDVBVA_BLT_HDR *pBltHdr, const VBOXWDDM_ALLOCATION *pIdAlloc, const VBOXWDDM_ALLOCATION *pAlloc, const DXGK_ALLOCATIONLIST *pList, 6373 6326 BOOLEAN fToId, uint32_t *poffPatch, uint32_t *poffRects) … … 6396 6349 else 6397 6350 { 6398 fFlags = VBOXCMDVBVA_OPF_BLT_TYPE_GENERIC_A8R8G8B8 | VBOXCMDVBVA_OPF_OPERAND2_ISID; 6399 VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8 *pBlt = (VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8*)pBltHdr; 6400 VBoxCVDdiFillAllocDescHostID(&pBlt->alloc2, pIdAlloc); 6351 fFlags = VBOXCMDVBVA_OPF_BLT_TYPE_SAMEDIM_A8R8G8B8 | VBOXCMDVBVA_OPF_OPERAND2_ISID; 6352 VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8 *pBlt = (VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8*)pBltHdr; 6401 6353 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc1, pAlloc, pList); 6402 *poffPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, alloc1.Info.u.offVRAM); 6403 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, aRects); 6354 pBlt->info2.u.id = pIdAlloc->AllocData.hostID; 6355 *poffPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, alloc1.Info.u.offVRAM); 6356 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, aRects); 6404 6357 } 6405 6358 … … 6411 6364 } 6412 6365 6366 static NTSTATUS vboxWddmCmCmdBltNotIdNotIdFill(VBOXCMDVBVA_BLT_HDR *pBltHdr, const VBOXWDDM_ALLOCATION *pSrcAlloc, const DXGK_ALLOCATIONLIST *pSrcList, 6367 const VBOXWDDM_ALLOCATION *pDstAlloc, const DXGK_ALLOCATIONLIST *pDstList, 6368 uint32_t *poffSrcPatch, uint32_t *poffDstPatch, uint32_t *poffRects) 6369 { 6370 if (pDstAlloc->AllocData.SurfDesc.width == pSrcAlloc->AllocData.SurfDesc.width 6371 && pDstAlloc->AllocData.SurfDesc.height == pSrcAlloc->AllocData.SurfDesc.height) 6372 { 6373 pBltHdr->Hdr.u8Flags |= VBOXCMDVBVA_OPF_BLT_TYPE_SAMEDIM_A8R8G8B8; 6374 VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8 *pBlt = (VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8*)pBltHdr; 6375 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc1, pDstAlloc, pDstList); 6376 VBoxCVDdiFillAllocInfoOffVRAM(&pBlt->info2, pSrcList); 6377 *poffDstPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, alloc1.Info.u.offVRAM); 6378 *poffSrcPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, info2.u.offVRAM); 6379 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, aRects); 6380 } 6381 else 6382 { 6383 pBltHdr->Hdr.u8Flags |= VBOXCMDVBVA_OPF_BLT_TYPE_GENERIC_A8R8G8B8; 6384 VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8 *pBlt = (VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8*)pBltHdr; 6385 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc1, pDstAlloc, pDstList); 6386 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc2, pSrcAlloc, pSrcList); 6387 *poffDstPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, alloc1.Info.u.offVRAM); 6388 *poffSrcPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, alloc2.Info.u.offVRAM); 6389 *poffRects = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, aRects); 6390 } 6391 return STATUS_SUCCESS; 6392 } 6413 6393 /** 6414 6394 * DxgkDdiPresent … … 6532 6512 else 6533 6513 { 6534 pBltHdr->Hdr.u8Flags |= VBOXCMDVBVA_OPF_BLT_TYPE_GENERIC_A8R8G8B8; 6535 VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8 *pBlt = (VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8*)pBltHdr; 6536 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc1, pDstAlloc, pDst); 6537 VBoxCVDdiFillAllocDescOffVRAM(&pBlt->alloc2, pSrcAlloc, pSrc); 6538 u32DstPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, alloc1.Info.u.offVRAM); 6539 u32SrcPatch = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, alloc2.Info.u.offVRAM); 6540 cbPrivateData = RT_OFFSETOF(VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8, aRects); 6514 vboxWddmCmCmdBltNotIdNotIdFill(pBltHdr, pSrcAlloc, pSrc, pDstAlloc, pDst, &u32SrcPatch, &u32DstPatch, &cbPrivateData); 6541 6515 } 6542 6516 }
Note:
See TracChangeset
for help on using the changeset viewer.