VirtualBox

Changeset 34053 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Nov 13, 2010 1:52:43 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
67735
Message:

crOpenGL/wddm: fix refcounting for shared ctx in shapshots

Location:
trunk/src/VBox/GuestHost/OpenGL
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h

    r31808 r34053  
    227227
    228228DECLEXPORT(void) STATE_APIENTRY crStateShareContext(GLboolean value);
     229DECLEXPORT(void) STATE_APIENTRY crStateSetSharedContext(CRContext *pCtx);
     230DECLEXPORT(GLboolean) STATE_APIENTRY crStateContextIsShared(CRContext *pCtx);
    229231#ifdef __cplusplus
    230232}
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c

    r32059 r34053  
    126126        }
    127127    }
     128}
     129
     130DECLEXPORT(GLboolean) STATE_APIENTRY
     131crStateContextIsShared(CRContext *pCtx)
     132{
     133    return pCtx->shared==gSharedState;
     134}
     135
     136DECLEXPORT(void) STATE_APIENTRY
     137crStateSetSharedContext(CRContext *pCtx)
     138{
     139    if (gSharedState)
     140    {
     141        crWarning("crStateSetSharedContext: shared is being changed from %p to %p", gSharedState, pCtx->shared);
     142    }
     143
     144    gSharedState = pCtx->shared;
    128145}
    129146
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c

    r33734 r34053  
    10211021
    10221022    rc = SSMR3PutS32(pSSM, pContext->shared->id);
     1023    AssertRCReturn(rc, rc);
     1024
     1025    rc = SSMR3PutS32(pSSM, crStateContextIsShared(pContext));
     1026    AssertRCReturn(rc, rc);
     1027
    10231028    if (pContext->shared->refCount>1)
    10241029    {
     
    13611366    {
    13621367        crFindSharedCtxParms_t parms;
     1368        int32_t shared;
    13631369
    13641370        rc = SSMR3GetS32(pSSM, &pContext->shared->id);
     1371        AssertRCReturn(rc, rc);
     1372
     1373        rc = SSMR3GetS32(pSSM, &shared);
    13651374        AssertRCReturn(rc, rc);
    13661375
     
    13721381        if (pTmpContext->shared)
    13731382        {
    1374             CRASSERT(pContext->shared->refCount==1 && pTmpContext->shared->refCount>1);
     1383            CRASSERT(pContext->shared->refCount==1);
    13751384            bLoadShared = GL_FALSE;
    13761385            crStateFreeShared(pContext->shared);
    13771386            pContext->shared = NULL;
     1387            pTmpContext->shared->refCount++;
    13781388        }
    13791389        else
    13801390        {
    13811391            SLC_COPYPTR(shared);
     1392        }
     1393
     1394        if (bLoadShared && shared)
     1395        {
     1396            crStateSetSharedContext(pTmpContext);
    13821397        }
    13831398    }
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