Changeset 94106 in vbox
- Timestamp:
- Mar 7, 2022 10:45:58 AM (3 years ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
r94101 r94106 40 40 41 41 42 /* 43 * 44 * 3D backend entry points. These functions are used from vmsvga3dDXSwitchContext and command handlers. 45 * 46 */ 47 48 static int dxSetShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, 49 SVGA3dShaderType shaderType, SVGA3dShaderId shaderId) 50 { 51 PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State; 52 53 PVMSVGA3DSHADER pShader; 54 if (shaderId != SVGA_ID_INVALID) 55 { 56 SVGACOTableDXShaderEntry *pEntry = &pDXContext->cot.paShader[shaderId]; 57 ASSERT_GUEST_RETURN(pEntry->type == shaderType, VERR_INVALID_PARAMETER); 58 RT_UNTRUSTED_VALIDATED_FENCE(); 59 60 pShader = &pDXContext->paShader[shaderId]; 61 } 62 else 63 pShader = NULL; 64 65 return pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContext, shaderType, pShader); 66 } 67 68 69 /* 70 * 71 * Command handlers. 72 * 73 */ 74 42 75 int vmsvga3dDXUnbindContext(PVGASTATECC pThisCC, uint32_t cid, SVGADXContextMobFormat *pSvgaDXContext) 43 76 { … … 59 92 60 93 61 int vmsvga3dDXSwitchContext(PVGASTATECC pThisCC, uint32_t cid New)94 int vmsvga3dDXSwitchContext(PVGASTATECC pThisCC, uint32_t cid) 62 95 { 63 96 int rc; … … 67 100 AssertReturn(p3dState, VERR_INVALID_STATE); 68 101 69 PVMSVGA3DDXCONTEXT pDXContext New;70 rc = vmsvga3dDXContextFromCid(p3dState, cid New, &pDXContextNew);102 PVMSVGA3DDXCONTEXT pDXContext; 103 rc = vmsvga3dDXContextFromCid(p3dState, cid, &pDXContext); 71 104 AssertRCReturn(rc, rc); 72 105 73 106 /* Notify the host backend that context is about to be switched. */ 74 rc = pSvgaR3State->pFuncsDX->pfnDXSwitchContext(pThisCC, pDXContext New);107 rc = pSvgaR3State->pFuncsDX->pfnDXSwitchContext(pThisCC, pDXContext); 75 108 if (rc == VINF_NOT_IMPLEMENTED || RT_FAILURE(rc)) 76 109 return rc; … … 81 114 #define DX_STATE_SAMPLERS 0x00000004 82 115 #define DX_STATE_INPUTLAYOUT 0x00000008 116 #define DX_STATE_TOPOLOGY 0x00000010 117 #define DX_STATE_VERTEXBUFFER 0x00000020 118 #define DX_STATE_INDEXBUFFER 0x00000040 119 #define DX_STATE_BLENDSTATE 0x00000080 120 #define DX_STATE_DEPTHSTENCILSTATE 0x00000100 121 #define DX_STATE_SOTARGETS 0x00000200 122 #define DX_STATE_VIEWPORTS 0x00000400 123 #define DX_STATE_SCISSORRECTS 0x00000800 83 124 uint32_t u32TrackedState = 0 84 125 | DX_STATE_VS … … 86 127 | DX_STATE_SAMPLERS 87 128 | DX_STATE_INPUTLAYOUT 129 | DX_STATE_TOPOLOGY 130 | DX_STATE_VERTEXBUFFER 131 | DX_STATE_INDEXBUFFER 132 | DX_STATE_BLENDSTATE 133 | DX_STATE_DEPTHSTENCILSTATE 134 | DX_STATE_SOTARGETS 135 | DX_STATE_VIEWPORTS 136 | DX_STATE_SCISSORRECTS 88 137 ; 89 138 … … 95 144 96 145 uint32_t const idxShaderState = shaderType - SVGA3D_SHADERTYPE_MIN; 97 SVGA3dShaderId shaderId = pDXContextNew->svgaDXContext.shaderState[idxShaderState].shaderId; 98 99 /** @todo Same code as in DXSetShader, move to a static function with type and id as parms. */ 100 PVMSVGA3DSHADER pShader; 101 if (shaderId != SVGA_ID_INVALID) 102 { 103 SVGACOTableDXShaderEntry *pEntry = &pDXContextNew->cot.paShader[shaderId]; 104 ASSERT_GUEST_RETURN(pEntry->type == shaderType, VERR_INVALID_PARAMETER); 105 RT_UNTRUSTED_VALIDATED_FENCE(); 106 107 pShader = &pDXContextNew->paShader[shaderId]; 108 } 109 else 110 pShader = NULL; 111 112 rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContextNew, shaderType, pShader); 146 SVGA3dShaderId shaderId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId; 147 148 rc = dxSetShader(pThisCC, pDXContext, shaderType, shaderId); 113 149 AssertRC(rc); 114 150 } … … 121 157 122 158 uint32_t const idxShaderState = shaderType - SVGA3D_SHADERTYPE_MIN; 123 SVGA3dShaderId shaderId = pDXContextNew->svgaDXContext.shaderState[idxShaderState].shaderId; 124 125 /** @todo Same code as in DXSetShader, move to a static function with type and id as parms. */ 126 PVMSVGA3DSHADER pShader; 127 if (shaderId != SVGA_ID_INVALID) 128 { 129 SVGACOTableDXShaderEntry *pEntry = &pDXContextNew->cot.paShader[shaderId]; 130 ASSERT_GUEST_RETURN(pEntry->type == shaderType, VERR_INVALID_PARAMETER); 131 RT_UNTRUSTED_VALIDATED_FENCE(); 132 133 pShader = &pDXContextNew->paShader[shaderId]; 134 } 135 else 136 pShader = NULL; 137 138 rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContextNew, shaderType, pShader); 159 SVGA3dShaderId shaderId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId; 160 161 rc = dxSetShader(pThisCC, pDXContext, shaderType, shaderId); 139 162 AssertRC(rc); 140 163 } … … 144 167 u32TrackedState &= ~DX_STATE_SAMPLERS; 145 168 146 for (int i = SVGA3D_SHADERTYPE_MIN; i < SVGA3D_SHADERTYPE_DX10_MAX; ++i) /** SVGA3D_SHADERTYPE_MAX */169 for (int i = SVGA3D_SHADERTYPE_MIN; i < SVGA3D_SHADERTYPE_DX10_MAX; ++i) /** @todo SVGA3D_SHADERTYPE_MAX */ 147 170 { 148 171 SVGA3dShaderType const shaderType = (SVGA3dShaderType)i; … … 151 174 uint32_t startSampler = 0; 152 175 uint32_t cSamplerId = SVGA3D_DX_MAX_SAMPLERS; 153 SVGA3dSamplerId *paSamplerId = &pDXContext New->svgaDXContext.shaderState[idxShaderState].samplers[0];154 155 rc = pSvgaR3State->pFuncsDX->pfnDXSetSamplers(pThisCC, pDXContext New, startSampler, shaderType, cSamplerId, paSamplerId);176 SVGA3dSamplerId *paSamplerId = &pDXContext->svgaDXContext.shaderState[idxShaderState].samplers[0]; 177 178 rc = pSvgaR3State->pFuncsDX->pfnDXSetSamplers(pThisCC, pDXContext, startSampler, shaderType, cSamplerId, paSamplerId); 156 179 AssertRC(rc); 157 180 } … … 163 186 u32TrackedState &= ~DX_STATE_INPUTLAYOUT; 164 187 165 SVGA3dElementLayoutId const elementLayoutId = pDXContextNew->svgaDXContext.inputAssembly.layoutId; 166 167 rc = pSvgaR3State->pFuncsDX->pfnDXSetInputLayout(pThisCC, pDXContextNew, elementLayoutId); 188 SVGA3dElementLayoutId const elementLayoutId = pDXContext->svgaDXContext.inputAssembly.layoutId; 189 190 rc = pSvgaR3State->pFuncsDX->pfnDXSetInputLayout(pThisCC, pDXContext, elementLayoutId); 191 AssertRC(rc); 192 } 193 194 195 if (u32TrackedState & DX_STATE_TOPOLOGY) 196 { 197 u32TrackedState &= ~DX_STATE_TOPOLOGY; 198 199 SVGA3dPrimitiveType const topology = (SVGA3dPrimitiveType)pDXContext->svgaDXContext.inputAssembly.topology; 200 201 if (topology != SVGA3D_PRIMITIVE_INVALID) 202 rc = pSvgaR3State->pFuncsDX->pfnDXSetTopology(pThisCC, pDXContext, topology); 203 AssertRC(rc); 204 } 205 206 207 if (u32TrackedState & DX_STATE_VERTEXBUFFER) 208 { 209 u32TrackedState &= ~DX_STATE_VERTEXBUFFER; 210 211 /** @todo Track which vertex buffers were modified and update only the corresponding slots. 212 * 32 bits mask is enough. 213 */ 214 uint32_t startBuffer = 0; 215 uint32_t cVertexBuffer = SVGA3D_DX_MAX_VERTEXBUFFERS; 216 SVGA3dVertexBuffer aVertexBuffer[SVGA3D_DX_MAX_VERTEXBUFFERS]; 217 for (uint32_t i = 0; i < SVGA3D_DX_MAX_VERTEXBUFFERS; ++i) 218 { 219 aVertexBuffer[i].sid = pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].bufferId; 220 aVertexBuffer[i].stride = pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].stride; 221 aVertexBuffer[i].offset = pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].offset; 222 } 223 224 rc = pSvgaR3State->pFuncsDX->pfnDXSetVertexBuffers(pThisCC, pDXContext, startBuffer, cVertexBuffer, aVertexBuffer); 225 AssertRC(rc); 226 } 227 228 229 if (u32TrackedState & DX_STATE_INDEXBUFFER) 230 { 231 u32TrackedState &= ~DX_STATE_INDEXBUFFER; 232 233 SVGA3dSurfaceId const sid = pDXContext->svgaDXContext.inputAssembly.indexBufferSid; 234 SVGA3dSurfaceFormat const format = (SVGA3dSurfaceFormat)pDXContext->svgaDXContext.inputAssembly.indexBufferFormat; 235 uint32_t const offset = pDXContext->svgaDXContext.inputAssembly.indexBufferOffset; 236 237 rc = pSvgaR3State->pFuncsDX->pfnDXSetIndexBuffer(pThisCC, pDXContext, sid, format, offset); 238 AssertRC(rc); 239 } 240 241 242 if (u32TrackedState & DX_STATE_BLENDSTATE) 243 { 244 u32TrackedState &= ~DX_STATE_BLENDSTATE; 245 246 SVGA3dBlendStateId const blendId = pDXContext->svgaDXContext.renderState.blendStateId; 247 /* SVGADXContextMobFormat uses uint32_t array to store the blend factors, however they are in fact 32 bit floats. */ 248 float const *paBlendFactor = (float *)&pDXContext->svgaDXContext.renderState.blendFactor[0]; 249 uint32_t const sampleMask = pDXContext->svgaDXContext.renderState.sampleMask; 250 251 rc = pSvgaR3State->pFuncsDX->pfnDXSetBlendState(pThisCC, pDXContext, blendId, paBlendFactor, sampleMask); 252 AssertRC(rc); 253 } 254 255 256 if (u32TrackedState & DX_STATE_DEPTHSTENCILSTATE) 257 { 258 u32TrackedState &= ~DX_STATE_DEPTHSTENCILSTATE; 259 260 SVGA3dDepthStencilStateId const depthStencilId = pDXContext->svgaDXContext.renderState.depthStencilStateId; 261 uint32_t const stencilRef = pDXContext->svgaDXContext.renderState.stencilRef; 262 263 rc = pSvgaR3State->pFuncsDX->pfnDXSetDepthStencilState(pThisCC, pDXContext, depthStencilId, stencilRef); 264 AssertRC(rc); 265 } 266 267 268 if (u32TrackedState & DX_STATE_SOTARGETS) 269 { 270 u32TrackedState &= ~DX_STATE_SOTARGETS; 271 272 uint32_t cSoTarget = SVGA3D_DX_MAX_SOTARGETS; 273 SVGA3dSoTarget aSoTarget[SVGA3D_DX_MAX_SOTARGETS]; 274 for (uint32_t i = 0; i < SVGA3D_DX_MAX_SOTARGETS; ++i) 275 { 276 aSoTarget[i].sid = pDXContext->svgaDXContext.streamOut.targets[i]; 277 /** @todo Offset is not stored in svgaDXContext. Should it be stored elsewhere by the host? */ 278 aSoTarget[i].offset = 0; 279 aSoTarget[i].sizeInBytes = 0; 280 } 281 282 rc = pSvgaR3State->pFuncsDX->pfnDXSetSOTargets(pThisCC, pDXContext, cSoTarget, aSoTarget); 283 AssertRC(rc); 284 } 285 286 287 if (u32TrackedState & DX_STATE_VIEWPORTS) 288 { 289 u32TrackedState &= ~DX_STATE_VIEWPORTS; 290 291 uint32_t const cViewport = pDXContext->svgaDXContext.numViewports; 292 SVGA3dViewport const *paViewport = &pDXContext->svgaDXContext.viewports[0]; 293 294 rc = pSvgaR3State->pFuncsDX->pfnDXSetViewports(pThisCC, pDXContext, cViewport, paViewport); 295 AssertRC(rc); 296 } 297 298 299 if (u32TrackedState & DX_STATE_SCISSORRECTS) 300 { 301 u32TrackedState &= ~DX_STATE_SCISSORRECTS; 302 303 uint32_t const cRect = pDXContext->svgaDXContext.numScissorRects; 304 SVGASignedRect const *paRect = &pDXContext->svgaDXContext.scissorRects[0]; 305 306 rc = pSvgaR3State->pFuncsDX->pfnDXSetScissorRects(pThisCC, pDXContext, cRect, paRect); 168 307 AssertRC(rc); 169 308 } … … 217 356 pDXContext = p3dState->papDXContexts[cid]; 218 357 memset(pDXContext, 0, sizeof(*pDXContext)); 358 219 359 /* 0xFFFFFFFF (SVGA_ID_INVALID) is a better initial value than 0 for most of svgaDXContext fields. */ 220 360 memset(&pDXContext->svgaDXContext, 0xFF, sizeof(pDXContext->svgaDXContext)); 361 pDXContext->svgaDXContext.inputAssembly.topology = SVGA3D_PRIMITIVE_INVALID; 362 pDXContext->svgaDXContext.numViewports = 0; 363 pDXContext->svgaDXContext.numScissorRects = 0; 221 364 pDXContext->cid = cid; 222 365 … … 385 528 pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId = pCmd->shaderId; 386 529 387 PVMSVGA3DSHADER pShader; 388 if (pCmd->shaderId != SVGA_ID_INVALID) 389 { 390 SVGACOTableDXShaderEntry *pEntry = &pDXContext->cot.paShader[pCmd->shaderId]; 391 ASSERT_GUEST_RETURN(pEntry->type == pCmd->type, VERR_INVALID_PARAMETER); 392 RT_UNTRUSTED_VALIDATED_FENCE(); 393 394 pShader = &pDXContext->paShader[pCmd->shaderId]; 395 } 396 else 397 pShader = NULL; 398 399 rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContext, pCmd->type, pShader); 530 rc = dxSetShader(pThisCC, pDXContext, pCmd->type, pCmd->shaderId); 400 531 return rc; 401 532 } … … 631 762 RT_UNTRUSTED_VALIDATED_FENCE(); 632 763 764 for (uint32_t i = 0; i < cVertexBuffer; ++i) 765 { 766 uint32_t const idxVertexBuffer = startBuffer + i; 767 768 pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].bufferId = paVertexBuffer[i].sid; 769 pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].stride = paVertexBuffer[i].stride; 770 pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].offset = paVertexBuffer[i].offset; 771 } 772 633 773 rc = pSvgaR3State->pFuncsDX->pfnDXSetVertexBuffers(pThisCC, pDXContext, startBuffer, cVertexBuffer, paVertexBuffer); 634 774 return rc; … … 725 865 RT_UNTRUSTED_VALIDATED_FENCE(); 726 866 867 pDXContext->svgaDXContext.renderState.blendStateId = blendId; 868 /* SVGADXContextMobFormat uses uint32_t array to store the blend factors, however they are in fact 32 bit floats. */ 869 memcpy(pDXContext->svgaDXContext.renderState.blendFactor, pCmd->blendFactor, sizeof(pDXContext->svgaDXContext.renderState.blendFactor)); 870 pDXContext->svgaDXContext.renderState.sampleMask = pCmd->sampleMask; 871 727 872 rc = pSvgaR3State->pFuncsDX->pfnDXSetBlendState(pThisCC, pDXContext, blendId, pCmd->blendFactor, pCmd->sampleMask); 728 873 return rc; … … 748 893 RT_UNTRUSTED_VALIDATED_FENCE(); 749 894 895 pDXContext->svgaDXContext.renderState.depthStencilStateId = depthStencilId; 896 pDXContext->svgaDXContext.renderState.stencilRef = pCmd->stencilRef; 897 750 898 rc = pSvgaR3State->pFuncsDX->pfnDXSetDepthStencilState(pThisCC, pDXContext, depthStencilId, pCmd->stencilRef); 751 899 return rc; … … 922 1070 923 1071 ASSERT_GUEST_RETURN(cSoTarget < SVGA3D_DX_MAX_SOTARGETS, VERR_INVALID_PARAMETER); 1072 RT_UNTRUSTED_VALIDATED_FENCE(); 1073 1074 /** @todo Offset is not stored in svgaDXContext. Should it be stored elsewhere? */ 1075 for (uint32_t i = 0; i < SVGA3D_DX_MAX_SOTARGETS; ++i) 1076 pDXContext->svgaDXContext.streamOut.targets[i] = i < cSoTarget ? paSoTarget[i].sid : SVGA3D_INVALID_ID; 924 1077 925 1078 rc = pSvgaR3State->pFuncsDX->pfnDXSetSOTargets(pThisCC, pDXContext, cSoTarget, paSoTarget); … … 940 1093 AssertRCReturn(rc, rc); 941 1094 1095 ASSERT_GUEST_RETURN(cViewport < SVGA3D_DX_MAX_VIEWPORTS, VERR_INVALID_PARAMETER); 1096 RT_UNTRUSTED_VALIDATED_FENCE(); 1097 1098 pDXContext->svgaDXContext.numViewports = (uint8_t)cViewport; 1099 for (uint32_t i = 0; i < cViewport; ++i) 1100 pDXContext->svgaDXContext.viewports[i] = paViewport[i]; 1101 942 1102 rc = pSvgaR3State->pFuncsDX->pfnDXSetViewports(pThisCC, pDXContext, cViewport, paViewport); 943 1103 return rc; … … 956 1116 rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext); 957 1117 AssertRCReturn(rc, rc); 1118 1119 ASSERT_GUEST_RETURN(cRect < SVGA3D_DX_MAX_SCISSORRECTS, VERR_INVALID_PARAMETER); 1120 RT_UNTRUSTED_VALIDATED_FENCE(); 1121 1122 pDXContext->svgaDXContext.numScissorRects = (uint8_t)cRect; 1123 for (uint32_t i = 0; i < cRect; ++i) 1124 pDXContext->svgaDXContext.scissorRects[i] = paRect[i]; 958 1125 959 1126 rc = pSvgaR3State->pFuncsDX->pfnDXSetScissorRects(pThisCC, pDXContext, cRect, paRect); -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp
r94101 r94106 5137 5137 5138 5138 5139 static DECLCALLBACK(int) vmsvga3dBackDXSwitchContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext New)5139 static DECLCALLBACK(int) vmsvga3dBackDXSwitchContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext) 5140 5140 { 5141 5141 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend; … … 5144 5144 5145 5145 /* The new context state will be applied by the generic DX code. */ 5146 RT_NOREF(pDXContext New);5146 RT_NOREF(pDXContext); 5147 5147 return VINF_SUCCESS; 5148 5148 } … … 5380 5380 AssertReturnVoid(pDevice->pDevice); 5381 5381 5382 /* * @todoMake sure that the render target views exist. Similar to SRVs. */5382 /* Make sure that the render target views exist. Similar to SRVs. */ 5383 5383 if (pDXContext->svgaDXContext.renderState.depthStencilViewId != SVGA3D_INVALID_ID) 5384 5384 { … … 5874 5874 paOffset[idxVertexBuffer] = 0; 5875 5875 } 5876 5877 pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].bufferId = paVertexBuffer[i].sid;5878 pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].stride = paVertexBuffer[i].stride;5879 pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].offset = paVertexBuffer[i].offset;5880 5876 } 5881 5877 … … 6066 6062 AssertReturn(pDevice->pDevice, VERR_INVALID_STATE); 6067 6063 6068 ID3D11BlendState *pBlendState = pDXContext->pBackendDXContext->papBlendState[blendId]; 6069 pDevice->pImmediateContext->OMSetBlendState(pBlendState, blendFactor, sampleMask); 6070 6071 pDXContext->svgaDXContext.renderState.blendStateId = blendId; 6072 pDXContext->svgaDXContext.renderState.blendFactor[0] = blendFactor[0]; 6073 pDXContext->svgaDXContext.renderState.blendFactor[1] = blendFactor[1]; 6074 pDXContext->svgaDXContext.renderState.blendFactor[2] = blendFactor[2]; 6075 pDXContext->svgaDXContext.renderState.blendFactor[3] = blendFactor[3]; 6076 pDXContext->svgaDXContext.renderState.sampleMask = sampleMask; 6064 if (blendId != SVGA3D_INVALID_ID) 6065 { 6066 ID3D11BlendState *pBlendState = pDXContext->pBackendDXContext->papBlendState[blendId]; 6067 pDevice->pImmediateContext->OMSetBlendState(pBlendState, blendFactor, sampleMask); 6068 } 6069 else 6070 pDevice->pImmediateContext->OMSetBlendState(NULL, NULL, 0); 6077 6071 6078 6072 return VINF_SUCCESS; … … 6088 6082 AssertReturn(pDevice->pDevice, VERR_INVALID_STATE); 6089 6083 6090 ID3D11DepthStencilState *pDepthStencilState = pDXContext->pBackendDXContext->papDepthStencilState[depthStencilId]; 6091 pDevice->pImmediateContext->OMSetDepthStencilState(pDepthStencilState, stencilRef); 6092 6093 pDXContext->svgaDXContext.renderState.depthStencilStateId = depthStencilId; 6094 pDXContext->svgaDXContext.renderState.stencilRef = stencilRef; 6084 if (depthStencilId != SVGA3D_INVALID_ID) 6085 { 6086 ID3D11DepthStencilState *pDepthStencilState = pDXContext->pBackendDXContext->papDepthStencilState[depthStencilId]; 6087 pDevice->pImmediateContext->OMSetDepthStencilState(pDepthStencilState, stencilRef); 6088 } 6089 else 6090 pDevice->pImmediateContext->OMSetDepthStencilState(NULL, 0); 6095 6091 6096 6092 return VINF_SUCCESS; … … 6106 6102 RT_NOREF(pBackend); 6107 6103 6108 pDevice->pImmediateContext->RSSetState(pDXContext->pBackendDXContext->papRasterizerState[rasterizerId]); 6104 if (rasterizerId != SVGA3D_INVALID_ID) 6105 { 6106 ID3D11RasterizerState *pRasterizerState = pDXContext->pBackendDXContext->papRasterizerState[rasterizerId]; 6107 pDevice->pImmediateContext->RSSetState(pRasterizerState); 6108 } 6109 else 6110 pDevice->pImmediateContext->RSSetState(NULL); 6111 6109 6112 return VINF_SUCCESS; 6110 6113 } … … 6228 6231 paResource[i] = pSurface->pBackendSurface->u.pBuffer; 6229 6232 paOffset[i] = paSoTarget[i].offset; 6230 6231 /** @todo This should be in the caller. */6232 pDXContext->svgaDXContext.streamOut.targets[i] = paSoTarget[i].sid;6233 6233 } 6234 6234 else … … 6236 6236 paResource[i] = NULL; 6237 6237 paOffset[i] = 0; 6238 6239 /** @todo This should be in the caller. */6240 pDXContext->svgaDXContext.streamOut.targets[i] = SVGA_ID_INVALID;6241 6238 } 6242 6239 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
r94101 r94106 396 396 DECLCALLBACKMEMBER(int, pfnDXDestroyContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 397 397 DECLCALLBACKMEMBER(int, pfnDXBindContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 398 DECLCALLBACKMEMBER(int, pfnDXSwitchContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext New));398 DECLCALLBACKMEMBER(int, pfnDXSwitchContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 399 399 DECLCALLBACKMEMBER(int, pfnDXReadbackContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 400 400 DECLCALLBACKMEMBER(int, pfnDXInvalidateContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); … … 521 521 /* Helpers. */ 522 522 int vmsvga3dDXUnbindContext(PVGASTATECC pThisCC, uint32_t cid, SVGADXContextMobFormat *pSvgaDXContext); 523 int vmsvga3dDXSwitchContext(PVGASTATECC pThisCC, uint32_t cid New);523 int vmsvga3dDXSwitchContext(PVGASTATECC pThisCC, uint32_t cid); 524 524 525 525 /* Command handlers. */
Note:
See TracChangeset
for help on using the changeset viewer.