Changeset 50095 in vbox for trunk/src/VBox/Main/src-client
- Timestamp:
- Jan 17, 2014 4:34:07 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 91620
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/src-client/DisplayImpl.cpp
r50080 r50095 497 497 maFramebuffers[ul].pVBVAHostFlags = NULL; 498 498 #endif /* VBOX_WITH_HGSMI */ 499 #ifdef VBOX_WITH_CROGL 500 RT_ZERO(maFramebuffers[ul].pendingViewportInfo); 501 #endif 499 502 } 500 503 … … 650 653 } 651 654 655 return VINF_SUCCESS; 656 } 657 658 int 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) */ 652 682 return VINF_SUCCESS; 653 683 } … … 3152 3182 { 3153 3183 #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 3154 3191 BOOL is3denabled; 3155 3192 mParent->machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled); … … 3157 3194 if (is3denabled) 3158 3195 { 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 3177 3196 VMMDev *pVMMDev = mParent->getVMMDev(); 3178 3197 3179 3198 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 } 3181 3211 } 3182 3212 #endif /* VBOX_WITH_CROGL && VBOX_WITH_HGCM */ … … 3266 3296 } 3267 3297 3298 #ifdef VBOX_WITH_CROGL 3299 void 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 3268 3324 #ifdef VBOX_WITH_CRHGSMI 3269 3325 void Display::setupCrHgsmiData(void) … … 3292 3348 rc = pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_CRHGSMI_CTL, 1, &parm); 3293 3349 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 3294 3363 return; 3364 } 3295 3365 3296 3366 AssertMsgFailed(("VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_COMPLETION failed rc %d", rc)); … … 4303 4373 if (pScreen->u16Flags & VBVA_SCREEN_F_DISABLED) 4304 4374 { 4375 pThis->notifyCroglResize(pView, pScreen, pvVRAM); 4376 4305 4377 pFBInfo->fDisabled = true; 4306 4378 pFBInfo->flags = pScreen->u16Flags; … … 4325 4397 */ 4326 4398 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 }4338 4399 4339 4400 /* Check if this is a real resize or a notification about the screen origin. … … 4350 4411 || pFBInfo->yOrigin != pScreen->i32OriginY; 4351 4412 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 4352 4427 pFBInfo->u32Offset = pView->u32ViewOffset; /* Not used in HGSMI. */ 4353 4428 pFBInfo->u32MaxFramebufferSize = pView->u32MaxScreenSize; /* Not used in HGSMI. */ … … 4374 4449 0, 0); 4375 4450 } 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 */4397 4451 4398 4452 if (!fResize)
Note:
See TracChangeset
for help on using the changeset viewer.