Changeset 51157 in vbox for trunk/src/VBox/HostServices/SharedOpenGL
- Timestamp:
- Apr 28, 2014 5:21:49 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 93492
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp
r51152 r51157 5258 5258 } 5259 5259 5260 static int8_t crVBoxServerCrCmdBltSameDimOrId(const VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8 *pCmd, uint32_t cbCmd) 5261 { 5262 uint32_t cRects; 5263 const VBOXCMDVBVA_RECT *pPRects = pCmd->aRects; 5264 if ((cbCmd - RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, aRects)) % sizeof (VBOXCMDVBVA_RECT)) 5265 { 5266 WARN(("invalid argument size")); 5267 return -1; 5268 } 5269 5270 cRects = (cbCmd - RT_OFFSETOF(VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8, aRects)) / sizeof (VBOXCMDVBVA_RECT); 5271 5272 RTRECT *pRects = crVBoxServerCrCmdBltRecsUnpack(pPRects, cRects); 5273 if (!pRects) 5274 { 5275 WARN(("crVBoxServerCrCmdBltRecsUnpack failed")); 5276 return -1; 5277 } 5278 5279 uint8_t u8Flags = pCmd->Hdr.Hdr.u8Flags; 5280 VBOXCMDVBVAOFFSET offVRAM = pCmd->alloc1.Info.u.offVRAM; 5281 uint32_t width = pCmd->alloc1.u16Width; 5282 uint32_t height = pCmd->alloc1.u16Height; 5283 RTPOINT Pos = {pCmd->Hdr.Pos.x, pCmd->Hdr.Pos.y}; 5284 5285 if (u8Flags & VBOXCMDVBVA_OPF_OPERAND2_ISID) 5286 { 5287 uint32_t hostId = pCmd->info2.u.id; 5288 5289 if (!hostId) 5290 { 5291 WARN(("zero host id")); 5292 return -1; 5293 } 5294 5295 if (u8Flags & VBOXCMDVBVA_OPF_OPERAND1_ISID) 5296 { 5297 WARN(("blit from texture to texture not implemented")); 5298 return -1; 5299 } 5300 5301 if (u8Flags & VBOXCMDVBVA_OPF_BLT_DIR_IN_2) 5302 { 5303 WARN(("blit to texture not implemented")); 5304 return -1; 5305 } 5306 5307 return crVBoxServerCrCmdBltIdToVram(hostId, offVRAM, width, height, &Pos, cRects, pRects); 5308 } 5309 5310 if (u8Flags & VBOXCMDVBVA_OPF_OPERAND1_ISID) 5311 { 5312 if (!(u8Flags & VBOXCMDVBVA_OPF_BLT_DIR_IN_2)) 5313 { 5314 WARN(("blit to texture not implemented")); 5315 return -1; 5316 } 5317 5318 return crVBoxServerCrCmdBltIdToVram(pCmd->alloc1.Info.u.id, pCmd->info2.u.offVRAM, width, height, &Pos, cRects, pRects); 5319 } 5320 5321 if (u8Flags & VBOXCMDVBVA_OPF_BLT_DIR_IN_2) 5322 crVBoxServerCrCmdBltVramToVram(offVRAM, width, height, pCmd->info2.u.offVRAM, width, height, &Pos, cRects, pRects); 5323 else 5324 crVBoxServerCrCmdBltVramToVram(pCmd->info2.u.offVRAM, width, height, offVRAM, width, height, &Pos, cRects, pRects); 5325 5326 return 0; 5327 } 5328 5260 5329 static int8_t crVBoxServerCrCmdBltPrimaryGenericBGRAProcess(const VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8 *pCmd, uint32_t cbCmd) 5261 5330 { … … 5362 5431 5363 5432 uint8_t u8Flags = pCmd->Hdr.Hdr.u8Flags; 5433 RTPOINT Pos = {pCmd->Hdr.Pos.x, pCmd->Hdr.Pos.y}; 5364 5434 5365 5435 if (u8Flags & VBOXCMDVBVA_OPF_OPERAND2_ISID) … … 5377 5447 } 5378 5448 5379 RTPOINT Pos = {pCmd->Hdr.Pos.x, pCmd->Hdr.Pos.y};5380 5449 return crVBoxServerCrCmdBltIdToVram(pCmd->alloc2.Info.u.id, pCmd->alloc1.Info.u.offVRAM, pCmd->alloc1.u16Width, pCmd->alloc1.u16Height, &Pos, cRects, pRects); 5381 5450 } … … 5394 5463 } 5395 5464 5396 RTPOINT Pos = {pCmd->Hdr.Pos.x, pCmd->Hdr.Pos.y};5397 5398 5465 if (u8Flags & VBOXCMDVBVA_OPF_BLT_DIR_IN_2) 5399 5466 crVBoxServerCrCmdBltVramToVram(pCmd->alloc1.Info.u.offVRAM, pCmd->alloc1.u16Width, pCmd->alloc1.u16Height, pCmd->alloc2.Info.u.offVRAM, pCmd->alloc2.u16Width, pCmd->alloc2.u16Height, &Pos, cRects, pRects); … … 5549 5616 switch (u8Cmd) 5550 5617 { 5551 case VBOXCMDVBVA_OPF_CLRFILL_TYPE_PRIMARY:5552 {5553 if (cbCmd < sizeof (VBOXCMDVBVA_CLRFILL_PRIMARY))5554 {5555 WARN(("VBOXCMDVBVA_CLRFILL_PRIMARY: invalid command size"));5556 return -1;5557 }5558 5559 return crVBoxServerCrCmdClrFillPrimaryProcess((const VBOXCMDVBVA_CLRFILL_PRIMARY*)pCmd, cbCmd);5560 }5561 5618 case VBOXCMDVBVA_OPF_CLRFILL_TYPE_GENERIC_A8R8G8B8: 5562 5619 { … … 5583 5640 switch (u8Cmd) 5584 5641 { 5585 case VBOXCMDVBVA_OPF_BLT_TYPE_ PRIMARY:5586 { 5587 if (cbCmd < sizeof (VBOXCMDVBVA_BLT_ PRIMARY))5642 case VBOXCMDVBVA_OPF_BLT_TYPE_SAMEDIM_A8R8G8B8: 5643 { 5644 if (cbCmd < sizeof (VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8)) 5588 5645 { 5589 WARN(("VBOXCMDVBVA_ OPF_BLT_TYPE_PRIMARY: invalid command size"));5646 WARN(("VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8: invalid command size")); 5590 5647 return -1; 5591 5648 } 5592 5649 5593 return crVBoxServerCrCmdBlt PrimaryProcess((const VBOXCMDVBVA_BLT_PRIMARY*)pCmd, cbCmd);5650 return crVBoxServerCrCmdBltSameDimOrId((const VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8 *)pCmd, cbCmd); 5594 5651 } 5595 5652 case VBOXCMDVBVA_OPF_BLT_TYPE_OFFPRIMSZFMT_OR_ID: … … 5603 5660 return crVBoxServerCrCmdBltOffIdProcess((const VBOXCMDVBVA_BLT_OFFPRIMSZFMT_OR_ID *)pCmd, cbCmd); 5604 5661 } 5605 case VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY_GENERIC_A8R8G8B8:5606 {5607 if (cbCmd < sizeof (VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8))5608 {5609 WARN(("VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY_GENERIC_A8R8G8B8: invalid command size"));5610 return -1;5611 }5612 5613 return crVBoxServerCrCmdBltPrimaryGenericBGRAProcess((const VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8 *)pCmd, cbCmd);5614 }5615 5662 case VBOXCMDVBVA_OPF_BLT_TYPE_GENERIC_A8R8G8B8: 5616 5663 { … … 5623 5670 return crVBoxServerCrCmdBltGenericBGRAProcess((const VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8 *)pCmd, cbCmd); 5624 5671 } 5625 case VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY_PRIMARY:5626 {5627 if (cbCmd < sizeof (VBOXCMDVBVA_BLT_PRIMARY))5628 {5629 WARN(("VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY_PRIMARY: invalid command size"));5630 return -1;5631 }5632 5633 return crVBoxServerCrCmdBltPrimaryPrimaryProcess((const VBOXCMDVBVA_BLT_PRIMARY *)pCmd, cbCmd);5634 }5635 5672 default: 5636 5673 WARN(("unsupported command"));
Note:
See TracChangeset
for help on using the changeset viewer.