Changeset 53589 in vbox
- Timestamp:
- Dec 21, 2014 4:15:33 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 97351
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/OpenGL/util/compositor.cpp
r53555 r53589 1 1 /* $Id$ */ 2 3 2 /** @file 4 * Compositor impl 3 * Compositor implementation. 5 4 */ 6 5 7 6 /* 8 * Copyright (C) 2013 Oracle Corporation7 * Copyright (C) 2013-2014 Oracle Corporation 9 8 * 10 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 16 15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. 17 16 */ 18 #include <cr_compositor.h> 19 17 18 /******************************************************************************* 19 * Header Files * 20 *******************************************************************************/ 21 #include "../include/cr_compositor.h" 22 23 24 /******************************************************************************* 25 * Defined Constants And Macros * 26 *******************************************************************************/ 20 27 #define VBOXVR_SCR_COMPOSITOR_RECTS_UNDEFINED UINT32_MAX 28 #ifdef IN_VMSVGA3D 29 # define WARN AssertMsgFailed 30 #endif 31 21 32 22 33 … … 50 61 } 51 62 52 pCompositor->paSrcRects = (PRTRECT)RTMemAlloc(sizeof 63 pCompositor->paSrcRects = (PRTRECT)RTMemAlloc(sizeof(*pCompositor->paSrcRects) * cRects); 53 64 if (pCompositor->paSrcRects) 54 65 { 55 pCompositor->paDstRects = (PRTRECT)RTMemAlloc(sizeof 66 pCompositor->paDstRects = (PRTRECT)RTMemAlloc(sizeof(*pCompositor->paDstRects) * cRects); 56 67 if (pCompositor->paDstRects) 57 68 { 58 pCompositor->paDstUnstretchedRects = (PRTRECT)RTMemAlloc(sizeof 69 pCompositor->paDstUnstretchedRects = (PRTRECT)RTMemAlloc(sizeof(*pCompositor->paDstUnstretchedRects) * cRects); 59 70 if (pCompositor->paDstUnstretchedRects) 60 71 { … … 90 101 } 91 102 92 static DECLCALLBACK(bool) crVrScrCompositorRectsCounterCb(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry, void *pvVisitor) 103 static DECLCALLBACK(bool) crVrScrCompositorRectsCounterCb(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry, 104 void *pvVisitor) 93 105 { 94 106 uint32_t* pCounter = (uint32_t*)pvVisitor; … … 106 118 } VBOXVR_SCR_COMPOSITOR_RECTS_ASSIGNER, *PVBOXVR_SCR_COMPOSITOR_RECTS_ASSIGNER; 107 119 108 static DECLCALLBACK(bool) crVrScrCompositorRectsAssignerCb(PVBOXVR_COMPOSITOR pCCompositor, PVBOXVR_COMPOSITOR_ENTRY pCEntry, void *pvVisitor) 120 static DECLCALLBACK(bool) crVrScrCompositorRectsAssignerCb(PVBOXVR_COMPOSITOR pCCompositor, PVBOXVR_COMPOSITOR_ENTRY pCEntry, 121 void *pvVisitor) 109 122 { 110 123 PVBOXVR_SCR_COMPOSITOR_RECTS_ASSIGNER pData = (PVBOXVR_SCR_COMPOSITOR_RECTS_ASSIGNER)pvVisitor; … … 122 135 if (!pEntry->Rect.xLeft && !pEntry->Rect.yTop) 123 136 { 124 memcpy(pEntry->paSrcRects, pEntry->paDstUnstretchedRects, cRects * sizeof 137 memcpy(pEntry->paSrcRects, pEntry->paDstUnstretchedRects, cRects * sizeof(*pEntry->paSrcRects)); 125 138 } 126 139 else … … 155 168 #endif 156 169 { 157 memcpy(pEntry->paDstRects, pEntry->paDstUnstretchedRects, cRects * sizeof 170 memcpy(pEntry->paDstRects, pEntry->paDstUnstretchedRects, cRects * sizeof(*pEntry->paDstUnstretchedRects)); 158 171 } 159 172 … … 201 214 } 202 215 203 static int crVrScrCompositorRectsCheckInit( const VBOXVR_SCR_COMPOSITOR *pcCompositor)204 { 205 VBOXVR_SCR_COMPOSITOR *pCompositor = const_cast<VBOXVR_SCR_COMPOSITOR*>(pcCompositor);216 static int crVrScrCompositorRectsCheckInit(PCVBOXVR_SCR_COMPOSITOR pcCompositor) 217 { 218 PVBOXVR_SCR_COMPOSITOR pCompositor = const_cast<PVBOXVR_SCR_COMPOSITOR>(pcCompositor); 206 219 207 220 if (pCompositor->cRects != VBOXVR_SCR_COMPOSITOR_RECTS_UNDEFINED) … … 218 231 219 232 int rc = crVrScrCompositorRectsAssignBuffer(pCompositor, cRects); 220 if ( !RT_SUCCESS(rc))233 if (RT_FAILURE(rc)) 221 234 return rc; 222 235 … … 232 245 233 246 234 static int crVrScrCompositorEntryRegionsAdd(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, uint32_t cRegions, const RTRECT *paRegions, VBOXVR_SCR_COMPOSITOR_ENTRY **ppReplacedScrEntry, uint32_t *pfChangedFlags) 247 static int crVrScrCompositorEntryRegionsAdd(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 248 uint32_t cRegions, PCRTRECT paRegions, 249 VBOXVR_SCR_COMPOSITOR_ENTRY **ppReplacedScrEntry, uint32_t *pfChangedFlags) 235 250 { 236 251 uint32_t fChangedFlags = 0; 237 252 PVBOXVR_COMPOSITOR_ENTRY pReplacedEntry; 238 int rc = VBoxVrCompositorEntryRegionsAdd(&pCompositor->Compositor, pEntry ? &pEntry->Ce : NULL, cRegions, paRegions, &pReplacedEntry, &fChangedFlags); 239 if (!RT_SUCCESS(rc)) 253 int rc = VBoxVrCompositorEntryRegionsAdd(&pCompositor->Compositor, pEntry ? &pEntry->Ce : NULL, cRegions, 254 paRegions, &pReplacedEntry, &fChangedFlags); 255 if (RT_FAILURE(rc)) 240 256 { 241 257 WARN(("VBoxVrCompositorEntryRegionsAdd failed, rc %d", rc)); … … 246 262 247 263 if (fChangedFlags & VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED) 248 {249 264 crVrScrCompositorRectsInvalidate(pCompositor); 250 }251 265 else if (fChangedFlags & VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED) 252 {253 266 Assert(pReplacedScrEntry); 254 }255 267 256 268 if (fChangedFlags & VBOXVR_COMPOSITOR_CF_OTHER_ENTRIES_REGIONS_CHANGED) 257 {258 269 CrVrScrCompositorEntrySetAllChanged(pCompositor, true); 259 }260 270 else if ((fChangedFlags & VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED) && pEntry) 261 {262 271 CrVrScrCompositorEntrySetChanged(pEntry, true); 263 }264 272 265 273 if (pfChangedFlags) … … 272 280 } 273 281 274 static int crVrScrCompositorEntryRegionsSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, uint32_t cRegions, const RTRECT *paRegions, bool *pfChanged) 282 static int crVrScrCompositorEntryRegionsSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 283 uint32_t cRegions, PCRTRECT paRegions, bool *pfChanged) 275 284 { 276 285 bool fChanged; 277 286 int rc = VBoxVrCompositorEntryRegionsSet(&pCompositor->Compositor, &pEntry->Ce, cRegions, paRegions, &fChanged); 278 if ( !RT_SUCCESS(rc))287 if (RT_FAILURE(rc)) 279 288 { 280 289 WARN(("VBoxVrCompositorEntryRegionsSet failed, rc %d", rc)); … … 301 310 } 302 311 303 static int crVrScrCompositorEntryPositionSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, const RTPOINT *pPos, bool *pfChanged) 312 static int crVrScrCompositorEntryPositionSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 313 PCRTPOINT pPos, bool *pfChanged) 304 314 { 305 315 if (pfChanged) … … 309 319 if (VBoxVrCompositorEntryIsInList(&pEntry->Ce)) 310 320 { 311 int rc = VBoxVrCompositorEntryRegionsTranslate(&pCompositor->Compositor, &pEntry->Ce, pPos->x - pEntry->Rect.xLeft, pPos->y - pEntry->Rect.yTop, pfChanged); 312 if (!RT_SUCCESS(rc)) 321 int rc = VBoxVrCompositorEntryRegionsTranslate(&pCompositor->Compositor, &pEntry->Ce, pPos->x - pEntry->Rect.xLeft, 322 pPos->y - pEntry->Rect.yTop, pfChanged); 323 if (RT_FAILURE(rc)) 313 324 { 314 325 WARN(("VBoxVrCompositorEntryRegionsTranslate failed rc %d", rc)); … … 328 339 } 329 340 330 static int crVrScrCompositorEntryEnsureRegionsBounds(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, bool *pfChanged) 341 static int crVrScrCompositorEntryEnsureRegionsBounds(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 342 bool *pfChanged) 331 343 { 332 344 RTRECT Rect; … … 341 353 342 354 int rc = CrVrScrCompositorEntryRegionsIntersect(pCompositor, pEntry, 1, &Rect, &fChanged); 343 if ( !RT_SUCCESS(rc))355 if (RT_FAILURE(rc)) 344 356 WARN(("CrVrScrCompositorEntryRegionsIntersect failed, rc %d", rc)); 345 357 … … 349 361 } 350 362 351 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsAdd(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, const RTPOINT *pPos, uint32_t cRegions, const RTRECT *paRegions, bool fPosRelated, VBOXVR_SCR_COMPOSITOR_ENTRY **ppReplacedScrEntry, uint32_t *pfChangeFlags) 363 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsAdd(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 364 PCRTPOINT pPos, uint32_t cRegions, PCRTRECT paRegions, 365 bool fPosRelated, VBOXVR_SCR_COMPOSITOR_ENTRY **ppReplacedScrEntry, 366 uint32_t *pfChangeFlags) 352 367 { 353 368 int rc; … … 358 373 { 359 374 rc = crVrScrCompositorEntryPositionSet(pCompositor, pEntry, pPos, &fPosChanged); 360 if ( !RT_SUCCESS(rc))375 if (RT_FAILURE(rc)) 361 376 { 362 377 WARN(("RegionsAdd: crVrScrCompositorEntryPositionSet failed rc %d", rc)); … … 375 390 if (cRegions && (pEntry->Rect.xLeft || pEntry->Rect.yTop)) 376 391 { 377 paTranslatedRects = (RTRECT*)RTMemAlloc(sizeof 392 paTranslatedRects = (RTRECT*)RTMemAlloc(sizeof(RTRECT) * cRegions); 378 393 if (!paTranslatedRects) 379 394 { … … 381 396 return VERR_NO_MEMORY; 382 397 } 383 memcpy (paTranslatedRects, paRegions, sizeof 398 memcpy (paTranslatedRects, paRegions, sizeof(RTRECT) * cRegions); 384 399 for (uint32_t i = 0; i < cRegions; ++i) 385 400 { … … 391 406 392 407 rc = crVrScrCompositorEntryRegionsAdd(pCompositor, pEntry, cRegions, paRegions, ppReplacedScrEntry, &fChangeFlags); 393 if ( !RT_SUCCESS(rc))408 if (RT_FAILURE(rc)) 394 409 { 395 410 WARN(("crVrScrCompositorEntryRegionsAdd failed, rc %d", rc)); … … 401 416 bool fAdjusted = false; 402 417 rc = crVrScrCompositorEntryEnsureRegionsBounds(pCompositor, pEntry, &fAdjusted); 403 if ( !RT_SUCCESS(rc))418 if (RT_FAILURE(rc)) 404 419 { 405 420 WARN(("crVrScrCompositorEntryEnsureRegionsBounds failed, rc %d", rc)); … … 431 446 { 432 447 /* means entry was in list and was moved, so regions changed */ 433 *pfChangeFlags = VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED | VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED | VBOXVR_COMPOSITOR_CF_OTHER_ENTRIES_REGIONS_CHANGED; 448 *pfChangeFlags = VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED | VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED 449 | VBOXVR_COMPOSITOR_CF_OTHER_ENTRIES_REGIONS_CHANGED; 434 450 } 435 451 else … … 445 461 } 446 462 447 VBOXVREGDECL(int) CrVrScrCompositorEntryRectSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, const RTRECT *pRect) 448 { 449 if (!memcmp(&pEntry->Rect, pRect, sizeof (*pRect))) 463 VBOXVREGDECL(int) CrVrScrCompositorEntryRectSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 464 PCRTRECT pRect) 465 { 466 if (!memcmp(&pEntry->Rect, pRect, sizeof(*pRect))) 450 467 { 451 468 return VINF_SUCCESS; … … 454 471 bool fChanged = false; 455 472 int rc = crVrScrCompositorEntryPositionSet(pCompositor, pEntry, &Point, &fChanged); 456 if ( !RT_SUCCESS(rc))473 if (RT_FAILURE(rc)) 457 474 { 458 475 WARN(("crVrScrCompositorEntryPositionSet failed %d", rc)); … … 466 483 467 484 rc = crVrScrCompositorEntryEnsureRegionsBounds(pCompositor, pEntry, NULL); 468 if ( !RT_SUCCESS(rc))485 if (RT_FAILURE(rc)) 469 486 { 470 487 WARN(("crVrScrCompositorEntryEnsureRegionsBounds failed, rc %d", rc)); … … 475 492 } 476 493 477 VBOXVREGDECL(int) CrVrScrCompositorEntryTexAssign(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, CR_TEXDATA *pTex) 494 VBOXVREGDECL(int) CrVrScrCompositorEntryTexAssign(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 495 CR_TEXDATA *pTex) 478 496 { 479 497 if (pEntry->pTex == pTex) … … 488 506 } 489 507 490 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, const RTPOINT *pPos, uint32_t cRegions, const RTRECT *paRegions, bool fPosRelated, bool *pfChanged) 508 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 509 PCRTPOINT pPos, uint32_t cRegions, PCRTRECT paRegions, 510 bool fPosRelated, bool *pfChanged) 491 511 { 492 512 /* @todo: the fChanged sate calculation is really rough now, this is enough for now though */ … … 495 515 RTRECT *paTranslatedRects = NULL; 496 516 int rc = CrVrScrCompositorEntryRemove(pCompositor, pEntry); 497 if ( !RT_SUCCESS(rc))517 if (RT_FAILURE(rc)) 498 518 { 499 519 WARN(("RegionsSet: CrVrScrCompositorEntryRemove failed rc %d", rc)); … … 504 524 { 505 525 rc = crVrScrCompositorEntryPositionSet(pCompositor, pEntry, pPos, &fPosChanged); 506 if ( !RT_SUCCESS(rc))526 if (RT_FAILURE(rc)) 507 527 { 508 528 WARN(("RegionsSet: crVrScrCompositorEntryPositionSet failed rc %d", rc)); … … 521 541 if (cRegions && (pEntry->Rect.xLeft || pEntry->Rect.yTop)) 522 542 { 523 paTranslatedRects = (RTRECT*)RTMemAlloc(sizeof 543 paTranslatedRects = (RTRECT*)RTMemAlloc(sizeof(RTRECT) * cRegions); 524 544 if (!paTranslatedRects) 525 545 { … … 527 547 return VERR_NO_MEMORY; 528 548 } 529 memcpy (paTranslatedRects, paRegions, sizeof 549 memcpy (paTranslatedRects, paRegions, sizeof(RTRECT) * cRegions); 530 550 for (uint32_t i = 0; i < cRegions; ++i) 531 551 { … … 537 557 538 558 rc = crVrScrCompositorEntryRegionsSet(pCompositor, pEntry, cRegions, paRegions, &fChanged); 539 if ( !RT_SUCCESS(rc))559 if (RT_FAILURE(rc)) 540 560 { 541 561 WARN(("crVrScrCompositorEntryRegionsSet failed, rc %d", rc)); … … 546 566 { 547 567 rc = crVrScrCompositorEntryEnsureRegionsBounds(pCompositor, pEntry, NULL); 548 if ( !RT_SUCCESS(rc))568 if (RT_FAILURE(rc)) 549 569 { 550 570 WARN(("crVrScrCompositorEntryEnsureRegionsBounds failed, rc %d", rc)); … … 559 579 } 560 580 561 VBOXVREGDECL(int) CrVrScrCompositorEntryListIntersect(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, const VBOXVR_LIST *pList2, bool *pfChanged) 581 VBOXVREGDECL(int) CrVrScrCompositorEntryListIntersect(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 582 PCVBOXVR_LIST pList2, bool *pfChanged) 562 583 { 563 584 bool fChanged = false; 564 585 int rc = VBoxVrCompositorEntryListIntersect(&pCompositor->Compositor, &pEntry->Ce, pList2, &fChanged); 565 if ( !RT_SUCCESS(rc))586 if (RT_FAILURE(rc)) 566 587 { 567 588 WARN(("RegionsIntersect: VBoxVrCompositorEntryRegionsIntersect failed rc %d", rc)); … … 581 602 } 582 603 583 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsIntersect(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, uint32_t cRegions, const RTRECT *paRegions, bool *pfChanged) 604 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsIntersect(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 605 uint32_t cRegions, PCRTRECT paRegions, bool *pfChanged) 584 606 { 585 607 bool fChanged = false; 586 608 int rc = VBoxVrCompositorEntryRegionsIntersect(&pCompositor->Compositor, &pEntry->Ce, cRegions, paRegions, &fChanged); 587 if ( !RT_SUCCESS(rc))609 if (RT_FAILURE(rc)) 588 610 { 589 611 WARN(("RegionsIntersect: VBoxVrCompositorEntryRegionsIntersect failed rc %d", rc)); … … 600 622 } 601 623 602 VBOXVREGDECL(int) CrVrScrCompositorEntryListIntersectAll(PVBOXVR_SCR_COMPOSITOR pCompositor, const VBOXVR_LIST *pList2, bool *pfChanged)624 VBOXVREGDECL(int) CrVrScrCompositorEntryListIntersectAll(PVBOXVR_SCR_COMPOSITOR pCompositor, PCVBOXVR_LIST pList2, bool *pfChanged) 603 625 { 604 626 VBOXVR_SCR_COMPOSITOR_ITERATOR Iter; … … 629 651 } 630 652 631 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsIntersectAll(PVBOXVR_SCR_COMPOSITOR pCompositor, uint32_t cRegions, const RTRECT *paRegions, bool *pfChanged) 653 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsIntersectAll(PVBOXVR_SCR_COMPOSITOR pCompositor, uint32_t cRegions, 654 PCRTRECT paRegions, bool *pfChanged) 632 655 { 633 656 VBOXVR_SCR_COMPOSITOR_ITERATOR Iter; … … 658 681 } 659 682 660 VBOXVREGDECL(int) CrVrScrCompositorEntryPosSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, const RTPOINT *pPos) 683 VBOXVREGDECL(int) CrVrScrCompositorEntryPosSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 684 PCRTPOINT pPos) 661 685 { 662 686 int rc = crVrScrCompositorEntryPositionSet(pCompositor, pEntry, pPos, NULL); 663 if ( !RT_SUCCESS(rc))687 if (RT_FAILURE(rc)) 664 688 { 665 689 WARN(("RegionsSet: crVrScrCompositorEntryPositionSet failed rc %d", rc)); … … 668 692 669 693 rc = crVrScrCompositorEntryEnsureRegionsBounds(pCompositor, pEntry, NULL); 670 if ( !RT_SUCCESS(rc))694 if (RT_FAILURE(rc)) 671 695 { 672 696 WARN(("RegionsSet: crVrScrCompositorEntryEnsureRegionsBounds failed rc %d", rc)); … … 678 702 679 703 /* regions are valid until the next CrVrScrCompositor call */ 680 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsGet(const VBOXVR_SCR_COMPOSITOR *pCompositor, const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry, uint32_t *pcRegions, const RTRECT **ppaSrcRegions, const RTRECT **ppaDstRegions, const RTRECT **ppaDstUnstretchedRects) 704 VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsGet(PCVBOXVR_SCR_COMPOSITOR pCompositor, 705 PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, uint32_t *pcRegions, 706 PCRTRECT *ppaSrcRegions, PCRTRECT *ppaDstRegions, 707 PCRTRECT *ppaDstUnstretchedRects) 681 708 { 682 709 if (CrVrScrCompositorEntryIsUsed(pEntry)) 683 710 { 684 711 int rc = crVrScrCompositorRectsCheckInit(pCompositor); 685 if ( !RT_SUCCESS(rc))686 { 687 688 712 if (RT_FAILURE(rc)) 713 { 714 WARN(("crVrScrCompositorRectsCheckInit failed, rc %d", rc)); 715 return rc; 689 716 } 690 717 } … … 703 730 } 704 731 705 VBOXVREGDECL(uint32_t) CrVrScrCompositorEntryFlagsCombinedGet(const VBOXVR_SCR_COMPOSITOR *pCompositor, const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry) 732 VBOXVREGDECL(uint32_t) CrVrScrCompositorEntryFlagsCombinedGet(PCVBOXVR_SCR_COMPOSITOR pCompositor, 733 PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry) 706 734 { 707 735 return CRBLT_FOP_COMBINE(pCompositor->fFlags, pEntry->fFlags); … … 746 774 } 747 775 748 VBOXVREGDECL(bool) CrVrScrCompositorEntryReplace(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, PVBOXVR_SCR_COMPOSITOR_ENTRY pNewEntry) 776 VBOXVREGDECL(bool) CrVrScrCompositorEntryReplace(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, 777 PVBOXVR_SCR_COMPOSITOR_ENTRY pNewEntry) 749 778 { 750 779 Assert(!CrVrScrCompositorEntryIsUsed(pNewEntry)); … … 760 789 } 761 790 762 static DECLCALLBACK(void) crVrScrCompositorEntryReleasedCB(const struct VBOXVR_COMPOSITOR *pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry, PVBOXVR_COMPOSITOR_ENTRY pReplacingEntry) 791 static DECLCALLBACK(void) crVrScrCompositorEntryReleasedCB(PCVBOXVR_COMPOSITOR pCompositor, 792 PVBOXVR_COMPOSITOR_ENTRY pEntry, 793 PVBOXVR_COMPOSITOR_ENTRY pReplacingEntry) 763 794 { 764 795 PVBOXVR_SCR_COMPOSITOR_ENTRY pCEntry = VBOXVR_SCR_COMPOSITOR_ENTRY_FROM_ENTRY(pEntry); … … 780 811 if (pCEntry->pfnEntryReleased) 781 812 { 782 PVBOXVR_SCR_COMPOSITOR_ENTRY pCReplacingEntry = pReplacingEntry ? VBOXVR_SCR_COMPOSITOR_ENTRY_FROM_ENTRY(pReplacingEntry) : NULL; 813 PVBOXVR_SCR_COMPOSITOR_ENTRY pCReplacingEntry = pReplacingEntry 814 ? VBOXVR_SCR_COMPOSITOR_ENTRY_FROM_ENTRY(pReplacingEntry) : NULL; 783 815 PVBOXVR_SCR_COMPOSITOR pCConpositor = VBOXVR_SCR_COMPOSITOR_FROM_COMPOSITOR(pCompositor); 784 816 pCEntry->pfnEntryReleased(pCConpositor, pCEntry, pCReplacingEntry); … … 786 818 } 787 819 788 VBOXVREGDECL(int) CrVrScrCompositorRectSet(PVBOXVR_SCR_COMPOSITOR pCompositor, const RTRECT *pRect, bool *pfChanged)789 { 790 if (!memcmp(&pCompositor->Rect, pRect, sizeof 820 VBOXVREGDECL(int) CrVrScrCompositorRectSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PCRTRECT pRect, bool *pfChanged) 821 { 822 if (!memcmp(&pCompositor->Rect, pRect, sizeof(pCompositor->Rect))) 791 823 { 792 824 if (pfChanged) … … 803 835 { 804 836 int rc = crVrScrCompositorEntryEnsureRegionsBounds(pCompositor, pEntry, NULL); 805 if ( !RT_SUCCESS(rc))837 if (RT_FAILURE(rc)) 806 838 { 807 839 WARN(("crVrScrCompositorEntryEnsureRegionsBounds failed, rc %d", rc)); … … 813 845 } 814 846 815 VBOXVREGDECL(void) CrVrScrCompositorInit(PVBOXVR_SCR_COMPOSITOR pCompositor, const RTRECT *pRect)816 { 817 memset(pCompositor, 0, sizeof 847 VBOXVREGDECL(void) CrVrScrCompositorInit(PVBOXVR_SCR_COMPOSITOR pCompositor, PCRTRECT pRect) 848 { 849 memset(pCompositor, 0, sizeof(*pCompositor)); 818 850 VBoxVrCompositorInit(&pCompositor->Compositor, crVrScrCompositorEntryReleasedCB); 819 851 pCompositor->fFlags = CRBLT_F_LINEAR | CRBLT_F_INVERT_YCOORDS; … … 883 915 884 916 /* regions are valid until the next CrVrScrCompositor call */ 885 VBOXVREGDECL(int) CrVrScrCompositorRegionsGet(const VBOXVR_SCR_COMPOSITOR *pCompositor, uint32_t *pcRegions, const RTRECT **ppaSrcRegions, const RTRECT **ppaDstRegions, const RTRECT **ppaDstUnstretchedRects) 917 VBOXVREGDECL(int) CrVrScrCompositorRegionsGet(PCVBOXVR_SCR_COMPOSITOR pCompositor, uint32_t *pcRegions, 918 PCRTRECT *ppaSrcRegions, PCRTRECT *ppaDstRegions, 919 PCRTRECT *ppaDstUnstretchedRects) 886 920 { 887 921 int rc = crVrScrCompositorRectsCheckInit(pCompositor); 888 if ( !RT_SUCCESS(rc))922 if (RT_FAILURE(rc)) 889 923 { 890 924 WARN(("crVrScrCompositorRectsCheckInit failed, rc %d", rc)); … … 911 945 } VBOXVR_SCR_COMPOSITOR_VISITOR_CB, *PVBOXVR_SCR_COMPOSITOR_VISITOR_CB; 912 946 913 static DECLCALLBACK(bool) crVrScrCompositorVisitCb(PVBOXVR_COMPOSITOR pCCompositor, PVBOXVR_COMPOSITOR_ENTRY pCEntry, void *pvVisitor) 947 static DECLCALLBACK(bool) crVrScrCompositorVisitCb(PVBOXVR_COMPOSITOR pCCompositor, PVBOXVR_COMPOSITOR_ENTRY pCEntry, 948 void *pvVisitor) 914 949 { 915 950 PVBOXVR_SCR_COMPOSITOR_VISITOR_CB pData = (PVBOXVR_SCR_COMPOSITOR_VISITOR_CB)pvVisitor; … … 919 954 } 920 955 921 VBOXVREGDECL(void) CrVrScrCompositorVisit(PVBOXVR_SCR_COMPOSITOR pCompositor, PFNVBOXVRSCRCOMPOSITOR_VISITOR pfnVisitor, void *pvVisitor) 956 VBOXVREGDECL(void) CrVrScrCompositorVisit(PVBOXVR_SCR_COMPOSITOR pCompositor, PFNVBOXVRSCRCOMPOSITOR_VISITOR pfnVisitor, 957 void *pvVisitor) 922 958 { 923 959 VBOXVR_SCR_COMPOSITOR_VISITOR_CB Data; … … 927 963 } 928 964 929 VBOXVREGDECL(int) CrVrScrCompositorClone(const VBOXVR_SCR_COMPOSITOR *pCompositor, PVBOXVR_SCR_COMPOSITOR pDstCompositor, PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR pfnEntryFor, void* pvEntryFor) 965 VBOXVREGDECL(int) CrVrScrCompositorClone(PCVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR pDstCompositor, 966 PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR pfnEntryFor, void *pvEntryFor) 930 967 { 931 968 /* for simplicity just copy from one to another */ 932 969 CrVrScrCompositorInit(pDstCompositor, CrVrScrCompositorRectGet(pCompositor)); 933 970 VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR CIter; 934 const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;971 PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry; 935 972 CrVrScrCompositorConstIterInit(pCompositor, &CIter); 936 973 int rc = VINF_SUCCESS; 937 974 uint32_t cRects; 938 const RTRECT *pRects;975 PCRTRECT paRects; 939 976 940 977 while ((pEntry = CrVrScrCompositorConstIterNext(&CIter)) != NULL) 941 978 { 942 979 /* get source rects, that will be non-stretched and entry pos - pased */ 943 rc = CrVrScrCompositorEntryRegionsGet(pCompositor, pEntry, &cRects, NULL, NULL, &p Rects);944 if ( !RT_SUCCESS(rc))980 rc = CrVrScrCompositorEntryRegionsGet(pCompositor, pEntry, &cRects, NULL, NULL, &paRects); 981 if (RT_FAILURE(rc)) 945 982 { 946 983 WARN(("CrVrScrCompositorEntryRegionsGet failed, rc %d", rc)); … … 955 992 } 956 993 957 rc = CrVrScrCompositorEntryRegionsSet(pDstCompositor, pDstEntry, NULL, cRects, p Rects, false, NULL);958 if ( !RT_SUCCESS(rc))994 rc = CrVrScrCompositorEntryRegionsSet(pDstCompositor, pDstEntry, NULL, cRects, paRects, false, NULL); 995 if (RT_FAILURE(rc)) 959 996 { 960 997 WARN(("CrVrScrCompositorEntryRegionsSet failed, rc %d", rc)); … … 966 1003 } 967 1004 968 VBOXVREGDECL(int) CrVrScrCompositorIntersectList(PVBOXVR_SCR_COMPOSITOR pCompositor, const VBOXVR_LIST *pVr, bool *pfChanged)1005 VBOXVREGDECL(int) CrVrScrCompositorIntersectList(PVBOXVR_SCR_COMPOSITOR pCompositor, PCVBOXVR_LIST pVr, bool *pfChanged) 969 1006 { 970 1007 VBOXVR_SCR_COMPOSITOR_ITERATOR CIter; … … 979 1016 980 1017 rc = CrVrScrCompositorEntryListIntersect(pCompositor, pEntry, pVr, &fCurChanged); 981 if ( !RT_SUCCESS(rc))1018 if (RT_FAILURE(rc)) 982 1019 { 983 1020 WARN(("CrVrScrCompositorEntryRegionsSet failed, rc %d", rc)); … … 994 1031 } 995 1032 996 VBOXVREGDECL(int) CrVrScrCompositorIntersectedList(const VBOXVR_SCR_COMPOSITOR *pCompositor, const VBOXVR_LIST *pVr, PVBOXVR_SCR_COMPOSITOR pDstCompositor, PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR pfnEntryFor, void* pvEntryFor, bool *pfChanged) 997 { 998 int rc = CrVrScrCompositorClone(pCompositor, pDstCompositor, pfnEntryFor, pvEntryFor); 999 if (!RT_SUCCESS(rc)) 1033 VBOXVREGDECL(int) CrVrScrCompositorIntersectedList(PCVBOXVR_SCR_COMPOSITOR pCompositor, PCVBOXVR_LIST pVr, 1034 PVBOXVR_SCR_COMPOSITOR pDstCompositor, 1035 PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR pfnEntryFor, void *pvEntryFor, 1036 bool *pfChanged) 1037 { 1038 int rc = CrVrScrCompositorClone(pCompositor, pDstCompositor, pfnEntryFor, pvEntryFor); 1039 if (RT_FAILURE(rc)) 1000 1040 { 1001 1041 WARN(("CrVrScrCompositorClone failed, rc %d", rc)); … … 1004 1044 1005 1045 rc = CrVrScrCompositorIntersectList(pDstCompositor, pVr, pfChanged); 1006 if ( !RT_SUCCESS(rc))1046 if (RT_FAILURE(rc)) 1007 1047 { 1008 1048 WARN(("CrVrScrCompositorIntersectList failed, rc %d", rc));
Note:
See TracChangeset
for help on using the changeset viewer.