VirtualBox

Ignore:
Timestamp:
Oct 23, 2017 11:54:35 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
118474
Message:

Devices/Graphics: VMSVGA: texture and sampler states.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp

    r69153 r69163  
    32923292    memset(pContext, 0, sizeof(*pContext));
    32933293    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;
    32963296
    32973297    pContext->sidRenderTarget   = SVGA3D_INVALID_ID;
     
    50795079        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));
    50805080        /* Record the texture state for vm state saving. */
    5081         if (    pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE
    5082             &&  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];
    50855085        }
    50865086
     
    50895089        {
    50905090            /** @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))
    50935093            {
    50945094                pState->ext.glActiveTexture(GL_TEXTURE0 + pTextureState[i].stage);
     
    51425142            {
    51435143                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;
    51475147                /* Unselect the currently associated texture. */
    51485148                glBindTexture(GL_TEXTURE_2D, 0);
     
    51635163                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x (%d,%d) replacing=%x\n",
    51645164                     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]));
    51665166
    51675167                if (pSurface->oglId.texture == OPENGL_INVALID_ID)
     
    51795179                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    51805180
    5181                 if (pContext->aSidActiveTexture[currentStage] != sid)
     5181                if (pContext->aSidActiveTextures[currentStage] != sid)
    51825182                {
    51835183                    /* 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++)
    51855185                    {
    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++)
    51875187                        {
    5188                             SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureState[iStage][j];
     5188                            SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureStates[iStage][j];
    51895189
    51905190                            if (    pTextureStateIter->name != SVGA3D_TS_INVALID
     
    51945194                    }
    51955195                }
    5196                 pContext->aSidActiveTexture[currentStage] = sid;
     5196                pContext->aSidActiveTextures[currentStage] = sid;
    51975197            }
    51985198            /* Finished; continue with the next one. */
     
    52175217        case SVGA3D_TS_MINFILTER:                   /* SVGA3dTextureFilter */
    52185218        {
    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;
    52215221
    52225222            /* If SVGA3D_TS_MIPFILTER is set to NONE, then use SVGA3D_TS_MIPFILTER, otherwise SVGA3D_TS_MIPFILTER enables mipmap minification. */
     
    63996399    }
    64006400#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)
    64046404        {
    64056405            GLint activeTexture = 0;
     
    64176417
    64186418# 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)
    64206420            {
    64216421                PVMSVGA3DSURFACE pTexture;
    6422                 pTexture = pState->papSurfaces[pContext->aSidActiveTexture[activeTextureUnit - GL_TEXTURE0]];
     6422                pTexture = pState->papSurfaces[pContext->aSidActiveTextures[activeTextureUnit - GL_TEXTURE0]];
    64236423
    64246424                AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture, ("%x vs %x unit %d - %d\n", pTexture->oglId.texture, activeTexture, i, activeTextureUnit - GL_TEXTURE0));
    64256425            }
    64266426# 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]));
    64296429            AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture,
    64306430                      ("%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]));
    64326432# endif
    64336433        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette