1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Longhorn Display Driver Model (LDDM) user/kernel mode shared data type definitions.
7 use shared::basetsd::{UINT64, ULONG_PTR};
8 use shared::guiddef::GUID;
9 use shared::minwindef::{BOOL, UINT, ULONG};
10 use shared::ntdef::{HANDLE, LUID, ULONGLONG, VOID};
11 pub const DXGKDDI_INTERFACE_VERSION_VISTA: ULONG = 0x1052;
12 pub const DXGKDDI_INTERFACE_VERSION_VISTA_SP1: ULONG = 0x1053;
13 pub const DXGKDDI_INTERFACE_VERSION_WIN7: ULONG = 0x2005;
14 pub const DXGKDDI_INTERFACE_VERSION_WIN8: ULONG = 0x300E;
15 pub const DXGKDDI_INTERFACE_VERSION_WDDM1_3: ULONG = 0x4002;
16 pub const DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION: ULONG = 0x4003;
17 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_0: ULONG = 0x5023;
18 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_1: ULONG = 0x6003;
19 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_1_5: ULONG = 0x6010;
20 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_2: ULONG = 0x700A;
21 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_3: ULONG = 0x8001;
22 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_4: ULONG = 0x9006;
23 pub const DXGKDDI_INTERFACE_VERSION_WDDM2_5: ULONG = 0xA00B;
24 #[inline]
IS_OFFICIAL_DDI_INTERFACE_VERSION(version: ULONG) -> bool25 pub fn IS_OFFICIAL_DDI_INTERFACE_VERSION(version: ULONG) -> bool {
26     (version == DXGKDDI_INTERFACE_VERSION_VISTA) ||
27     (version == DXGKDDI_INTERFACE_VERSION_VISTA_SP1) ||
28     (version == DXGKDDI_INTERFACE_VERSION_WIN7) ||
29     (version == DXGKDDI_INTERFACE_VERSION_WIN8) ||
30     (version == DXGKDDI_INTERFACE_VERSION_WDDM1_3) ||
31     (version == DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION) ||
32     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_0) ||
33     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_1) ||
34     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_1_5) ||
35     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_2) ||
36     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_3) ||
37     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_4) ||
38     (version == DXGKDDI_INTERFACE_VERSION_WDDM2_5)
39 }
40 pub const DXGKDDI_INTERFACE_VERSION: ULONG = DXGKDDI_INTERFACE_VERSION_WDDM2_5;
41 pub const D3D_UMD_INTERFACE_VERSION_VISTA: ULONG = 0x000C;
42 pub const D3D_UMD_INTERFACE_VERSION_WIN7: ULONG = 0x2003;
43 pub const D3D_UMD_INTERFACE_VERSION_WIN8_M3: ULONG = 0x3001;
44 pub const D3D_UMD_INTERFACE_VERSION_WIN8_CP: ULONG = 0x3002;
45 pub const D3D_UMD_INTERFACE_VERSION_WIN8_RC: ULONG = 0x3003;
46 pub const D3D_UMD_INTERFACE_VERSION_WIN8: ULONG = 0x3004;
47 pub const D3D_UMD_INTERFACE_VERSION_WDDM1_3: ULONG = 0x4002;
48 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1: ULONG = 0x5000;
49 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1_3: ULONG = 0x5001;
50 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M2_2: ULONG = 0x5002;
51 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0: ULONG = 0x5002;
52 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_1: ULONG = 0x6000;
53 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_2: ULONG = 0x6001;
54 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_3: ULONG = 0x6002;
55 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_4: ULONG = 0x6003;
56 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_1_4;
57 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2_1: ULONG = 0x7000;
58 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2_2: ULONG = 0x7001;
59 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_2_2;
60 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3_1: ULONG = 0x8000;
61 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3_2: ULONG = 0x8001;
62 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_3_2;
63 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4_1: ULONG = 0x9000;
64 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4_2: ULONG = 0x9001;
65 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_4_2;
66 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_1: ULONG = 0xA000;
67 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_2: ULONG = 0xA001;
68 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_3: ULONG = 0xA002;
69 pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_5_3;
70 pub const D3D_UMD_INTERFACE_VERSION: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_5;
71 pub type D3DGPU_VIRTUAL_ADDRESS = ULONGLONG;
72 pub type D3DGPU_SIZE_T = ULONGLONG;
73 pub const D3DGPU_UNIQUE_DRIVER_PROTECTION: ULONGLONG = 0x8000000000000000;
74 pub const DXGK_MAX_PAGE_TABLE_LEVEL_COUNT: UINT = 6;
75 pub const DXGK_MIN_PAGE_TABLE_LEVEL_COUNT: UINT = 2;
76 STRUCT!{struct GPUP_DRIVER_ESCAPE_INPUT {
77     vfLUID: LUID,
78 }}
79 pub type PGPUP_DRIVER_ESCAPE_INPUT = *mut GPUP_DRIVER_ESCAPE_INPUT;
80 ENUM!{enum DXGKVGPU_ESCAPE_TYPE {
81     DXGKVGPU_ESCAPE_TYPE_READ_PCI_CONFIG = 0,
82     DXGKVGPU_ESCAPE_TYPE_WRITE_PCI_CONFIG = 1,
83     DXGKVGPU_ESCAPE_TYPE_INITIALIZE = 2,
84     DXGKVGPU_ESCAPE_TYPE_RELEASE = 3,
85     DXGKVGPU_ESCAPE_TYPE_GET_VGPU_TYPE = 4,
86     DXGKVGPU_ESCAPE_TYPE_POWERTRANSITIONCOMPLETE = 5,
87 }}
88 STRUCT!{struct DXGKVGPU_ESCAPE_HEAD {
89     Luid: GPUP_DRIVER_ESCAPE_INPUT,
90     Type: DXGKVGPU_ESCAPE_TYPE,
91 }}
92 STRUCT!{struct DXGKVGPU_ESCAPE_READ_PCI_CONFIG {
93     Header: DXGKVGPU_ESCAPE_HEAD,
94     Offset: UINT,
95     Size: UINT,
96 }}
97 STRUCT!{struct DXGKVGPU_ESCAPE_WRITE_PCI_CONFIG {
98     Header: DXGKVGPU_ESCAPE_HEAD,
99     Offset: UINT,
100     Size: UINT,
101 }}
102 STRUCT!{struct DXGKVGPU_ESCAPE_READ_VGPU_TYPE {
103     Header: DXGKVGPU_ESCAPE_HEAD,
104 }}
105 STRUCT!{struct DXGKVGPU_ESCAPE_POWERTRANSITIONCOMPLETE {
106     Header: DXGKVGPU_ESCAPE_HEAD,
107     PowerState: UINT,
108 }}
109 STRUCT!{struct DXGKVGPU_ESCAPE_INITIALIZE {
110     Header: DXGKVGPU_ESCAPE_HEAD,
111     VmGuid: GUID,
112 }}
113 STRUCT!{struct DXGKVGPU_ESCAPE_RELEASE {
114     Header: DXGKVGPU_ESCAPE_HEAD,
115 }}
116 ENUM!{enum DXGK_PTE_PAGE_SIZE {
117     DXGK_PTE_PAGE_TABLE_PAGE_4KB = 0,
118     DXGK_PTE_PAGE_TABLE_PAGE_64KB = 1,
119 }}
120 UNION!{union DXGK_PTE_u {
121     [u64; 1],
122     PageAddress PageAddress_mut: ULONGLONG,
123     PageTableAddress PageTableAddress_mut: ULONGLONG,
124 }}
125 STRUCT!{struct DXGK_PTE {
126     Flags: ULONGLONG,
127     u: DXGK_PTE_u,
128 }}
129 BITFIELD!{DXGK_PTE Flags: ULONGLONG [
130     Valid set_Valid[0..1],
131     Zero set_Zero[1..2],
132     CacheCoherent set_CacheCoherent[2..3],
133     ReadOnly set_ReadOnly[3..4],
134     NoExecute set_NoExecute[4..5],
135     Segment set_Segment[5..10],
136     LargePage set_LargePage[10..11],
137     PhysicalAdapterIndex set_PhysicalAdapterIndex[11..17],
138     PageTablePageSize set_PageTablePageSize[17..19],
139     SystemReserved0 set_SystemReserved0[19..20],
140     Reserved set_Reserved[20..64],
141 ]}
142 pub const D3DGPU_NULL: D3DGPU_VIRTUAL_ADDRESS = 0;
143 pub const D3DDDI_MAX_WRITTEN_PRIMARIES: usize = 16;
144 pub const D3DDDI_MAX_MPO_PRESENT_DIRTY_RECTS: usize = 0xFFF;
145 STRUCT!{struct D3DGPU_PHYSICAL_ADDRESS {
146     SegmentId: UINT,
147     SegmentOffset: UINT64,
148 }}
149 pub type D3DDDI_VIDEO_PRESENT_SOURCE_ID = UINT;
150 pub type D3DDDI_VIDEO_PRESENT_TARGET_ID = UINT;
151 pub type D3DKMT_HANDLE = UINT;
152 STRUCT!{struct D3DDDI_RATIONAL {
153     Numerator: UINT,
154     Denominator: UINT,
155 }}
156 STRUCT!{struct D3DDDI_ALLOCATIONINFO {
157     hAllocation: D3DKMT_HANDLE,
158     pSystemMem: *const VOID,
159     pPrivateDriverData: *mut VOID,
160     PrivateDriverDataSize: UINT,
161     VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID,
162     Flags: UINT,
163 }}
164 BITFIELD!{D3DDDI_ALLOCATIONINFO Flags: UINT [
165     Primary set_Primary[0..1],
166     Stereo set_Stereo[1..2],
167     Reserved set_Reserved[2..32],
168 ]}
169 UNION!{union D3DDDI_ALLOCATIONINFO2_u1 {
170     [usize; 1],
171     hSection hSection_mut: HANDLE,
172     pSystemMem pSystemMem_mut: *const VOID,
173 }}
174 UNION!{union D3DDDI_ALLOCATIONINFO2_u2 {
175     [usize; 1],
176     Priority Priority_mut: UINT,
177     Unused Unused_mut: ULONG_PTR,
178 }}
179 STRUCT!{struct D3DDDI_ALLOCATIONINFO2 {
180     hAllocation: D3DKMT_HANDLE,
181     u1: D3DDDI_ALLOCATIONINFO2_u1,
182     pPrivateDriverData: *mut VOID,
183     PrivateDriverDataSize: UINT,
184     VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID,
185     Flags: UINT,
186     GpuVirtualAddress: D3DGPU_VIRTUAL_ADDRESS,
187     u2: D3DDDI_ALLOCATIONINFO2_u2,
188     Reserved: [ULONG_PTR; 5],
189 }}
190 BITFIELD!{D3DDDI_ALLOCATIONINFO2 Flags: UINT [
191     Primary set_Primary[0..1],
192     Stereo set_Stereo[1..2],
193     OverridePriority set_OverridePriority[2..3],
194     Reserved set_Reserved[3..32],
195 ]}
196 STRUCT!{struct D3DDDI_OPENALLOCATIONINFO {
197     hAllocation: D3DKMT_HANDLE,
198     pPrivateDriverData: *const VOID,
199     PrivateDriverDataSize: UINT,
200 }}
201 STRUCT!{struct D3DDDI_OPENALLOCATIONINFO2 {
202     hAllocation: D3DKMT_HANDLE,
203     pPrivateDriverData: *const VOID,
204     PrivateDriverDataSize: UINT,
205     GpuVirtualAddress: D3DGPU_VIRTUAL_ADDRESS,
206     Reserved: [ULONG_PTR; 6],
207 }}
208 ENUM!{enum D3DDDI_OFFER_PRIORITY {
209     D3DDDI_OFFER_PRIORITY_NONE = 0,
210     D3DDDI_OFFER_PRIORITY_LOW = 1,
211     D3DDDI_OFFER_PRIORITY_NORMAL,
212     D3DDDI_OFFER_PRIORITY_HIGH,
213     D3DDDI_OFFER_PRIORITY_AUTO,
214 }}
215 STRUCT!{struct D3DDDI_ALLOCATIONLIST {
216     hAllocation: D3DKMT_HANDLE,
217     Value: UINT,
218 }}
219 BITFIELD!{D3DDDI_ALLOCATIONLIST Value: UINT [
220     WriteOperation set_WriteOperation[0..1],
221     DoNotRetireInstance set_DoNotRetireInstance[1..2],
222     OfferPriority set_OfferPriority[2..5],
223     Reserved set_Reserved[5..32],
224 ]}
225 STRUCT!{struct D3DDDI_PATCHLOCATIONLIST {
226     AllocationIndex: UINT,
227     Value: UINT,
228     DriverId: UINT,
229     AllocationOffset: UINT,
230     PatchOffset: UINT,
231     SplitOffset: UINT,
232 }}
233 BITFIELD!{D3DDDI_PATCHLOCATIONLIST Value: UINT [
234     SlotId set_SlotId[0..24],
235     Reserved set_Reserved[24..32],
236 ]}
237 STRUCT!{struct D3DDDICB_LOCKFLAGS {
238     Value: UINT,
239 }}
240 BITFIELD!{D3DDDICB_LOCKFLAGS Value: UINT [
241     ReadOnly set_ReadOnly[0..1],
242     WriteOnly set_WriteOnly[1..2],
243     DonotWait set_DonotWait[2..3],
244     IgnoreSync set_IgnoreSync[3..4],
245     LockEntire set_LockEntire[4..5],
246     DonotEvict set_DonotEvict[5..6],
247     AcquireAperture set_AcquireAperture[6..7],
248     Discard set_Discard[7..8],
249     NoExistingReference set_NoExistingReference[8..9],
250     UseAlternateVA set_UseAlternateVA[9..10],
251     IgnoreReadSync set_IgnoreReadSync[10..11],
252     Reserved set_Reserved[11..32],
253 ]}
254 STRUCT!{struct D3DDDICB_LOCK2FLAGS {
255     Value: UINT,
256 }}
257 BITFIELD!{D3DDDICB_LOCK2FLAGS Value: UINT [
258     Reserved set_Reserved[0..32],
259 ]}
260 STRUCT!{struct D3DDDICB_DESTROYALLOCATION2FLAGS {
261     Value: UINT,
262 }}
263 BITFIELD!{D3DDDICB_DESTROYALLOCATION2FLAGS Value: UINT [
264     AssumeNotInUse set_AssumeNotInUse[0..1],
265     SynchronousDestroy set_SynchronousDestroy[1..2],
266     Reserved set_Reserved[2..31],
267     SystemUseOnly set_SystemUseOnly[31..32],
268 ]}
269 STRUCT!{struct D3DDDI_ESCAPEFLAGS {
270     Value: UINT,
271 }}
272 BITFIELD!{D3DDDI_ESCAPEFLAGS Value: UINT [
273     HardwareAccess set_HardwareAccess[0..1],
274     DeviceStatusQuery set_DeviceStatusQuery[1..2],
275     ChangeFrameLatency set_ChangeFrameLatency[2..3],
276     NoAdapterSynchronization set_NoAdapterSynchronization[3..4],
277     Reserved set_Reserved[4..5],
278     VirtualMachineData set_VirtualMachineData[5..6],
279     DriverKnownEscape set_DriverKnownEscape[6..7],
280     DriverCommonEscape set_DriverCommonEscape[7..8],
281     Reserved2 set_Reserved2[8..24],
282 ]}
283 ENUM!{enum D3DDDI_DRIVERESCAPETYPE {
284     D3DDDI_DRIVERESCAPETYPE_TRANSLATEALLOCATIONHANDLE = 0,
285     D3DDDI_DRIVERESCAPETYPE_TRANSLATERESOURCEHANDLE = 1,
286     D3DDDI_DRIVERESCAPETYPE_MAX,
287 }}
288 STRUCT!{struct D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE {
289     EscapeType: D3DDDI_DRIVERESCAPETYPE,
290     hAllocation: D3DKMT_HANDLE,
291 }}
292 STRUCT!{struct D3DDDI_DRIVERESCAPE_TRANSLATERESOURCEHANDLE {
293     EscapeType: D3DDDI_DRIVERESCAPETYPE,
294     hResource: D3DKMT_HANDLE,
295 }}
296 STRUCT!{struct D3DDDI_CREATECONTEXTFLAGS {
297     Value: UINT,
298 }}
299 BITFIELD!{D3DDDI_CREATECONTEXTFLAGS Value: UINT [
300     NullRendering set_NullRendering[0..1],
301     InitialData set_InitialData[1..2],
302     DisableGpuTimeout set_DisableGpuTimeout[2..3],
303     SynchronizationOnly set_SynchronizationOnly[3..4],
304     HwQueueSupported set_HwQueueSupported[4..5],
305     Reserved set_Reserved[5..32],
306 ]}
307 //1188
308 STRUCT!{struct D3DDDICB_SIGNALFLAGS {
309     Value: UINT,
310 }}
311 BITFIELD!{D3DDDICB_SIGNALFLAGS Value: UINT [
312     SignalAtSubmission set_SignalAtSubmission[0..1],
313     EnqueueCpuEvent set_EnqueueCpuEvent[1..2],
314     AllowFenceRewind set_AllowFenceRewind[2..3],
315     Reserved set_Reserved[3..31],
316     DXGK_SIGNAL_FLAG_INTERNAL0 set_DXGK_SIGNAL_FLAG_INTERNAL0[31..32],
317 ]}
318 pub const D3DDDI_MAX_OBJECT_WAITED_ON: usize = 32;
319 pub const D3DDDI_MAX_OBJECT_SIGNALED: usize = 32;
320 ENUM!{enum D3DDDI_SYNCHRONIZATIONOBJECT_TYPE {
321     D3DDDI_SYNCHRONIZATION_MUTEX = 1,
322     D3DDDI_SEMAPHORE = 2,
323     D3DDDI_FENCE = 3,
324     D3DDDI_CPU_NOTIFICATION = 4,
325     D3DDDI_MONITORED_FENCE = 5,
326     D3DDDI_PERIODIC_MONITORED_FENCE = 6,
327     D3DDDI_SYNCHRONIZATION_TYPE_LIMIT,
328 }}
329 //1553
330 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_SynchronizationMutex {
331     InitialState: BOOL,
332 }}
333 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Semaphore {
334     MaxCount: UINT,
335     InitialCount: UINT,
336 }}
337 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Reserved {
338     Reserved: [UINT; 16],
339 }}
340 UNION!{union D3DDDI_SYNCHRONIZATIONOBJECTINFO_u {
341     [u32; 16],
342     SynchronizationMutex SynchronizationMutex_mut:
343         D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_SynchronizationMutex,
344     Semaphore Semaphore_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Semaphore,
345     Reserved Reserved_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Reserved,
346 }}
347 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO {
348     Type: D3DDDI_SYNCHRONIZATIONOBJECT_TYPE,
349     u: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u,
350 }}
351 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS {
352     Value: UINT,
353 }}
354 BITFIELD!{D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Value: UINT [
355     Shared set_Shared[0..1],
356     NtSecuritySharing set_NtSecuritySharing[1..2],
357     CrossAdapter set_CrossAdapter[2..3],
358     TopOfPipeline set_TopOfPipeline[3..4],
359     NoSignal set_NoSignal[4..5],
360     NoWait set_NoWait[5..6],
361     NoSignalMaxValueOnTdr set_NoSignalMaxValueOnTdr[6..7],
362     NoGPUAccess set_NoGPUAccess[7..8],
363     Reserved set_Reserved[8..31],
364     D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0
365         set_D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0[31..32],
366 ]}
367 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_SynchronizationMutex {
368     InitialState: BOOL,
369 }}
370 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Semaphore {
371     MaxCount: UINT,
372     InitialCount: UINT,
373 }}
374 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Fence {
375     FenceValue: UINT64,
376 }}
377 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_CPUNotification {
378     Event: HANDLE,
379 }}
380 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_MonitoredFence {
381     InitialFenceValue: UINT64,
382     FenceValueCPUVirtualAddress: *mut VOID,
383     FenceValueGPUVirtualAddress: D3DGPU_VIRTUAL_ADDRESS,
384     EngineAffinity: UINT,
385 }}
386 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_PeriodicMonitoredFence {
387     hAdapter: D3DKMT_HANDLE,
388     VidPnTargetId: D3DDDI_VIDEO_PRESENT_TARGET_ID,
389     Time: UINT64,
390     FenceValueCPUVirtualAddress: *mut VOID,
391     FenceValueGPUVirtualAddress: D3DGPU_VIRTUAL_ADDRESS,
392     EngineAffinity: UINT,
393 }}
394 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Reserved {
395     Reserved: [UINT64; 8],
396 }}
397 UNION!{union D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u {
398     [u64; 8],
399     SynchronizationMutex SynchronizationMutex_mut:
400         D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_SynchronizationMutex,
401     Semaphore Semaphore_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Semaphore,
402     Fence Fence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Fence,
403     CPUNotification CPUNotification_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_CPUNotification,
404     MonitoredFence MonitoredFence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_MonitoredFence,
405     PeriodicMonitoredFence PeriodicMonitoredFence_mut:
406         D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_PeriodicMonitoredFence,
407     Reserved Reserved_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Reserved,
408 }}
409 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2 {
410     Type: D3DDDI_SYNCHRONIZATIONOBJECT_TYPE,
411     Flags: D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS,
412     u: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u,
413     SharedHandle: D3DKMT_HANDLE,
414 }}
415 //1778
416 pub const D3DDDI_MAX_BROADCAST_CONTEXT: usize = 64;
417