VirtualBox

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


Ignore:
Timestamp:
Jan 17, 2014 4:34:07 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91620
Message:

crOpenGL: presentation infrastructure rework (still work in progress)

File:
1 edited

Legend:

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

    r50080 r50095  
    497497        maFramebuffers[ul].pVBVAHostFlags = NULL;
    498498#endif /* VBOX_WITH_HGSMI */
     499#ifdef VBOX_WITH_CROGL
     500        RT_ZERO(maFramebuffers[ul].pendingViewportInfo);
     501#endif
    499502    }
    500503
     
    650653    }
    651654
     655    return VINF_SUCCESS;
     656}
     657
     658int Display::notifyCroglResize(const PVBVAINFOVIEW pView, const PVBVAINFOSCREEN pScreen, void *pvVRAM)
     659{
     660#if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
     661    BOOL is3denabled;
     662    mParent->machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
     663
     664    if (is3denabled)
     665    {
     666        VBOXHGCMSVCPARM parm[SHCRGL_CPARMS_DEV_RESIZE];
     667
     668        parm[0].type = VBOX_HGCM_SVC_PARM_PTR;
     669        parm[0].u.pointer.addr = (void*)pScreen;
     670        parm[0].u.pointer.size = sizeof (*pScreen);
     671        parm[1].type = VBOX_HGCM_SVC_PARM_PTR;
     672        parm[1].u.pointer.addr = (void*)pvVRAM;
     673        parm[1].u.pointer.size = 0;
     674
     675        VMMDev *pVMMDev = mParent->getVMMDev();
     676
     677        if (pVMMDev)
     678            return pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_DEV_RESIZE, SHCRGL_CPARMS_DEV_RESIZE, parm);
     679        return VERR_INVALID_STATE;
     680    }
     681#endif /* #if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL) */
    652682    return VINF_SUCCESS;
    653683}
     
    31523182{
    31533183#if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
     3184
     3185    if (mcMonitors <= aScreenId)
     3186    {
     3187        AssertMsgFailed(("invalid screen id\n"));
     3188        return E_INVALIDARG;
     3189    }
     3190
    31543191    BOOL is3denabled;
    31553192    mParent->machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
     
    31573194    if (is3denabled)
    31583195    {
    3159         VBOXHGCMSVCPARM aParms[5];
    3160 
    3161         aParms[0].type = VBOX_HGCM_SVC_PARM_32BIT;
    3162         aParms[0].u.uint32 = aScreenId;
    3163 
    3164         aParms[1].type = VBOX_HGCM_SVC_PARM_32BIT;
    3165         aParms[1].u.uint32 = x;
    3166 
    3167         aParms[2].type = VBOX_HGCM_SVC_PARM_32BIT;
    3168         aParms[2].u.uint32 = y;
    3169 
    3170 
    3171         aParms[3].type = VBOX_HGCM_SVC_PARM_32BIT;
    3172         aParms[3].u.uint32 = width;
    3173 
    3174         aParms[4].type = VBOX_HGCM_SVC_PARM_32BIT;
    3175         aParms[4].u.uint32 = height;
    3176 
    31773196        VMMDev *pVMMDev = mParent->getVMMDev();
    31783197
    31793198        if (pVMMDev)
    3180             pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_VIEWPORT_CHANGED, SHCRGL_CPARMS_VIEWPORT_CHANGED, aParms);
     3199        {
     3200            crViewportNotify(pVMMDev, aScreenId, x, y, width, height);
     3201        }
     3202        else
     3203        {
     3204            DISPLAYFBINFO *pFb = &maFramebuffers[aScreenId];
     3205            pFb->pendingViewportInfo.fPending = true;
     3206            pFb->pendingViewportInfo.x = x;
     3207            pFb->pendingViewportInfo.y = y;
     3208            pFb->pendingViewportInfo.width = width;
     3209            pFb->pendingViewportInfo.height = height;
     3210        }
    31813211    }
    31823212#endif /* VBOX_WITH_CROGL && VBOX_WITH_HGCM */
     
    32663296}
    32673297
     3298#ifdef VBOX_WITH_CROGL
     3299void Display::crViewportNotify(VMMDev *pVMMDev, ULONG aScreenId, ULONG x, ULONG y, ULONG width, ULONG height)
     3300{
     3301    VBOXHGCMSVCPARM aParms[5];
     3302
     3303    aParms[0].type = VBOX_HGCM_SVC_PARM_32BIT;
     3304    aParms[0].u.uint32 = aScreenId;
     3305
     3306    aParms[1].type = VBOX_HGCM_SVC_PARM_32BIT;
     3307    aParms[1].u.uint32 = x;
     3308
     3309    aParms[2].type = VBOX_HGCM_SVC_PARM_32BIT;
     3310    aParms[2].u.uint32 = y;
     3311
     3312
     3313    aParms[3].type = VBOX_HGCM_SVC_PARM_32BIT;
     3314    aParms[3].u.uint32 = width;
     3315
     3316    aParms[4].type = VBOX_HGCM_SVC_PARM_32BIT;
     3317    aParms[4].u.uint32 = height;
     3318
     3319    pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_VIEWPORT_CHANGED, SHCRGL_CPARMS_VIEWPORT_CHANGED, aParms);
     3320
     3321}
     3322#endif
     3323
    32683324#ifdef VBOX_WITH_CRHGSMI
    32693325void Display::setupCrHgsmiData(void)
     
    32923348        rc = pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_CRHGSMI_CTL, 1, &parm);
    32933349        if (RT_SUCCESS(rc))
     3350        {
     3351            ULONG ul;
     3352
     3353            for (ul = 0; ul < mcMonitors; ul++)
     3354            {
     3355                DISPLAYFBINFO *pFb = &maFramebuffers[ul];
     3356                if (!pFb->pendingViewportInfo.fPending)
     3357                    continue;
     3358
     3359                crViewportNotify(pVMMDev, ul, pFb->pendingViewportInfo.x, pFb->pendingViewportInfo.y, pFb->pendingViewportInfo.width, pFb->pendingViewportInfo.height);
     3360                pFb->pendingViewportInfo.fPending = false;
     3361            }
     3362
    32943363            return;
     3364        }
    32953365
    32963366        AssertMsgFailed(("VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_COMPLETION failed rc %d", rc));
     
    43034373    if (pScreen->u16Flags & VBVA_SCREEN_F_DISABLED)
    43044374    {
     4375        pThis->notifyCroglResize(pView, pScreen, pvVRAM);
     4376
    43054377        pFBInfo->fDisabled = true;
    43064378        pFBInfo->flags = pScreen->u16Flags;
     
    43254397     */
    43264398    bool fResize = pFBInfo->fDisabled || pFBInfo->pFramebuffer.isNull();
    4327 
    4328     if (pFBInfo->fDisabled)
    4329     {
    4330         pFBInfo->fDisabled = false;
    4331         fireGuestMonitorChangedEvent(pThis->mParent->getEventSource(),
    4332                                      GuestMonitorChangedEventType_Enabled,
    4333                                      pScreen->u32ViewIndex,
    4334                                      pScreen->i32OriginX, pScreen->i32OriginY,
    4335                                      pScreen->u32Width, pScreen->u32Height);
    4336         /* Continue to update pFBInfo. */
    4337     }
    43384399
    43394400    /* Check if this is a real resize or a notification about the screen origin.
     
    43504411                      || pFBInfo->yOrigin != pScreen->i32OriginY;
    43514412
     4413    if (fNewOrigin || fResize)
     4414        pThis->notifyCroglResize(pView, pScreen, pvVRAM);
     4415
     4416    if (pFBInfo->fDisabled)
     4417    {
     4418        pFBInfo->fDisabled = false;
     4419        fireGuestMonitorChangedEvent(pThis->mParent->getEventSource(),
     4420                                     GuestMonitorChangedEventType_Enabled,
     4421                                     pScreen->u32ViewIndex,
     4422                                     pScreen->i32OriginX, pScreen->i32OriginY,
     4423                                     pScreen->u32Width, pScreen->u32Height);
     4424        /* Continue to update pFBInfo. */
     4425    }
     4426
    43524427    pFBInfo->u32Offset = pView->u32ViewOffset; /* Not used in HGSMI. */
    43534428    pFBInfo->u32MaxFramebufferSize = pView->u32MaxScreenSize; /* Not used in HGSMI. */
     
    43744449                                     0, 0);
    43754450    }
    4376 
    4377 #if defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL)
    4378     if (fNewOrigin && !fResize)
    4379     {
    4380         BOOL is3denabled;
    4381         pThis->mParent->machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled);
    4382 
    4383         if (is3denabled)
    4384         {
    4385             VBOXHGCMSVCPARM parm;
    4386 
    4387             parm.type = VBOX_HGCM_SVC_PARM_32BIT;
    4388             parm.u.uint32 = pScreen->u32ViewIndex;
    4389 
    4390             VMMDev *pVMMDev = pThis->mParent->getVMMDev();
    4391 
    4392             if (pVMMDev)
    4393                 pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_SCREEN_CHANGED, SHCRGL_CPARMS_SCREEN_CHANGED, &parm);
    4394         }
    4395     }
    4396 #endif /* VBOX_WITH_CROGL */
    43974451
    43984452    if (!fResize)
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