// Licensed under the Apache License, Version 2.0 // or the MIT license // , 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, }}