VirtualBox

忽略:
時間撮記:
2013-10-21 下午05:25:21 (11 年 以前)
作者:
vboxsync
訊息:

crOpenGL: registered keys save/restore

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c

    r48795 r49216  
    14071407}
    14081408
     1409static void crStateSaveKeysCB(unsigned long firstKey, unsigned long count, void *data)
     1410{
     1411    PSSMHANDLE pSSM = (PSSMHANDLE)data;
     1412    int rc;
     1413    CRASSERT(firstKey);
     1414    CRASSERT(count);
     1415    rc = SSMR3PutU32(pSSM, firstKey);
     1416    CRASSERT(RT_SUCCESS(rc));
     1417    rc = SSMR3PutU32(pSSM, count);
     1418    CRASSERT(RT_SUCCESS(rc));
     1419}
     1420
     1421static int32_t crStateSaveKeys(CRHashTable *pHash, PSSMHANDLE pSSM)
     1422{
     1423    crHashtableWalkKeys(pHash, crStateSaveKeysCB , pSSM);
     1424    /* use null terminator */
     1425    SSMR3PutU32(pSSM, 0);
     1426    return VINF_SUCCESS;
     1427}
     1428
     1429static int32_t crStateLoadKeys(CRHashTable *pHash, PSSMHANDLE pSSM)
     1430{
     1431    uint32_t u32Key, u32Count, i;
     1432    int rc;
     1433    for(;;)
     1434    {
     1435        rc = SSMR3GetU32(pSSM, &u32Key);
     1436        AssertRCReturn(rc, rc);
     1437
     1438        if (!u32Key)
     1439            return rc;
     1440
     1441        rc = SSMR3GetU32(pSSM, &u32Count);
     1442        AssertRCReturn(rc, rc);
     1443
     1444        CRASSERT(u32Count);
     1445
     1446        for (i = u32Key; i < u32Count + u32Key; ++i)
     1447        {
     1448            GLboolean fIsNew = crHashtableAllocRegisterKey(pHash, i);
     1449            CRASSERT(fIsNew);
     1450        }
     1451    }
     1452
     1453    return rc;
     1454}
     1455
     1456
    14091457int32_t crStateSaveContext(CRContext *pContext, PSSMHANDLE pSSM)
    14101458{
     
    15031551    {
    15041552        CRASSERT(pContext->shared && pContext->shared->textureTable);
     1553        rc = crStateSaveKeys(pContext->shared->textureTable, pSSM);
     1554        AssertRCReturn(rc, rc);
    15051555        ui32 = crHashtableNumElements(pContext->shared->textureTable);
    15061556        rc = SSMR3PutU32(pSSM, ui32);
     
    16001650#ifdef CR_ARB_vertex_buffer_object
    16011651    /* Save buffer objects */
     1652    if (bSaveShared)
     1653    {
     1654        rc = crStateSaveKeys(pContext->shared->buffersTable, pSSM);
     1655        AssertRCReturn(rc, rc);
     1656    }
    16021657    ui32 = bSaveShared? crHashtableNumElements(pContext->shared->buffersTable):0;
    16031658    rc = SSMR3PutU32(pSSM, ui32);
     
    16671722    if (bSaveShared)
    16681723    {
     1724        rc = crStateSaveKeys(pContext->shared->fbTable, pSSM);
     1725        AssertRCReturn(rc, rc);
    16691726        ui32 = crHashtableNumElements(pContext->shared->fbTable);
    16701727        rc = SSMR3PutU32(pSSM, ui32);
    16711728        AssertRCReturn(rc, rc);
    16721729        crHashtableWalk(pContext->shared->fbTable, crStateSaveFramebuffersCB, pSSM);
     1730
     1731        rc = crStateSaveKeys(pContext->shared->rbTable, pSSM);
     1732        AssertRCReturn(rc, rc);
    16731733        ui32 = crHashtableNumElements(pContext->shared->rbTable);
    16741734        rc = SSMR3PutU32(pSSM, ui32);
     
    21692229        /* Load shared textures */
    21702230        CRASSERT(pContext->shared && pContext->shared->textureTable);
     2231
     2232        if (u32Version >= SHCROGL_SSM_VERSION_WITH_ALLOCATED_KEYS)
     2233        {
     2234            rc = crStateLoadKeys(pContext->shared->buffersTable, pSSM);
     2235            AssertRCReturn(rc, rc);
     2236        }
     2237
    21712238        rc = SSMR3GetU32(pSSM, &uiNumElems);
    21722239        AssertRCReturn(rc, rc);
     
    22712338    /* Load buffer objects */
    22722339#ifdef CR_ARB_vertex_buffer_object
     2340    if (bLoadShared)
     2341    {
     2342        if (u32Version >= SHCROGL_SSM_VERSION_WITH_ALLOCATED_KEYS)
     2343        {
     2344            rc = crStateLoadKeys(pContext->shared->textureTable, pSSM);
     2345            AssertRCReturn(rc, rc);
     2346        }
     2347    }
     2348
    22732349    rc = SSMR3GetU32(pSSM, &uiNumElems);
    22742350    AssertRCReturn(rc, rc);
     
    23932469    if (bLoadShared)
    23942470    {
     2471        if (u32Version >= SHCROGL_SSM_VERSION_WITH_ALLOCATED_KEYS)
     2472        {
     2473            rc = crStateLoadKeys(pContext->shared->fbTable, pSSM);
     2474            AssertRCReturn(rc, rc);
     2475        }
     2476
    23952477        rc = SSMR3GetU32(pSSM, &uiNumElems);
    23962478        AssertRCReturn(rc, rc);
     
    24102492
    24112493            crHashtableAdd(pContext->shared->fbTable, key, pFBO);
     2494        }
     2495
     2496        if (u32Version >= SHCROGL_SSM_VERSION_WITH_ALLOCATED_KEYS)
     2497        {
     2498            rc = crStateLoadKeys(pContext->shared->rbTable, pSSM);
     2499            AssertRCReturn(rc, rc);
    24122500        }
    24132501
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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