9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox Miniport device extension header
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 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 VBOXMPDEVEXT_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXMPDEVEXT_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include "VBoxMPUtils.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <VBox/VBoxVideoGuest.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_XPDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# include <miniport.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# include <ntddvdeo.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# include <video.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# include "common/xpdm/VBoxVideoPortAPI.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WDDM_MINIPORT
693371b1683e932d912955b7c97bc7e3bfc7dd34vboxsync# ifdef VBOX_WDDM_WIN8
693371b1683e932d912955b7c97bc7e3bfc7dd34vboxsyncextern DWORD g_VBoxDisplayOnly;
693371b1683e932d912955b7c97bc7e3bfc7dd34vboxsync# endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# include "wddm/VBoxMPTypes.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
5812854ef3f36c3defe4731c055b1839cfc05a16vboxsync#define VBOXMP_MAX_VIDEO_MODES 128
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXMP_COMMON
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync int cDisplays; /* Number of displays. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t cbVRAM; /* The VRAM size. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
4c98b8b05f3783351cf256cc90cd4478fb28b62bvboxsync PHYSICAL_ADDRESS phVRAM; /* Physical VRAM base. */
4c98b8b05f3783351cf256cc90cd4478fb28b62bvboxsync
4c98b8b05f3783351cf256cc90cd4478fb28b62bvboxsync ULONG ulApertureSize; /* Size of the LFB aperture (>= VRAM size). */
4c98b8b05f3783351cf256cc90cd4478fb28b62bvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t cbMiniportHeap; /* The size of reserved VRAM for miniport driver heap.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * It is at offset:
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * cbAdapterMemorySize - VBOX_VIDEO_ADAPTER_INFORMATION_SIZE - cbMiniportHeap
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync void *pvMiniportHeap; /* The pointer to the miniport heap VRAM.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This is mapped by miniport separately.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync void *pvAdapterInformation; /* The pointer to the last 4K of VRAM.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This is mapped by miniport separately.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /** Whether HGSMI is enabled. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync bool bHGSMI;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /** Context information needed to receive commands from the host. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIHOSTCOMMANDCONTEXT hostCtx;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /** Context information needed to submit commands to the host. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIGUESTCOMMANDCONTEXT guestCtx;
5295c362853081eaa3944247171746a3aad9a826vboxsync
5295c362853081eaa3944247171746a3aad9a826vboxsync BOOLEAN fAnyX; /* Unrestricted horizontal resolution flag. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXMP_COMMON, *PVBOXMP_COMMON;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXMP_DEVEXT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct _VBOXMP_DEVEXT *pNext; /* Next extension in the DualView extension list.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * The primary extension is the first one.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_XPDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct _VBOXMP_DEVEXT *pPrimary; /* Pointer to the primary device extension. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG iDevice; /* Device index: 0 for primary, otherwise a secondary device. */
5812854ef3f36c3defe4731c055b1839cfc05a16vboxsync /* Standart video modes list.
025f63d67fda3ee11dfb70515e2cebf56d4308c4vboxsync * Additional space is reserved for a custom video mode for this guest monitor.
025f63d67fda3ee11dfb70515e2cebf56d4308c4vboxsync * The custom video mode index is alternating for each mode set and 2 indexes are needed for the custom mode.
5812854ef3f36c3defe4731c055b1839cfc05a16vboxsync */
025f63d67fda3ee11dfb70515e2cebf56d4308c4vboxsync VIDEO_MODE_INFORMATION aVideoModes[VBOXMP_MAX_VIDEO_MODES + 2];
5812854ef3f36c3defe4731c055b1839cfc05a16vboxsync /* Number of available video modes, set by VBoxMPCmnBuildVideoModesTable. */
5812854ef3f36c3defe4731c055b1839cfc05a16vboxsync uint32_t cVideoModes;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG CurrentMode; /* Saved information about video modes */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG CurrentModeWidth;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG CurrentModeHeight;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG CurrentModeBPP;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulFrameBufferOffset; /* The framebuffer position in the VRAM. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulFrameBufferSize; /* The size of the current framebuffer. */
5295c362853081eaa3944247171746a3aad9a826vboxsync
5295c362853081eaa3944247171746a3aad9a826vboxsync uint8_t iInvocationCounter;
5295c362853081eaa3944247171746a3aad9a826vboxsync uint32_t Prev_xres;
5295c362853081eaa3944247171746a3aad9a826vboxsync uint32_t Prev_yres;
5295c362853081eaa3944247171746a3aad9a826vboxsync uint32_t Prev_bpp;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOX_XPDM_MINIPORT*/
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WDDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PDEVICE_OBJECT pPDO;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UNICODE_STRING RegKeyName;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UNICODE_STRING VideoGuid;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint8_t * pvVisibleVram;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVIDEOCM_MGR CmMgr;
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync VBOXVIDEOCM_MGR SeamlessCtxMgr;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* hgsmi allocation manager */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVIDEOCM_ALLOC_MGR AllocMgr;
9cdd4d805ecb43126372f7cf12e4032836cb738avboxsync VBOXVDMADDI_NODE aNodes[VBOXWDDM_NUM_NODES];
9cdd4d805ecb43126372f7cf12e4032836cb738avboxsync LIST_ENTRY DpcCmdQueue;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LIST_ENTRY SwapchainList3D;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* mutex for context list operations */
67b8a5a52c43a79ea7e159dbbeec99687fb9cd3bvboxsync KSPIN_LOCK ContextLock;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync KSPIN_LOCK SynchLock;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cContexts3D;
09f4b412099acda62997fd82c8608075c453b3ebvboxsync volatile uint32_t cContexts2D;
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync volatile uint32_t cContextsDispIfResize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync volatile uint32_t cUnlockedVBVADisabled;
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync
fdb57e5580007400346665b64c0e14ca1d149019vboxsync volatile uint32_t fCompletingCommands;
fdb57e5580007400346665b64c0e14ca1d149019vboxsync
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync DWORD dwDrvCfgFlags;
ad290511521ce8388a9926b165241ecf83c330a7vboxsync#ifdef VBOX_WITH_CROGL
9c21eebec4d70f1e638002c8dfc6ea9d534d8710vboxsync BOOLEAN f3DEnabled;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync BOOLEAN fTexPresentEnabled;
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync BOOLEAN fCmdVbvaEnabled;
f068575233c08526611dbe29684bee5f2cbe7144vboxsync BOOLEAN fComplexTopologiesEnabled;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync
8cfe2efff2058bd07777056112155ea5353dcfbavboxsync uint32_t u32CrConDefaultClientID;
8cfe2efff2058bd07777056112155ea5353dcfbavboxsync
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync VBOXCMDVBVA CmdVbva;
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync
2721dfb0e330d57ba888311520f5a343c64e7cefvboxsync VBOXMP_CRCTLCON CrCtlCon;
67b8a5a52c43a79ea7e159dbbeec99687fb9cd3bvboxsync VBOXMP_CRSHGSMITRANSPORT CrHgsmiTransport;
ad290511521ce8388a9926b165241ecf83c330a7vboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXWDDM_GLOBAL_POINTER_INFO PointerInfo;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
e6ad2e18e663b076aeabfec994947514566a7accvboxsync VBOXVTLIST CtlList;
e6ad2e18e663b076aeabfec994947514566a7accvboxsync VBOXVTLIST DmaCmdList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
e6ad2e18e663b076aeabfec994947514566a7accvboxsync VBOXVTLIST VhwaCmdList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
635c83753ed04cf3637e019af0e15ba40e07f2fevboxsync BOOLEAN bNotifyDxDpc;
635c83753ed04cf3637e019af0e15ba40e07f2fevboxsync
635c83753ed04cf3637e019af0e15ba40e07f2fevboxsync BOOLEAN fDisableTargetUpdate;
635c83753ed04cf3637e019af0e15ba40e07f2fevboxsync
635c83753ed04cf3637e019af0e15ba40e07f2fevboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync#ifdef VBOX_VDMA_WITH_WATCHDOG
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync PKTHREAD pWdThread;
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync KEVENT WdEvent;
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync#endif
46737b2c6b2da473108a7670c3682d88474bd8b9vboxsync BOOL bVSyncTimerEnabled;
46737b2c6b2da473108a7670c3682d88474bd8b9vboxsync volatile uint32_t fVSyncInVBlank;
46737b2c6b2da473108a7670c3682d88474bd8b9vboxsync volatile LARGE_INTEGER VSyncTime;
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync KTIMER VSyncTimer;
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync KDPC VSyncDpc;
e637cb22e348f5665d5473dae55ed785aa7b6e9avboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#if 0
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync FAST_MUTEX ShRcTreeMutex;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync AVLPVTREE ShRcTree;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync#endif
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXWDDM_SOURCE aSources[VBOX_VIDEO_MAX_SCREENS];
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXWDDM_TARGET aTargets[VBOX_VIDEO_MAX_SCREENS];
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOX_WDDM_MINIPORT*/
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync union {
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Information that is only relevant to the primary device or is the same for all devices. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct {
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync void *pvReqFlush; /* Pointer to preallocated generic request structure for
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VMMDevReq_VideoAccelFlush. Allocated when VBVA status
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * is changed. Deallocated on HwReset.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulVbvaEnabled; /* Indicates that VBVA mode is enabled. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulMaxFrameBufferSize; /* The size of the VRAM allocated for the a single framebuffer. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BOOLEAN fMouseHidden; /* Has the mouse cursor been hidden by the guest? */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXMP_COMMON commonInfo;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_XPDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Video Port API dynamically picked up at runtime for binary backwards compatibility with older NT versions */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVIDEOPORTPROCS VideoPortProcs;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WDDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVDMAINFO Vdma;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# ifdef VBOXVDMA_WITH_VBVA
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVBVAINFO Vbva;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync# endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DKMDT_HVIDPN hCommittedVidPn; /* committed VidPn handle */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync DXGKRNL_INTERFACE DxgkInterface; /* Display Port handle and callbacks */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } primary;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Secondary device information. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct {
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BOOLEAN bEnabled; /* Device enabled flag */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } secondary;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync } u;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIAREA areaDisplay; /* Entire VRAM chunk for this display device. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXMP_DEVEXT, *PVBOXMP_DEVEXT;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(PVBOXMP_DEVEXT) VBoxCommonToPrimaryExt(PVBOXMP_COMMON pCommon)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return RT_FROM_MEMBER(pCommon, VBOXMP_DEVEXT, u.primary.commonInfo);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(PVBOXMP_COMMON) VBoxCommonFromDeviceExt(PVBOXMP_DEVEXT pExt)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_XPDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return &pExt->pPrimary->u.primary.commonInfo;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#else
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return &pExt->u.primary.commonInfo;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WDDM_MINIPORT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(ULONG) vboxWddmVramCpuVisibleSize(PVBOXMP_DEVEXT pDevExt)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
ad290511521ce8388a9926b165241ecf83c330a7vboxsync#ifdef VBOX_WITH_CROGL
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync if (pDevExt->fCmdVbvaEnabled)
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync {
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync /* all memory layout info should be initialized */
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync Assert(pDevExt->CmdVbva.Vbva.offVRAMBuffer);
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync /* page aligned */
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync Assert(!(pDevExt->CmdVbva.Vbva.offVRAMBuffer & 0xfff));
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync return (ULONG)(pDevExt->CmdVbva.Vbva.offVRAMBuffer & ~0xfffULL);
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync }
ad290511521ce8388a9926b165241ecf83c330a7vboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* all memory layout info should be initialized */
b4c150c76d00ac5b8957b0148e2be234e567cf9avboxsync Assert(pDevExt->aSources[0].Vbva.Vbva.offVRAMBuffer);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* page aligned */
b4c150c76d00ac5b8957b0148e2be234e567cf9avboxsync Assert(!(pDevExt->aSources[0].Vbva.Vbva.offVRAMBuffer & 0xfff));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
b4c150c76d00ac5b8957b0148e2be234e567cf9avboxsync return (ULONG)(pDevExt->aSources[0].Vbva.Vbva.offVRAMBuffer & ~0xfffULL);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(ULONG) vboxWddmVramCpuVisibleSegmentSize(PVBOXMP_DEVEXT pDevExt)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return vboxWddmVramCpuVisibleSize(pDevExt);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
1389294d44ac76b0a25f5655756c9d39855a73efvboxsync/* 128 MB */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(ULONG) vboxWddmVramCpuInvisibleSegmentSize(PVBOXMP_DEVEXT pDevExt)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
1389294d44ac76b0a25f5655756c9d39855a73efvboxsync return 128 * 1024 * 1024;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
1389294d44ac76b0a25f5655756c9d39855a73efvboxsync#ifdef VBOXWDDM_RENDER_FROM_SHADOW
1389294d44ac76b0a25f5655756c9d39855a73efvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(bool) vboxWddmCmpSurfDescsBase(VBOXWDDM_SURFACE_DESC *pDesc1, VBOXWDDM_SURFACE_DESC *pDesc2)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pDesc1->width != pDesc2->width)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pDesc1->height != pDesc2->height)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pDesc1->format != pDesc2->format)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pDesc1->bpp != pDesc2->bpp)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pDesc1->pitch != pDesc2->pitch)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return false;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return true;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOX_WDDM_MINIPORT*/
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOXMPDEVEXT_H*/