Changeset 69163 in vbox for trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
- Timestamp:
- Oct 23, 2017 11:54:35 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 118474
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
r69153 r69163 3292 3292 memset(pContext, 0, sizeof(*pContext)); 3293 3293 pContext->id = cid; 3294 for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture ); i++)3295 pContext->aSidActiveTexture [i] = SVGA3D_INVALID_ID;3294 for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++) 3295 pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID; 3296 3296 3297 3297 pContext->sidRenderTarget = SVGA3D_INVALID_ID; … … 5079 5079 Log(("vmsvga3dSetTextureState: cid=%x stage=%d type=%s (%x) val=%x\n", cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value)); 5080 5080 /* Record the texture state for vm state saving. */ 5081 if ( pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE5082 && pTextureState[i].name < SVGA3D_TS_MAX)5083 { 5084 pContext->state.aTextureState [pTextureState[i].stage][pTextureState[i].name] = pTextureState[i];5081 if ( pTextureState[i].stage < RT_ELEMENTS(pContext->state.aTextureStates) 5082 && pTextureState[i].name < RT_ELEMENTS(pContext->state.aTextureStates[0])) 5083 { 5084 pContext->state.aTextureStates[pTextureState[i].stage][pTextureState[i].name] = pTextureState[i]; 5085 5085 } 5086 5086 … … 5089 5089 { 5090 5090 /** @todo Is this the appropriate limit for all kinds of textures? It is the 5091 * size of aSidActiveTexture and for binding/unbinding we cannot exceed it. */5092 if (pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE)5091 * size of aSidActiveTextures and for binding/unbinding we cannot exceed it. */ 5092 if (pTextureState[i].stage < RT_ELEMENTS(pContext->state.aTextureStates)) 5093 5093 { 5094 5094 pState->ext.glActiveTexture(GL_TEXTURE0 + pTextureState[i].stage); … … 5142 5142 { 5143 5143 Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x replacing=%x\n", 5144 currentStage, pTextureState[i].value, pContext->aSidActiveTexture [currentStage]));5145 5146 pContext->aSidActiveTexture [currentStage] = SVGA3D_INVALID_ID;5144 currentStage, pTextureState[i].value, pContext->aSidActiveTextures[currentStage])); 5145 5146 pContext->aSidActiveTextures[currentStage] = SVGA3D_INVALID_ID; 5147 5147 /* Unselect the currently associated texture. */ 5148 5148 glBindTexture(GL_TEXTURE_2D, 0); … … 5163 5163 Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x (%d,%d) replacing=%x\n", 5164 5164 currentStage, pTextureState[i].value, pSurface->pMipmapLevels[0].mipmapSize.width, 5165 pSurface->pMipmapLevels[0].mipmapSize.height, pContext->aSidActiveTexture [currentStage]));5165 pSurface->pMipmapLevels[0].mipmapSize.height, pContext->aSidActiveTextures[currentStage])); 5166 5166 5167 5167 if (pSurface->oglId.texture == OPENGL_INVALID_ID) … … 5179 5179 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext); 5180 5180 5181 if (pContext->aSidActiveTexture [currentStage] != sid)5181 if (pContext->aSidActiveTextures[currentStage] != sid) 5182 5182 { 5183 5183 /* Recreate the texture state as glBindTexture resets them all (sigh). */ 5184 for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)5184 for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); iStage++) 5185 5185 { 5186 for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)5186 for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); j++) 5187 5187 { 5188 SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureState [iStage][j];5188 SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureStates[iStage][j]; 5189 5189 5190 5190 if ( pTextureStateIter->name != SVGA3D_TS_INVALID … … 5194 5194 } 5195 5195 } 5196 pContext->aSidActiveTexture [currentStage] = sid;5196 pContext->aSidActiveTextures[currentStage] = sid; 5197 5197 } 5198 5198 /* Finished; continue with the next one. */ … … 5217 5217 case SVGA3D_TS_MINFILTER: /* SVGA3dTextureFilter */ 5218 5218 { 5219 uint32_t mipFilter = pContext->state.aTextureState [currentStage][SVGA3D_TS_MIPFILTER].value;5220 uint32_t minFilter = pContext->state.aTextureState [currentStage][SVGA3D_TS_MINFILTER].value;5219 uint32_t mipFilter = pContext->state.aTextureStates[currentStage][SVGA3D_TS_MIPFILTER].value; 5220 uint32_t minFilter = pContext->state.aTextureStates[currentStage][SVGA3D_TS_MINFILTER].value; 5221 5221 5222 5222 /* If SVGA3D_TS_MIPFILTER is set to NONE, then use SVGA3D_TS_MIPFILTER, otherwise SVGA3D_TS_MIPFILTER enables mipmap minification. */ … … 6399 6399 } 6400 6400 #ifdef DEBUG 6401 for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture ); i++)6402 { 6403 if (pContext->aSidActiveTexture [i] != SVGA3D_INVALID_ID)6401 for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++) 6402 { 6403 if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID) 6404 6404 { 6405 6405 GLint activeTexture = 0; … … 6417 6417 6418 6418 # if 0 /* Aren't we checking whether 'activeTexture' on texture unit 'i' matches what we expected? This works if only one unit is active, but if both are it _will_ fail for one of them. */ 6419 if (pContext->aSidActiveTexture [activeTextureUnit - GL_TEXTURE0] != SVGA3D_INVALID_ID)6419 if (pContext->aSidActiveTextures[activeTextureUnit - GL_TEXTURE0] != SVGA3D_INVALID_ID) 6420 6420 { 6421 6421 PVMSVGA3DSURFACE pTexture; 6422 pTexture = pState->papSurfaces[pContext->aSidActiveTexture [activeTextureUnit - GL_TEXTURE0]];6422 pTexture = pState->papSurfaces[pContext->aSidActiveTextures[activeTextureUnit - GL_TEXTURE0]]; 6423 6423 6424 6424 AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture, ("%x vs %x unit %d - %d\n", pTexture->oglId.texture, activeTexture, i, activeTextureUnit - GL_TEXTURE0)); 6425 6425 } 6426 6426 # else 6427 PVMSVGA3DSURFACE pTexture = pState->papSurfaces[pContext->aSidActiveTexture [i]];6428 AssertMsg(pTexture->id == pContext->aSidActiveTexture [i], ("%x vs %x\n", pTexture->id, pContext->aSidActiveTexture[i]));6427 PVMSVGA3DSURFACE pTexture = pState->papSurfaces[pContext->aSidActiveTextures[i]]; 6428 AssertMsg(pTexture->id == pContext->aSidActiveTextures[i], ("%x vs %x\n", pTexture->id, pContext->aSidActiveTextures[i])); 6429 6429 AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture, 6430 6430 ("%x vs %x unit %d (active unit %d) sid=%x\n", pTexture->oglId.texture, activeTexture, i, 6431 activeTextureUnit - GL_TEXTURE0, pContext->aSidActiveTexture [i]));6431 activeTextureUnit - GL_TEXTURE0, pContext->aSidActiveTextures[i])); 6432 6432 # endif 6433 6433 }
Note:
See TracChangeset
for help on using the changeset viewer.