- Timestamp:
- Mar 14, 2022 6:22:15 AM (3 years ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 3 edited
-
DevVGA-SVGA.cpp (modified) (5 diffs)
-
DevVGA-SVGA3d-dx-savedstate.cpp (modified) (1 diff)
-
DevVGA-SVGA3d-win-dx.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r94205 r94215 5454 5454 } 5455 5455 5456 static int vmsvgaR3LoadBufCtx(PPDMDEVINS pDevIns, P SSMHANDLE pSSM, PVMSVGACMDBUFCTX pBufCtx)5456 static int vmsvgaR3LoadBufCtx(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, PVMSVGACMDBUFCTX pBufCtx, SVGACBContext CBCtx) 5457 5457 { 5458 5458 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 5459 5460 int rc = pHlp->pfnSSMGetU32(pSSM, &pBufCtx->cSubmitted); 5459 PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State; 5460 5461 uint32_t cSubmitted; 5462 int rc = pHlp->pfnSSMGetU32(pSSM, &cSubmitted); 5461 5463 AssertLogRelRCReturn(rc, rc); 5462 5464 5463 for (uint32_t i = 0; i < pBufCtx->cSubmitted; ++i)5465 for (uint32_t i = 0; i < cSubmitted; ++i) 5464 5466 { 5465 5467 PVMSVGACMDBUF pCmdBuf = vmsvgaR3CmdBufAlloc(pBufCtx); … … 5478 5480 AssertReturn(u32 == pCmdBuf->hdr.length, VERR_INVALID_STATE); 5479 5481 5480 pCmdBuf->pvCommands = RTMemAlloc(pCmdBuf->hdr.length); 5481 AssertPtrReturn(pCmdBuf->pvCommands, VERR_NO_MEMORY); 5482 5483 rc = pHlp->pfnSSMGetMem(pSSM, pCmdBuf->pvCommands, pCmdBuf->hdr.length); 5484 AssertRCReturn(rc, rc); 5482 if (pCmdBuf->hdr.length) 5483 { 5484 pCmdBuf->pvCommands = RTMemAlloc(pCmdBuf->hdr.length); 5485 AssertPtrReturn(pCmdBuf->pvCommands, VERR_NO_MEMORY); 5486 5487 rc = pHlp->pfnSSMGetMem(pSSM, pCmdBuf->pvCommands, pCmdBuf->hdr.length); 5488 AssertRCReturn(rc, rc); 5489 } 5490 5491 if (RT_LIKELY(CBCtx < RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs))) 5492 { 5493 vmsvgaR3CmdBufSubmitCtx(pDevIns, pThis, pThisCC, &pCmdBuf); 5494 } 5495 else 5496 { 5497 uint32_t offNextCmd = 0; 5498 vmsvgaR3CmdBufSubmitDC(pDevIns, pThisCC, &pCmdBuf, &offNextCmd); 5499 } 5500 5501 /* Free the buffer if CmdBufSubmit* did not consume it. */ 5502 vmsvgaR3CmdBufFree(pCmdBuf); 5485 5503 } 5486 5504 return rc; … … 5700 5718 { 5701 5719 /* Device context command buffers. */ 5702 rc = vmsvgaR3LoadBufCtx(pDevIns, p SSM, &pSVGAState->CmdBufCtxDC);5720 rc = vmsvgaR3LoadBufCtx(pDevIns, pThis, pThisCC, pSSM, &pSVGAState->CmdBufCtxDC, SVGA_CB_CONTEXT_MAX); 5703 5721 AssertLogRelRCReturn(rc, rc); 5704 5722 … … 5718 5736 vmsvgaR3CmdBufCtxInit(pSVGAState->apCmdBufCtxs[j]); 5719 5737 5720 rc = vmsvgaR3LoadBufCtx(pDevIns, p SSM, pSVGAState->apCmdBufCtxs[j]);5738 rc = vmsvgaR3LoadBufCtx(pDevIns, pThis, pThisCC, pSSM, pSVGAState->apCmdBufCtxs[j], (SVGACBContext)j); 5721 5739 AssertLogRelRCReturn(rc, rc); 5722 5740 } … … 5854 5872 pHlp->pfnSSMPutMem(pSSM, &pIter->hdr, sizeof(SVGACBHeader)); 5855 5873 pHlp->pfnSSMPutU32(pSSM, pIter->hdr.length); 5856 rc = pHlp->pfnSSMPutMem(pSSM, pIter->pvCommands, pIter->hdr.length); 5874 if (pIter->hdr.length) 5875 rc = pHlp->pfnSSMPutMem(pSSM, pIter->pvCommands, pIter->hdr.length); 5857 5876 AssertLogRelRCReturn(rc, rc); 5858 5877 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-savedstate.cpp
r94205 r94215 277 277 if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface)) 278 278 { 279 if (pMipmapLevel-> fDirty && pMipmapLevel->pSurfaceData)279 if (pMipmapLevel->pSurfaceData) 280 280 { 281 281 /* Data follows */ -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp
r94205 r94215 2452 2452 td.MiscFlags = 0; 2453 2453 2454 hr = pDXDevice->pDevice->CreateTexture2D(&td, 0, &pBackendSurface->u.pTexture2D);2454 hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->u.pTexture2D); 2455 2455 Assert(SUCCEEDED(hr)); 2456 2456 if (SUCCEEDED(hr)) … … 2529 2529 rc = dxBackendSurfaceAlloc(&pBackendSurface); 2530 2530 AssertRCReturn(rc, rc); 2531 2532 LogFunc(("sid = %u, size = %u\n", pSurface->id, pMipLevel->cbSurface)); 2531 2533 2532 2534 /* Upload the current data, if any. */ … … 4700 4702 { 4701 4703 Assert(uFace == 0 && uMipmap == 0); /* The caller ensures this. */ 4702 vmsvga3dBackSurfaceDestroy(pThisCC, pSurface); 4704 /** @todo This causes flickering when a buffer is invalidated and re-created right before a draw call. */ 4705 //vmsvga3dBackSurfaceDestroy(pThisCC, pSurface); 4703 4706 } 4704 4707 else … … 5384 5387 AssertContinue(RT_SUCCESS(rc)); 5385 5388 } 5389 5390 LogFunc(("srv[%d][%d] sid = %u, srvid = %u\n", idxShaderState, idxSR, sid, shaderResourceViewId)); 5386 5391 } 5387 5392 } … … 7849 7854 AssertLogRelReturn(pDXShader->shaderInfo.cbBytecode <= 2 * SVGA3D_MAX_SHADER_MEMORY_BYTES, VERR_INVALID_STATE); 7850 7855 7851 pDXShader->shaderInfo.pvBytecode = RTMemAlloc(pDXShader->shaderInfo.cbBytecode); 7852 AssertPtrReturn(pDXShader->shaderInfo.pvBytecode, VERR_NO_MEMORY); 7853 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.pvBytecode, pDXShader->shaderInfo.cbBytecode); 7856 if (pDXShader->shaderInfo.cbBytecode) 7857 { 7858 pDXShader->shaderInfo.pvBytecode = RTMemAlloc(pDXShader->shaderInfo.cbBytecode); 7859 AssertPtrReturn(pDXShader->shaderInfo.pvBytecode, VERR_NO_MEMORY); 7860 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.pvBytecode, pDXShader->shaderInfo.cbBytecode); 7861 } 7854 7862 7855 7863 rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cInputSignature); 7856 7864 AssertLogRelRCReturn(rc, rc); 7857 7865 AssertLogRelReturn(pDXShader->shaderInfo.cInputSignature <= 32, VERR_INVALID_STATE); 7858 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aInputSignature, pDXShader->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry)); 7866 if (pDXShader->shaderInfo.cInputSignature) 7867 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aInputSignature, pDXShader->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry)); 7859 7868 7860 7869 rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cOutputSignature); 7861 7870 AssertLogRelRCReturn(rc, rc); 7862 7871 AssertLogRelReturn(pDXShader->shaderInfo.cOutputSignature <= 32, VERR_INVALID_STATE); 7863 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aOutputSignature, pDXShader->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry)); 7872 if (pDXShader->shaderInfo.cOutputSignature) 7873 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aOutputSignature, pDXShader->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry)); 7864 7874 7865 7875 rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cPatchConstantSignature); 7866 7876 AssertLogRelRCReturn(rc, rc); 7867 7877 AssertLogRelReturn(pDXShader->shaderInfo.cPatchConstantSignature <= 32, VERR_INVALID_STATE); 7868 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aPatchConstantSignature, pDXShader->shaderInfo.cPatchConstantSignature * sizeof(SVGA3dDXSignatureEntry)); 7878 if (pDXShader->shaderInfo.cPatchConstantSignature) 7879 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aPatchConstantSignature, pDXShader->shaderInfo.cPatchConstantSignature * sizeof(SVGA3dDXSignatureEntry)); 7869 7880 7870 7881 rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cDclResource); 7871 7882 AssertLogRelRCReturn(rc, rc); 7872 7883 AssertLogRelReturn(pDXShader->shaderInfo.cDclResource <= SVGA3D_DX_MAX_SRVIEWS, VERR_INVALID_STATE); 7873 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aOffDclResource, pDXShader->shaderInfo.cDclResource * sizeof(uint32_t)); 7884 if (pDXShader->shaderInfo.cDclResource) 7885 pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aOffDclResource, pDXShader->shaderInfo.cDclResource * sizeof(uint32_t)); 7874 7886 } 7875 7887 … … 7898 7910 7899 7911 pHlp->pfnSSMPutU32(pSSM, (uint32_t)pDXShader->shaderInfo.enmProgramType); 7912 7900 7913 pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cbBytecode); 7901 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.pvBytecode, pDXShader->shaderInfo.cbBytecode); 7914 if (pDXShader->shaderInfo.cbBytecode) 7915 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.pvBytecode, pDXShader->shaderInfo.cbBytecode); 7916 7902 7917 pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cInputSignature); 7903 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aInputSignature, pDXShader->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry)); 7918 if (pDXShader->shaderInfo.cInputSignature) 7919 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aInputSignature, pDXShader->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry)); 7920 7904 7921 pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cOutputSignature); 7905 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aOutputSignature, pDXShader->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry)); 7922 if (pDXShader->shaderInfo.cOutputSignature) 7923 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aOutputSignature, pDXShader->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry)); 7924 7906 7925 pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cPatchConstantSignature); 7907 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aPatchConstantSignature, pDXShader->shaderInfo.cPatchConstantSignature * sizeof(SVGA3dDXSignatureEntry)); 7926 if (pDXShader->shaderInfo.cPatchConstantSignature) 7927 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aPatchConstantSignature, pDXShader->shaderInfo.cPatchConstantSignature * sizeof(SVGA3dDXSignatureEntry)); 7928 7908 7929 pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cDclResource); 7909 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aOffDclResource, pDXShader->shaderInfo.cDclResource * sizeof(uint32_t)); 7930 if (pDXShader->shaderInfo.cDclResource) 7931 pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aOffDclResource, pDXShader->shaderInfo.cDclResource * sizeof(uint32_t)); 7910 7932 } 7911 7933 rc = pHlp->pfnSSMPutU32(pSSM, pDXContext->pBackendDXContext->cSOTarget);
Note:
See TracChangeset
for help on using the changeset viewer.

