VirtualBox

Ignore:
Timestamp:
Jan 21, 2014 6:18:36 PM (11 years ago)
Author:
vboxsync
Message:

crOpenGL: bugfixes

Location:
trunk/src/VBox/HostServices/SharedOpenGL
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp

    r50095 r50149  
    11881188            for (int i = 0; i < SHCRGL_CPARMS_DEV_RESIZE; ++i)
    11891189            {
    1190                 if (paParms[i].type != VBOX_HGCM_SVC_PARM_PTR
    1191                         || !paParms[i].u.pointer.addr)
     1190                if (paParms[i].type != VBOX_HGCM_SVC_PARM_32BIT)
    11921191                {
    11931192                    AssertMsgFailed(("invalid param\n"));
     
    11961195            }
    11971196
    1198             rc = crVBoxServerNotifyResize((const VBVAINFOSCREEN *)paParms[0].u.pointer.addr, paParms[1].u.pointer.addr);
     1197            rc = crVBoxServerNotifyResize(paParms[0].u.uint32);
    11991198            break;
    12001199        }
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp

    r50123 r50149  
    395395}
    396396
    397 DECLEXPORT(int) crVBoxServerNotifyResize(const struct VBVAINFOSCREEN *pScreen, void *pvVRAM)
     397
     398static int crVBoxServerResizeScreen(const struct VBVAINFOSCREEN *pScreen, void *pvVRAM)
    398399{
    399400    int rc;
     
    427428
    428429    return rc;
     430}
     431
     432DECLEXPORT(int) crVBoxServerNotifyResize(uint32_t idScreen)
     433{
     434    struct VBVAINFOSCREEN Screen;
     435    void *pvVRAM;
     436
     437    int rc = cr_server.CltInfo.pfnDmGet(cr_server.CltInfo.hClient, idScreen, &Screen, &pvVRAM);
     438    if (!RT_SUCCESS(rc))
     439    {
     440        WARN(("err"));
     441        return rc;
     442    }
     443
     444    rc = crVBoxServerResizeScreen(&Screen, pvVRAM);
     445    if (!RT_SUCCESS(rc))
     446    {
     447        WARN(("err"));
     448        return rc;
     449    }
     450
     451    return VINF_SUCCESS;
    429452}
    430453
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r50137 r50149  
    670670            Assert(!pReplacedScrEntry);
    671671        }
     672
     673        if (hEntry)
     674        {
     675            if (CrVrScrCompositorEntryIsUsed(&hEntry->Entry))
     676            {
     677                if (pFb->pDisplay)
     678                    pFb->pDisplay->EntryTexChanged(pFb, hEntry);
     679            }
     680        }
    672681    }
    673682    else
     
    727736                pFb->pDisplay->RegionsChanged(pFb);
    728737        }
     738
     739        if (hEntry)
     740        {
     741            if (CrVrScrCompositorEntryIsUsed(&hEntry->Entry))
     742            {
     743                if (pFb->pDisplay)
     744                    pFb->pDisplay->EntryTexChanged(pFb, hEntry);
     745            }
     746        }
    729747    }
    730748    else
     
    763781    return CrHTableGet(&hEntry->HTable, hSlot);
    764782}
     783
     784typedef union CR_FBDISPBASE_FLAGS
     785{
     786    struct {
     787        uint32_t fRegionsShanged : 1;
     788        uint32_t Reserved        : 31;
     789    };
     790    uint32_t u32Value;
     791} CR_FBDISPBASE_FLAGS;
    765792
    766793class CrFbDisplayBase : public ICrFbDisplay
     
    772799        mcUpdates(0),
    773800        mhSlot(CRHTABLE_HANDLE_INVALID)
    774     {}
     801    {
     802        mFlags.u32Value = 0;
     803    }
    775804
    776805    virtual bool isComposite()
     
    792821    {
    793822        return !!mcUpdates;
     823    }
     824
     825    int setRegionsChanged()
     826    {
     827        if (!mcUpdates)
     828        {
     829            WARN(("err"));
     830            return VERR_INVALID_STATE;
     831        }
     832
     833        mFlags.fRegionsShanged = 1;
     834        return VINF_SUCCESS;
    794835    }
    795836
     
    848889    {
    849890        ++mcUpdates;
     891        Assert(!mFlags.fRegionsShanged || mcUpdates > 1);
    850892        return VINF_SUCCESS;
    851893    }
     
    855897        --mcUpdates;
    856898        Assert(mcUpdates < UINT32_MAX/2);
     899        if (!mcUpdates)
     900            onUpdateEnd();
    857901    }
    858902
     
    874918            return VERR_INVALID_STATE;
    875919        }
     920        mFlags.fRegionsShanged = 1;
    876921        return VINF_SUCCESS;
    877922    }
     
    904949            return VERR_INVALID_STATE;
    905950        }
     951        mFlags.fRegionsShanged = 1;
    906952        return VINF_SUCCESS;
    907953    }
     
    919965            return VERR_INVALID_STATE;
    920966        }
     967        mFlags.fRegionsShanged = 1;
    921968        return VINF_SUCCESS;
    922969    }
     
    929976            return VERR_INVALID_STATE;
    930977        }
     978        mFlags.fRegionsShanged = 1;
    931979        return VINF_SUCCESS;
    932980    }
     
    948996    class CrFbDisplayComposite* mpContainer;
    949997protected:
     998    virtual void onUpdateEnd()
     999    {
     1000        if (mFlags.fRegionsShanged)
     1001        {
     1002            mFlags.fRegionsShanged = 0;
     1003            ueRegions();
     1004        }
     1005    }
     1006
     1007    virtual void ueRegions()
     1008    {
     1009    }
     1010
    9501011    int fbSynchAddAllEntries()
    9511012    {
     
    10521113    uint32_t mcUpdates;
    10531114    CRHTABLE_HANDLE mhSlot;
     1115    CR_FBDISPBASE_FLAGS mFlags;
    10541116};
    10551117
     
    16871749    virtual int UpdateBegin(struct CR_FRAMEBUFFER *pFb)
    16881750    {
    1689         int rc = CrFbDisplayBase::UpdateBegin(pFb);
    1690         if (!RT_SUCCESS(rc))
    1691         {
    1692             WARN(("err"));
    1693             return rc;
    1694         }
    1695 
    1696         return mpWindow->UpdateBegin();
     1751        int rc = mpWindow->UpdateBegin();
     1752        if (RT_SUCCESS(rc))
     1753        {
     1754            rc = CrFbDisplayBase::UpdateBegin(pFb);
     1755            if (RT_SUCCESS(rc))
     1756                return VINF_SUCCESS;
     1757            else
     1758                WARN(("err"));
     1759        }
     1760        else
     1761            WARN(("err"));
     1762
     1763        return rc;
    16971764    }
    16981765
    16991766    virtual void UpdateEnd(struct CR_FRAMEBUFFER *pFb)
    17001767    {
     1768        CrFbDisplayBase::UpdateEnd(pFb);
     1769
    17011770        mpWindow->UpdateEnd();
    1702 
    1703         CrFbDisplayBase::UpdateEnd(pFb);
    17041771    }
    17051772
     
    17681835
    17691836        return VINF_SUCCESS;
    1770     }
    1771 
    1772     virtual int EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
    1773     {
    1774         int rc = CrFbDisplayBase::EntryRemoved(pFb, hEntry);
    1775         if (!RT_SUCCESS(rc))
    1776         {
    1777             WARN(("err"));
    1778             return rc;
    1779         }
    1780 
    1781         return mpWindow->SetVisibleRegionsChanged();
    1782     }
    1783 
    1784     virtual int EntryPosChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
    1785     {
    1786         int rc = CrFbDisplayBase::EntryPosChanged(pFb, hEntry);
    1787         if (!RT_SUCCESS(rc))
    1788         {
    1789             WARN(("err"));
    1790             return rc;
    1791         }
    1792 
    1793         return mpWindow->SetVisibleRegionsChanged();
    1794     }
    1795 
    1796     virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb)
    1797     {
    1798         int rc = CrFbDisplayBase::RegionsChanged(pFb);
    1799         if (!RT_SUCCESS(rc))
    1800         {
    1801             WARN(("err"));
    1802             return rc;
    1803         }
    1804 
    1805         return mpWindow->SetVisibleRegionsChanged();
    18061837    }
    18071838
     
    18941925
    18951926protected:
     1927    virtual void ueRegions()
     1928    {
     1929        mpWindow->SetVisibleRegionsChanged();
     1930    }
     1931
    18961932    virtual int screenChanged()
    18971933    {
     
    19101946        }
    19111947
    1912         mpWindow->SetVisibleRegionsChanged();
     1948        setRegionsChanged();
    19131949
    19141950        return mpWindow->SetSize((uint32_t)(pRect->xRight - pRect->xLeft), (uint32_t)(pRect->yBottom - pRect->yTop));
     
    21222158        }
    21232159
     2160        VBOXVR_SCR_COMPOSITOR_ENTRY *pMyEntry = (VBOXVR_SCR_COMPOSITOR_ENTRY*)CrFbDDataEntryGet(hEntry, slotGet());
     2161        rc = CrVrScrCompositorEntryRegionsSet(&mCompositor, pMyEntry, NULL, 0, NULL, false, NULL);
     2162        if (!RT_SUCCESS(rc))
     2163        {
     2164            WARN(("err"));
     2165            return rc;
     2166        }
     2167
    21242168        return VINF_SUCCESS;
    21252169    }
     
    21422186    }
    21432187
    2144     virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb)
    2145     {
    2146         int rc = CrFbDisplayWindow::RegionsChanged(pFb);
    2147         if (!RT_SUCCESS(rc))
    2148         {
    2149             WARN(("err"));
    2150             return rc;
    2151         }
    2152 
    2153         rc = synchCompositorRegions();
    2154         if (!RT_SUCCESS(rc))
    2155         {
    2156             WARN(("err"));
    2157             return rc;
    2158         }
    2159 
    2160         return VINF_SUCCESS;
    2161     }
    2162 
    21632188    virtual int setViewportRect(const RTRECT *pViewportRect)
    21642189    {
     
    21812206
    21822207protected:
     2208    virtual void ueRegions()
     2209    {
     2210        synchCompositorRegions();
     2211    }
     2212
    21832213    virtual int screenChanged()
    21842214    {
     
    21982228
    21992229        return VINF_SUCCESS;
     2230    }
     2231
     2232    virtual const struct VBOXVR_SCR_COMPOSITOR* getCompositor()
     2233    {
     2234        return &mCompositor;
    22002235    }
    22012236
     
    26302665                        vrdpGeometry(hEntry);
    26312666                        vrdpRegions(hFb, hEntry);
    2632                         vrdpFrame(hEntry);
     2667                        //vrdpFrame(hEntry);
    26332668                        return VINF_SUCCESS;
    26342669                    }
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