- Timestamp:
- May 21, 2022 10:32:50 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 151521
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
r95017 r95055 91 91 SVGA_CASE_ID2STR(SVGA_3D_CMD_DEACTIVATE_SURFACE); 92 92 SVGA_CASE_ID2STR(SVGA_3D_CMD_SCREEN_DMA); 93 SVGA_CASE_ID2STR(SVGA_3D_CMD_ DEAD1);93 SVGA_CASE_ID2STR(SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION); /* SVGA_3D_CMD_DEAD1 */ 94 94 SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD2); 95 95 SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD12); /* Old SVGA_3D_CMD_LOGICOPS_BITBLT */ … … 4129 4129 { 4130 4130 #ifdef VMSVGA3D_DX 4131 DEBUG_BREAKPOINT_TEST(); 4132 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 4133 RT_NOREF(pSvgaR3State, pCmd, cbCmd); 4134 return vmsvga3dDXDefineStreamOutputWithMob(pThisCC, idDXContext); 4131 //DEBUG_BREAKPOINT_TEST(); 4132 RT_NOREF(cbCmd); 4133 return vmsvga3dDXDefineStreamOutputWithMob(pThisCC, idDXContext, pCmd); 4135 4134 #else 4136 4135 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); … … 4159 4158 { 4160 4159 #ifdef VMSVGA3D_DX 4161 DEBUG_BREAKPOINT_TEST(); 4162 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 4163 RT_NOREF(pSvgaR3State, pCmd, cbCmd); 4164 return vmsvga3dDXBindStreamOutput(pThisCC, idDXContext); 4160 //DEBUG_BREAKPOINT_TEST(); 4161 RT_NOREF(cbCmd); 4162 return vmsvga3dDXBindStreamOutput(pThisCC, idDXContext, pCmd); 4165 4163 #else 4166 4164 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); … … 4193 4191 RT_NOREF(pSvgaR3State, pCmd, cbCmd); 4194 4192 return vmsvga3dDXBindShaderIface(pThisCC, idDXContext); 4193 #else 4194 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); 4195 return VERR_NOT_SUPPORTED; 4196 #endif 4197 } 4198 4199 4200 /* SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION 1083 */ 4201 static int vmsvga3dCmdVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion *pCmd, uint32_t cbCmd) 4202 { 4203 #ifdef VMSVGA3D_DX 4204 //DEBUG_BREAKPOINT_TEST(); 4205 SVGASignedRect const *paRect = (SVGASignedRect *)&pCmd[1]; 4206 uint32_t const cRect = (cbCmd - sizeof(*pCmd)) / sizeof(SVGASignedRect); 4207 return vmsvga3dVBDXClearRenderTargetViewRegion(pThisCC, idDXContext, pCmd, cRect, paRect); 4195 4208 #else 4196 4209 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); … … 4668 4681 } 4669 4682 4670 case SVGA_3D_CMD_DEAD1:4683 /* case SVGA_3D_CMD_DEAD1: New SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION */ 4671 4684 case SVGA_3D_CMD_DEAD2: 4672 4685 case SVGA_3D_CMD_DEAD12: /* Old SVGA_3D_CMD_LOGICOPS_BITBLT */ … … 6141 6154 VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd)); 6142 6155 rcParse = vmsvga3dCmdDXBindShaderIface(pThisCC, idDXContext, pCmd, cbCmd); 6156 break; 6157 } 6158 6159 case SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION: 6160 { 6161 SVGA3dCmdVBDXClearRenderTargetViewRegion *pCmd = (SVGA3dCmdVBDXClearRenderTargetViewRegion *)pvCmd; 6162 VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd)); 6163 rcParse = vmsvga3dCmdVBDXClearRenderTargetViewRegion(pThisCC, idDXContext, pCmd, cbCmd); 6143 6164 break; 6144 6165 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
r95035 r95055 339 339 u32TrackedState &= ~DX_STATE_RENDERTARGETS; 340 340 341 SVGA3dDepthStencilViewId const depthStencilViewId = (SVGA3d RenderTargetViewId)pDXContext->svgaDXContext.renderState.depthStencilViewId;341 SVGA3dDepthStencilViewId const depthStencilViewId = (SVGA3dDepthStencilViewId)pDXContext->svgaDXContext.renderState.depthStencilViewId; 342 342 uint32_t const cRenderTargetViewId = SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS; 343 343 SVGA3dRenderTargetViewId const *paRenderTargetViewId = (SVGA3dRenderTargetViewId *)&pDXContext->svgaDXContext.renderState.renderTargetViewIds[0]; … … 3235 3235 3236 3236 3237 int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext) 3238 { 3239 int rc; 3240 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 3241 AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutputWithMob, VERR_INVALID_STATE); 3242 PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState; 3243 AssertReturn(p3dState, VERR_INVALID_STATE); 3244 3245 PVMSVGA3DDXCONTEXT pDXContext; 3246 rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext); 3247 AssertRCReturn(rc, rc); 3248 3249 rc = pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutputWithMob(pThisCC, pDXContext); 3237 int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd) 3238 { 3239 int rc; 3240 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 3241 AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE); 3242 PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState; 3243 AssertReturn(p3dState, VERR_INVALID_STATE); 3244 3245 PVMSVGA3DDXCONTEXT pDXContext; 3246 rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext); 3247 AssertRCReturn(rc, rc); 3248 3249 SVGA3dStreamOutputId const soid = pCmd->soid; 3250 3251 ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE); 3252 ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER); 3253 ASSERT_GUEST_RETURN(pCmd->numOutputStreamEntries < SVGA3D_MAX_STREAMOUT_DECLS, VERR_INVALID_PARAMETER); 3254 RT_UNTRUSTED_VALIDATED_FENCE(); 3255 3256 SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid]; 3257 pEntry->numOutputStreamEntries = pCmd->numOutputStreamEntries; 3258 RT_ZERO(pEntry->decl); 3259 memcpy(pEntry->streamOutputStrideInBytes, pCmd->streamOutputStrideInBytes, sizeof(pEntry->streamOutputStrideInBytes)); 3260 pEntry->rasterizedStream = pCmd->rasterizedStream; 3261 pEntry->numOutputStreamStrides = pCmd->numOutputStreamStrides; 3262 pEntry->mobid = SVGA_ID_INVALID; 3263 pEntry->offsetInBytes = 0; 3264 pEntry->usesMob = 1; 3265 pEntry->pad0 = 0; 3266 pEntry->pad1 = 0; 3267 RT_ZERO(pEntry->pad2); 3268 3269 rc = pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutput(pThisCC, pDXContext, soid, pEntry); 3250 3270 return rc; 3251 3271 } … … 3269 3289 3270 3290 3271 int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext) 3272 { 3273 int rc; 3274 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 3275 AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindStreamOutput, VERR_INVALID_STATE); 3276 PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState; 3277 AssertReturn(p3dState, VERR_INVALID_STATE); 3278 3279 PVMSVGA3DDXCONTEXT pDXContext; 3280 rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext); 3281 AssertRCReturn(rc, rc); 3282 3283 rc = pSvgaR3State->pFuncsDX->pfnDXBindStreamOutput(pThisCC, pDXContext); 3284 return rc; 3291 int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd) 3292 { 3293 int rc; 3294 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 3295 AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE); 3296 PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState; 3297 AssertReturn(p3dState, VERR_INVALID_STATE); 3298 3299 PVMSVGA3DDXCONTEXT pDXContext; 3300 rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext); 3301 AssertRCReturn(rc, rc); 3302 SVGA3dStreamOutputId const soid = pCmd->soid; 3303 3304 ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE); 3305 ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER); 3306 RT_UNTRUSTED_VALIDATED_FENCE(); 3307 3308 SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid]; 3309 3310 ASSERT_GUEST_RETURN(pCmd->sizeInBytes >= pEntry->numOutputStreamEntries * sizeof(SVGA3dStreamOutputDeclarationEntry), VERR_INVALID_PARAMETER); 3311 ASSERT_GUEST(pEntry->usesMob); 3312 3313 pEntry->mobid = pCmd->mobid; 3314 pEntry->offsetInBytes = pCmd->offsetInBytes; 3315 pEntry->usesMob = 1; 3316 3317 return VINF_SUCCESS; 3285 3318 } 3286 3319 … … 3319 3352 } 3320 3353 3354 3355 int vmsvga3dVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion const *pCmd, uint32_t cRect, SVGASignedRect const *paRect) 3356 { 3357 int rc; 3358 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 3359 AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnVBDXClearRenderTargetViewRegion, VERR_INVALID_STATE); 3360 PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState; 3361 AssertReturn(p3dState, VERR_INVALID_STATE); 3362 3363 PVMSVGA3DDXCONTEXT pDXContext; 3364 rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext); 3365 AssertRCReturn(rc, rc); 3366 3367 SVGA3dRenderTargetViewId const renderTargetViewId = pCmd->viewId; 3368 3369 ASSERT_GUEST_RETURN(pDXContext->cot.paRTView, VERR_INVALID_STATE); 3370 ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, VERR_INVALID_PARAMETER); 3371 ASSERT_GUEST_RETURN(cRect <= 65536, VERR_INVALID_PARAMETER); /* Arbitrary limit. */ 3372 RT_UNTRUSTED_VALIDATED_FENCE(); 3373 3374 rc = pSvgaR3State->pFuncsDX->pfnVBDXClearRenderTargetViewRegion(pThisCC, pDXContext, renderTargetViewId, &pCmd->color, cRect, paRect); 3375 return rc; 3376 } 3377 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp
r95035 r95055 1270 1270 1271 1271 1272 static int dxDefineStreamOutput(PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry) 1273 { 1272 static int dxDefineStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry) 1273 { 1274 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 1274 1275 DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid]; 1275 1276 1276 1277 /* Make D3D11_SO_DECLARATION_ENTRY array from SVGA3dStreamOutputDeclarationEntry. */ 1278 SVGA3dStreamOutputDeclarationEntry const *paDecls; 1279 PVMSVGAMOB pMob = NULL; 1280 if (pEntry->usesMob) 1281 { 1282 DEBUG_BREAKPOINT_TEST(); 1283 pMob = vmsvgaR3MobGet(pSvgaR3State, pEntry->mobid); 1284 ASSERT_GUEST_RETURN(pMob, VERR_INVALID_PARAMETER); 1285 1286 /* Create a memory pointer for the MOB, which is accessible by host. */ 1287 int rc = vmsvgaR3MobBackingStoreCreate(pSvgaR3State, pMob, vmsvgaR3MobSize(pMob)); 1288 ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc); 1289 1290 /* Get pointer to the shader bytecode. This will also verify the offset. */ 1291 paDecls = (SVGA3dStreamOutputDeclarationEntry const *)vmsvgaR3MobBackingStorePtr(pMob, pEntry->offsetInBytes); 1292 AssertReturnStmt(paDecls, vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob), VERR_INTERNAL_ERROR); 1293 } 1294 else 1295 paDecls = &pEntry->decl[0]; 1296 1277 1297 pDXStreamOutput->cDeclarationEntry = pEntry->numOutputStreamEntries; 1278 1298 for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i) 1279 1299 { 1280 1300 D3D11_SO_DECLARATION_ENTRY *pDst = &pDXStreamOutput->aDeclarationEntry[i]; 1281 SVGA3dStreamOutputDeclarationEntry const *pSrc = &p Entry->decl[i];1301 SVGA3dStreamOutputDeclarationEntry const *pSrc = &paDecls[i]; 1282 1302 1283 1303 uint32_t const registerMask = pSrc->registerMask & 0xF; … … 1292 1312 pDst->OutputSlot = pSrc->outputSlot; 1293 1313 } 1314 1315 if (pMob) 1316 vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob); 1294 1317 1295 1318 return VINF_SUCCESS; … … 1788 1811 pEntry->rasterizedStream, 1789 1812 /*pClassLinkage=*/ NULL, &pDXShader->pGeometryShader); 1790 Assert (SUCCEEDED(hr));1791 if (SUCCEEDED(hr)) 1792 1813 AssertBreak(SUCCEEDED(hr)); 1814 1815 pDXShader->soid = soid; 1793 1816 } 1794 1817 break; … … 2098 2121 switch (dxgiFormat) 2099 2122 { 2123 case DXGI_FORMAT_D32_FLOAT: 2124 case DXGI_FORMAT_R32_FLOAT: 2125 case DXGI_FORMAT_R32_UINT: 2126 case DXGI_FORMAT_R32_SINT: 2127 return DXGI_FORMAT_R32_TYPELESS; /* 39 */ 2128 case DXGI_FORMAT_D24_UNORM_S8_UINT: 2129 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: 2130 case DXGI_FORMAT_X24_TYPELESS_G8_UINT: 2131 return DXGI_FORMAT_R24G8_TYPELESS; /* 44 */ 2100 2132 case DXGI_FORMAT_B8G8R8A8_UNORM: 2101 2133 case DXGI_FORMAT_B8G8R8X8_UNORM : … … 2104 2136 case DXGI_FORMAT_B8G8R8X8_TYPELESS: 2105 2137 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: 2106 return DXGI_FORMAT_B8G8R8A8_TYPELESS; 2138 return DXGI_FORMAT_B8G8R8A8_TYPELESS; /* 90 */ 2107 2139 /** @todo Other _TYPELESS formats. */ 2108 2140 default: … … 2111 2143 2112 2144 return dxgiFormat; 2145 } 2146 2147 2148 static bool dxIsDepthStencilFormat(DXGI_FORMAT dxgiFormat) 2149 { 2150 switch (dxgiFormat) 2151 { 2152 case DXGI_FORMAT_D24_UNORM_S8_UINT: 2153 return true; 2154 /** @todo Other Depth Stencil formats. */ 2155 default: 2156 break; 2157 } 2158 2159 return false; 2113 2160 } 2114 2161 … … 2144 2191 AssertReturn(dxgiFormat != DXGI_FORMAT_UNKNOWN, E_FAIL); 2145 2192 2146 dxgiFormat = dxGetDxgiTypelessFormat(dxgiFormat); 2193 /* Create typeless textures, unless it is a depth/stencil resource, 2194 * because D3D11_BIND_DEPTH_STENCIL requires a depth/stencil format. 2195 * Always use typeless format for staging/dynamic resources. 2196 */ 2197 DXGI_FORMAT const dxgiFormatTypeless = dxGetDxgiTypelessFormat(dxgiFormat); 2198 if (!dxIsDepthStencilFormat(dxgiFormat)) 2199 dxgiFormat = dxgiFormatTypeless; 2147 2200 2148 2201 /* … … 2193 2246 { 2194 2247 /* Map-able texture. */ 2248 td.Format = dxgiFormatTypeless; 2195 2249 td.Usage = D3D11_USAGE_DYNAMIC; 2196 2250 td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */ … … 2248 2302 { 2249 2303 /* Map-able texture. */ 2304 td.Format = dxgiFormatTypeless; 2250 2305 td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ 2251 2306 td.ArraySize = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ … … 2303 2358 { 2304 2359 /* Map-able texture. */ 2360 td.Format = dxgiFormatTypeless; 2305 2361 td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ 2306 2362 td.ArraySize = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ … … 2362 2418 { 2363 2419 /* Map-able texture. */ 2420 td.Format = dxgiFormatTypeless; 2364 2421 td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ 2365 2422 td.Usage = D3D11_USAGE_DYNAMIC; … … 2420 2477 { 2421 2478 /* Map-able texture. */ 2479 td.Format = dxgiFormatTypeless; 2422 2480 td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ 2423 2481 td.ArraySize = 1; /* Must be for D3D11_USAGE_DYNAMIC. */ … … 5334 5392 5335 5393 5336 static void vboxDXMatchShaderSignatures(PV MSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)5394 static void vboxDXMatchShaderSignatures(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader) 5337 5395 { 5338 5396 SVGA3dShaderId const shaderIdVS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_VS - SVGA3D_SHADERTYPE_MIN].shaderId; … … 5445 5503 SVGACOTableDXStreamOutputEntry const *pStreamOutputEntry = &pDXContext->cot.paStreamOutput[soid]; 5446 5504 DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid]; 5505 5506 if (pDXStreamOutput->cDeclarationEntry == 0) 5507 { 5508 int rc = dxDefineStreamOutput(pThisCC, pDXContext, soid, pStreamOutputEntry); 5509 AssertRCReturnVoid(rc); 5510 } 5447 5511 5448 5512 for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i) … … 5851 5915 } 5852 5916 5853 vboxDXMatchShaderSignatures(p DXContext, pDXShader);5917 vboxDXMatchShaderSignatures(pThisCC, pDXContext, pDXShader); 5854 5918 5855 5919 rc = DXShaderCreateDXBC(&pDXShader->shaderInfo, &pDXShader->pvDXBC, &pDXShader->cbDXBC); … … 6948 7012 6949 7013 7014 static DECLCALLBACK(int) vmsvga3dBackVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, 7015 SVGA3dRGBAFloat const *pColor, uint32_t cRect, SVGASignedRect const *paRect) 7016 { 7017 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend; 7018 RT_NOREF(pBackend); 7019 7020 DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext); 7021 AssertReturn(pDevice->pDevice, VERR_INVALID_STATE); 7022 7023 DXVIEW *pDXView = &pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId]; 7024 if (!pDXView->u.pRenderTargetView) 7025 { 7026 /* (Re-)create the render target view, because a creation of a view is deferred until a draw or a clear call. */ 7027 SVGACOTableDXRTViewEntry const *pEntry = &pDXContext->cot.paRTView[renderTargetViewId]; 7028 int rc = dxDefineRenderTargetView(pThisCC, pDXContext, renderTargetViewId, pEntry); 7029 AssertRCReturn(rc, rc); 7030 } 7031 pDevice->pImmediateContext->ClearView(pDXView->u.pRenderTargetView, pColor->value, (D3D11_RECT *)paRect, cRect); 7032 return VINF_SUCCESS; 7033 } 7034 7035 6950 7036 static DECLCALLBACK(int) vmsvga3dBackDXClearDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t flags, SVGA3dDepthStencilViewId depthStencilViewId, float depth, uint8_t stencil) 6951 7037 { … … 7560 7646 dxDestroyStreamOutput(pDXStreamOutput); 7561 7647 7562 return dxDefineStreamOutput(pDXContext, soid, pEntry); 7648 RT_NOREF(pEntry); 7649 return VINF_SUCCESS; 7563 7650 } 7564 7651 … … 7847 7934 continue; /* Skip uninitialized entry. */ 7848 7935 7849 dxDefineStreamOutput(pDXContext, i, pEntry); 7936 /* Reset the stream output backend data. It will be re-created when a GS shader with this streamoutput 7937 * will be set in setupPipeline. 7938 */ 7939 DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[i]; 7940 dxDestroyStreamOutput(pDXStreamOutput); 7850 7941 } 7851 7942 break; … … 8571 8662 8572 8663 8573 static DECLCALLBACK(int) vmsvga3dBackDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)8574 {8575 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;8576 8577 RT_NOREF(pBackend, pDXContext);8578 AssertFailed(); /** @todo Implement */8579 return VERR_NOT_IMPLEMENTED;8580 }8581 8582 8583 8664 static DECLCALLBACK(int) vmsvga3dBackDXSetShaderIface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext) 8584 {8585 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;8586 8587 RT_NOREF(pBackend, pDXContext);8588 AssertFailed(); /** @todo Implement */8589 return VERR_NOT_IMPLEMENTED;8590 }8591 8592 8593 static DECLCALLBACK(int) vmsvga3dBackDXBindStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)8594 8665 { 8595 8666 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend; … … 8852 8923 p->pfnDXSetCSUAViews = vmsvga3dBackDXSetCSUAViews; 8853 8924 p->pfnDXSetMinLOD = vmsvga3dBackDXSetMinLOD; 8854 p->pfnDXDefineStreamOutputWithMob = vmsvga3dBackDXDefineStreamOutputWithMob;8855 8925 p->pfnDXSetShaderIface = vmsvga3dBackDXSetShaderIface; 8856 p->pfnDXBindStreamOutput = vmsvga3dBackDXBindStreamOutput;8857 8926 p->pfnSurfaceStretchBltNonMSToMS = vmsvga3dBackSurfaceStretchBltNonMSToMS; 8858 8927 p->pfnDXBindShaderIface = vmsvga3dBackDXBindShaderIface; 8928 p->pfnVBDXClearRenderTargetViewRegion = vmsvga3dBackVBDXClearRenderTargetViewRegion; 8859 8929 } 8860 8930 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
r95017 r95055 525 525 DECLCALLBACKMEMBER(int, pfnDXSetCSUAViews, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)); 526 526 DECLCALLBACKMEMBER(int, pfnDXSetMinLOD, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 527 DECLCALLBACKMEMBER(int, pfnDXDefineStreamOutputWithMob, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));528 527 DECLCALLBACKMEMBER(int, pfnDXSetShaderIface, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 529 DECLCALLBACKMEMBER(int, pfnDXBindStreamOutput, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));530 528 DECLCALLBACKMEMBER(int, pfnSurfaceStretchBltNonMSToMS, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 531 529 DECLCALLBACKMEMBER(int, pfnDXBindShaderIface, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 530 DECLCALLBACKMEMBER(int, pfnVBDXClearRenderTargetViewRegion, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGA3dRGBAFloat const *pColor, uint32_t cRect, SVGASignedRect const *paRect)); 532 531 } VMSVGA3DBACKENDFUNCSDX; 533 532 … … 653 652 int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId); 654 653 int vmsvga3dDXSetMinLOD(PVGASTATECC pThisCC, uint32_t idDXContext); 655 int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext );654 int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd); 656 655 int vmsvga3dDXSetShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext); 657 int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext );656 int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd); 658 657 int vmsvga3dSurfaceStretchBltNonMSToMS(PVGASTATECC pThisCC, uint32_t idDXContext); 659 658 int vmsvga3dDXBindShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext); 660 659 int vmsvga3dDXLoadExec(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass); 661 660 int vmsvga3dDXSaveExec(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PSSMHANDLE pSSM); 661 662 int vmsvga3dVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion const *pCmd, uint32_t cRect, SVGASignedRect const *paRect); 662 663 #endif /* VMSVGA3D_DX */ 663 664
Note:
See TracChangeset
for help on using the changeset viewer.