1use shared::basetsd::{UINT32, UINT64};
8use shared::d3dukmdt::{
9 D3DDDICB_SIGNALFLAGS, D3DDDI_ALLOCATIONLIST, D3DDDI_CREATECONTEXTFLAGS,
10 D3DDDI_MAX_BROADCAST_CONTEXT, D3DDDI_MAX_OBJECT_SIGNALED, D3DDDI_MAX_OBJECT_WAITED_ON,
11 D3DDDI_PATCHLOCATIONLIST, D3DDDI_SYNCHRONIZATIONOBJECTINFO,
12 D3DDDI_SYNCHRONIZATIONOBJECTINFO2, D3DDDI_VIDEO_PRESENT_SOURCE_ID, D3DGPU_VIRTUAL_ADDRESS,
13 D3DKMT_HANDLE,
14};
15use shared::minwindef::{BOOL, UCHAR, UINT, ULONG};
16use shared::ntdef::{HANDLE, LUID, PCWSTR, ULONGLONG, VOID, WCHAR};
17use shared::windef::HDC;
18STRUCT!{struct D3DKMT_CREATEDEVICEFLAGS {
19 bitfield: UINT,
20}}
21BITFIELD!{D3DKMT_CREATEDEVICEFLAGS bitfield: UINT [
22 LegacyMode set_LegacyMode[0..1],
23 RequestVSync set_RequestVSync[1..2],
24 DisableGpuTimeout set_DisableGpuTimeout[2..3],
25 Reserved set_Reserved[3..32],
26]}
27UNION!{union D3DKMT_CREATEDEVICE_u {
28 [usize; 1],
29 hAdapter hAdapter_mut: D3DKMT_HANDLE,
30 pAdapter pAdapter_mut: *mut VOID,
31}}
32STRUCT!{struct D3DKMT_CREATEDEVICE {
33 u: D3DKMT_CREATEDEVICE_u,
34 Flags: D3DKMT_CREATEDEVICEFLAGS,
35 hDevice: D3DKMT_HANDLE,
36 pCommandBuffer: *mut VOID,
37 CommandBufferSize: UINT,
38 pAllocationList: *mut D3DDDI_ALLOCATIONLIST,
39 AllocationListSize: UINT,
40 pPatchLocationList: *mut D3DDDI_PATCHLOCATIONLIST,
41 PatchLocationListSize: UINT,
42}}
43STRUCT!{struct D3DKMT_DESTROYDEVICE {
44 hDevice: D3DKMT_HANDLE,
45}}
46ENUM!{enum D3DKMT_CLIENTHINT {
47 D3DKMT_CLIENTHINT_UNKNOWN = 0,
48 D3DKMT_CLIENTHINT_OPENGL = 1,
49 D3DKMT_CLIENTHINT_CDD = 2,
50 D3DKMT_CLIENTHINT_DX7 = 7,
51 D3DKMT_CLIENTHINT_DX8 = 8,
52 D3DKMT_CLIENTHINT_DX9 = 9,
53 D3DKMT_CLIENTHINT_DX10 = 10,
54}}
55STRUCT!{struct D3DKMT_CREATECONTEXT {
56 hDevice: D3DKMT_HANDLE,
57 NodeOrdinal: UINT,
58 EngineAffinity: UINT,
59 Flags: D3DDDI_CREATECONTEXTFLAGS,
60 pPrivateDriverData: *mut VOID,
61 PrivateDriverDataSize: UINT,
62 ClientHint: D3DKMT_CLIENTHINT,
63 hContext: D3DKMT_HANDLE,
64 pCommandBuffer: *mut VOID,
65 CommandBufferSize: UINT,
66 pAllocationList: *mut D3DDDI_ALLOCATIONLIST,
67 AllocationListSize: UINT,
68 pPatchLocationList: *mut D3DDDI_PATCHLOCATIONLIST,
69 PatchLocationListSize: UINT,
70 CommandBuffer: D3DGPU_VIRTUAL_ADDRESS,
71}}
72STRUCT!{struct D3DKMT_DESTROYCONTEXT {
73 hContext: D3DKMT_HANDLE,
74}}
75STRUCT!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT {
76 hDevice: D3DKMT_HANDLE,
77 Info: D3DDDI_SYNCHRONIZATIONOBJECTINFO,
78 hSyncObject: D3DKMT_HANDLE,
79}}
80STRUCT!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT2 {
81 hDevice: D3DKMT_HANDLE,
82 Info: D3DDDI_SYNCHRONIZATIONOBJECTINFO2,
83 hSyncObject: D3DKMT_HANDLE,
84}}
85STRUCT!{struct D3DKMT_DESTROYSYNCHRONIZATIONOBJECT {
86 hSyncObject: D3DKMT_HANDLE,
87}}
88STRUCT!{struct D3DKMT_OPENSYNCHRONIZATIONOBJECT {
89 hSharedHandle: D3DKMT_HANDLE,
90 hSyncObject: D3DKMT_HANDLE,
91 Reserved: [UINT64; 8],
92}}
93STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT {
94 hContext: D3DKMT_HANDLE,
95 ObjectCount: UINT,
96 ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_WAITED_ON],
97}}
98STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence {
99 FenceValue: UINT64,
100}}
101UNION!{union D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u {
102 [u64; 8],
103 Fence Fence_mut: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence,
104 Reserved Reserved_mut: [UINT64; 8],
105}}
106STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2 {
107 hContext: D3DKMT_HANDLE,
108 ObjectCount: UINT,
109 ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_WAITED_ON],
110 u: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u,
111}}
112STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT {
113 hContext: D3DKMT_HANDLE,
114 ObjectCount: UINT,
115 ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_SIGNALED],
116 Flags: D3DDDICB_SIGNALFLAGS,
117}}
118STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence {
119 FenceValue: UINT64,
120}}
121UNION!{union D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_u {
122 [u64; 8],
123 Fence Fence_mut: D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence,
124 CpuEventHandle CpuEventHandle_mut: HANDLE,
125 Reserved Reserved_mut: [UINT64; 8],
126}}
127STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2 {
128 hContext: D3DKMT_HANDLE,
129 ObjectCount: UINT,
130 ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_SIGNALED],
131 Flags: D3DDDICB_SIGNALFLAGS,
132 BroadcastContextCount: ULONG,
133 BroadcastContext: [D3DKMT_HANDLE; D3DDDI_MAX_BROADCAST_CONTEXT],
134 u: D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_u,
135}}
136STRUCT!{struct D3DKMT_SEGMENTSIZEINFO {
138 DedicatedVideoMemorySize: ULONGLONG,
139 DedicatedSystemMemorySize: ULONGLONG,
140 SharedSystemMemorySize: ULONGLONG,
141}}
142STRUCT!{struct D3DKMT_ADAPTERTYPE {
144 Value: UINT,
145}}
146BITFIELD!{D3DKMT_ADAPTERTYPE Value: UINT [
147 RenderSupported set_RenderSupported[0..1],
148 DisplaySupported set_DisplaySupported[1..2],
149 SoftwareDevice set_SoftwareDevice[2..3],
150 PostDevice set_PostDevice[3..4],
151 HybridDiscrete set_HybridDiscrete[4..5],
152 HybridIntegrated set_HybridIntegrated[5..6],
153 IndirectDisplayDevice set_IndirectDisplayDevice[6..7],
154 Paravirtualized set_Paravirtualized[7..8],
155 ACGSupported set_ACGSupported[8..9],
156 SupportSetTimingsFromVidPn set_SupportSetTimingsFromVidPn[9..10],
157 Detachable set_Detachable[10..11],
158 Reserved set_Reserved[11..32],
159]}
160STRUCT!{struct D3DKMT_NODE_PERFDATA {
162 NodeOrdinal: UINT32,
163 PhysicalAdapterIndex: UINT32,
164 Frequency: ULONGLONG,
165 MaxFrequency: ULONGLONG,
166 MaxFrequencyOC: ULONGLONG,
167 Voltage: ULONG,
168 VoltageMax: ULONG,
169 VoltageMaxOC: ULONG,
170 MaxTransitionLatency: ULONGLONG,
171}}
172STRUCT!{struct D3DKMT_ADAPTER_PERFDATA {
173 PhysicalAdapterIndex: UINT32,
174 MemoryFrequency: ULONGLONG,
175 MaxMemoryFrequency: ULONGLONG,
176 MaxMemoryFrequencyOC: ULONGLONG,
177 MemoryBandwidth: ULONGLONG,
178 PCIEBandwidth: ULONGLONG,
179 FanRPM: ULONG,
180 Power: ULONG,
181 Temperature: ULONG,
182 PowerStateOverride: UCHAR,
183}}
184STRUCT!{struct D3DKMT_ADAPTER_PERFDATACAPS {
185 PhysicalAdapterIndex: UINT32,
186 MaxMemoryBandwidth: ULONGLONG,
187 MaxPCIEBandwidth: ULONGLONG,
188 MaxFanRPM: ULONG,
189 TemperatureMax: ULONG,
190 TemperatureWarning: ULONG,
191}}
192pub const DXGK_MAX_GPUVERSION_NAME_LENGTH: usize = 32;
193STRUCT!{struct D3DKMT_GPUVERSION {
194 PhysicalAdapterIndex: UINT32,
195 BiosVersion: [WCHAR; DXGK_MAX_GPUVERSION_NAME_LENGTH],
196 GpuArchitecture: [WCHAR; DXGK_MAX_GPUVERSION_NAME_LENGTH],
197}}
198ENUM!{enum KMTQUERYADAPTERINFOTYPE {
199 KMTQAITYPE_UMDRIVERPRIVATE = 0,
200 KMTQAITYPE_UMDRIVERNAME = 1,
201 KMTQAITYPE_UMOPENGLINFO = 2,
202 KMTQAITYPE_GETSEGMENTSIZE = 3,
203 KMTQAITYPE_ADAPTERGUID = 4,
204 KMTQAITYPE_FLIPQUEUEINFO = 5,
205 KMTQAITYPE_ADAPTERADDRESS = 6,
206 KMTQAITYPE_SETWORKINGSETINFO = 7,
207 KMTQAITYPE_ADAPTERREGISTRYINFO = 8,
208 KMTQAITYPE_CURRENTDISPLAYMODE = 9,
209 KMTQAITYPE_MODELIST = 10,
210 KMTQAITYPE_CHECKDRIVERUPDATESTATUS = 11,
211 KMTQAITYPE_VIRTUALADDRESSINFO = 12,
212 KMTQAITYPE_DRIVERVERSION = 13,
213 KMTQAITYPE_ADAPTERTYPE = 15,
214 KMTQAITYPE_OUTPUTDUPLCONTEXTSCOUNT = 16,
215 KMTQAITYPE_WDDM_1_2_CAPS = 17,
216 KMTQAITYPE_UMD_DRIVER_VERSION = 18,
217 KMTQAITYPE_DIRECTFLIP_SUPPORT = 19,
218 KMTQAITYPE_MULTIPLANEOVERLAY_SUPPORT = 20,
219 KMTQAITYPE_DLIST_DRIVER_NAME = 21,
220 KMTQAITYPE_WDDM_1_3_CAPS = 22,
221 KMTQAITYPE_MULTIPLANEOVERLAY_HUD_SUPPORT = 23,
222 KMTQAITYPE_WDDM_2_0_CAPS = 24,
223 KMTQAITYPE_NODEMETADATA = 25,
224 KMTQAITYPE_CPDRIVERNAME = 26,
225 KMTQAITYPE_XBOX = 27,
226 KMTQAITYPE_INDEPENDENTFLIP_SUPPORT = 28,
227 KMTQAITYPE_MIRACASTCOMPANIONDRIVERNAME = 29,
228 KMTQAITYPE_PHYSICALADAPTERCOUNT = 30,
229 KMTQAITYPE_PHYSICALADAPTERDEVICEIDS = 31,
230 KMTQAITYPE_DRIVERCAPS_EXT = 32,
231 KMTQAITYPE_QUERY_MIRACAST_DRIVER_TYPE = 33,
232 KMTQAITYPE_QUERY_GPUMMU_CAPS = 34,
233 KMTQAITYPE_QUERY_MULTIPLANEOVERLAY_DECODE_SUPPORT = 35,
234 KMTQAITYPE_QUERY_HW_PROTECTION_TEARDOWN_COUNT = 36,
235 KMTQAITYPE_QUERY_ISBADDRIVERFORHWPROTECTIONDISABLED = 37,
236 KMTQAITYPE_MULTIPLANEOVERLAY_SECONDARY_SUPPORT = 38,
237 KMTQAITYPE_INDEPENDENTFLIP_SECONDARY_SUPPORT = 39,
238 KMTQAITYPE_PANELFITTER_SUPPORT = 40,
239 KMTQAITYPE_PHYSICALADAPTERPNPKEY = 41,
240 KMTQAITYPE_GETSEGMENTGROUPSIZE = 42,
241 KMTQAITYPE_MPO3DDI_SUPPORT = 43,
242 KMTQAITYPE_HWDRM_SUPPORT = 44,
243 KMTQAITYPE_MPOKERNELCAPS_SUPPORT = 45,
244 KMTQAITYPE_MULTIPLANEOVERLAY_STRETCH_SUPPORT = 46,
245 KMTQAITYPE_GET_DEVICE_VIDPN_OWNERSHIP_INFO = 47,
246 KMTQAITYPE_QUERYREGISTRY = 48,
247 KMTQAITYPE_KMD_DRIVER_VERSION = 49,
248 KMTQAITYPE_BLOCKLIST_KERNEL = 50,
249 KMTQAITYPE_BLOCKLIST_RUNTIME = 51,
250 KMTQAITYPE_ADAPTERGUID_RENDER = 52,
251 KMTQAITYPE_ADAPTERADDRESS_RENDER = 53,
252 KMTQAITYPE_ADAPTERREGISTRYINFO_RENDER = 54,
253 KMTQAITYPE_CHECKDRIVERUPDATESTATUS_RENDER = 55,
254 KMTQAITYPE_DRIVERVERSION_RENDER = 56,
255 KMTQAITYPE_ADAPTERTYPE_RENDER = 57,
256 KMTQAITYPE_WDDM_1_2_CAPS_RENDER = 58,
257 KMTQAITYPE_WDDM_1_3_CAPS_RENDER = 59,
258 KMTQAITYPE_QUERY_ADAPTER_UNIQUE_GUID = 60,
259 KMTQAITYPE_NODEPERFDATA = 61,
260 KMTQAITYPE_ADAPTERPERFDATA = 62,
261 KMTQAITYPE_ADAPTERPERFDATA_CAPS = 63,
262 KMTQUITYPE_GPUVERSION = 64,
263}}
264STRUCT!{struct D3DKMT_QUERYADAPTERINFO {
265 hAdapter: D3DKMT_HANDLE,
266 Type: KMTQUERYADAPTERINFOTYPE,
267 pPrivateDriverData: *mut VOID,
268 PrivateDriverDataSize: UINT,
269}}
270STRUCT!{struct D3DKMT_OPENADAPTERFROMHDC {
271 hDc: HDC,
272 hAdapter: D3DKMT_HANDLE,
273 AdapterLuid: LUID,
274 VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID,
275}}
276STRUCT!{struct D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME {
277 DeviceName: [WCHAR; 32],
278 hAdapter: D3DKMT_HANDLE,
279 AdapterLuid: LUID,
280 VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID,
281}}
282STRUCT!{struct D3DKMT_OPENADAPTERFROMDEVICENAME {
283 pDeviceName: PCWSTR,
284 hAdapter: D3DKMT_HANDLE,
285 AdapterLuid: LUID,
286}}
287pub const MAX_ENUM_ADAPTERS: usize = 16;
288STRUCT!{struct D3DKMT_ADAPTERINFO {
289 hAdapter: D3DKMT_HANDLE,
290 AdapterLuid: LUID,
291 NumOfSources: ULONG,
292 bPresentMoveRegionsPreferred: BOOL,
293}}
294STRUCT!{struct D3DKMT_ENUMADAPTERS {
295 NumAdapters: ULONG,
296 Adapters: [D3DKMT_ADAPTERINFO; MAX_ENUM_ADAPTERS],
297}}
298STRUCT!{struct D3DKMT_ENUMADAPTERS2 {
299 NumAdapters: ULONG,
300 pAdapters: *mut D3DKMT_ADAPTERINFO,
301}}
302STRUCT!{struct D3DKMT_OPENADAPTERFROMLUID {
303 AdapterLuid: LUID,
304 hAdapter: D3DKMT_HANDLE,
305}}
306STRUCT!{struct D3DKMT_QUERYREMOTEVIDPNSOURCEFROMGDIDISPLAYNAME {
307 DeviceName: [WCHAR; 32],
308 VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID,
309}}
310STRUCT!{struct D3DKMT_CLOSEADAPTER {
311 hAdapter: D3DKMT_HANDLE,
312}}