9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox XPDM Display driver, helper functions which interacts with our miniport driver
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Copyright (C) 2011 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync *
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.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifndef VBOXDISPVHWA_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXDISPVHWA_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include "VBoxDisp.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPVHWAINFO
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t caps;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t caps2;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t colorKeyCaps;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t stretchCaps;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t surfaceCaps;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t numOverlays;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t numFourCC;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIOFFSET FourCC;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG_PTR offVramBase;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BOOLEAN bEnabled;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPVHWAINFO;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXVHWAREGION
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECTL Rect;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync bool bValid;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}VBOXVHWAREGION, *PVBOXVHWAREGION;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXVHWASURFDESC
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWA_SURFHANDLE hHostHandle;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cPendingBltsSrc;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cPendingBltsDst;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cPendingFlipsCurr;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cPendingFlipsTarg;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef DEBUG
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cFlipsCurr;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cFlipsTarg;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync bool bVisible;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWAREGION UpdatedMemRegion;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVHWAREGION NonupdatedMemRegion;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}VBOXVHWASURFDESC, *PVBOXVHWASURFDESC;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef DECLCALLBACK(void) FNVBOXVHWACMDCOMPLETION(PVBOXDISPDEV pDev, VBOXVHWACMD * pCmd, void * pContext);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef FNVBOXVHWACMDCOMPLETION *PFNVBOXVHWACMDCOMPLETION;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAInit(PVBOXDISPDEV pDev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAEnable(PVBOXDISPDEV pDev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWADisable(PVBOXDISPDEV pDev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAInitHostInfo1(PVBOXDISPDEV pDev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAInitHostInfo2(PVBOXDISPDEV pDev, DWORD *pFourCC);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVBOXVHWACMD* VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL VBoxDispVHWACommandSubmit(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandSubmitAsynch (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandSubmitAsynchAndComplete (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWACommandCheckHostCmds(PVBOXDISPDEV pDev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncPVBOXVHWASURFDESC VBoxDispVHWASurfDescAlloc();
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWASurfDescFree(PVBOXVHWASURFDESC pDesc);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint64_t VBoxDispVHWAVramOffsetFromPDEV(PVBOXDISPDEV pDev, ULONG_PTR offPdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARectUnited(RECTL * pDst, RECTL * pRect1, RECTL * pRect2);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARectIsEmpty(RECTL * pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARectIntersect(RECTL * pRect1, RECTL * pRect2);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARectInclude(RECTL * pRect1, RECTL * pRect2);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionIntersects(PVBOXVHWAREGION pReg, RECTL * pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionIncludes(PVBOXVHWAREGION pReg, RECTL * pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionIncluded(PVBOXVHWAREGION pReg, RECTL * pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionSet(PVBOXVHWAREGION pReg, RECTL * pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionAdd(PVBOXVHWAREGION pReg, RECTL * pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionInit(PVBOXVHWAREGION pReg);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionClear(PVBOXVHWAREGION pReg);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncbool VBoxDispVHWARegionValid(PVBOXVHWAREGION pReg);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWARegionTrySubstitute(PVBOXVHWAREGION pReg, const RECTL *pRect);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDSCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDSCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDPFS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDPFS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDCKEYCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDCKEYCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDBLTs(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDBLTs(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDCAPS2(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDCAPS2(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDOVERs(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDOVERs(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAFromDDCKEYs(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWAToDDCKEYs(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC *pVHWADesc, DDSURFACEDESC *pDdDesc);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncint VBoxDispVHWAFromDDPIXELFORMAT(VBOXVHWA_PIXELFORMAT *pVHWAFormat, DDPIXELFORMAT *pDdFormat);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX *pVHWAOverlay, DDOVERLAYFX *pDdOverlay);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromDDCOLORKEY(VBOXVHWA_COLORKEY *pVHWACKey, DDCOLORKEY *pDdCKey);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX *pVHWABlt, DDBLTFX *pDdBlt);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL *pDst, RECTL *pSrc);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
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 VBoxDispVHWASupportedDDCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWASupportedDDSCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWASupportedDDPFS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncuint32_t VBoxDispVHWASupportedDDCEYCAPS(uint32_t caps);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOXDISPVHWA_H*/