- Timestamp:
- Nov 11, 2024 12:07:14 PM (3 months ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
r106263 r106926 5016 5016 5017 5017 uint32_t const cCopyBoxes = (cbCmd - sizeof(pCmd)) / sizeof(SVGA3dCopyBox); 5018 vmsvga3dSurfaceCopy(pThisCC, pCmd->dest, pCmd->src, cCopyBoxes, (SVGA3dCopyBox *)(pCmd + 1) );5018 vmsvga3dSurfaceCopy(pThisCC, pCmd->dest, pCmd->src, cCopyBoxes, (SVGA3dCopyBox *)(pCmd + 1), pThis->svga.fVMSVGA2dGBO); 5019 5019 break; 5020 5020 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h
r106061 r106926 1455 1455 void vmsvga3dShaderLogRel(char const *pszMsg, SVGA3dShaderType type, uint32_t cbShaderData, uint32_t const *pShaderData); 1456 1456 1457 int vmsvga3dSurfaceCopySysMem(PVMSVGA3DSTATE pState, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, 1458 uint32_t cCopyBoxes, SVGA3dCopyBox *pBox); 1459 1457 1460 #endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_internal_h */ 1458 1461 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
r106154 r106926 1382 1382 } 1383 1383 1384 int vmsvga3dSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox) 1385 { 1386 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 1387 AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED); 1388 return pSvgaR3State->pFuncs3D->pfnSurfaceCopy(pThisCC, dest, src, cCopyBoxes, pBox); 1384 int vmsvga3dSurfaceCopySysMem(PVMSVGA3DSTATE pState, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, 1385 uint32_t cCopyBoxes, SVGA3dCopyBox *pBox) 1386 { 1387 RT_NOREF(cCopyBoxes); 1388 AssertReturn(pBox, VERR_INVALID_PARAMETER); 1389 1390 LogFunc(("src sid %d -> dst sid %d\n", src.sid, dest.sid)); 1391 1392 AssertReturn(pState, VERR_INVALID_STATE); 1393 1394 PVMSVGA3DSURFACE pSrcSurface; 1395 int rc = vmsvga3dSurfaceFromSid(pState, src.sid, &pSrcSurface); 1396 AssertRCReturn(rc, rc); 1397 1398 PVMSVGA3DSURFACE pDstSurface; 1399 rc = vmsvga3dSurfaceFromSid(pState, dest.sid, &pDstSurface); 1400 AssertRCReturn(rc, rc); 1401 1402 PVMSVGA3DMIPMAPLEVEL pSrcMipLevel; 1403 rc = vmsvga3dMipmapLevel(pSrcSurface, src.face, src.mipmap, &pSrcMipLevel); 1404 ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc); 1405 1406 PVMSVGA3DMIPMAPLEVEL pDstMipLevel; 1407 rc = vmsvga3dMipmapLevel(pDstSurface, dest.face, dest.mipmap, &pDstMipLevel); 1408 ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc); 1409 1410 SVGA3dCopyBox clipBox = *pBox; 1411 vmsvgaR3ClipCopyBox(&pSrcMipLevel->mipmapSize, &pDstMipLevel->mipmapSize, &clipBox); 1412 1413 AssertReturn(pSrcSurface->format == pDstSurface->format, VERR_INVALID_PARAMETER); 1414 AssertReturn(pSrcSurface->cbBlock == pDstSurface->cbBlock, VERR_INVALID_PARAMETER); 1415 AssertReturn(pSrcMipLevel->pSurfaceData && pDstMipLevel->pSurfaceData, VERR_INVALID_STATE); 1416 1417 uint32_t const cxBlocks = (clipBox.w + pSrcSurface->cxBlock - 1) / pSrcSurface->cxBlock; 1418 uint32_t const cyBlocks = (clipBox.h + pSrcSurface->cyBlock - 1) / pSrcSurface->cyBlock; 1419 uint32_t const cbRow = cxBlocks * pSrcSurface->cbBlock; 1420 1421 uint8_t const *pu8Src = (uint8_t *)pSrcMipLevel->pSurfaceData 1422 + (clipBox.srcx / pSrcSurface->cxBlock) * pSrcSurface->cbBlock 1423 + (clipBox.srcy / pSrcSurface->cyBlock) * pSrcMipLevel->cbSurfacePitch 1424 + clipBox.srcz * pSrcMipLevel->cbSurfacePlane; 1425 1426 uint8_t *pu8Dst = (uint8_t *)pDstMipLevel->pSurfaceData 1427 + (clipBox.x / pDstSurface->cxBlock) * pDstSurface->cbBlock 1428 + (clipBox.y / pDstSurface->cyBlock) * pDstMipLevel->cbSurfacePitch 1429 + clipBox.z * pDstMipLevel->cbSurfacePlane; 1430 1431 for (uint32_t z = 0; z < clipBox.d; ++z) 1432 { 1433 uint8_t const *pu8PlaneSrc = pu8Src; 1434 uint8_t *pu8PlaneDst = pu8Dst; 1435 1436 for (uint32_t y = 0; y < cyBlocks; ++y) 1437 { 1438 memcpy(pu8PlaneDst, pu8PlaneSrc, cbRow); 1439 pu8PlaneDst += pDstMipLevel->cbSurfacePitch; 1440 pu8PlaneSrc += pSrcMipLevel->cbSurfacePitch; 1441 } 1442 1443 pu8Src += pSrcMipLevel->cbSurfacePlane; 1444 pu8Dst += pDstMipLevel->cbSurfacePlane; 1445 } 1446 1447 return VINF_SUCCESS; 1448 } 1449 1450 int vmsvga3dSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox, bool fVMSVGA2dGBO) 1451 { 1452 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 1453 1454 if (!fVMSVGA2dGBO) 1455 { 1456 AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED); 1457 return pSvgaR3State->pFuncs3D->pfnSurfaceCopy(pThisCC, dest, src, cCopyBoxes, pBox); 1458 } 1459 else 1460 { 1461 PVMSVGA3DSTATE pState = pThisCC->svga.p3dState; 1462 AssertReturn(pState, VERR_INVALID_STATE); 1463 return vmsvga3dSurfaceCopySysMem(pState, dest, src, cCopyBoxes, pBox); 1464 } 1389 1465 } 1390 1466 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
r106061 r106926 120 120 int vmsvga3dSurfaceDestroy(PVGASTATECC pThisCC, uint32_t sid); 121 121 int vmsvga3dSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, 122 uint32_t cCopyBoxes, SVGA3dCopyBox *pBox );122 uint32_t cCopyBoxes, SVGA3dCopyBox *pBox, bool fVMSVGA2dGBO); 123 123 int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, PVGASTATECC pThisCC, 124 124 SVGA3dSurfaceImageId const *pDstSfcImg, SVGA3dBox const *pDstBox,
Note:
See TracChangeset
for help on using the changeset viewer.