Changeset 99589 in vbox
- Timestamp:
- May 3, 2023 3:56:34 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 157106
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
r99535 r99589 3581 3581 { 3582 3582 #ifdef VMSVGA3D_DX 3583 DEBUG_BREAKPOINT_TEST(); 3584 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 3585 RT_NOREF(pSvgaR3State, pCmd, cbCmd); 3586 return vmsvga3dIntraSurfaceCopy(pThisCC, idDXContext); 3583 //DEBUG_BREAKPOINT_TEST(); 3584 RT_NOREF(cbCmd); 3585 return vmsvga3dIntraSurfaceCopy(pThisCC, idDXContext, pCmd); 3587 3586 #else 3588 3587 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r99535 r99589 6456 6456 if (*pu32DeviceCaps & SVGA_CAP_CAP2_REGISTER) 6457 6457 *pu32DeviceCaps2 |= SVGA_CAP2_GROW_OTABLE /* "Allow the GrowOTable/DXGrowCOTable commands" */ 6458 | SVGA_CAP2_INTRA_SURFACE_COPY /* "IntraSurfaceCopy command" */ 6458 6459 | SVGA_CAP2_DX2 /* Shader Model 4.1. 6459 6460 * "Allow the DefineGBSurface_v3, WholeSurfaceCopy, WriteZeroSurface, and -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-dx11.cpp
r99535 r99589 9477 9477 9478 9478 9479 static DECLCALLBACK(int) vmsvga3dBackIntraSurfaceCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext) 9480 { 9481 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend; 9482 9483 RT_NOREF(pBackend, pDXContext); 9484 AssertFailed(); /** @todo Implement */ 9485 return VERR_NOT_IMPLEMENTED; 9479 static DECLCALLBACK(int) vmsvga3dBackIntraSurfaceCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceImageId const &surface, SVGA3dCopyBox const &box) 9480 { 9481 RT_NOREF(pDXContext); 9482 9483 LogFunc(("sid %u\n", surface.sid)); 9484 9485 PVMSVGA3DSTATE pState = pThisCC->svga.p3dState; 9486 AssertReturn(pState, VERR_INVALID_STATE); 9487 9488 PVMSVGA3DBACKEND pBackend = pState->pBackend; 9489 9490 PVMSVGA3DSURFACE pSurface; 9491 int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, surface.sid, &pSurface); 9492 AssertRCReturn(rc, rc); 9493 9494 PVMSVGA3DMIPMAPLEVEL pMipLevel; 9495 rc = vmsvga3dMipmapLevel(pSurface, surface.face, surface.mipmap, &pMipLevel); 9496 ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc); 9497 9498 /* Clip the box. */ 9499 SVGA3dCopyBox clipBox = box; 9500 vmsvgaR3ClipCopyBox(&pMipLevel->mipmapSize, &pMipLevel->mipmapSize, &clipBox); 9501 9502 LogFunc(("surface%s cid %d\n", 9503 pSurface->pBackendSurface ? "" : " sysmem", 9504 pSurface ? pSurface->idAssociatedContext : SVGA_ID_INVALID)); 9505 9506 if (pSurface->pBackendSurface) 9507 { 9508 /* Surface -> Surface. */ 9509 DXDEVICE *pDXDevice = &pBackend->dxDevice; 9510 9511 UINT DstSubresource = vmsvga3dCalcSubresource(surface.mipmap, surface.face, pSurface->cLevels); 9512 UINT DstX = clipBox.x; 9513 UINT DstY = clipBox.y; 9514 UINT DstZ = clipBox.z; 9515 9516 UINT SrcSubresource = DstSubresource; 9517 D3D11_BOX SrcBox; 9518 SrcBox.left = clipBox.srcx; 9519 SrcBox.top = clipBox.srcy; 9520 SrcBox.front = clipBox.srcz; 9521 SrcBox.right = clipBox.srcx + clipBox.w; 9522 SrcBox.bottom = clipBox.srcy + clipBox.h; 9523 SrcBox.back = clipBox.srcz + clipBox.d; 9524 9525 ID3D11Resource *pDstResource; 9526 ID3D11Resource *pSrcResource; 9527 pDstResource = dxResource(pState, pSurface, NULL); 9528 pSrcResource = pDstResource; 9529 9530 pDXDevice->pImmediateContext->CopySubresourceRegion1(pDstResource, DstSubresource, DstX, DstY, DstZ, 9531 pSrcResource, SrcSubresource, &SrcBox, 0); 9532 } 9533 else 9534 { 9535 /* Memory -> Memory. */ 9536 uint32_t const cxBlocks = (clipBox.w + pSurface->cxBlock - 1) / pSurface->cxBlock; 9537 uint32_t const cyBlocks = (clipBox.h + pSurface->cyBlock - 1) / pSurface->cyBlock; 9538 uint32_t const cbRow = cxBlocks * pSurface->cbBlock; 9539 9540 uint8_t const *pu8Src = (uint8_t *)pMipLevel->pSurfaceData 9541 + (clipBox.srcx / pSurface->cxBlock) * pSurface->cbBlock 9542 + (clipBox.srcy / pSurface->cyBlock) * pMipLevel->cbSurfacePitch 9543 + clipBox.srcz * pMipLevel->cbSurfacePlane; 9544 9545 uint8_t *pu8Dst = (uint8_t *)pMipLevel->pSurfaceData 9546 + (clipBox.x / pSurface->cxBlock) * pSurface->cbBlock 9547 + (clipBox.y / pSurface->cyBlock) * pMipLevel->cbSurfacePitch 9548 + clipBox.z * pMipLevel->cbSurfacePlane; 9549 9550 for (uint32_t z = 0; z < clipBox.d; ++z) 9551 { 9552 uint8_t const *pu8PlaneSrc = pu8Src; 9553 uint8_t *pu8PlaneDst = pu8Dst; 9554 9555 for (uint32_t y = 0; y < clipBox.h; ++y) 9556 { 9557 memmove(pu8PlaneDst, pu8PlaneSrc, cbRow); 9558 pu8PlaneDst += pMipLevel->cbSurfacePitch; 9559 pu8PlaneSrc += pMipLevel->cbSurfacePitch; 9560 } 9561 9562 pu8Src += pMipLevel->cbSurfacePlane; 9563 pu8Dst += pMipLevel->cbSurfacePlane; 9564 } 9565 } 9566 9567 return rc; 9486 9568 } 9487 9569 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
r99535 r99589 2564 2564 2565 2565 2566 int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext )2566 int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdIntraSurfaceCopy const *pCmd) 2567 2567 { 2568 2568 int rc; … … 2576 2576 AssertRCReturn(rc, rc); 2577 2577 2578 rc = pSvgaR3State->pFuncsDX->pfnIntraSurfaceCopy(pThisCC, pDXContext );2578 rc = pSvgaR3State->pFuncsDX->pfnIntraSurfaceCopy(pThisCC, pDXContext, pCmd->surface, pCmd->box); 2579 2579 return rc; 2580 2580 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
r99535 r99589 515 515 DECLCALLBACKMEMBER(int, pfnDXCondBindAllShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 516 516 DECLCALLBACKMEMBER(int, pfnScreenCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 517 DECLCALLBACKMEMBER(int, pfnIntraSurfaceCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext ));517 DECLCALLBACKMEMBER(int, pfnIntraSurfaceCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceImageId const &surface, SVGA3dCopyBox const &box)); 518 518 DECLCALLBACKMEMBER(int, pfnDXResolveCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 519 519 DECLCALLBACKMEMBER(int, pfnDXPredResolveCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); … … 635 635 int vmsvga3dScreenCopy(PVGASTATECC pThisCC, uint32_t idDXContext); 636 636 int vmsvga3dDXGrowCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXGrowCOTable const *pCmd); 637 int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext );637 int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdIntraSurfaceCopy const *pCmd); 638 638 int vmsvga3dDXResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext); 639 639 int vmsvga3dDXPredResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
Note:
See TracChangeset
for help on using the changeset viewer.