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, 13 D3DKMT_HANDLE, 14 }; 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 { 19 bitfield: UINT, 20 }} 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], 26 ]} 27 UNION!{union D3DKMT_CREATEDEVICE_u { 28 [usize; 1], 29 hAdapter hAdapter_mut: D3DKMT_HANDLE, 30 pAdapter pAdapter_mut: *mut VOID, 31 }} 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, 42 }} 43 STRUCT!{struct D3DKMT_DESTROYDEVICE { 44 hDevice: D3DKMT_HANDLE, 45 }} 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, 54 }} 55 STRUCT!{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 }} 72 STRUCT!{struct D3DKMT_DESTROYCONTEXT { 73 hContext: D3DKMT_HANDLE, 74 }} 75 STRUCT!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT { 76 hDevice: D3DKMT_HANDLE, 77 Info: D3DDDI_SYNCHRONIZATIONOBJECTINFO, 78 hSyncObject: D3DKMT_HANDLE, 79 }} 80 STRUCT!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT2 { 81 hDevice: D3DKMT_HANDLE, 82 Info: D3DDDI_SYNCHRONIZATIONOBJECTINFO2, 83 hSyncObject: D3DKMT_HANDLE, 84 }} 85 STRUCT!{struct D3DKMT_DESTROYSYNCHRONIZATIONOBJECT { 86 hSyncObject: D3DKMT_HANDLE, 87 }} 88 STRUCT!{struct D3DKMT_OPENSYNCHRONIZATIONOBJECT { 89 hSharedHandle: D3DKMT_HANDLE, 90 hSyncObject: D3DKMT_HANDLE, 91 Reserved: [UINT64; 8], 92 }} 93 STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT { 94 hContext: D3DKMT_HANDLE, 95 ObjectCount: UINT, 96 ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_WAITED_ON], 97 }} 98 STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence { 99 FenceValue: UINT64, 100 }} 101 UNION!{union D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u { 102 [u64; 8], 103 Fence Fence_mut: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence, 104 Reserved Reserved_mut: [UINT64; 8], 105 }} 106 STRUCT!{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 }} 112 STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT { 113 hContext: D3DKMT_HANDLE, 114 ObjectCount: UINT, 115 ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_SIGNALED], 116 Flags: D3DDDICB_SIGNALFLAGS, 117 }} 118 STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence { 119 FenceValue: UINT64, 120 }} 121 UNION!{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 }} 127 STRUCT!{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 137 STRUCT!{struct D3DKMT_SEGMENTSIZEINFO { 138 DedicatedVideoMemorySize: ULONGLONG, 139 DedicatedSystemMemorySize: ULONGLONG, 140 SharedSystemMemorySize: ULONGLONG, 141 }} 142 //1617 143 STRUCT!{struct D3DKMT_ADAPTERTYPE { 144 Value: UINT, 145 }} 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], 159 ]} 160 //1852 161 STRUCT!{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 }} 172 STRUCT!{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 }} 184 STRUCT!{struct D3DKMT_ADAPTER_PERFDATACAPS { 185 PhysicalAdapterIndex: UINT32, 186 MaxMemoryBandwidth: ULONGLONG, 187 MaxPCIEBandwidth: ULONGLONG, 188 MaxFanRPM: ULONG, 189 TemperatureMax: ULONG, 190 TemperatureWarning: ULONG, 191 }} 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], 197 }} 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, 263 }} 264 STRUCT!{struct D3DKMT_QUERYADAPTERINFO { 265 hAdapter: D3DKMT_HANDLE, 266 Type: KMTQUERYADAPTERINFOTYPE, 267 pPrivateDriverData: *mut VOID, 268 PrivateDriverDataSize: UINT, 269 }} 270 STRUCT!{struct D3DKMT_OPENADAPTERFROMHDC { 271 hDc: HDC, 272 hAdapter: D3DKMT_HANDLE, 273 AdapterLuid: LUID, 274 VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, 275 }} 276 STRUCT!{struct D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME { 277 DeviceName: [WCHAR; 32], 278 hAdapter: D3DKMT_HANDLE, 279 AdapterLuid: LUID, 280 VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, 281 }} 282 STRUCT!{struct D3DKMT_OPENADAPTERFROMDEVICENAME { 283 pDeviceName: PCWSTR, 284 hAdapter: D3DKMT_HANDLE, 285 AdapterLuid: LUID, 286 }} 287 pub const MAX_ENUM_ADAPTERS: usize = 16; 288 STRUCT!{struct D3DKMT_ADAPTERINFO { 289 hAdapter: D3DKMT_HANDLE, 290 AdapterLuid: LUID, 291 NumOfSources: ULONG, 292 bPresentMoveRegionsPreferred: BOOL, 293 }} 294 STRUCT!{struct D3DKMT_ENUMADAPTERS { 295 NumAdapters: ULONG, 296 Adapters: [D3DKMT_ADAPTERINFO; MAX_ENUM_ADAPTERS], 297 }} 298 STRUCT!{struct D3DKMT_ENUMADAPTERS2 { 299 NumAdapters: ULONG, 300 pAdapters: *mut D3DKMT_ADAPTERINFO, 301 }} 302 STRUCT!{struct D3DKMT_OPENADAPTERFROMLUID { 303 AdapterLuid: LUID, 304 hAdapter: D3DKMT_HANDLE, 305 }} 306 STRUCT!{struct D3DKMT_QUERYREMOTEVIDPNSOURCEFROMGDIDISPLAYNAME { 307 DeviceName: [WCHAR; 32], 308 VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, 309 }} 310 STRUCT!{struct D3DKMT_CLOSEADAPTER { 311 hAdapter: D3DKMT_HANDLE, 312 }} 313