winapi_ui_automation/shared/
d3dukmdt.rs

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.
7use shared::basetsd::{UINT64, ULONG_PTR};
8use shared::guiddef::GUID;
9use shared::minwindef::{BOOL, UINT, ULONG};
10use shared::ntdef::{HANDLE, LUID, ULONGLONG, VOID};
11pub const DXGKDDI_INTERFACE_VERSION_VISTA: ULONG = 0x1052;
12pub const DXGKDDI_INTERFACE_VERSION_VISTA_SP1: ULONG = 0x1053;
13pub const DXGKDDI_INTERFACE_VERSION_WIN7: ULONG = 0x2005;
14pub const DXGKDDI_INTERFACE_VERSION_WIN8: ULONG = 0x300E;
15pub const DXGKDDI_INTERFACE_VERSION_WDDM1_3: ULONG = 0x4002;
16pub const DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION: ULONG = 0x4003;
17pub const DXGKDDI_INTERFACE_VERSION_WDDM2_0: ULONG = 0x5023;
18pub const DXGKDDI_INTERFACE_VERSION_WDDM2_1: ULONG = 0x6003;
19pub const DXGKDDI_INTERFACE_VERSION_WDDM2_1_5: ULONG = 0x6010;
20pub const DXGKDDI_INTERFACE_VERSION_WDDM2_2: ULONG = 0x700A;
21pub const DXGKDDI_INTERFACE_VERSION_WDDM2_3: ULONG = 0x8001;
22pub const DXGKDDI_INTERFACE_VERSION_WDDM2_4: ULONG = 0x9006;
23pub const DXGKDDI_INTERFACE_VERSION_WDDM2_5: ULONG = 0xA00B;
24#[inline]
25pub 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}
40pub const DXGKDDI_INTERFACE_VERSION: ULONG = DXGKDDI_INTERFACE_VERSION_WDDM2_5;
41pub const D3D_UMD_INTERFACE_VERSION_VISTA: ULONG = 0x000C;
42pub const D3D_UMD_INTERFACE_VERSION_WIN7: ULONG = 0x2003;
43pub const D3D_UMD_INTERFACE_VERSION_WIN8_M3: ULONG = 0x3001;
44pub const D3D_UMD_INTERFACE_VERSION_WIN8_CP: ULONG = 0x3002;
45pub const D3D_UMD_INTERFACE_VERSION_WIN8_RC: ULONG = 0x3003;
46pub const D3D_UMD_INTERFACE_VERSION_WIN8: ULONG = 0x3004;
47pub const D3D_UMD_INTERFACE_VERSION_WDDM1_3: ULONG = 0x4002;
48pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1: ULONG = 0x5000;
49pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1_3: ULONG = 0x5001;
50pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M2_2: ULONG = 0x5002;
51pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0: ULONG = 0x5002;
52pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_1: ULONG = 0x6000;
53pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_2: ULONG = 0x6001;
54pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_3: ULONG = 0x6002;
55pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_4: ULONG = 0x6003;
56pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_1_4;
57pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2_1: ULONG = 0x7000;
58pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2_2: ULONG = 0x7001;
59pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_2_2;
60pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3_1: ULONG = 0x8000;
61pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3_2: ULONG = 0x8001;
62pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_3_2;
63pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4_1: ULONG = 0x9000;
64pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4_2: ULONG = 0x9001;
65pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_4_2;
66pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_1: ULONG = 0xA000;
67pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_2: ULONG = 0xA001;
68pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_3: ULONG = 0xA002;
69pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_5_3;
70pub const D3D_UMD_INTERFACE_VERSION: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_5;
71pub type D3DGPU_VIRTUAL_ADDRESS = ULONGLONG;
72pub type D3DGPU_SIZE_T = ULONGLONG;
73pub const D3DGPU_UNIQUE_DRIVER_PROTECTION: ULONGLONG = 0x8000000000000000;
74pub const DXGK_MAX_PAGE_TABLE_LEVEL_COUNT: UINT = 6;
75pub const DXGK_MIN_PAGE_TABLE_LEVEL_COUNT: UINT = 2;
76STRUCT!{struct GPUP_DRIVER_ESCAPE_INPUT {
77    vfLUID: LUID,
78}}
79pub type PGPUP_DRIVER_ESCAPE_INPUT = *mut GPUP_DRIVER_ESCAPE_INPUT;
80ENUM!{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}}
88STRUCT!{struct DXGKVGPU_ESCAPE_HEAD {
89    Luid: GPUP_DRIVER_ESCAPE_INPUT,
90    Type: DXGKVGPU_ESCAPE_TYPE,
91}}
92STRUCT!{struct DXGKVGPU_ESCAPE_READ_PCI_CONFIG {
93    Header: DXGKVGPU_ESCAPE_HEAD,
94    Offset: UINT,
95    Size: UINT,
96}}
97STRUCT!{struct DXGKVGPU_ESCAPE_WRITE_PCI_CONFIG {
98    Header: DXGKVGPU_ESCAPE_HEAD,
99    Offset: UINT,
100    Size: UINT,
101}}
102STRUCT!{struct DXGKVGPU_ESCAPE_READ_VGPU_TYPE {
103    Header: DXGKVGPU_ESCAPE_HEAD,
104}}
105STRUCT!{struct DXGKVGPU_ESCAPE_POWERTRANSITIONCOMPLETE {
106    Header: DXGKVGPU_ESCAPE_HEAD,
107    PowerState: UINT,
108}}
109STRUCT!{struct DXGKVGPU_ESCAPE_INITIALIZE {
110    Header: DXGKVGPU_ESCAPE_HEAD,
111    VmGuid: GUID,
112}}
113STRUCT!{struct DXGKVGPU_ESCAPE_RELEASE {
114    Header: DXGKVGPU_ESCAPE_HEAD,
115}}
116ENUM!{enum DXGK_PTE_PAGE_SIZE {
117    DXGK_PTE_PAGE_TABLE_PAGE_4KB = 0,
118    DXGK_PTE_PAGE_TABLE_PAGE_64KB = 1,
119}}
120UNION!{union DXGK_PTE_u {
121    [u64; 1],
122    PageAddress PageAddress_mut: ULONGLONG,
123    PageTableAddress PageTableAddress_mut: ULONGLONG,
124}}
125STRUCT!{struct DXGK_PTE {
126    Flags: ULONGLONG,
127    u: DXGK_PTE_u,
128}}
129BITFIELD!{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]}
142pub const D3DGPU_NULL: D3DGPU_VIRTUAL_ADDRESS = 0;
143pub const D3DDDI_MAX_WRITTEN_PRIMARIES: usize = 16;
144pub const D3DDDI_MAX_MPO_PRESENT_DIRTY_RECTS: usize = 0xFFF;
145STRUCT!{struct D3DGPU_PHYSICAL_ADDRESS {
146    SegmentId: UINT,
147    SegmentOffset: UINT64,
148}}
149pub type D3DDDI_VIDEO_PRESENT_SOURCE_ID = UINT;
150pub type D3DDDI_VIDEO_PRESENT_TARGET_ID = UINT;
151pub type D3DKMT_HANDLE = UINT;
152STRUCT!{struct D3DDDI_RATIONAL {
153    Numerator: UINT,
154    Denominator: UINT,
155}}
156STRUCT!{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}}
164BITFIELD!{D3DDDI_ALLOCATIONINFO Flags: UINT [
165    Primary set_Primary[0..1],
166    Stereo set_Stereo[1..2],
167    Reserved set_Reserved[2..32],
168]}
169UNION!{union D3DDDI_ALLOCATIONINFO2_u1 {
170    [usize; 1],
171    hSection hSection_mut: HANDLE,
172    pSystemMem pSystemMem_mut: *const VOID,
173}}
174UNION!{union D3DDDI_ALLOCATIONINFO2_u2 {
175    [usize; 1],
176    Priority Priority_mut: UINT,
177    Unused Unused_mut: ULONG_PTR,
178}}
179STRUCT!{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}}
190BITFIELD!{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]}
196STRUCT!{struct D3DDDI_OPENALLOCATIONINFO {
197    hAllocation: D3DKMT_HANDLE,
198    pPrivateDriverData: *const VOID,
199    PrivateDriverDataSize: UINT,
200}}
201STRUCT!{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}}
208ENUM!{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}}
215STRUCT!{struct D3DDDI_ALLOCATIONLIST {
216    hAllocation: D3DKMT_HANDLE,
217    Value: UINT,
218}}
219BITFIELD!{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]}
225STRUCT!{struct D3DDDI_PATCHLOCATIONLIST {
226    AllocationIndex: UINT,
227    Value: UINT,
228    DriverId: UINT,
229    AllocationOffset: UINT,
230    PatchOffset: UINT,
231    SplitOffset: UINT,
232}}
233BITFIELD!{D3DDDI_PATCHLOCATIONLIST Value: UINT [
234    SlotId set_SlotId[0..24],
235    Reserved set_Reserved[24..32],
236]}
237STRUCT!{struct D3DDDICB_LOCKFLAGS {
238    Value: UINT,
239}}
240BITFIELD!{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]}
254STRUCT!{struct D3DDDICB_LOCK2FLAGS {
255    Value: UINT,
256}}
257STRUCT!{struct D3DDDICB_DESTROYALLOCATION2FLAGS {
258    Value: UINT,
259}}
260BITFIELD!{D3DDDICB_DESTROYALLOCATION2FLAGS Value: UINT [
261    AssumeNotInUse set_AssumeNotInUse[0..1],
262    SynchronousDestroy set_SynchronousDestroy[1..2],
263    Reserved set_Reserved[2..31],
264    SystemUseOnly set_SystemUseOnly[31..32],
265]}
266STRUCT!{struct D3DDDI_ESCAPEFLAGS {
267    Value: UINT,
268}}
269BITFIELD!{D3DDDI_ESCAPEFLAGS Value: UINT [
270    HardwareAccess set_HardwareAccess[0..1],
271    DeviceStatusQuery set_DeviceStatusQuery[1..2],
272    ChangeFrameLatency set_ChangeFrameLatency[2..3],
273    NoAdapterSynchronization set_NoAdapterSynchronization[3..4],
274    Reserved set_Reserved[4..5],
275    VirtualMachineData set_VirtualMachineData[5..6],
276    DriverKnownEscape set_DriverKnownEscape[6..7],
277    DriverCommonEscape set_DriverCommonEscape[7..8],
278    Reserved2 set_Reserved2[8..24],
279]}
280ENUM!{enum D3DDDI_DRIVERESCAPETYPE {
281    D3DDDI_DRIVERESCAPETYPE_TRANSLATEALLOCATIONHANDLE = 0,
282    D3DDDI_DRIVERESCAPETYPE_TRANSLATERESOURCEHANDLE = 1,
283    D3DDDI_DRIVERESCAPETYPE_MAX,
284}}
285STRUCT!{struct D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE {
286    EscapeType: D3DDDI_DRIVERESCAPETYPE,
287    hAllocation: D3DKMT_HANDLE,
288}}
289STRUCT!{struct D3DDDI_DRIVERESCAPE_TRANSLATERESOURCEHANDLE {
290    EscapeType: D3DDDI_DRIVERESCAPETYPE,
291    hResource: D3DKMT_HANDLE,
292}}
293STRUCT!{struct D3DDDI_CREATECONTEXTFLAGS {
294    Value: UINT,
295}}
296BITFIELD!{D3DDDI_CREATECONTEXTFLAGS Value: UINT [
297    NullRendering set_NullRendering[0..1],
298    InitialData set_InitialData[1..2],
299    DisableGpuTimeout set_DisableGpuTimeout[2..3],
300    SynchronizationOnly set_SynchronizationOnly[3..4],
301    HwQueueSupported set_HwQueueSupported[4..5],
302    Reserved set_Reserved[5..32],
303]}
304//1188
305STRUCT!{struct D3DDDICB_SIGNALFLAGS {
306    Value: UINT,
307}}
308BITFIELD!{D3DDDICB_SIGNALFLAGS Value: UINT [
309    SignalAtSubmission set_SignalAtSubmission[0..1],
310    EnqueueCpuEvent set_EnqueueCpuEvent[1..2],
311    AllowFenceRewind set_AllowFenceRewind[2..3],
312    Reserved set_Reserved[3..31],
313    DXGK_SIGNAL_FLAG_INTERNAL0 set_DXGK_SIGNAL_FLAG_INTERNAL0[31..32],
314]}
315pub const D3DDDI_MAX_OBJECT_WAITED_ON: usize = 32;
316pub const D3DDDI_MAX_OBJECT_SIGNALED: usize = 32;
317ENUM!{enum D3DDDI_SYNCHRONIZATIONOBJECT_TYPE {
318    D3DDDI_SYNCHRONIZATION_MUTEX = 1,
319    D3DDDI_SEMAPHORE = 2,
320    D3DDDI_FENCE = 3,
321    D3DDDI_CPU_NOTIFICATION = 4,
322    D3DDDI_MONITORED_FENCE = 5,
323    D3DDDI_PERIODIC_MONITORED_FENCE = 6,
324    D3DDDI_SYNCHRONIZATION_TYPE_LIMIT,
325}}
326//1553
327STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_SynchronizationMutex {
328    InitialState: BOOL,
329}}
330STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Semaphore {
331    MaxCount: UINT,
332    InitialCount: UINT,
333}}
334STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Reserved {
335    Reserved: [UINT; 16],
336}}
337UNION!{union D3DDDI_SYNCHRONIZATIONOBJECTINFO_u {
338    [u32; 16],
339    SynchronizationMutex SynchronizationMutex_mut:
340        D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_SynchronizationMutex,
341    Semaphore Semaphore_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Semaphore,
342    Reserved Reserved_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Reserved,
343}}
344STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO {
345    Type: D3DDDI_SYNCHRONIZATIONOBJECT_TYPE,
346    u: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u,
347}}
348STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS {
349    Value: UINT,
350}}
351BITFIELD!{D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Value: UINT [
352    Shared set_Shared[0..1],
353    NtSecuritySharing set_NtSecuritySharing[1..2],
354    CrossAdapter set_CrossAdapter[2..3],
355    TopOfPipeline set_TopOfPipeline[3..4],
356    NoSignal set_NoSignal[4..5],
357    NoWait set_NoWait[5..6],
358    NoSignalMaxValueOnTdr set_NoSignalMaxValueOnTdr[6..7],
359    NoGPUAccess set_NoGPUAccess[7..8],
360    Reserved set_Reserved[8..31],
361    D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0
362        set_D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0[31..32],
363]}
364STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_SynchronizationMutex {
365    InitialState: BOOL,
366}}
367STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Semaphore {
368    MaxCount: UINT,
369    InitialCount: UINT,
370}}
371STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Fence {
372    FenceValue: UINT64,
373}}
374STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_CPUNotification {
375    Event: HANDLE,
376}}
377STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_MonitoredFence {
378    InitialFenceValue: UINT64,
379    FenceValueCPUVirtualAddress: *mut VOID,
380    FenceValueGPUVirtualAddress: D3DGPU_VIRTUAL_ADDRESS,
381    EngineAffinity: UINT,
382}}
383STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_PeriodicMonitoredFence {
384    hAdapter: D3DKMT_HANDLE,
385    VidPnTargetId: D3DDDI_VIDEO_PRESENT_TARGET_ID,
386    Time: UINT64,
387    FenceValueCPUVirtualAddress: *mut VOID,
388    FenceValueGPUVirtualAddress: D3DGPU_VIRTUAL_ADDRESS,
389    EngineAffinity: UINT,
390}}
391STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Reserved {
392    Reserved: [UINT64; 8],
393}}
394UNION!{union D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u {
395    [u64; 8],
396    SynchronizationMutex SynchronizationMutex_mut:
397        D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_SynchronizationMutex,
398    Semaphore Semaphore_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Semaphore,
399    Fence Fence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Fence,
400    CPUNotification CPUNotification_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_CPUNotification,
401    MonitoredFence MonitoredFence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_MonitoredFence,
402    PeriodicMonitoredFence PeriodicMonitoredFence_mut:
403        D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_PeriodicMonitoredFence,
404    Reserved Reserved_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Reserved,
405}}
406STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2 {
407    Type: D3DDDI_SYNCHRONIZATIONOBJECT_TYPE,
408    Flags: D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS,
409    u: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u,
410    SharedHandle: D3DKMT_HANDLE,
411}}
412//1778
413pub const D3DDDI_MAX_BROADCAST_CONTEXT: usize = 64;