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
7 use shared
::basetsd
::{UINT32, UINT64}
;
8 use 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
,
15 use shared
::minwindef
::{BOOL, UCHAR, UINT, ULONG}
;
16 use shared
::ntdef
::{HANDLE, LUID, PCWSTR, ULONGLONG, VOID, WCHAR}
;
17 use shared
::windef
::HDC
;
18 STRUCT
!{struct D3DKMT_CREATEDEVICEFLAGS
{
21 BITFIELD
!{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],
27 UNION
!{union D3DKMT_CREATEDEVICE_u
{
29 hAdapter hAdapter_mut
: D3DKMT_HANDLE
,
30 pAdapter pAdapter_mut
: *mut VOID
,
32 STRUCT
!{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
,
43 STRUCT
!{struct D3DKMT_DESTROYDEVICE
{
44 hDevice
: D3DKMT_HANDLE
,
46 ENUM
!{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,
55 STRUCT
!{struct D3DKMT_CREATECONTEXT
{
56 hDevice
: D3DKMT_HANDLE
,
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
,
72 STRUCT
!{struct D3DKMT_DESTROYCONTEXT
{
73 hContext
: D3DKMT_HANDLE
,
75 STRUCT
!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT
{
76 hDevice
: D3DKMT_HANDLE
,
77 Info
: D3DDDI_SYNCHRONIZATIONOBJECTINFO
,
78 hSyncObject
: D3DKMT_HANDLE
,
80 STRUCT
!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT2
{
81 hDevice
: D3DKMT_HANDLE
,
82 Info
: D3DDDI_SYNCHRONIZATIONOBJECTINFO2
,
83 hSyncObject
: D3DKMT_HANDLE
,
85 STRUCT
!{struct D3DKMT_DESTROYSYNCHRONIZATIONOBJECT
{
86 hSyncObject
: D3DKMT_HANDLE
,
88 STRUCT
!{struct D3DKMT_OPENSYNCHRONIZATIONOBJECT
{
89 hSharedHandle
: D3DKMT_HANDLE
,
90 hSyncObject
: D3DKMT_HANDLE
,
91 Reserved
: [UINT64
; 8],
93 STRUCT
!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT
{
94 hContext
: D3DKMT_HANDLE
,
96 ObjectHandleArray
: [D3DKMT_HANDLE
; D3DDDI_MAX_OBJECT_WAITED_ON
],
98 STRUCT
!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence
{
101 UNION
!{union D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u
{
103 Fence Fence_mut
: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence
,
104 Reserved Reserved_mut
: [UINT64
; 8],
106 STRUCT
!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2
{
107 hContext
: D3DKMT_HANDLE
,
109 ObjectHandleArray
: [D3DKMT_HANDLE
; D3DDDI_MAX_OBJECT_WAITED_ON
],
110 u
: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u
,
112 STRUCT
!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT
{
113 hContext
: D3DKMT_HANDLE
,
115 ObjectHandleArray
: [D3DKMT_HANDLE
; D3DDDI_MAX_OBJECT_SIGNALED
],
116 Flags
: D3DDDICB_SIGNALFLAGS
,
118 STRUCT
!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence
{
121 UNION
!{union D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_u
{
123 Fence Fence_mut
: D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence
,
124 CpuEventHandle CpuEventHandle_mut
: HANDLE
,
125 Reserved Reserved_mut
: [UINT64
; 8],
127 STRUCT
!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2
{
128 hContext
: D3DKMT_HANDLE
,
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
,
137 STRUCT
!{struct D3DKMT_SEGMENTSIZEINFO
{
138 DedicatedVideoMemorySize
: ULONGLONG
,
139 DedicatedSystemMemorySize
: ULONGLONG
,
140 SharedSystemMemorySize
: ULONGLONG
,
143 STRUCT
!{struct D3DKMT_ADAPTERTYPE
{
146 BITFIELD
!{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],
161 STRUCT
!{struct D3DKMT_NODE_PERFDATA
{
163 PhysicalAdapterIndex
: UINT32
,
164 Frequency
: ULONGLONG
,
165 MaxFrequency
: ULONGLONG
,
166 MaxFrequencyOC
: ULONGLONG
,
170 MaxTransitionLatency
: ULONGLONG
,
172 STRUCT
!{struct D3DKMT_ADAPTER_PERFDATA
{
173 PhysicalAdapterIndex
: UINT32
,
174 MemoryFrequency
: ULONGLONG
,
175 MaxMemoryFrequency
: ULONGLONG
,
176 MaxMemoryFrequencyOC
: ULONGLONG
,
177 MemoryBandwidth
: ULONGLONG
,
178 PCIEBandwidth
: ULONGLONG
,
182 PowerStateOverride
: UCHAR
,
184 STRUCT
!{struct D3DKMT_ADAPTER_PERFDATACAPS
{
185 PhysicalAdapterIndex
: UINT32
,
186 MaxMemoryBandwidth
: ULONGLONG
,
187 MaxPCIEBandwidth
: ULONGLONG
,
189 TemperatureMax
: ULONG
,
190 TemperatureWarning
: ULONG
,
192 pub const DXGK_MAX_GPUVERSION_NAME_LENGTH
: usize = 32;
193 STRUCT
!{struct D3DKMT_GPUVERSION
{
194 PhysicalAdapterIndex
: UINT32
,
195 BiosVersion
: [WCHAR
; DXGK_MAX_GPUVERSION_NAME_LENGTH
],
196 GpuArchitecture
: [WCHAR
; DXGK_MAX_GPUVERSION_NAME_LENGTH
],
198 ENUM
!{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,
264 STRUCT
!{struct D3DKMT_QUERYADAPTERINFO
{
265 hAdapter
: D3DKMT_HANDLE
,
266 Type
: KMTQUERYADAPTERINFOTYPE
,
267 pPrivateDriverData
: *mut VOID
,
268 PrivateDriverDataSize
: UINT
,
270 STRUCT
!{struct D3DKMT_OPENADAPTERFROMHDC
{
272 hAdapter
: D3DKMT_HANDLE
,
274 VidPnSourceId
: D3DDDI_VIDEO_PRESENT_SOURCE_ID
,
276 STRUCT
!{struct D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME
{
277 DeviceName
: [WCHAR
; 32],
278 hAdapter
: D3DKMT_HANDLE
,
280 VidPnSourceId
: D3DDDI_VIDEO_PRESENT_SOURCE_ID
,
282 STRUCT
!{struct D3DKMT_OPENADAPTERFROMDEVICENAME
{
284 hAdapter
: D3DKMT_HANDLE
,
287 pub const MAX_ENUM_ADAPTERS
: usize = 16;
288 STRUCT
!{struct D3DKMT_ADAPTERINFO
{
289 hAdapter
: D3DKMT_HANDLE
,
292 bPresentMoveRegionsPreferred
: BOOL
,
294 STRUCT
!{struct D3DKMT_ENUMADAPTERS
{
296 Adapters
: [D3DKMT_ADAPTERINFO
; MAX_ENUM_ADAPTERS
],
298 STRUCT
!{struct D3DKMT_ENUMADAPTERS2
{
300 pAdapters
: *mut D3DKMT_ADAPTERINFO
,
302 STRUCT
!{struct D3DKMT_OPENADAPTERFROMLUID
{
304 hAdapter
: D3DKMT_HANDLE
,
306 STRUCT
!{struct D3DKMT_QUERYREMOTEVIDPNSOURCEFROMGDIDISPLAYNAME
{
307 DeviceName
: [WCHAR
; 32],
308 VidPnSourceId
: D3DDDI_VIDEO_PRESENT_SOURCE_ID
,
310 STRUCT
!{struct D3DKMT_CLOSEADAPTER
{
311 hAdapter
: D3DKMT_HANDLE
,