| // 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 kernel mode thunk interfaces |
| use shared::basetsd::{UINT32, UINT64}; |
| use shared::d3dukmdt::{ |
| D3DDDICB_SIGNALFLAGS, D3DDDI_ALLOCATIONLIST, D3DDDI_CREATECONTEXTFLAGS, |
| D3DDDI_MAX_BROADCAST_CONTEXT, D3DDDI_MAX_OBJECT_SIGNALED, D3DDDI_MAX_OBJECT_WAITED_ON, |
| D3DDDI_PATCHLOCATIONLIST, D3DDDI_SYNCHRONIZATIONOBJECTINFO, |
| D3DDDI_SYNCHRONIZATIONOBJECTINFO2, D3DDDI_VIDEO_PRESENT_SOURCE_ID, D3DGPU_VIRTUAL_ADDRESS, |
| D3DKMT_HANDLE, |
| }; |
| use shared::minwindef::{BOOL, UCHAR, UINT, ULONG}; |
| use shared::ntdef::{HANDLE, LUID, PCWSTR, ULONGLONG, VOID, WCHAR}; |
| use shared::windef::HDC; |
| STRUCT!{struct D3DKMT_CREATEDEVICEFLAGS { |
| bitfield: UINT, |
| }} |
| BITFIELD!{D3DKMT_CREATEDEVICEFLAGS bitfield: UINT [ |
| LegacyMode set_LegacyMode[0..1], |
| RequestVSync set_RequestVSync[1..2], |
| DisableGpuTimeout set_DisableGpuTimeout[2..3], |
| Reserved set_Reserved[3..32], |
| ]} |
| UNION!{union D3DKMT_CREATEDEVICE_u { |
| [usize; 1], |
| hAdapter hAdapter_mut: D3DKMT_HANDLE, |
| pAdapter pAdapter_mut: *mut VOID, |
| }} |
| STRUCT!{struct D3DKMT_CREATEDEVICE { |
| u: D3DKMT_CREATEDEVICE_u, |
| Flags: D3DKMT_CREATEDEVICEFLAGS, |
| hDevice: D3DKMT_HANDLE, |
| pCommandBuffer: *mut VOID, |
| CommandBufferSize: UINT, |
| pAllocationList: *mut D3DDDI_ALLOCATIONLIST, |
| AllocationListSize: UINT, |
| pPatchLocationList: *mut D3DDDI_PATCHLOCATIONLIST, |
| PatchLocationListSize: UINT, |
| }} |
| STRUCT!{struct D3DKMT_DESTROYDEVICE { |
| hDevice: D3DKMT_HANDLE, |
| }} |
| ENUM!{enum D3DKMT_CLIENTHINT { |
| D3DKMT_CLIENTHINT_UNKNOWN = 0, |
| D3DKMT_CLIENTHINT_OPENGL = 1, |
| D3DKMT_CLIENTHINT_CDD = 2, |
| D3DKMT_CLIENTHINT_DX7 = 7, |
| D3DKMT_CLIENTHINT_DX8 = 8, |
| D3DKMT_CLIENTHINT_DX9 = 9, |
| D3DKMT_CLIENTHINT_DX10 = 10, |
| }} |
| STRUCT!{struct D3DKMT_CREATECONTEXT { |
| hDevice: D3DKMT_HANDLE, |
| NodeOrdinal: UINT, |
| EngineAffinity: UINT, |
| Flags: D3DDDI_CREATECONTEXTFLAGS, |
| pPrivateDriverData: *mut VOID, |
| PrivateDriverDataSize: UINT, |
| ClientHint: D3DKMT_CLIENTHINT, |
| hContext: D3DKMT_HANDLE, |
| pCommandBuffer: *mut VOID, |
| CommandBufferSize: UINT, |
| pAllocationList: *mut D3DDDI_ALLOCATIONLIST, |
| AllocationListSize: UINT, |
| pPatchLocationList: *mut D3DDDI_PATCHLOCATIONLIST, |
| PatchLocationListSize: UINT, |
| CommandBuffer: D3DGPU_VIRTUAL_ADDRESS, |
| }} |
| STRUCT!{struct D3DKMT_DESTROYCONTEXT { |
| hContext: D3DKMT_HANDLE, |
| }} |
| STRUCT!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT { |
| hDevice: D3DKMT_HANDLE, |
| Info: D3DDDI_SYNCHRONIZATIONOBJECTINFO, |
| hSyncObject: D3DKMT_HANDLE, |
| }} |
| STRUCT!{struct D3DKMT_CREATESYNCHRONIZATIONOBJECT2 { |
| hDevice: D3DKMT_HANDLE, |
| Info: D3DDDI_SYNCHRONIZATIONOBJECTINFO2, |
| hSyncObject: D3DKMT_HANDLE, |
| }} |
| STRUCT!{struct D3DKMT_DESTROYSYNCHRONIZATIONOBJECT { |
| hSyncObject: D3DKMT_HANDLE, |
| }} |
| STRUCT!{struct D3DKMT_OPENSYNCHRONIZATIONOBJECT { |
| hSharedHandle: D3DKMT_HANDLE, |
| hSyncObject: D3DKMT_HANDLE, |
| Reserved: [UINT64; 8], |
| }} |
| STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT { |
| hContext: D3DKMT_HANDLE, |
| ObjectCount: UINT, |
| ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_WAITED_ON], |
| }} |
| STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence { |
| FenceValue: UINT64, |
| }} |
| UNION!{union D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u { |
| [u64; 8], |
| Fence Fence_mut: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_Fence, |
| Reserved Reserved_mut: [UINT64; 8], |
| }} |
| STRUCT!{struct D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2 { |
| hContext: D3DKMT_HANDLE, |
| ObjectCount: UINT, |
| ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_WAITED_ON], |
| u: D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2_u, |
| }} |
| STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT { |
| hContext: D3DKMT_HANDLE, |
| ObjectCount: UINT, |
| ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_SIGNALED], |
| Flags: D3DDDICB_SIGNALFLAGS, |
| }} |
| STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence { |
| FenceValue: UINT64, |
| }} |
| UNION!{union D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_u { |
| [u64; 8], |
| Fence Fence_mut: D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_Fence, |
| CpuEventHandle CpuEventHandle_mut: HANDLE, |
| Reserved Reserved_mut: [UINT64; 8], |
| }} |
| STRUCT!{struct D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2 { |
| hContext: D3DKMT_HANDLE, |
| ObjectCount: UINT, |
| ObjectHandleArray: [D3DKMT_HANDLE; D3DDDI_MAX_OBJECT_SIGNALED], |
| Flags: D3DDDICB_SIGNALFLAGS, |
| BroadcastContextCount: ULONG, |
| BroadcastContext: [D3DKMT_HANDLE; D3DDDI_MAX_BROADCAST_CONTEXT], |
| u: D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2_u, |
| }} |
| //1512 |
| STRUCT!{struct D3DKMT_SEGMENTSIZEINFO { |
| DedicatedVideoMemorySize: ULONGLONG, |
| DedicatedSystemMemorySize: ULONGLONG, |
| SharedSystemMemorySize: ULONGLONG, |
| }} |
| //1617 |
| STRUCT!{struct D3DKMT_ADAPTERTYPE { |
| Value: UINT, |
| }} |
| BITFIELD!{D3DKMT_ADAPTERTYPE Value: UINT [ |
| RenderSupported set_RenderSupported[0..1], |
| DisplaySupported set_DisplaySupported[1..2], |
| SoftwareDevice set_SoftwareDevice[2..3], |
| PostDevice set_PostDevice[3..4], |
| HybridDiscrete set_HybridDiscrete[4..5], |
| HybridIntegrated set_HybridIntegrated[5..6], |
| IndirectDisplayDevice set_IndirectDisplayDevice[6..7], |
| Paravirtualized set_Paravirtualized[7..8], |
| ACGSupported set_ACGSupported[8..9], |
| SupportSetTimingsFromVidPn set_SupportSetTimingsFromVidPn[9..10], |
| Detachable set_Detachable[10..11], |
| Reserved set_Reserved[11..32], |
| ]} |
| //1852 |
| STRUCT!{struct D3DKMT_NODE_PERFDATA { |
| NodeOrdinal: UINT32, |
| PhysicalAdapterIndex: UINT32, |
| Frequency: ULONGLONG, |
| MaxFrequency: ULONGLONG, |
| MaxFrequencyOC: ULONGLONG, |
| Voltage: ULONG, |
| VoltageMax: ULONG, |
| VoltageMaxOC: ULONG, |
| MaxTransitionLatency: ULONGLONG, |
| }} |
| STRUCT!{struct D3DKMT_ADAPTER_PERFDATA { |
| PhysicalAdapterIndex: UINT32, |
| MemoryFrequency: ULONGLONG, |
| MaxMemoryFrequency: ULONGLONG, |
| MaxMemoryFrequencyOC: ULONGLONG, |
| MemoryBandwidth: ULONGLONG, |
| PCIEBandwidth: ULONGLONG, |
| FanRPM: ULONG, |
| Power: ULONG, |
| Temperature: ULONG, |
| PowerStateOverride: UCHAR, |
| }} |
| STRUCT!{struct D3DKMT_ADAPTER_PERFDATACAPS { |
| PhysicalAdapterIndex: UINT32, |
| MaxMemoryBandwidth: ULONGLONG, |
| MaxPCIEBandwidth: ULONGLONG, |
| MaxFanRPM: ULONG, |
| TemperatureMax: ULONG, |
| TemperatureWarning: ULONG, |
| }} |
| pub const DXGK_MAX_GPUVERSION_NAME_LENGTH: usize = 32; |
| STRUCT!{struct D3DKMT_GPUVERSION { |
| PhysicalAdapterIndex: UINT32, |
| BiosVersion: [WCHAR; DXGK_MAX_GPUVERSION_NAME_LENGTH], |
| GpuArchitecture: [WCHAR; DXGK_MAX_GPUVERSION_NAME_LENGTH], |
| }} |
| ENUM!{enum KMTQUERYADAPTERINFOTYPE { |
| KMTQAITYPE_UMDRIVERPRIVATE = 0, |
| KMTQAITYPE_UMDRIVERNAME = 1, |
| KMTQAITYPE_UMOPENGLINFO = 2, |
| KMTQAITYPE_GETSEGMENTSIZE = 3, |
| KMTQAITYPE_ADAPTERGUID = 4, |
| KMTQAITYPE_FLIPQUEUEINFO = 5, |
| KMTQAITYPE_ADAPTERADDRESS = 6, |
| KMTQAITYPE_SETWORKINGSETINFO = 7, |
| KMTQAITYPE_ADAPTERREGISTRYINFO = 8, |
| KMTQAITYPE_CURRENTDISPLAYMODE = 9, |
| KMTQAITYPE_MODELIST = 10, |
| KMTQAITYPE_CHECKDRIVERUPDATESTATUS = 11, |
| KMTQAITYPE_VIRTUALADDRESSINFO = 12, |
| KMTQAITYPE_DRIVERVERSION = 13, |
| KMTQAITYPE_ADAPTERTYPE = 15, |
| KMTQAITYPE_OUTPUTDUPLCONTEXTSCOUNT = 16, |
| KMTQAITYPE_WDDM_1_2_CAPS = 17, |
| KMTQAITYPE_UMD_DRIVER_VERSION = 18, |
| KMTQAITYPE_DIRECTFLIP_SUPPORT = 19, |
| KMTQAITYPE_MULTIPLANEOVERLAY_SUPPORT = 20, |
| KMTQAITYPE_DLIST_DRIVER_NAME = 21, |
| KMTQAITYPE_WDDM_1_3_CAPS = 22, |
| KMTQAITYPE_MULTIPLANEOVERLAY_HUD_SUPPORT = 23, |
| KMTQAITYPE_WDDM_2_0_CAPS = 24, |
| KMTQAITYPE_NODEMETADATA = 25, |
| KMTQAITYPE_CPDRIVERNAME = 26, |
| KMTQAITYPE_XBOX = 27, |
| KMTQAITYPE_INDEPENDENTFLIP_SUPPORT = 28, |
| KMTQAITYPE_MIRACASTCOMPANIONDRIVERNAME = 29, |
| KMTQAITYPE_PHYSICALADAPTERCOUNT = 30, |
| KMTQAITYPE_PHYSICALADAPTERDEVICEIDS = 31, |
| KMTQAITYPE_DRIVERCAPS_EXT = 32, |
| KMTQAITYPE_QUERY_MIRACAST_DRIVER_TYPE = 33, |
| KMTQAITYPE_QUERY_GPUMMU_CAPS = 34, |
| KMTQAITYPE_QUERY_MULTIPLANEOVERLAY_DECODE_SUPPORT = 35, |
| KMTQAITYPE_QUERY_HW_PROTECTION_TEARDOWN_COUNT = 36, |
| KMTQAITYPE_QUERY_ISBADDRIVERFORHWPROTECTIONDISABLED = 37, |
| KMTQAITYPE_MULTIPLANEOVERLAY_SECONDARY_SUPPORT = 38, |
| KMTQAITYPE_INDEPENDENTFLIP_SECONDARY_SUPPORT = 39, |
| KMTQAITYPE_PANELFITTER_SUPPORT = 40, |
| KMTQAITYPE_PHYSICALADAPTERPNPKEY = 41, |
| KMTQAITYPE_GETSEGMENTGROUPSIZE = 42, |
| KMTQAITYPE_MPO3DDI_SUPPORT = 43, |
| KMTQAITYPE_HWDRM_SUPPORT = 44, |
| KMTQAITYPE_MPOKERNELCAPS_SUPPORT = 45, |
| KMTQAITYPE_MULTIPLANEOVERLAY_STRETCH_SUPPORT = 46, |
| KMTQAITYPE_GET_DEVICE_VIDPN_OWNERSHIP_INFO = 47, |
| KMTQAITYPE_QUERYREGISTRY = 48, |
| KMTQAITYPE_KMD_DRIVER_VERSION = 49, |
| KMTQAITYPE_BLOCKLIST_KERNEL = 50, |
| KMTQAITYPE_BLOCKLIST_RUNTIME = 51, |
| KMTQAITYPE_ADAPTERGUID_RENDER = 52, |
| KMTQAITYPE_ADAPTERADDRESS_RENDER = 53, |
| KMTQAITYPE_ADAPTERREGISTRYINFO_RENDER = 54, |
| KMTQAITYPE_CHECKDRIVERUPDATESTATUS_RENDER = 55, |
| KMTQAITYPE_DRIVERVERSION_RENDER = 56, |
| KMTQAITYPE_ADAPTERTYPE_RENDER = 57, |
| KMTQAITYPE_WDDM_1_2_CAPS_RENDER = 58, |
| KMTQAITYPE_WDDM_1_3_CAPS_RENDER = 59, |
| KMTQAITYPE_QUERY_ADAPTER_UNIQUE_GUID = 60, |
| KMTQAITYPE_NODEPERFDATA = 61, |
| KMTQAITYPE_ADAPTERPERFDATA = 62, |
| KMTQAITYPE_ADAPTERPERFDATA_CAPS = 63, |
| KMTQUITYPE_GPUVERSION = 64, |
| }} |
| STRUCT!{struct D3DKMT_QUERYADAPTERINFO { |
| hAdapter: D3DKMT_HANDLE, |
| Type: KMTQUERYADAPTERINFOTYPE, |
| pPrivateDriverData: *mut VOID, |
| PrivateDriverDataSize: UINT, |
| }} |
| STRUCT!{struct D3DKMT_OPENADAPTERFROMHDC { |
| hDc: HDC, |
| hAdapter: D3DKMT_HANDLE, |
| AdapterLuid: LUID, |
| VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, |
| }} |
| STRUCT!{struct D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME { |
| DeviceName: [WCHAR; 32], |
| hAdapter: D3DKMT_HANDLE, |
| AdapterLuid: LUID, |
| VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, |
| }} |
| STRUCT!{struct D3DKMT_OPENADAPTERFROMDEVICENAME { |
| pDeviceName: PCWSTR, |
| hAdapter: D3DKMT_HANDLE, |
| AdapterLuid: LUID, |
| }} |
| pub const MAX_ENUM_ADAPTERS: usize = 16; |
| STRUCT!{struct D3DKMT_ADAPTERINFO { |
| hAdapter: D3DKMT_HANDLE, |
| AdapterLuid: LUID, |
| NumOfSources: ULONG, |
| bPresentMoveRegionsPreferred: BOOL, |
| }} |
| STRUCT!{struct D3DKMT_ENUMADAPTERS { |
| NumAdapters: ULONG, |
| Adapters: [D3DKMT_ADAPTERINFO; MAX_ENUM_ADAPTERS], |
| }} |
| STRUCT!{struct D3DKMT_ENUMADAPTERS2 { |
| NumAdapters: ULONG, |
| pAdapters: *mut D3DKMT_ADAPTERINFO, |
| }} |
| STRUCT!{struct D3DKMT_OPENADAPTERFROMLUID { |
| AdapterLuid: LUID, |
| hAdapter: D3DKMT_HANDLE, |
| }} |
| STRUCT!{struct D3DKMT_QUERYREMOTEVIDPNSOURCEFROMGDIDISPLAYNAME { |
| DeviceName: [WCHAR; 32], |
| VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, |
| }} |
| STRUCT!{struct D3DKMT_CLOSEADAPTER { |
| hAdapter: D3DKMT_HANDLE, |
| }} |