// 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 (LDDM) user/kernel mode shared data type definitions. use shared::basetsd::{UINT64, ULONG_PTR}; use shared::guiddef::GUID; use shared::minwindef::{BOOL, UINT, ULONG}; use shared::ntdef::{HANDLE, LUID, ULONGLONG, VOID}; pub const DXGKDDI_INTERFACE_VERSION_VISTA: ULONG = 0x1052; pub const DXGKDDI_INTERFACE_VERSION_VISTA_SP1: ULONG = 0x1053; pub const DXGKDDI_INTERFACE_VERSION_WIN7: ULONG = 0x2005; pub const DXGKDDI_INTERFACE_VERSION_WIN8: ULONG = 0x300E; pub const DXGKDDI_INTERFACE_VERSION_WDDM1_3: ULONG = 0x4002; pub const DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION: ULONG = 0x4003; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_0: ULONG = 0x5023; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_1: ULONG = 0x6003; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_1_5: ULONG = 0x6010; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_2: ULONG = 0x700A; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_3: ULONG = 0x8001; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_4: ULONG = 0x9006; pub const DXGKDDI_INTERFACE_VERSION_WDDM2_5: ULONG = 0xA00B; #[inline] pub fn IS_OFFICIAL_DDI_INTERFACE_VERSION(version: ULONG) -> bool { (version == DXGKDDI_INTERFACE_VERSION_VISTA) || (version == DXGKDDI_INTERFACE_VERSION_VISTA_SP1) || (version == DXGKDDI_INTERFACE_VERSION_WIN7) || (version == DXGKDDI_INTERFACE_VERSION_WIN8) || (version == DXGKDDI_INTERFACE_VERSION_WDDM1_3) || (version == DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_0) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_1) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_1_5) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_2) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_3) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_4) || (version == DXGKDDI_INTERFACE_VERSION_WDDM2_5) } pub const DXGKDDI_INTERFACE_VERSION: ULONG = DXGKDDI_INTERFACE_VERSION_WDDM2_5; pub const D3D_UMD_INTERFACE_VERSION_VISTA: ULONG = 0x000C; pub const D3D_UMD_INTERFACE_VERSION_WIN7: ULONG = 0x2003; pub const D3D_UMD_INTERFACE_VERSION_WIN8_M3: ULONG = 0x3001; pub const D3D_UMD_INTERFACE_VERSION_WIN8_CP: ULONG = 0x3002; pub const D3D_UMD_INTERFACE_VERSION_WIN8_RC: ULONG = 0x3003; pub const D3D_UMD_INTERFACE_VERSION_WIN8: ULONG = 0x3004; pub const D3D_UMD_INTERFACE_VERSION_WDDM1_3: ULONG = 0x4002; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1: ULONG = 0x5000; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1_3: ULONG = 0x5001; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0_M2_2: ULONG = 0x5002; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_0: ULONG = 0x5002; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_1: ULONG = 0x6000; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_2: ULONG = 0x6001; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_3: ULONG = 0x6002; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1_4: ULONG = 0x6003; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_1: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_1_4; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2_1: ULONG = 0x7000; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2_2: ULONG = 0x7001; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_2: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_2_2; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3_1: ULONG = 0x8000; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3_2: ULONG = 0x8001; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_3: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_3_2; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4_1: ULONG = 0x9000; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4_2: ULONG = 0x9001; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_4: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_4_2; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_1: ULONG = 0xA000; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_2: ULONG = 0xA001; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5_3: ULONG = 0xA002; pub const D3D_UMD_INTERFACE_VERSION_WDDM2_5: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_5_3; pub const D3D_UMD_INTERFACE_VERSION: ULONG = D3D_UMD_INTERFACE_VERSION_WDDM2_5; pub type D3DGPU_VIRTUAL_ADDRESS = ULONGLONG; pub type D3DGPU_SIZE_T = ULONGLONG; pub const D3DGPU_UNIQUE_DRIVER_PROTECTION: ULONGLONG = 0x8000000000000000; pub const DXGK_MAX_PAGE_TABLE_LEVEL_COUNT: UINT = 6; pub const DXGK_MIN_PAGE_TABLE_LEVEL_COUNT: UINT = 2; STRUCT!{struct GPUP_DRIVER_ESCAPE_INPUT { vfLUID: LUID, }} pub type PGPUP_DRIVER_ESCAPE_INPUT = *mut GPUP_DRIVER_ESCAPE_INPUT; ENUM!{enum DXGKVGPU_ESCAPE_TYPE { DXGKVGPU_ESCAPE_TYPE_READ_PCI_CONFIG = 0, DXGKVGPU_ESCAPE_TYPE_WRITE_PCI_CONFIG = 1, DXGKVGPU_ESCAPE_TYPE_INITIALIZE = 2, DXGKVGPU_ESCAPE_TYPE_RELEASE = 3, DXGKVGPU_ESCAPE_TYPE_GET_VGPU_TYPE = 4, DXGKVGPU_ESCAPE_TYPE_POWERTRANSITIONCOMPLETE = 5, }} STRUCT!{struct DXGKVGPU_ESCAPE_HEAD { Luid: GPUP_DRIVER_ESCAPE_INPUT, Type: DXGKVGPU_ESCAPE_TYPE, }} STRUCT!{struct DXGKVGPU_ESCAPE_READ_PCI_CONFIG { Header: DXGKVGPU_ESCAPE_HEAD, Offset: UINT, Size: UINT, }} STRUCT!{struct DXGKVGPU_ESCAPE_WRITE_PCI_CONFIG { Header: DXGKVGPU_ESCAPE_HEAD, Offset: UINT, Size: UINT, }} STRUCT!{struct DXGKVGPU_ESCAPE_READ_VGPU_TYPE { Header: DXGKVGPU_ESCAPE_HEAD, }} STRUCT!{struct DXGKVGPU_ESCAPE_POWERTRANSITIONCOMPLETE { Header: DXGKVGPU_ESCAPE_HEAD, PowerState: UINT, }} STRUCT!{struct DXGKVGPU_ESCAPE_INITIALIZE { Header: DXGKVGPU_ESCAPE_HEAD, VmGuid: GUID, }} STRUCT!{struct DXGKVGPU_ESCAPE_RELEASE { Header: DXGKVGPU_ESCAPE_HEAD, }} ENUM!{enum DXGK_PTE_PAGE_SIZE { DXGK_PTE_PAGE_TABLE_PAGE_4KB = 0, DXGK_PTE_PAGE_TABLE_PAGE_64KB = 1, }} UNION!{union DXGK_PTE_u { [u64; 1], PageAddress PageAddress_mut: ULONGLONG, PageTableAddress PageTableAddress_mut: ULONGLONG, }} STRUCT!{struct DXGK_PTE { Flags: ULONGLONG, u: DXGK_PTE_u, }} BITFIELD!{DXGK_PTE Flags: ULONGLONG [ Valid set_Valid[0..1], Zero set_Zero[1..2], CacheCoherent set_CacheCoherent[2..3], ReadOnly set_ReadOnly[3..4], NoExecute set_NoExecute[4..5], Segment set_Segment[5..10], LargePage set_LargePage[10..11], PhysicalAdapterIndex set_PhysicalAdapterIndex[11..17], PageTablePageSize set_PageTablePageSize[17..19], SystemReserved0 set_SystemReserved0[19..20], Reserved set_Reserved[20..64], ]} pub const D3DGPU_NULL: D3DGPU_VIRTUAL_ADDRESS = 0; pub const D3DDDI_MAX_WRITTEN_PRIMARIES: usize = 16; pub const D3DDDI_MAX_MPO_PRESENT_DIRTY_RECTS: usize = 0xFFF; STRUCT!{struct D3DGPU_PHYSICAL_ADDRESS { SegmentId: UINT, SegmentOffset: UINT64, }} pub type D3DDDI_VIDEO_PRESENT_SOURCE_ID = UINT; pub type D3DDDI_VIDEO_PRESENT_TARGET_ID = UINT; pub type D3DKMT_HANDLE = UINT; STRUCT!{struct D3DDDI_RATIONAL { Numerator: UINT, Denominator: UINT, }} STRUCT!{struct D3DDDI_ALLOCATIONINFO { hAllocation: D3DKMT_HANDLE, pSystemMem: *const VOID, pPrivateDriverData: *mut VOID, PrivateDriverDataSize: UINT, VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, Flags: UINT, }} BITFIELD!{D3DDDI_ALLOCATIONINFO Flags: UINT [ Primary set_Primary[0..1], Stereo set_Stereo[1..2], Reserved set_Reserved[2..32], ]} UNION!{union D3DDDI_ALLOCATIONINFO2_u1 { [usize; 1], hSection hSection_mut: HANDLE, pSystemMem pSystemMem_mut: *const VOID, }} UNION!{union D3DDDI_ALLOCATIONINFO2_u2 { [usize; 1], Priority Priority_mut: UINT, Unused Unused_mut: ULONG_PTR, }} STRUCT!{struct D3DDDI_ALLOCATIONINFO2 { hAllocation: D3DKMT_HANDLE, u1: D3DDDI_ALLOCATIONINFO2_u1, pPrivateDriverData: *mut VOID, PrivateDriverDataSize: UINT, VidPnSourceId: D3DDDI_VIDEO_PRESENT_SOURCE_ID, Flags: UINT, GpuVirtualAddress: D3DGPU_VIRTUAL_ADDRESS, u2: D3DDDI_ALLOCATIONINFO2_u2, Reserved: [ULONG_PTR; 5], }} BITFIELD!{D3DDDI_ALLOCATIONINFO2 Flags: UINT [ Primary set_Primary[0..1], Stereo set_Stereo[1..2], OverridePriority set_OverridePriority[2..3], Reserved set_Reserved[3..32], ]} STRUCT!{struct D3DDDI_OPENALLOCATIONINFO { hAllocation: D3DKMT_HANDLE, pPrivateDriverData: *const VOID, PrivateDriverDataSize: UINT, }} STRUCT!{struct D3DDDI_OPENALLOCATIONINFO2 { hAllocation: D3DKMT_HANDLE, pPrivateDriverData: *const VOID, PrivateDriverDataSize: UINT, GpuVirtualAddress: D3DGPU_VIRTUAL_ADDRESS, Reserved: [ULONG_PTR; 6], }} ENUM!{enum D3DDDI_OFFER_PRIORITY { D3DDDI_OFFER_PRIORITY_NONE = 0, D3DDDI_OFFER_PRIORITY_LOW = 1, D3DDDI_OFFER_PRIORITY_NORMAL, D3DDDI_OFFER_PRIORITY_HIGH, D3DDDI_OFFER_PRIORITY_AUTO, }} STRUCT!{struct D3DDDI_ALLOCATIONLIST { hAllocation: D3DKMT_HANDLE, Value: UINT, }} BITFIELD!{D3DDDI_ALLOCATIONLIST Value: UINT [ WriteOperation set_WriteOperation[0..1], DoNotRetireInstance set_DoNotRetireInstance[1..2], OfferPriority set_OfferPriority[2..5], Reserved set_Reserved[5..32], ]} STRUCT!{struct D3DDDI_PATCHLOCATIONLIST { AllocationIndex: UINT, Value: UINT, DriverId: UINT, AllocationOffset: UINT, PatchOffset: UINT, SplitOffset: UINT, }} BITFIELD!{D3DDDI_PATCHLOCATIONLIST Value: UINT [ SlotId set_SlotId[0..24], Reserved set_Reserved[24..32], ]} STRUCT!{struct D3DDDICB_LOCKFLAGS { Value: UINT, }} BITFIELD!{D3DDDICB_LOCKFLAGS Value: UINT [ ReadOnly set_ReadOnly[0..1], WriteOnly set_WriteOnly[1..2], DonotWait set_DonotWait[2..3], IgnoreSync set_IgnoreSync[3..4], LockEntire set_LockEntire[4..5], DonotEvict set_DonotEvict[5..6], AcquireAperture set_AcquireAperture[6..7], Discard set_Discard[7..8], NoExistingReference set_NoExistingReference[8..9], UseAlternateVA set_UseAlternateVA[9..10], IgnoreReadSync set_IgnoreReadSync[10..11], Reserved set_Reserved[11..32], ]} STRUCT!{struct D3DDDICB_LOCK2FLAGS { Value: UINT, }} STRUCT!{struct D3DDDICB_DESTROYALLOCATION2FLAGS { Value: UINT, }} BITFIELD!{D3DDDICB_DESTROYALLOCATION2FLAGS Value: UINT [ AssumeNotInUse set_AssumeNotInUse[0..1], SynchronousDestroy set_SynchronousDestroy[1..2], Reserved set_Reserved[2..31], SystemUseOnly set_SystemUseOnly[31..32], ]} STRUCT!{struct D3DDDI_ESCAPEFLAGS { Value: UINT, }} BITFIELD!{D3DDDI_ESCAPEFLAGS Value: UINT [ HardwareAccess set_HardwareAccess[0..1], DeviceStatusQuery set_DeviceStatusQuery[1..2], ChangeFrameLatency set_ChangeFrameLatency[2..3], NoAdapterSynchronization set_NoAdapterSynchronization[3..4], Reserved set_Reserved[4..5], VirtualMachineData set_VirtualMachineData[5..6], DriverKnownEscape set_DriverKnownEscape[6..7], DriverCommonEscape set_DriverCommonEscape[7..8], Reserved2 set_Reserved2[8..24], ]} ENUM!{enum D3DDDI_DRIVERESCAPETYPE { D3DDDI_DRIVERESCAPETYPE_TRANSLATEALLOCATIONHANDLE = 0, D3DDDI_DRIVERESCAPETYPE_TRANSLATERESOURCEHANDLE = 1, D3DDDI_DRIVERESCAPETYPE_MAX, }} STRUCT!{struct D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE { EscapeType: D3DDDI_DRIVERESCAPETYPE, hAllocation: D3DKMT_HANDLE, }} STRUCT!{struct D3DDDI_DRIVERESCAPE_TRANSLATERESOURCEHANDLE { EscapeType: D3DDDI_DRIVERESCAPETYPE, hResource: D3DKMT_HANDLE, }} STRUCT!{struct D3DDDI_CREATECONTEXTFLAGS { Value: UINT, }} BITFIELD!{D3DDDI_CREATECONTEXTFLAGS Value: UINT [ NullRendering set_NullRendering[0..1], InitialData set_InitialData[1..2], DisableGpuTimeout set_DisableGpuTimeout[2..3], SynchronizationOnly set_SynchronizationOnly[3..4], HwQueueSupported set_HwQueueSupported[4..5], Reserved set_Reserved[5..32], ]} //1188 STRUCT!{struct D3DDDICB_SIGNALFLAGS { Value: UINT, }} BITFIELD!{D3DDDICB_SIGNALFLAGS Value: UINT [ SignalAtSubmission set_SignalAtSubmission[0..1], EnqueueCpuEvent set_EnqueueCpuEvent[1..2], AllowFenceRewind set_AllowFenceRewind[2..3], Reserved set_Reserved[3..31], DXGK_SIGNAL_FLAG_INTERNAL0 set_DXGK_SIGNAL_FLAG_INTERNAL0[31..32], ]} pub const D3DDDI_MAX_OBJECT_WAITED_ON: usize = 32; pub const D3DDDI_MAX_OBJECT_SIGNALED: usize = 32; ENUM!{enum D3DDDI_SYNCHRONIZATIONOBJECT_TYPE { D3DDDI_SYNCHRONIZATION_MUTEX = 1, D3DDDI_SEMAPHORE = 2, D3DDDI_FENCE = 3, D3DDDI_CPU_NOTIFICATION = 4, D3DDDI_MONITORED_FENCE = 5, D3DDDI_PERIODIC_MONITORED_FENCE = 6, D3DDDI_SYNCHRONIZATION_TYPE_LIMIT, }} //1553 STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_SynchronizationMutex { InitialState: BOOL, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Semaphore { MaxCount: UINT, InitialCount: UINT, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Reserved { Reserved: [UINT; 16], }} UNION!{union D3DDDI_SYNCHRONIZATIONOBJECTINFO_u { [u32; 16], SynchronizationMutex SynchronizationMutex_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_SynchronizationMutex, Semaphore Semaphore_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Semaphore, Reserved Reserved_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u_Reserved, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO { Type: D3DDDI_SYNCHRONIZATIONOBJECT_TYPE, u: D3DDDI_SYNCHRONIZATIONOBJECTINFO_u, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS { Value: UINT, }} BITFIELD!{D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Value: UINT [ Shared set_Shared[0..1], NtSecuritySharing set_NtSecuritySharing[1..2], CrossAdapter set_CrossAdapter[2..3], TopOfPipeline set_TopOfPipeline[3..4], NoSignal set_NoSignal[4..5], NoWait set_NoWait[5..6], NoSignalMaxValueOnTdr set_NoSignalMaxValueOnTdr[6..7], NoGPUAccess set_NoGPUAccess[7..8], Reserved set_Reserved[8..31], D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 set_D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0[31..32], ]} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_SynchronizationMutex { InitialState: BOOL, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Semaphore { MaxCount: UINT, InitialCount: UINT, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Fence { FenceValue: UINT64, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_CPUNotification { Event: HANDLE, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_MonitoredFence { InitialFenceValue: UINT64, FenceValueCPUVirtualAddress: *mut VOID, FenceValueGPUVirtualAddress: D3DGPU_VIRTUAL_ADDRESS, EngineAffinity: UINT, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_PeriodicMonitoredFence { hAdapter: D3DKMT_HANDLE, VidPnTargetId: D3DDDI_VIDEO_PRESENT_TARGET_ID, Time: UINT64, FenceValueCPUVirtualAddress: *mut VOID, FenceValueGPUVirtualAddress: D3DGPU_VIRTUAL_ADDRESS, EngineAffinity: UINT, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Reserved { Reserved: [UINT64; 8], }} UNION!{union D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u { [u64; 8], SynchronizationMutex SynchronizationMutex_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_SynchronizationMutex, Semaphore Semaphore_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Semaphore, Fence Fence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Fence, CPUNotification CPUNotification_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_CPUNotification, MonitoredFence MonitoredFence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_MonitoredFence, PeriodicMonitoredFence PeriodicMonitoredFence_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_PeriodicMonitoredFence, Reserved Reserved_mut: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u_Reserved, }} STRUCT!{struct D3DDDI_SYNCHRONIZATIONOBJECTINFO2 { Type: D3DDDI_SYNCHRONIZATIONOBJECT_TYPE, Flags: D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS, u: D3DDDI_SYNCHRONIZATIONOBJECTINFO2_u, SharedHandle: D3DKMT_HANDLE, }} //1778 pub const D3DDDI_MAX_BROADCAST_CONTEXT: usize = 64;