Changeset 95016 in vbox for trunk/src/VBox/Devices
- Timestamp:
- May 15, 2022 6:18:16 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 151456
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
r95012 r95016 3765 3765 { 3766 3766 #ifdef VMSVGA3D_DX 3767 DEBUG_BREAKPOINT_TEST();3767 //DEBUG_BREAKPOINT_TEST(); 3768 3768 RT_NOREF(cbCmd); 3769 3769 return vmsvga3dDXDestroyUAView(pThisCC, idDXContext, pCmd); -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
r95015 r95016 2030 2030 ASSERT_GUEST_RETURN(cbSignaturesAvail >= cbSignature, VERR_INVALID_PARAMETER); 2031 2031 2032 /* Keep the generated signatures if the guest did not provide any. */ 2033 if (cSignature != 0) 2034 { 2035 /* Copy to DXShaderInfo. */ 2036 uint8_t const *pu8Signatures = (uint8_t *)&pSignatureHeader[1]; 2037 pShaderInfo->cInputSignature = pSignatureHeader->numInputSignatures; 2038 memcpy(pShaderInfo->aInputSignature, pu8Signatures, pSignatureHeader->numInputSignatures * sizeof(SVGA3dDXSignatureEntry)); 2039 2040 pu8Signatures += pSignatureHeader->numInputSignatures * sizeof(SVGA3dDXSignatureEntry); 2041 pShaderInfo->cOutputSignature = pSignatureHeader->numOutputSignatures; 2042 memcpy(pShaderInfo->aOutputSignature, pu8Signatures, pSignatureHeader->numOutputSignatures * sizeof(SVGA3dDXSignatureEntry)); 2043 2044 pu8Signatures += pSignatureHeader->numOutputSignatures * sizeof(SVGA3dDXSignatureEntry); 2045 pShaderInfo->cPatchConstantSignature = pSignatureHeader->numPatchConstantSignatures; 2046 memcpy(pShaderInfo->aPatchConstantSignature, pu8Signatures, pSignatureHeader->numPatchConstantSignatures * sizeof(SVGA3dDXSignatureEntry)); 2047 2048 /* The shader does not need guesswork. */ 2049 pShaderInfo->fGuestSignatures = true; 2050 } 2032 /* The shader does not need guesswork. */ 2033 pShaderInfo->fGuestSignatures = true; 2034 2035 /* Copy to DXShaderInfo. */ 2036 uint8_t const *pu8Signatures = (uint8_t *)&pSignatureHeader[1]; 2037 pShaderInfo->cInputSignature = pSignatureHeader->numInputSignatures; 2038 memcpy(pShaderInfo->aInputSignature, pu8Signatures, pSignatureHeader->numInputSignatures * sizeof(SVGA3dDXSignatureEntry)); 2039 2040 pu8Signatures += pSignatureHeader->numInputSignatures * sizeof(SVGA3dDXSignatureEntry); 2041 pShaderInfo->cOutputSignature = pSignatureHeader->numOutputSignatures; 2042 memcpy(pShaderInfo->aOutputSignature, pu8Signatures, pSignatureHeader->numOutputSignatures * sizeof(SVGA3dDXSignatureEntry)); 2043 2044 pu8Signatures += pSignatureHeader->numOutputSignatures * sizeof(SVGA3dDXSignatureEntry); 2045 pShaderInfo->cPatchConstantSignature = pSignatureHeader->numPatchConstantSignatures; 2046 memcpy(pShaderInfo->aPatchConstantSignature, pu8Signatures, pSignatureHeader->numPatchConstantSignatures * sizeof(SVGA3dDXSignatureEntry)); 2051 2047 } 2052 2048 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp
r95015 r95016 5279 5279 5280 5280 5281 static void vboxDXMatchGuestShaderSignatures(PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader) 5282 { 5283 if (pDXShader->enmShaderType == SVGA3D_SHADERTYPE_GS) 5284 { 5285 /* Output signature of a GS shader is the input of the pixel shader. */ 5286 SVGA3dShaderId const shaderIdPS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_PS - SVGA3D_SHADERTYPE_MIN].shaderId; 5287 SVGA3dShaderId const shaderIdDS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_DS - SVGA3D_SHADERTYPE_MIN].shaderId; 5288 SVGA3dShaderId const shaderIdVS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_VS - SVGA3D_SHADERTYPE_MIN].shaderId; 5289 5290 if (shaderIdPS != SVGA3D_INVALID_ID) 5291 { 5292 DXSHADER const *pDXShaderPS = &pDXContext->pBackendDXContext->paShader[shaderIdPS]; 5293 pDXShader->shaderInfo.cOutputSignature = pDXShaderPS->shaderInfo.cInputSignature; 5294 memcpy(pDXShader->shaderInfo.aOutputSignature, 5295 pDXShaderPS->shaderInfo.aInputSignature, 5296 pDXShaderPS->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry)); 5297 } 5298 5299 /* Input signature of a GS shader is the output of DS or VS. */ 5300 if (shaderIdDS != SVGA3D_INVALID_ID) 5301 { 5302 DXSHADER *pDXShaderDS = &pDXContext->pBackendDXContext->paShader[shaderIdDS]; 5303 pDXShader->shaderInfo.cInputSignature = pDXShaderDS->shaderInfo.cOutputSignature; 5304 memcpy(pDXShader->shaderInfo.aInputSignature, 5305 pDXShaderDS->shaderInfo.aOutputSignature, 5306 pDXShaderDS->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry)); 5307 } 5308 else if (shaderIdVS != SVGA3D_INVALID_ID) 5309 { 5310 DXSHADER *pDXShaderVS = &pDXContext->pBackendDXContext->paShader[shaderIdVS]; 5311 pDXShader->shaderInfo.cInputSignature = pDXShaderVS->shaderInfo.cOutputSignature; 5312 memcpy(pDXShader->shaderInfo.aInputSignature, 5313 pDXShaderVS->shaderInfo.aOutputSignature, 5314 pDXShaderVS->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry)); 5315 } 5316 } 5317 Assert( (pDXShader->enmShaderType == SVGA3D_SHADERTYPE_VS || pDXShader->enmShaderType == SVGA3D_SHADERTYPE_PS) 5318 || (pDXShader->shaderInfo.cInputSignature && pDXShader->shaderInfo.cOutputSignature)); 5319 } 5320 5321 5281 5322 static void dxCreateInputLayout(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId, DXSHADER *pDXShader) 5282 5323 { … … 5624 5665 AssertRC(rc); /* Ignore rc because the shader will most likely work anyway. */ 5625 5666 } 5667 5668 if (pDXShader->shaderInfo.fGuestSignatures) 5669 vboxDXMatchGuestShaderSignatures(pDXContext, pDXShader); 5626 5670 5627 5671 rc = DXShaderCreateDXBC(&pDXShader->shaderInfo, &pDXShader->pvDXBC, &pDXShader->cbDXBC);
Note:
See TracChangeset
for help on using the changeset viewer.