VirtualBox

Changeset 55811 in vbox


Ignore:
Timestamp:
May 11, 2015 8:32:17 PM (10 years ago)
Author:
vboxsync
Message:

DevVGA-SVGA3d-ogl.cpp,++: A couple of minor fixes and more GL success assertions.

Location:
trunk/src/VBox/Devices/Graphics
Files:
5 edited

Legend:

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

    r55693 r55811  
    30863086                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    30873087
    3088                         rc = vmsvga3dShaderSet(pThis, pCmd->cid, pCmd->type, pCmd->shid);
     3088                        rc = vmsvga3dShaderSet(pThis, NULL, pCmd->cid, pCmd->type, pCmd->shid);
    30893089                        break;
    30903090                    }
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp

    r55790 r55811  
    339339    { /* likely */ } \
    340340    else do { \
    341         VMSVGA3D_GET_GL_ERROR(a_pContext); \
    342341        VMSVGA3D_GL_COMPLAIN(a_pState, a_pContext, a_LogRelDetails); \
    343342    } while (0)
     
    504503    uint32_t                id;
    505504#ifdef VMSVGA3D_OGL_WITH_SHARED_CTX
    506     uint32_t                idAssociatedContextUnused;
     505    uint32_t                idWeakContextAssociation;
    507506#else
    508507    uint32_t                idAssociatedContext;
     
    536535    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, id),
    537536#ifdef VMSVGA3D_OGL_WITH_SHARED_CTX
    538     SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idAssociatedContextUnused),
     537    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idWeakContextAssociation),
    539538#else
    540539    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idAssociatedContext),
     
    635634#define VMSVGA3D_UPDATE_MATERIAL        RT_BIT(6)
    636635
    637 typedef struct
     636typedef struct VMSVGA3DCONTEXT
    638637{
    639638    uint32_t                id;
     
    26492648    pSurface->id                    = sid;
    26502649#ifdef VMSVGA3D_OGL_WITH_SHARED_CTX
    2651     pSurface->idAssociatedContextUnused = SVGA3D_INVALID_ID;
     2650    pSurface->idWeakContextAssociation = SVGA3D_INVALID_ID;
    26522651#else
    26532652    pSurface->idAssociatedContext   = SVGA3D_INVALID_ID;
     
    38963895        Log(("vmsvga3dCommandPresent: rectangle %d src=(%d,%d) (%d,%d)(%d,%d)\n", i, pRect[i].srcx, pRect[i].srcy, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
    38973896
    3898     cid = SVGA3D_INVALID_ID;
    38993897    pContext = &pState->SharedCtx;
     3898# ifdef VMSVGA3D_OGL_WITH_SHARED_CTX_EXPERIMENT_1
     3899    if (   pSurface->idWeakContextAssociation < pState->cContexts
     3900        && pState->papContexts[pSurface->idWeakContextAssociation]->id == pSurface->idWeakContextAssociation)
     3901        pContext = pState->papContexts[pSurface->idWeakContextAssociation];
     3902# endif
    39003903    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
     3904    cid = pContext->id;
    39013905#else
    39023906    /* @todo stricter checks for associated context */
     
    39173921    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
    39183922#endif
     3923    VMSVGA3D_CLEAR_GL_ERRORS();
    39193924
    39203925    /* Source surface different size? */
     
    39703975#endif
    39713976
    3972     glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTextureId);
     3977    VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTextureId), pState, pContext);
    39733978
    39743979    oldVShader = pContext->state.shidVertex;
    39753980    oldPShader = pContext->state.shidPixel;
    3976     vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, SVGA_ID_INVALID);
    3977     vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, SVGA_ID_INVALID);
     3981    vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, SVGA_ID_INVALID);
     3982    vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, SVGA_ID_INVALID);
    39783983
    39793984    /* Flush shader changes. */
     
    39823987
    39833988    /* Activate the read and draw framebuffer objects. */
    3984     pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer);
    3985     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    3986     pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 /* back buffer */);
    3987     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    3988 
    3989     pState->ext.glActiveTexture(GL_TEXTURE0);
    3990     glEnable(GL_TEXTURE_2D);
    3991     glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
    3992     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    3993 
    3994     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    3995     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    3996 
    3997 //    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    3998 //    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
     3989    VMSVGA3D_ASSERT_GL_CALL(pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer), pState, pContext);
     3990    VMSVGA3D_ASSERT_GL_CALL(pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 /* back buffer */), pState, pContext);
     3991
     3992    VMSVGA3D_ASSERT_GL_CALL(pState->ext.glActiveTexture(GL_TEXTURE0), pState, pContext);
     3993    VMSVGA3D_ASSERT_GL_CALL(glEnable(GL_TEXTURE_2D), pState, pContext);;
     3994    VMSVGA3D_ASSERT_GL_CALL(glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture), pState, pContext);
     3995
     3996    VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR), pState, pContext);
     3997    VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR), pState, pContext);;
     3998
     3999#if 0
     4000    VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP), pState, pContext);;
     4001    VMSVGA3D_ASSERT_GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP), pState, pContext);;
     4002#endif
    39994003
    40004004    /* Reset the transformation matrices. */
    4001     glMatrixMode(GL_MODELVIEW);
    4002     glPushMatrix();
    4003     glLoadIdentity();
    4004     glMatrixMode(GL_PROJECTION);
    4005     glPushMatrix();
    4006     glLoadIdentity();
    4007     glScalef(1.0f, -1.0f, 1.0f);
    4008     glOrtho(0, pThis->svga.uWidth, pThis->svga.uHeight, 0, 0.0, -1.0);
     4005    VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_MODELVIEW), pState, pContext);
     4006    VMSVGA3D_ASSERT_GL_CALL(glPushMatrix(), pState, pContext);
     4007    VMSVGA3D_ASSERT_GL_CALL(glLoadIdentity(), pState, pContext);
     4008    VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_PROJECTION), pState, pContext);
     4009    VMSVGA3D_ASSERT_GL_CALL(glPushMatrix(), pState, pContext);
     4010    VMSVGA3D_ASSERT_GL_CALL(glLoadIdentity(), pState, pContext);
     4011    VMSVGA3D_ASSERT_GL_CALL(glScalef(1.0f, -1.0f, 1.0f), pState, pContext);
     4012    VMSVGA3D_ASSERT_GL_CALL(glOrtho(0, pThis->svga.uWidth, pThis->svga.uHeight, 0, 0.0, -1.0), pState, pContext);
    40094013
    40104014    for (uint32_t i = 0; i < cRects; i++)
     
    40494053
    40504054        glBegin(GL_QUADS);
     4055
    40514056        /* bottom left */
    40524057        glTexCoord2f(left, bottom);
     
    40654070        glVertex2i(vertexRight, vertexBottom);
    40664071
    4067         glEnd();
    4068         VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
     4072        VMSVGA3D_ASSERT_GL_CALL(glEnd(), pState, pContext);
    40694073    }
    40704074
    40714075    /* Restore old settings. */
    4072     glMatrixMode(GL_PROJECTION);
    4073     glPopMatrix();
    4074     glMatrixMode(GL_MODELVIEW);
    4075     glPopMatrix();
    4076 
    4077     //glPopAttrib();
    4078 
    4079     glBindTexture(GL_TEXTURE_2D, oldTextureId);
    4080     vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, oldVShader);
    4081     vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, oldPShader);
     4076    VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_PROJECTION), pState, pContext);
     4077    VMSVGA3D_ASSERT_GL_CALL(glPopMatrix(), pState, pContext);
     4078    VMSVGA3D_ASSERT_GL_CALL(glMatrixMode(GL_MODELVIEW), pState, pContext);
     4079    VMSVGA3D_ASSERT_GL_CALL(glPopMatrix(), pState, pContext);
     4080
     4081    //VMSVGA3D_ASSERT_GL_CALL(glPopAttrib(), pState, pContext);
     4082
     4083    VMSVGA3D_ASSERT_GL_CALL(glBindTexture(GL_TEXTURE_2D, oldTextureId), pState, pContext);
     4084    vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, oldVShader);
     4085    vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, oldPShader);
    40824086
    40834087    /* Reset the frame buffer association */
    4084     pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
    4085     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
     4088    VMSVGA3D_ASSERT_GL_CALL(pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer), pState, pContext);
    40864089
    40874090#else
     
    58415844            pContext = pState->papContexts[cid];
    58425845            VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
     5846# ifdef VMSVGA3D_OGL_WITH_SHARED_CTX_EXPERIMENT_1
     5847            pRenderTarget->idWeakContextAssociation = cid;
     5848# endif
    58435849#else
    58445850            LogFlow(("vmsvga3dSetRenderTarget: sid=%x idAssociatedContext %#x -> %#x\n", pRenderTarget->id, pRenderTarget->idAssociatedContext, cid));
     
    75707576}
    75717577
    7572 int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
    7573 {
    7574     PVMSVGA3DCONTEXT    pContext;
     7578int vmsvga3dShaderSet(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
     7579{
    75757580    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
    75767581    AssertReturn(pState, VERR_NO_MEMORY);
     
    75797584    Log(("vmsvga3dShaderSet cid=%x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid));
    75807585
    7581     if (    cid >= pState->cContexts
    7582         ||  pState->papContexts[cid]->id != cid)
     7586    if (  !pContext
     7587        && cid < pState->cContexts
     7588        && pState->papContexts[cid]->id == cid)
     7589        pContext = pState->papContexts[cid];
     7590    else
    75837591    {
    75847592        Log(("vmsvga3dShaderSet invalid context id!\n"));
    75857593        return VERR_INVALID_PARAMETER;
    75867594    }
    7587     pContext = pState->papContexts[cid];
    75887595    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
    75897596
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.h

    r55401 r55811  
    337337                vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort);
    338338            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER)
    339                 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
     339                vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
    340340            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER)
    341                 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
     341                vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
    342342        }
    343343    }
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp

    r55684 r55811  
    249249#define VMSVGA3D_UPDATE_MATERIAL        RT_BIT(6)
    250250
    251 typedef struct
     251typedef struct VMSVGA3DCONTEXT
    252252{
    253253    uint32_t                id;
     
    34203420                vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort);
    34213421            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER)
    3422                 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
     3422                vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
    34233423            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER)
    3424                 vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
     3424                vmsvga3dShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
    34253425            /** @todo restore more state data */
    34263426#endif /* #ifdef VMSVGA3D_DIRECT3D9_RESET */
     
    58745874}
    58755875
    5876 int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
    5877 {
    5878     PVMSVGA3DCONTEXT    pContext;
     5876int vmsvga3dShaderSet(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
     5877{
    58795878    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
    58805879    AssertReturn(pState, VERR_NO_MEMORY);
     
    58835882    Log(("vmsvga3dShaderSet %x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid));
    58845883
     5884    NOREF(pContext);
    58855885    if (    cid >= pState->cContexts
    58865886        ||  pState->papContexts[cid]->id != cid)
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h

    r54782 r55811  
    8686int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData);
    8787int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type);
    88 int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid);
     88int vmsvga3dShaderSet(PVGASTATE pThis, struct VMSVGA3DCONTEXT *pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid);
    8989int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues);
    9090
Note: See TracChangeset for help on using the changeset viewer.

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