9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox XPDM Display driver
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Copyright (C) 2011 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * available from http://www.virtualbox.org. This file is free software;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * General Public License (GPL) as published by the Free Software
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic void VBoxDispVHWACommandFree(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic void VBoxDispVHWACommandRetain(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic void VBoxDispVHWACommandSubmitAsynchByEvent(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd, VBOXPEVENT pEvent)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* ensure the command is not removed until we're processing it */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* complete it asynchronously by setting event */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if(!(ASMAtomicReadU32((volatile uint32_t *)&pCmd->Flags) & VBOXVHWACMD_FLAG_HG_ASYNCH))
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* the command is completed */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pDev->vpAPI.VideoPortProcs.pfnSetEvent(pDev->vpAPI.pContext, pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic void VBoxDispVHWAHanldeVHWACmdCompletion(PVBOXDISPDEV pDev, VBVAHOSTCMD * pHostCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBVAHOSTCMDVHWACMDCOMPLETE * pComplete = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWACMD* pComplCmd = (VBOXVHWACMD*)HGSMIOffsetToPointer(&pDev->hgsmi.ctx.heapCtx.area, pComplete->offCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXVHWACMDCOMPLETION pfnCompletion = (PFNVBOXVHWACMDCOMPLETION)pComplCmd->GuestVBVAReserved1;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync void *pContext = (void *)pComplCmd->GuestVBVAReserved2;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic void VBoxVHWAHostCommandHandler(PVBOXDISPDEV pDev, VBVAHOSTCMD * pCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync rc = VBoxDispMPVHWAQueryInfo(pDev->hDriver, &info);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_ENABLE, 0);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVBOXVHWACMD* VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxHGSMIBufferAlloc(&pDev->hgsmi.ctx,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* @todo: temporary hack */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL VBoxDispVHWACommandSubmit(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVP_STATUS rc = pDev->vpAPI.VideoPortProcs.pfnCreateEvent(pDev->vpAPI.pContext, VBOXNOTIFICATION_EVENT, NULL, &pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* don't assert here, otherwise NT4 will be unhappy */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWACommandSubmitAsynchByEvent(pDev, pCmd, pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync rc = pDev->vpAPI.VideoPortProcs.pfnWaitForSingleObject(pDev->vpAPI.pContext, pEvent,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pDev->vpAPI.VideoPortProcs.pfnDeleteEvent(pDev->vpAPI.pContext, pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandCheckHostCmds(PVBOXDISPDEV pDev)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync int rc = pDev->hgsmi.mp.pfnRequestCommandsHandler(pDev->hgsmi.mp.hContext, HGSMI_CH_VBVA, pDev->iDevice, &pCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* don't assert here, otherwise NT4 will be unhappy */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic DECLCALLBACK(void) VBoxDispVHWACommandCompletionCallbackEvent(PVBOXDISPDEV pDev, VBOXVHWACMD * pCmd, void * pContext)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LONG oldState = pDev->vpAPI.VideoPortProcs.pfnSetEvent(pDev->vpAPI.pContext, pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* do not wait for completion */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandSubmitAsynch (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pCmd->GuestVBVAReserved1 = (uintptr_t)pfnCompletion;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* the command is completed */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncstatic DECLCALLBACK(void) VBoxDispVHWAFreeCmdCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD * pCmd, void * pContext)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandSubmitAsynchAndComplete (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pCmd->GuestVBVAReserved1 = (uintptr_t)VBoxDispVHWAFreeCmdCompletion;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pCmd->Flags |= VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync || pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* the command is completed */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFreeHostInfo1(PVBOXDISPDEV pDev, VBOXVHWACMD_QUERYINFO1* pInfo)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFreeHostInfo2(PVBOXDISPDEV pDev, VBOXVHWACMD_QUERYINFO2* pInfo)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVBOXVHWACMD_QUERYINFO1* VBoxDispVHWAQueryHostInfo1(PVBOXDISPDEV pDev)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWACMD* pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_QUERY_INFO1, sizeof(VBOXVHWACMD_QUERYINFO1));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo1 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo1->u.in.guestVersion.maj = VBOXVHWA_VERSION_MAJ;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo1->u.in.guestVersion.min = VBOXVHWA_VERSION_MIN;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo1->u.in.guestVersion.bld = VBOXVHWA_VERSION_BLD;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo1->u.in.guestVersion.reserved = VBOXVHWA_VERSION_RSV;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVBOXVHWACMD_QUERYINFO2* VBoxDispVHWAQueryHostInfo2(PVBOXDISPDEV pDev, uint32_t numFourCC)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWACMD* pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_QUERY_INFO2, VBOXVHWAINFO2_SIZE(numFourCC));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pDev->vhwa.colorKeyCaps = pInfo->u.out.colorKeyCaps;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pDev->vhwa.bEnabled = (pInfo->u.out.cfgFlags & VBOXVHWA_CFG_ENABLED);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAInitHostInfo2(PVBOXDISPDEV pDev, DWORD *pFourCC)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pInfo = VBoxDispVHWAQueryHostInfo2(pDev, pDev->vhwa.numFourCC);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync memcpy(pFourCC, pInfo->FourCC, pDev->vhwa.numFourCC * sizeof(pFourCC[0]));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_DISABLE, 0);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return (PVBOXVHWASURFDESC) EngAllocMem(FL_NONPAGED_MEMORY | FL_ZERO_MEMORY, sizeof(VBOXVHWASURFDESC), MEMTAG);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWASurfDescFree(PVBOXVHWASURFDESC pDesc)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint64_t VBoxDispVHWAVramOffsetFromPDEV(PVBOXDISPDEV pDev, ULONG_PTR offPdev)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return (uint64_t)(pDev->vhwa.offVramBase + offPdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOX_DD2VHWA(_out, _in, _f) do {if((_in) & VBOX_DD(_f)) _out |= VBOX_VHWA(_f); }while(0)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOX_DD_VHWA_PAIR(_v) {VBOX_DD(_v), VBOX_VHWA(_v)}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAUnsupportedDDCAPS(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAUnsupportedDDSCAPS(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAUnsupportedDDPFS(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAUnsupportedDDCEYCAPS(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWASupportedDDCEYCAPS(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWASupportedDDSCAPS(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAUnsupportedOVERs(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAUnsupportedCKEYs(uint32_t caps)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDOVERs(uint32_t caps) { return caps; }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDOVERs(uint32_t caps) { return caps; }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDCKEYs(uint32_t caps) { return caps; }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDCKEYs(uint32_t caps) { return caps; }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromDDCOLORKEY(VBOXVHWA_COLORKEY *pVHWACKey, DDCOLORKEY *pDdCKey)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX *pVHWAOverlay, DDOVERLAYFX *pDdOverlay)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync //TODO: fxFlags
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWAOverlay->DstCK, &pDdOverlay->dckDestColorkey);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWAOverlay->SrcCK, &pDdOverlay->dckSrcColorkey);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX *pVHWABlt, DDBLTFX *pDdBlt)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWABlt->DstCK, &pDdBlt->ddckDestColorkey);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWABlt->SrcCK, &pDdBlt->ddckSrcColorkey);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAFromDDPIXELFORMAT(VBOXVHWA_PIXELFORMAT *pVHWAFormat, DDPIXELFORMAT *pDdFormat)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t unsup = VBoxDispVHWAUnsupportedDDPFS(pDdFormat->dwFlags);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWAFormat->flags = VBoxDispVHWAFromDDPFS(pDdFormat->dwFlags);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWAFormat->c.rgbBitCount = pDdFormat->dwRGBBitCount;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWAFormat->m1.rgbRBitMask = pDdFormat->dwRBitMask;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWAFormat->m2.rgbGBitMask = pDdFormat->dwGBitMask;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWAFormat->m3.rgbBBitMask = pDdFormat->dwBBitMask;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC *pVHWADesc, DDSURFACEDESC *pDdDesc)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t unsupds = VBoxDispVHWAUnsupportedDSS(pDdDesc->dwFlags);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWADesc->cBackBuffers = pDdDesc->dwBackBufferCount;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t unsup = VBoxDispVHWAUnsupportedDDSCAPS(pDdDesc->ddsCaps.dwCaps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pVHWADesc->surfCaps = VBoxDispVHWAFromDDSCAPS(pDdDesc->ddsCaps.dwCaps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->DstBltCK, &pDdDesc->ddckCKDestBlt);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->DstOverlayCK, &pDdDesc->ddckCKDestOverlay);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->SrcBltCK, &pDdDesc->ddckCKSrcBlt);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->SrcOverlayCK, &pDdDesc->ddckCKSrcOverlay);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync int rc = VBoxDispVHWAFromDDPIXELFORMAT(&pVHWADesc->PixelFormat, &pDdDesc->ddpfPixelFormat);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL *pDst, RECTL *pSrc)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARectUnited(RECTL * pDst, RECTL * pRect1, RECTL * pRect2)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pDst->bottom = MAX(pRect1->bottom, pRect2->bottom);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return pRect->left == pRect->right-1 && pRect->top == pRect->bottom-1;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARectIntersect(RECTL * pRect1, RECTL * pRect2)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return !((pRect1->left < pRect2->left && pRect1->right < pRect2->left)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync || (pRect2->left < pRect1->left && pRect2->right < pRect1->left)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync || (pRect1->top < pRect2->top && pRect1->bottom < pRect2->top)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync || (pRect2->top < pRect1->top && pRect2->bottom < pRect1->top));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARectInclude(RECTL * pRect1, RECTL * pRect2)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return ((pRect1->left <= pRect2->left && pRect1->right >= pRect2->right)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync && (pRect1->top <= pRect2->top && pRect1->bottom >= pRect2->bottom));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionIntersects(PVBOXVHWAREGION pReg, RECTL * pRect)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return VBoxDispVHWARectIntersect(&pReg->Rect, pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionIncludes(PVBOXVHWAREGION pReg, RECTL * pRect)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return VBoxDispVHWARectInclude(&pReg->Rect, pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionIncluded(PVBOXVHWAREGION pReg, RECTL * pRect)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return true;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return VBoxDispVHWARectInclude(pRect, &pReg->Rect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionSet(PVBOXVHWAREGION pReg, RECTL * pRect)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionAdd(PVBOXVHWAREGION pReg, RECTL * pRect)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxDispVHWARectUnited(&pReg->Rect, &pReg->Rect, pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionTrySubstitute(PVBOXVHWAREGION pReg, const RECTL *pRect)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if(pReg->Rect.left >= pRect->left && pReg->Rect.right <= pRect->right)