VirtualBox

Changeset 51013 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Apr 9, 2014 2:00:52 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
93215
Message:

Main/crOpenGL/DevVGA: synchronization, bugfixes, cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/DisplayImpl.cpp

    r50963 r51013  
    152152#ifdef VBOX_WITH_CRHGSMI
    153153    mhCrOglSvc = NULL;
     154    rc = RTCritSectRwInit(&mCrOglLock);
     155    AssertRC(rc);
    154156#endif
    155157#ifdef VBOX_WITH_CROGL
     
    182184        RT_ZERO(mSaveSeamlessRectLock);
    183185    }
     186
     187#ifdef VBOX_WITH_CRHGSMI
     188    if (RTCritSectRwIsInitialized (&mCrOglLock))
     189    {
     190        RTCritSectRwDelete (&mCrOglLock);
     191        RT_ZERO(mCrOglLock);
     192    }
     193#endif
    184194    BaseFinalRelease();
    185195}
     
    34863496{
    34873497#ifdef VBOX_WITH_VIDEOHWACCEL
    3488     mpDrv->pVBVACallbacks->pfnVHWACommandCompleteAsynch(mpDrv->pVBVACallbacks, (PVBOXVHWACMD)pCommand);
     3498    mpDrv->pVBVACallbacks->pfnVHWACommandCompleteAsync(mpDrv->pVBVACallbacks, (PVBOXVHWACMD)pCommand);
    34893499    return S_OK;
    34903500#else
     
    35083518    if (is3denabled)
    35093519    {
    3510         VMMDev *pVMMDev = mParent->getVMMDev();
    3511 
    3512         if (pVMMDev)
    3513         {
    3514             crViewportNotify(pVMMDev, aScreenId, x, y, width, height);
    3515         }
    3516         else
     3520        int rc = crViewportNotify(aScreenId, x, y, width, height);
     3521        if (RT_FAILURE(rc))
    35173522        {
    35183523            DISPLAYFBINFO *pFb = &maFramebuffers[aScreenId];
     
    36113616
    36123617#if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
    3613 void Display::crViewportNotify(VMMDev *pVMMDev, ULONG aScreenId, ULONG x, ULONG y, ULONG width, ULONG height)
    3614 {
     3618int Display::crViewportNotify(ULONG aScreenId, ULONG x, ULONG y, ULONG width, ULONG height)
     3619{
     3620    VMMDev *pVMMDev = mParent->getVMMDev();
     3621    if (!pVMMDev)
     3622        return VERR_INVALID_STATE;
     3623
    36153624    struct {
    36163625        VBOXCRCMDCTL_HGCM data;
     
    36363645    s.data.aParms[4].u.uint32 = height;
    36373646
    3638     crCtlSubmitSync(&s.data.Hdr, RT_OFFSETOF(VBOXCRCMDCTL_HGCM, aParms[5]));
     3647    return crCtlSubmitSync(&s.data.Hdr, RT_OFFSETOF(VBOXCRCMDCTL_HGCM, aParms[5]));
    36393648}
    36403649#endif
     
    36453654    VMMDev *pVMMDev = mParent->getVMMDev();
    36463655    Assert(pVMMDev);
    3647     int rc = VERR_GENERAL_FAILURE;
     3656    int rc = RTCritSectRwEnterExcl(&mCrOglLock);
     3657    AssertRC(rc);
     3658
    36483659    if (pVMMDev)
    36493660        rc = pVMMDev->hgcmHostSvcHandleCreate("VBoxSharedCrOpenGL", &mhCrOglSvc);
     3661    else
     3662        rc = VERR_GENERAL_FAILURE;
    36503663
    36513664    if (RT_SUCCESS(rc))
     
    36663679        rc = pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_CRHGSMI_CTL, 1, &parm);
    36673680        if (RT_SUCCESS(rc))
    3668         {
    36693681            mCrOglCallbacks = Completion.MainInterface;
    3670 
    3671             return;
    3672         }
    3673 
    3674         AssertMsgFailed(("VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_COMPLETION failed rc %d", rc));
    3675     }
    3676 
     3682        else
     3683            AssertMsgFailed(("VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_COMPLETION failed rc %d", rc));
     3684    }
     3685
     3686    if (RT_FAILURE(rc))
     3687        mhCrOglSvc = NULL;
     3688
     3689    RTCritSectRwLeaveExcl(&mCrOglLock);
     3690}
     3691
     3692void Display::destructCrHgsmiData(void)
     3693{
     3694    int rc = RTCritSectRwEnterExcl(&mCrOglLock);
     3695    AssertRC(rc);
    36773696    mhCrOglSvc = NULL;
    3678 }
    3679 
    3680 void Display::destructCrHgsmiData(void)
    3681 {
    3682     mhCrOglSvc = NULL;
     3697    RTCritSectRwLeaveExcl(&mCrOglLock);
    36833698}
    36843699#endif
     
    43504365                            continue;
    43514366
    4352                         crViewportNotify(pVMMDev, ul, pFb->pendingViewportInfo.x, pFb->pendingViewportInfo.y, pFb->pendingViewportInfo.width, pFb->pendingViewportInfo.height);
    4353                         pFb->pendingViewportInfo.fPending = false;
     4367                        rc = crViewportNotify(ul, pFb->pendingViewportInfo.x, pFb->pendingViewportInfo.y, pFb->pendingViewportInfo.width, pFb->pendingViewportInfo.height);
     4368                        if (RT_SUCCESS(rc))
     4369                            pFb->pendingViewportInfo.fPending = false;
     4370                        else
     4371                        {
     4372                            AssertMsgFailed(("crViewportNotify failed %d\n", rc));
     4373                            rc = VINF_SUCCESS;
     4374                        }
    43544375                    }
    43554376                }
     
    44394460int Display::crCtlSubmit(struct VBOXCRCMDCTL* pCmd, uint32_t cbCmd, PFNCRCTLCOMPLETION pfnCompletion, void *pvCompletion)
    44404461{
    4441     return mpDrv->pVBVACallbacks->pfnCrCtlSubmit(mpDrv->pVBVACallbacks, pCmd, cbCmd, pfnCompletion, pvCompletion);
     4462    int rc = RTCritSectRwEnterShared(&mCrOglLock);
     4463    if (RT_SUCCESS(rc))
     4464    {
     4465        if (mhCrOglSvc)
     4466            rc = mpDrv->pVBVACallbacks->pfnCrCtlSubmit(mpDrv->pVBVACallbacks, pCmd, cbCmd, pfnCompletion, pvCompletion);
     4467        else
     4468            rc = VERR_NOT_SUPPORTED;
     4469
     4470        RTCritSectRwLeaveShared(&mCrOglLock);
     4471    }
     4472    return rc;
    44424473}
    44434474
    44444475int Display::crCtlSubmitSync(struct VBOXCRCMDCTL* pCmd, uint32_t cbCmd)
    44454476{
    4446     return mpDrv->pVBVACallbacks->pfnCrCtlSubmitSync(mpDrv->pVBVACallbacks, pCmd, cbCmd);
     4477    int rc = RTCritSectRwEnterShared(&mCrOglLock);
     4478    if (RT_SUCCESS(rc))
     4479    {
     4480        if (mhCrOglSvc)
     4481            rc = mpDrv->pVBVACallbacks->pfnCrCtlSubmitSync(mpDrv->pVBVACallbacks, pCmd, cbCmd);
     4482        else
     4483            rc = VERR_NOT_SUPPORTED;
     4484
     4485        RTCritSectRwLeaveShared(&mCrOglLock);
     4486    }
     4487    return rc;
    44474488}
    44484489
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