winapi_ui_automation/km/
d3dkmthk.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 kernel mode thunk interfaces
7use 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}}
136//1512
137STRUCT!{struct D3DKMT_SEGMENTSIZEINFO {
138    DedicatedVideoMemorySize: ULONGLONG,
139    DedicatedSystemMemorySize: ULONGLONG,
140    SharedSystemMemorySize: ULONGLONG,
141}}
142//1617
143STRUCT!{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]}
160//1852
161STRUCT!{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}}