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