1 | /* $Id: VBoxDispKmt.h 41984 2012-07-02 14:00:09Z vboxsync $ */
|
---|
2 |
|
---|
3 | /** @file
|
---|
4 | * VBoxVideo Display D3D User mode dll
|
---|
5 | */
|
---|
6 |
|
---|
7 | /*
|
---|
8 | * Copyright (C) 2011 Oracle Corporation
|
---|
9 | *
|
---|
10 | * This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
11 | * available from http://www.virtualbox.org. This file is free software;
|
---|
12 | * you can redistribute it and/or modify it under the terms of the GNU
|
---|
13 | * General Public License (GPL) as published by the Free Software
|
---|
14 | * Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
15 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
16 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
17 | */
|
---|
18 |
|
---|
19 | #ifndef ___VBoxDispKmt_h__
|
---|
20 | #define ___VBoxDispKmt_h__
|
---|
21 |
|
---|
22 | #include <D3dkmthk.h>
|
---|
23 |
|
---|
24 | /* win8 release preview-specific stuff */
|
---|
25 | typedef struct _D3DKMT_ADAPTERINFO
|
---|
26 | {
|
---|
27 | D3DKMT_HANDLE hAdapter;
|
---|
28 | LUID AdapterLuid;
|
---|
29 | ULONG NumOfSources;
|
---|
30 | BOOL bPresentMoveRegionsPreferred;
|
---|
31 | } D3DKMT_ADAPTERINFO;
|
---|
32 |
|
---|
33 | #define MAX_ENUM_ADAPTERS 16
|
---|
34 |
|
---|
35 | typedef struct _D3DKMT_ENUMADAPTERS
|
---|
36 | {
|
---|
37 | ULONG NumAdapters;
|
---|
38 | D3DKMT_ADAPTERINFO Adapters[MAX_ENUM_ADAPTERS];
|
---|
39 | } D3DKMT_ENUMADAPTERS;
|
---|
40 |
|
---|
41 | typedef NTSTATUS (APIENTRY *PFND3DKMT_ENUMADAPTERS)(IN OUT D3DKMT_ENUMADAPTERS*);
|
---|
42 |
|
---|
43 | typedef struct _D3DKMT_OPENADAPTERFROMLUID
|
---|
44 | {
|
---|
45 | LUID AdapterLuid;
|
---|
46 | D3DKMT_HANDLE hAdapter;
|
---|
47 | } D3DKMT_OPENADAPTERFROMLUID;
|
---|
48 |
|
---|
49 | typedef NTSTATUS (APIENTRY *PFND3DKMT_OPENADAPTERFROMLUID)(IN OUT D3DKMT_OPENADAPTERFROMLUID*);
|
---|
50 | /* END OF win8 release preview-specific stuff */
|
---|
51 |
|
---|
52 | typedef enum
|
---|
53 | {
|
---|
54 | VBOXDISPKMT_CALLBACKS_VERSION_UNDEFINED = 0,
|
---|
55 | VBOXDISPKMT_CALLBACKS_VERSION_VISTA_WIN7,
|
---|
56 | VBOXDISPKMT_CALLBACKS_VERSION_WIN8
|
---|
57 | } VBOXDISPKMT_CALLBACKS_VERSION;
|
---|
58 |
|
---|
59 | typedef struct VBOXDISPKMT_CALLBACKS
|
---|
60 | {
|
---|
61 | HMODULE hGdi32;
|
---|
62 | VBOXDISPKMT_CALLBACKS_VERSION enmVersion;
|
---|
63 | /* open adapter */
|
---|
64 | PFND3DKMT_OPENADAPTERFROMHDC pfnD3DKMTOpenAdapterFromHdc;
|
---|
65 | PFND3DKMT_OPENADAPTERFROMGDIDISPLAYNAME pfnD3DKMTOpenAdapterFromGdiDisplayName;
|
---|
66 | /* close adapter */
|
---|
67 | PFND3DKMT_CLOSEADAPTER pfnD3DKMTCloseAdapter;
|
---|
68 | /* escape */
|
---|
69 | PFND3DKMT_ESCAPE pfnD3DKMTEscape;
|
---|
70 |
|
---|
71 | PFND3DKMT_CREATEDEVICE pfnD3DKMTCreateDevice;
|
---|
72 | PFND3DKMT_DESTROYDEVICE pfnD3DKMTDestroyDevice;
|
---|
73 | PFND3DKMT_CREATECONTEXT pfnD3DKMTCreateContext;
|
---|
74 | PFND3DKMT_DESTROYCONTEXT pfnD3DKMTDestroyContext;
|
---|
75 |
|
---|
76 | PFND3DKMT_RENDER pfnD3DKMTRender;
|
---|
77 |
|
---|
78 | PFND3DKMT_CREATEALLOCATION pfnD3DKMTCreateAllocation;
|
---|
79 | PFND3DKMT_DESTROYALLOCATION pfnD3DKMTDestroyAllocation;
|
---|
80 |
|
---|
81 | PFND3DKMT_LOCK pfnD3DKMTLock;
|
---|
82 | PFND3DKMT_UNLOCK pfnD3DKMTUnlock;
|
---|
83 |
|
---|
84 | PFND3DKMT_ENUMADAPTERS pfnD3DKMTEnumAdapters;
|
---|
85 | PFND3DKMT_OPENADAPTERFROMLUID pfnD3DKMTOpenAdapterFromLuid;
|
---|
86 | } VBOXDISPKMT_CALLBACKS, *PVBOXDISPKMT_CALLBACKS;
|
---|
87 |
|
---|
88 | typedef struct VBOXDISPKMT_ADAPTER
|
---|
89 | {
|
---|
90 | D3DKMT_HANDLE hAdapter;
|
---|
91 | HDC hDc;
|
---|
92 | LUID Luid;
|
---|
93 | PVBOXDISPKMT_CALLBACKS pCallbacks;
|
---|
94 | }VBOXDISPKMT_ADAPTER, *PVBOXDISPKMT_ADAPTER;
|
---|
95 |
|
---|
96 | typedef struct VBOXDISPKMT_DEVICE
|
---|
97 | {
|
---|
98 | struct VBOXDISPKMT_ADAPTER *pAdapter;
|
---|
99 | D3DKMT_HANDLE hDevice;
|
---|
100 | VOID *pCommandBuffer;
|
---|
101 | UINT CommandBufferSize;
|
---|
102 | D3DDDI_ALLOCATIONLIST *pAllocationList;
|
---|
103 | UINT AllocationListSize;
|
---|
104 | D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
|
---|
105 | UINT PatchLocationListSize;
|
---|
106 | }VBOXDISPKMT_DEVICE, *PVBOXDISPKMT_DEVICE;
|
---|
107 |
|
---|
108 | typedef struct VBOXDISPKMT_CONTEXT
|
---|
109 | {
|
---|
110 | struct VBOXDISPKMT_DEVICE *pDevice;
|
---|
111 | D3DKMT_HANDLE hContext;
|
---|
112 | VOID *pCommandBuffer;
|
---|
113 | UINT CommandBufferSize;
|
---|
114 | D3DDDI_ALLOCATIONLIST *pAllocationList;
|
---|
115 | UINT AllocationListSize;
|
---|
116 | D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
|
---|
117 | UINT PatchLocationListSize;
|
---|
118 | } VBOXDISPKMT_CONTEXT, *PVBOXDISPKMT_CONTEXT;
|
---|
119 |
|
---|
120 | HRESULT vboxDispKmtCallbacksInit(PVBOXDISPKMT_CALLBACKS pCallbacks);
|
---|
121 | HRESULT vboxDispKmtCallbacksTerm(PVBOXDISPKMT_CALLBACKS pCallbacks);
|
---|
122 |
|
---|
123 | HRESULT vboxDispKmtOpenAdapter(PVBOXDISPKMT_CALLBACKS pCallbacks, PVBOXDISPKMT_ADAPTER pAdapter);
|
---|
124 | HRESULT vboxDispKmtCloseAdapter(PVBOXDISPKMT_ADAPTER pAdapter);
|
---|
125 | HRESULT vboxDispKmtCreateDevice(PVBOXDISPKMT_ADAPTER pAdapter, PVBOXDISPKMT_DEVICE pDevice);
|
---|
126 | HRESULT vboxDispKmtDestroyDevice(PVBOXDISPKMT_DEVICE pDevice);
|
---|
127 | HRESULT vboxDispKmtCreateContext(PVBOXDISPKMT_DEVICE pDevice, PVBOXDISPKMT_CONTEXT pContext,
|
---|
128 | VBOXWDDM_CONTEXT_TYPE enmType,
|
---|
129 | uint32_t crVersionMajor, uint32_t crVersionMinor,
|
---|
130 | HANDLE hEvent, uint64_t u64UmInfo);
|
---|
131 | HRESULT vboxDispKmtDestroyContext(PVBOXDISPKMT_CONTEXT pContext);
|
---|
132 |
|
---|
133 |
|
---|
134 | #endif /* #ifndef ___VBoxDispKmt_h__ */
|
---|