9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBoxVideo Display D3D User mode dll
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 ___VBoxDispKmt_h__
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define ___VBoxDispKmt_h__
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <D3dkmthk.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync#include "../../common/wddm/VBoxMPIf.h"
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync/* win8 release preview-specific stuff */
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsynctypedef struct _D3DKMT_ADAPTERINFO
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync{
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync D3DKMT_HANDLE hAdapter;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync LUID AdapterLuid;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync ULONG NumOfSources;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync BOOL bPresentMoveRegionsPreferred;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync} D3DKMT_ADAPTERINFO;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync#define MAX_ENUM_ADAPTERS 16
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsynctypedef struct _D3DKMT_ENUMADAPTERS
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync{
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync ULONG NumAdapters;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync D3DKMT_ADAPTERINFO Adapters[MAX_ENUM_ADAPTERS];
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync} D3DKMT_ENUMADAPTERS;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsynctypedef NTSTATUS (APIENTRY *PFND3DKMT_ENUMADAPTERS)(IN OUT D3DKMT_ENUMADAPTERS*);
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsynctypedef struct _D3DKMT_OPENADAPTERFROMLUID
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync{
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync LUID AdapterLuid;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync D3DKMT_HANDLE hAdapter;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync} D3DKMT_OPENADAPTERFROMLUID;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsynctypedef NTSTATUS (APIENTRY *PFND3DKMT_OPENADAPTERFROMLUID)(IN OUT D3DKMT_OPENADAPTERFROMLUID*);
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync/* END OF win8 release preview-specific stuff */
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsynctypedef enum
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync{
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync VBOXDISPKMT_CALLBACKS_VERSION_UNDEFINED = 0,
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync VBOXDISPKMT_CALLBACKS_VERSION_VISTA_WIN7,
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync VBOXDISPKMT_CALLBACKS_VERSION_WIN8
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync} VBOXDISPKMT_CALLBACKS_VERSION;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXDISPKMT_CALLBACKS
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HMODULE hGdi32;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync VBOXDISPKMT_CALLBACKS_VERSION enmVersion;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* open adapter */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_OPENADAPTERFROMHDC pfnD3DKMTOpenAdapterFromHdc;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_OPENADAPTERFROMGDIDISPLAYNAME pfnD3DKMTOpenAdapterFromGdiDisplayName;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* close adapter */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_CLOSEADAPTER pfnD3DKMTCloseAdapter;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* escape */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_ESCAPE pfnD3DKMTEscape;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync PFND3DKMT_QUERYADAPTERINFO pfnD3DKMTQueryAdapterInfo;
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_CREATEDEVICE pfnD3DKMTCreateDevice;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_DESTROYDEVICE pfnD3DKMTDestroyDevice;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_CREATECONTEXT pfnD3DKMTCreateContext;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_DESTROYCONTEXT pfnD3DKMTDestroyContext;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_RENDER pfnD3DKMTRender;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_CREATEALLOCATION pfnD3DKMTCreateAllocation;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_DESTROYALLOCATION pfnD3DKMTDestroyAllocation;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_LOCK pfnD3DKMTLock;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFND3DKMT_UNLOCK pfnD3DKMTUnlock;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync /* auto resize support */
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync PFND3DKMT_INVALIDATEACTIVEVIDPN pfnD3DKMTInvalidateActiveVidPn;
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync PFND3DKMT_POLLDISPLAYCHILDREN pfnD3DKMTPollDisplayChildren;
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync /* win8 specifics */
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync PFND3DKMT_ENUMADAPTERS pfnD3DKMTEnumAdapters;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync PFND3DKMT_OPENADAPTERFROMLUID pfnD3DKMTOpenAdapterFromLuid;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPKMT_CALLBACKS, *PVBOXDISPKMT_CALLBACKS;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXDISPKMT_ADAPTER
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DKMT_HANDLE hAdapter;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HDC hDc;
4caf19ef0484a5991eed5210bb56cb1104835fc6vboxsync LUID Luid;
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync const VBOXDISPKMT_CALLBACKS *pCallbacks;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}VBOXDISPKMT_ADAPTER, *PVBOXDISPKMT_ADAPTER;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXDISPKMT_DEVICE
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct VBOXDISPKMT_ADAPTER *pAdapter;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DKMT_HANDLE hDevice;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VOID *pCommandBuffer;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UINT CommandBufferSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DDDI_ALLOCATIONLIST *pAllocationList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UINT AllocationListSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UINT PatchLocationListSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}VBOXDISPKMT_DEVICE, *PVBOXDISPKMT_DEVICE;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXDISPKMT_CONTEXT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct VBOXDISPKMT_DEVICE *pDevice;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DKMT_HANDLE hContext;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VOID *pCommandBuffer;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UINT CommandBufferSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DDDI_ALLOCATIONLIST *pAllocationList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UINT AllocationListSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync UINT PatchLocationListSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPKMT_CONTEXT, *PVBOXDISPKMT_CONTEXT;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtCallbacksInit(PVBOXDISPKMT_CALLBACKS pCallbacks);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtCallbacksTerm(PVBOXDISPKMT_CALLBACKS pCallbacks);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsyncHRESULT vboxDispKmtOpenAdapter(const VBOXDISPKMT_CALLBACKS *pCallbacks, PVBOXDISPKMT_ADAPTER pAdapter);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtCloseAdapter(PVBOXDISPKMT_ADAPTER pAdapter);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtCreateDevice(PVBOXDISPKMT_ADAPTER pAdapter, PVBOXDISPKMT_DEVICE pDevice);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtDestroyDevice(PVBOXDISPKMT_DEVICE pDevice);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtCreateContext(PVBOXDISPKMT_DEVICE pDevice, PVBOXDISPKMT_CONTEXT pContext,
87150caf549846b0edba30c50dabe5092df70b5fvboxsync VBOXWDDM_CONTEXT_TYPE enmType,
87150caf549846b0edba30c50dabe5092df70b5fvboxsync uint32_t crVersionMajor, uint32_t crVersionMinor,
87150caf549846b0edba30c50dabe5092df70b5fvboxsync HANDLE hEvent, uint64_t u64UmInfo);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT vboxDispKmtDestroyContext(PVBOXDISPKMT_CONTEXT pContext);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /* #ifndef ___VBoxDispKmt_h__ */