mesa/include/drm-uapi/d3dkmthk.h

1795 lines
41 KiB
C

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Copyright (c) 2019, Microsoft Corporation.
*
* Author:
* Iouri Tarassov <iourit@linux.microsoft.com>
*
* Dxgkrnl Graphics Driver
* User mode WDDM interface definitions
*
*/
#ifndef _D3DKMTHK_H
#define _D3DKMTHK_H
/*
* This structure matches the definition of D3DKMTHANDLE in Windows.
* The handle is opaque in user mode. It is used by user mode applications to
* represent kernel mode objects, created by dxgkrnl.
*/
struct d3dkmthandle {
union {
struct {
__u32 instance : 6;
__u32 index : 24;
__u32 unique : 2;
};
__u32 v;
};
};
/*
* VM bus messages return Windows' NTSTATUS, which is integer and only negative
* value indicates a failure. A positive number is a success and needs to be
* returned to user mode as the IOCTL return code. Negative status codes are
* converted to Linux error codes.
*/
struct ntstatus {
union {
struct {
int code : 16;
int facility : 13;
int customer : 1;
int severity : 2;
};
int v;
};
};
/*
* Matches the Windows LUID definition.
* LUID is a locally unique identifier (similar to GUID, but not global),
* which is guaranteed to be unique intil the computer is rebooted.
*/
struct winluid {
__u32 a;
__u32 b;
};
#define D3DDDI_MAX_WRITTEN_PRIMARIES 16
#define D3DKMT_CREATEALLOCATION_MAX 1024
#define D3DKMT_MAKERESIDENT_ALLOC_MAX (1024 * 10)
#define D3DKMT_ADAPTERS_MAX 64
#define D3DDDI_MAX_BROADCAST_CONTEXT 64
#define D3DDDI_MAX_OBJECT_WAITED_ON 32
#define D3DDDI_MAX_OBJECT_SIGNALED 32
struct d3dkmt_adapterinfo {
struct d3dkmthandle adapter_handle;
struct winluid adapter_luid;
__u32 num_sources;
__u32 present_move_regions_preferred;
};
struct d3dkmt_enumadapters2 {
__u32 num_adapters;
__u32 reserved;
#ifdef __KERNEL__
struct d3dkmt_adapterinfo *adapters;
#else
__u64 *adapters;
#endif
};
struct d3dkmt_closeadapter {
struct d3dkmthandle adapter_handle;
};
struct d3dkmt_openadapterfromluid {
struct winluid adapter_luid;
struct d3dkmthandle adapter_handle;
};
struct d3dddi_allocationlist {
struct d3dkmthandle allocation;
union {
struct {
__u32 write_operation :1;
__u32 do_not_retire_instance :1;
__u32 offer_priority :3;
__u32 reserved :27;
};
__u32 value;
};
};
struct d3dddi_patchlocationlist {
__u32 allocation_index;
union {
struct {
__u32 slot_id:24;
__u32 reserved:8;
};
__u32 value;
};
__u32 driver_id;
__u32 allocation_offset;
__u32 patch_offset;
__u32 split_offset;
};
struct d3dkmt_createdeviceflags {
__u32 legacy_mode:1;
__u32 request_vSync:1;
__u32 disable_gpu_timeout:1;
__u32 gdi_device:1;
__u32 reserved:28;
};
struct d3dkmt_createdevice {
struct d3dkmthandle adapter;
__u32 reserved3;
struct d3dkmt_createdeviceflags flags;
struct d3dkmthandle device;
#ifdef __KERNEL__
void *command_buffer;
#else
__u64 command_buffer;
#endif
__u32 command_buffer_size;
__u32 reserved;
#ifdef __KERNEL__
struct d3dddi_allocationlist *allocation_list;
#else
__u64 allocation_list;
#endif
__u32 allocation_list_size;
__u32 reserved1;
#ifdef __KERNEL__
struct d3dddi_patchlocationlist *patch_location_list;
#else
__u64 patch_location_list;
#endif
__u32 patch_location_list_size;
__u32 reserved2;
};
struct d3dkmt_destroydevice {
struct d3dkmthandle device;
};
enum d3dkmt_clienthint {
_D3DKMT_CLIENTHNT_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 d3dddi_createcontextflags {
union {
struct {
__u32 null_rendering:1;
__u32 initial_data:1;
__u32 disable_gpu_timeout:1;
__u32 synchronization_only:1;
__u32 hw_queue_supported:1;
__u32 reserved:27;
};
__u32 value;
};
};
struct d3dkmt_destroycontext {
struct d3dkmthandle context;
};
struct d3dkmt_createcontextvirtual {
struct d3dkmthandle device;
__u32 node_ordinal;
__u32 engine_affinity;
struct d3dddi_createcontextflags flags;
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
__u32 priv_drv_data_size;
enum d3dkmt_clienthint client_hint;
struct d3dkmthandle context;
};
struct d3dddi_createhwqueueflags {
union {
struct {
__u32 disable_gpu_timeout:1;
__u32 reserved:31;
};
__u32 value;
};
};
enum d3dddi_pagingqueue_priority {
_D3DDDI_PAGINGQUEUE_PRIORITY_BELOW_NORMAL = -1,
_D3DDDI_PAGINGQUEUE_PRIORITY_NORMAL = 0,
_D3DDDI_PAGINGQUEUE_PRIORITY_ABOVE_NORMAL = 1,
};
struct d3dkmt_createpagingqueue {
struct d3dkmthandle device;
enum d3dddi_pagingqueue_priority priority;
struct d3dkmthandle paging_queue;
struct d3dkmthandle sync_object;
#ifdef __KERNEL__
void *fence_cpu_virtual_address;
#else
__u64 fence_cpu_virtual_address;
#endif
__u32 physical_adapter_index;
};
struct d3dddi_destroypagingqueue {
struct d3dkmthandle paging_queue;
};
enum d3dddi_knownescapetype {
_D3DDDI_DRIVERESCAPETYPE_TRANSLATEALLOCATIONHANDLE = 0,
_D3DDDI_DRIVERESCAPETYPE_TRANSLATERESOURCEHANDLE = 1,
_D3DDDI_DRIVERESCAPETYPE_CPUEVENTUSAGE = 2,
_D3DDDI_DRIVERESCAPETYPE_BUILDTESTCOMMANDBUFFER = 3,
};
struct d3dddi_translate_allocation_handle {
enum d3dddi_knownescapetype escape_type;
struct d3dkmthandle allocation;
};
struct d3dddi_testcommand {
char buffer[72];
};
#define D3DDDI_MAXTESTBUFFERSIZE 4096
#define D3DDDI_MAXTESTBUFFERPRIVATEDRIVERDATASIZE 1024
struct d3dddi_buildtestcommandbuffer {
enum d3dddi_knownescapetype escape_type;
struct d3dkmthandle device;
struct d3dkmthandle context;
__u32 flags;
struct d3dddi_testcommand command;
void *dma_buffer;
void *dma_buffer_priv_data;
__u32 dma_buffer_size;
__u32 dma_buffer_priv_data_size;
};
enum d3dkmt_escapetype {
_D3DKMT_ESCAPE_DRIVERPRIVATE = 0,
_D3DKMT_ESCAPE_VIDMM = 1,
_D3DKMT_ESCAPE_VIDSCH = 3,
_D3DKMT_ESCAPE_DEVICE = 4,
_D3DKMT_ESCAPE_DRT_TEST = 8,
};
struct d3dddi_escapeflags {
union {
struct {
__u32 hardware_access:1;
__u32 device_status_query:1;
__u32 change_frame_latency:1;
__u32 no_adapter_synchronization:1;
__u32 reserved:1;
__u32 virtual_machine_data:1;
__u32 driver_known_escape:1;
__u32 driver_common_escape:1;
__u32 reserved2:24;
};
__u32 value;
};
};
struct d3dkmt_escape {
struct d3dkmthandle adapter;
struct d3dkmthandle device;
enum d3dkmt_escapetype type;
struct d3dddi_escapeflags flags;
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
__u32 priv_drv_data_size;
struct d3dkmthandle context;
};
enum dxgk_render_pipeline_stage {
_DXGK_RENDER_PIPELINE_STAGE_UNKNOWN = 0,
_DXGK_RENDER_PIPELINE_STAGE_INPUT_ASSEMBLER = 1,
_DXGK_RENDER_PIPELINE_STAGE_VERTEX_SHADER = 2,
_DXGK_RENDER_PIPELINE_STAGE_GEOMETRY_SHADER = 3,
_DXGK_RENDER_PIPELINE_STAGE_STREAM_OUTPUT = 4,
_DXGK_RENDER_PIPELINE_STAGE_RASTERIZER = 5,
_DXGK_RENDER_PIPELINE_STAGE_PIXEL_SHADER = 6,
_DXGK_RENDER_PIPELINE_STAGE_OUTPUT_MERGER = 7,
};
enum dxgk_page_fault_flags {
_DXGK_PAGE_FAULT_WRITE = 0x1,
_DXGK_PAGE_FAULT_FENCE_INVALID = 0x2,
_DXGK_PAGE_FAULT_ADAPTER_RESET_REQUIRED = 0x4,
_DXGK_PAGE_FAULT_ENGINE_RESET_REQUIRED = 0x8,
_DXGK_PAGE_FAULT_FATAL_HARDWARE_ERROR = 0x10,
_DXGK_PAGE_FAULT_IOMMU = 0x20,
_DXGK_PAGE_FAULT_HW_CONTEXT_VALID = 0x40,
_DXGK_PAGE_FAULT_PROCESS_HANDLE_VALID = 0x80,
};
enum dxgk_general_error_code {
_DXGK_GENERAL_ERROR_PAGE_FAULT = 0,
_DXGK_GENERAL_ERROR_INVALID_INSTRUCTION = 1,
};
struct dxgk_fault_error_code {
union {
struct {
__u32 is_device_specific_code:1;
enum dxgk_general_error_code general_error_code:31;
};
struct {
__u32 is_device_specific_code_reserved_bit:1;
__u32 device_specific_code:31;
};
};
};
struct d3dkmt_devicereset_state {
union {
struct {
__u32 desktop_switched:1;
__u32 reserved:31;
};
__u32 value;
};
};
struct d3dkmt_devicepagefault_state {
__u64 faulted_primitive_api_sequence_number;
enum dxgk_render_pipeline_stage faulted_pipeline_stage;
__u32 faulted_bind_table_entry;
enum dxgk_page_fault_flags page_fault_flags;
struct dxgk_fault_error_code fault_error_code;
__u64 faulted_virtual_address;
};
enum d3dkmt_deviceexecution_state {
_D3DKMT_DEVICEEXECUTION_ACTIVE = 1,
_D3DKMT_DEVICEEXECUTION_RESET = 2,
_D3DKMT_DEVICEEXECUTION_HUNG = 3,
_D3DKMT_DEVICEEXECUTION_STOPPED = 4,
_D3DKMT_DEVICEEXECUTION_ERROR_OUTOFMEMORY = 5,
_D3DKMT_DEVICEEXECUTION_ERROR_DMAFAULT = 6,
_D3DKMT_DEVICEEXECUTION_ERROR_DMAPAGEFAULT = 7,
};
enum d3dkmt_devicestate_type {
_D3DKMT_DEVICESTATE_EXECUTION = 1,
_D3DKMT_DEVICESTATE_PRESENT = 2,
_D3DKMT_DEVICESTATE_RESET = 3,
_D3DKMT_DEVICESTATE_PRESENT_DWM = 4,
_D3DKMT_DEVICESTATE_PAGE_FAULT = 5,
_D3DKMT_DEVICESTATE_PRESENT_QUEUE = 6,
};
struct d3dkmt_getdevicestate {
struct d3dkmthandle device;
enum d3dkmt_devicestate_type state_type;
union {
enum d3dkmt_deviceexecution_state execution_state;
struct d3dkmt_devicereset_state reset_state;
struct d3dkmt_devicepagefault_state page_fault_state;
char alignment[48];
};
};
enum d3dkmdt_gdisurfacetype {
_D3DKMDT_GDISURFACE_INVALID = 0,
_D3DKMDT_GDISURFACE_TEXTURE = 1,
_D3DKMDT_GDISURFACE_STAGING_CPUVISIBLE = 2,
_D3DKMDT_GDISURFACE_STAGING = 3,
_D3DKMDT_GDISURFACE_LOOKUPTABLE = 4,
_D3DKMDT_GDISURFACE_EXISTINGSYSMEM = 5,
_D3DKMDT_GDISURFACE_TEXTURE_CPUVISIBLE = 6,
_D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER = 7,
_D3DKMDT_GDISURFACE_TEXTURE_CPUVISIBLE_CROSSADAPTER = 8,
};
struct d3dddi_rational {
__u32 numerator;
__u32 denominator;
};
enum d3dddiformat {
_D3DDDIFMT_UNKNOWN = 0,
};
struct d3dkmdt_gdisurfacedata {
__u32 width;
__u32 height;
__u32 format;
enum d3dkmdt_gdisurfacetype type;
__u32 flags;
__u32 pitch;
};
struct d3dkmdt_stagingsurfacedata {
__u32 width;
__u32 height;
__u32 pitch;
};
struct d3dkmdt_sharedprimarysurfacedata {
__u32 width;
__u32 height;
enum d3dddiformat format;
struct d3dddi_rational refresh_rate;
__u32 vidpn_source_id;
};
struct d3dkmdt_shadowsurfacedata {
__u32 width;
__u32 height;
enum d3dddiformat format;
__u32 pitch;
};
enum d3dkmdt_standardallocationtype {
_D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE = 1,
_D3DKMDT_STANDARDALLOCATION_SHADOWSURFACE = 2,
_D3DKMDT_STANDARDALLOCATION_STAGINGSURFACE = 3,
_D3DKMDT_STANDARDALLOCATION_GDISURFACE = 4,
};
struct d3dddi_synchronizationobject_flags {
union {
struct {
__u32 shared:1;
__u32 nt_security_sharing:1;
__u32 cross_adapter:1;
__u32 top_of_pipeline:1;
__u32 no_signal:1;
__u32 no_wait:1;
__u32 no_signal_max_value_on_tdr:1;
__u32 no_gpu_access:1;
__u32 reserved:23;
};
__u32 value;
};
};
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
};
struct d3dddi_synchronizationobjectinfo2 {
enum d3dddi_synchronizationobject_type type;
struct d3dddi_synchronizationobject_flags flags;
union {
struct {
__u32 initial_state;
} synchronization_mutex;
struct {
__u32 max_count;
__u32 initial_count;
} semaphore;
struct {
__u64 fence_value;
} fence;
struct {
__u64 event;
} cpu_notification;
struct {
__u64 initial_fence_value;
#ifdef __KERNEL__
void *fence_cpu_virtual_address;
#else
__u64 *fence_cpu_virtual_address;
#endif
__u64 fence_gpu_virtual_address;
__u32 engine_affinity;
} monitored_fence;
struct {
struct d3dkmthandle adapter;
__u32 vidpn_target_id;
__u64 time;
#ifdef __KERNEL__
void *fence_cpu_virtual_address;
#else
__u64 fence_cpu_virtual_address;
#endif
__u64 fence_gpu_virtual_address;
__u32 engine_affinity;
} periodic_monitored_fence;
struct {
__u64 reserved[8];
} reserved;
};
struct d3dkmthandle shared_handle;
};
struct d3dkmt_createsynchronizationobject2 {
struct d3dkmthandle device;
__u32 reserved;
struct d3dddi_synchronizationobjectinfo2 info;
struct d3dkmthandle sync_object;
__u32 reserved1;
};
struct d3dkmt_waitforsynchronizationobject2 {
struct d3dkmthandle context;
__u32 object_count;
struct d3dkmthandle object_array[D3DDDI_MAX_OBJECT_WAITED_ON];
union {
struct {
__u64 fence_value;
} fence;
__u64 reserved[8];
};
};
struct d3dddicb_signalflags {
union {
struct {
__u32 signal_at_submission:1;
__u32 enqueue_cpu_event:1;
__u32 allow_fence_rewind:1;
__u32 reserved:28;
__u32 DXGK_SIGNAL_FLAG_INTERNAL0:1;
};
__u32 value;
};
};
struct d3dkmt_signalsynchronizationobject2 {
struct d3dkmthandle context;
__u32 object_count;
struct d3dkmthandle object_array[D3DDDI_MAX_OBJECT_SIGNALED];
struct d3dddicb_signalflags flags;
__u32 context_count;
struct d3dkmthandle contexts[D3DDDI_MAX_BROADCAST_CONTEXT];
union {
struct {
__u64 fence_value;
} fence;
__u64 cpu_event_handle;
__u64 reserved[8];
};
};
struct d3dddi_waitforsynchronizationobjectfromcpu_flags {
union {
struct {
__u32 wait_any:1;
__u32 reserved:31;
};
__u32 value;
};
};
struct d3dkmt_waitforsynchronizationobjectfromcpu {
struct d3dkmthandle device;
__u32 object_count;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
__u64 *fence_values;
#else
__u64 objects;
__u64 fence_values;
#endif
__u64 async_event;
struct d3dddi_waitforsynchronizationobjectfromcpu_flags flags;
};
struct d3dkmt_signalsynchronizationobjectfromcpu {
struct d3dkmthandle device;
__u32 object_count;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
__u64 *fence_values;
#else
__u64 objects;
__u64 fence_values;
#endif
struct d3dddicb_signalflags flags;
};
struct d3dkmt_waitforsynchronizationobjectfromgpu {
struct d3dkmthandle context;
__u32 object_count;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
#else
__u64 objects;
#endif
union {
#ifdef __KERNEL__
__u64 *monitored_fence_values;
#else
__u64 monitored_fence_values;
#endif
__u64 fence_value;
__u64 reserved[8];
};
};
struct d3dkmt_signalsynchronizationobjectfromgpu {
struct d3dkmthandle context;
__u32 object_count;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
#else
__u64 objects;
#endif
union {
#ifdef __KERNEL__
__u64 *monitored_fence_values;
#else
__u64 monitored_fence_values;
#endif
__u64 reserved[8];
};
};
struct d3dkmt_signalsynchronizationobjectfromgpu2 {
__u32 object_count;
__u32 reserved1;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
#else
__u64 objects;
#endif
struct d3dddicb_signalflags flags;
__u32 context_count;
#ifdef __KERNEL__
struct d3dkmthandle *contexts;
#else
__u64 contexts;
#endif
union {
__u64 fence_value;
__u64 cpu_event_handle;
#ifdef __KERNEL__
__u64 *monitored_fence_values;
#else
__u64 monitored_fence_values;
#endif
__u64 reserved[8];
};
};
struct d3dkmt_destroysynchronizationobject {
struct d3dkmthandle sync_object;
};
struct d3dkmt_submitcommandflags {
__u32 null_rendering:1;
__u32 present_redirected:1;
__u32 reserved:30;
};
struct d3dkmt_submitcommand {
__u64 command_buffer;
__u32 command_length;
struct d3dkmt_submitcommandflags flags;
__u64 present_history_token;
__u32 broadcast_context_count;
struct d3dkmthandle broadcast_context[D3DDDI_MAX_BROADCAST_CONTEXT];
__u32 reserved;
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
__u32 priv_drv_data_size;
__u32 num_primaries;
struct d3dkmthandle written_primaries[D3DDDI_MAX_WRITTEN_PRIMARIES];
__u32 num_history_buffers;
__u32 reserved1;
#ifdef __KERNEL__
struct d3dkmthandle *history_buffer_array;
#else
__u64 history_buffer_array;
#endif
};
struct d3dkmt_submitcommandtohwqueue {
struct d3dkmthandle hwqueue;
__u32 reserved;
__u64 hwqueue_progress_fence_id;
__u64 command_buffer;
__u32 command_length;
__u32 priv_drv_data_size;
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
__u32 num_primaries;
__u32 reserved1;
#ifdef __KERNEL__
struct d3dkmthandle *written_primaries;
#else
__u64 written_primaries;
#endif
};
struct d3dkmt_setcontextschedulingpriority {
struct d3dkmthandle context;
int priority;
};
struct d3dkmt_setcontextinprocessschedulingpriority {
struct d3dkmthandle context;
int priority;
};
struct d3dkmt_getcontextschedulingpriority {
struct d3dkmthandle context;
int priority;
};
struct d3dkmt_getcontextinprocessschedulingpriority {
struct d3dkmthandle context;
int priority;
};
struct d3dkmt_setallocationpriority {
struct d3dkmthandle device;
struct d3dkmthandle resource;
#ifdef __KERNEL__
const struct d3dkmthandle *allocation_list;
#else
__u64 allocation_list;
#endif
__u32 allocation_count;
__u32 reserved;
#ifdef __KERNEL__
const __u32 *priorities;
#else
__u64 priorities;
#endif
};
struct d3dkmt_getallocationpriority {
struct d3dkmthandle device;
struct d3dkmthandle resource;
#ifdef __KERNEL__
const struct d3dkmthandle *allocation_list;
#else
__u64 allocation_list;
#endif
__u32 allocation_count;
__u32 reserved;
#ifdef __KERNEL__
__u32 *priorities;
#else
__u64 priorities;
#endif
};
enum d3dkmt_allocationresidencystatus {
_D3DKMT_ALLOCATIONRESIDENCYSTATUS_RESIDENTINGPUMEMORY = 1,
_D3DKMT_ALLOCATIONRESIDENCYSTATUS_RESIDENTINSHAREDMEMORY = 2,
_D3DKMT_ALLOCATIONRESIDENCYSTATUS_NOTRESIDENT = 3,
};
struct d3dkmt_queryallocationresidency {
struct d3dkmthandle device;
struct d3dkmthandle resource;
#ifdef __KERNEL__
struct d3dkmthandle *allocations;
#else
__u64 allocations;
#endif
__u32 allocation_count;
__u32 reserved;
#ifdef __KERNEL__
enum d3dkmt_allocationresidencystatus *residency_status;
#else
__u64 residency_status;
#endif
};
struct d3dddicb_lock2flags {
union {
struct {
__u32 reserved:32;
};
__u32 value;
};
};
struct d3dkmt_lock2 {
struct d3dkmthandle device;
struct d3dkmthandle allocation;
struct d3dddicb_lock2flags flags;
__u32 reserved;
#ifdef __KERNEL__
void *data;
#else
__u64 data;
#endif
};
struct d3dkmt_unlock2 {
struct d3dkmthandle device;
struct d3dkmthandle allocation;
};
enum d3dkmt_device_error_reason {
_D3DKMT_DEVICE_ERROR_REASON_GENERIC = 0x80000000,
_D3DKMT_DEVICE_ERROR_REASON_DRIVER_ERROR = 0x80000006,
};
struct d3dkmt_markdeviceaserror {
struct d3dkmthandle device;
enum d3dkmt_device_error_reason reason;
};
enum d3dkmt_standardallocationtype {
_D3DKMT_STANDARDALLOCATIONTYPE_EXISTINGHEAP = 1,
_D3DKMT_STANDARDALLOCATIONTYPE_CROSSADAPTER = 2,
};
struct d3dkmt_standardallocation_existingheap {
__u64 size;
};
struct d3dkmt_createstandardallocationflags {
union {
struct {
__u32 reserved:32;
};
__u32 value;
};
};
struct d3dkmt_createstandardallocation {
enum d3dkmt_standardallocationtype type;
__u32 reserved;
struct d3dkmt_standardallocation_existingheap existing_heap_data;
struct d3dkmt_createstandardallocationflags flags;
__u32 reserved1;
};
struct d3dddi_allocationinfo2 {
struct d3dkmthandle allocation;
#ifdef __KERNEL__
const void *sysmem;
#else
__u64 sysmem;
#endif
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
__u32 priv_drv_data_size;
__u32 vidpn_source_id;
union {
struct {
__u32 primary:1;
__u32 stereo:1;
__u32 override_priority:1;
__u32 reserved:29;
};
__u32 value;
} flags;
__u64 gpu_virtual_address;
union {
__u32 priority;
__u64 unused;
};
__u64 reserved[5];
};
struct d3dkmt_createallocationflags {
union {
struct {
__u32 create_resource:1;
__u32 create_shared:1;
__u32 non_secure:1;
__u32 create_protected:1;
__u32 restrict_shared_access:1;
__u32 existing_sysmem:1;
__u32 nt_security_sharing:1;
__u32 read_only:1;
__u32 create_write_combined:1;
__u32 create_cached:1;
__u32 swap_chain_back_buffer:1;
__u32 cross_adapter:1;
__u32 open_cross_adapter:1;
__u32 partial_shared_creation:1;
__u32 zeroed:1;
__u32 write_watch:1;
__u32 standard_allocation:1;
__u32 existing_section:1;
__u32 reserved:14;
};
__u32 value;
};
};
struct d3dkmt_createallocation {
struct d3dkmthandle device;
struct d3dkmthandle resource;
struct d3dkmthandle global_share;
__u32 reserved;
#ifdef __KERNEL__
const void *private_runtime_data;
#else
__u64 private_runtime_data;
#endif
__u32 private_runtime_data_size;
__u32 reserved1;
union {
#ifdef __KERNEL__
struct d3dkmt_createstandardallocation *standard_allocation;
const void *priv_drv_data;
#else
__u64 standard_allocation;
__u64 priv_drv_data;
#endif
};
__u32 priv_drv_data_size;
__u32 alloc_count;
#ifdef __KERNEL__
struct d3dddi_allocationinfo2 *allocation_info;
#else
__u64 allocation_info;
#endif
struct d3dkmt_createallocationflags flags;
__u32 reserved2;
__u64 private_runtime_resource_handle;
};
struct d3dddicb_destroyallocation2flags {
union {
struct {
__u32 assume_not_in_use:1;
__u32 synchronous_destroy:1;
__u32 reserved:29;
__u32 system_use_only:1;
};
__u32 value;
};
};
struct d3dkmt_destroyallocation2 {
struct d3dkmthandle device;
struct d3dkmthandle resource;
#ifdef __KERNEL__
const struct d3dkmthandle *allocations;
#else
__u64 allocations;
#endif
__u32 alloc_count;
struct d3dddicb_destroyallocation2flags flags;
};
struct d3dddi_makeresident_flags {
union {
struct {
__u32 cant_trim_further:1;
__u32 must_succeed:1;
__u32 reserved:30;
};
__u32 value;
};
};
struct d3dddi_makeresident {
struct d3dkmthandle paging_queue;
__u32 alloc_count;
#ifdef __KERNEL__
const struct d3dkmthandle *allocation_list;
const __u32 *priority_list;
#else
__u64 allocation_list;
__u64 priority_list;
#endif
struct d3dddi_makeresident_flags flags;
__u64 paging_fence_value;
__u64 num_bytes_to_trim;
};
struct d3dddi_evict_flags {
union {
struct {
__u32 evict_only_if_necessary:1;
__u32 not_written_to:1;
__u32 reserved:30;
};
__u32 value;
};
};
struct d3dkmt_evict {
struct d3dkmthandle device;
__u32 alloc_count;
#ifdef __KERNEL__
const struct d3dkmthandle *allocations;
#else
__u64 allocations;
#endif
struct d3dddi_evict_flags flags;
__u32 reserved;
__u64 num_bytes_to_trim;
};
struct d3dddigpuva_protection_type {
union {
struct {
__u64 write:1;
__u64 execute:1;
__u64 zero:1;
__u64 no_access:1;
__u64 system_use_only:1;
__u64 reserved:59;
};
__u64 value;
};
};
enum d3dddi_updategpuvirtualaddress_operation_type {
_D3DDDI_UPDATEGPUVIRTUALADDRESS_MAP = 0,
_D3DDDI_UPDATEGPUVIRTUALADDRESS_UNMAP = 1,
_D3DDDI_UPDATEGPUVIRTUALADDRESS_COPY = 2,
_D3DDDI_UPDATEGPUVIRTUALADDRESS_MAP_PROTECT = 3,
};
struct d3dddi_updategpuvirtualaddress_operation {
enum d3dddi_updategpuvirtualaddress_operation_type operation;
union {
struct {
__u64 base_address;
__u64 size;
struct d3dkmthandle allocation;
__u64 allocation_offset;
__u64 allocation_size;
} map;
struct {
__u64 base_address;
__u64 size;
struct d3dkmthandle allocation;
__u64 allocation_offset;
__u64 allocation_size;
struct d3dddigpuva_protection_type protection;
__u64 driver_protection;
} map_protect;
struct {
__u64 base_address;
__u64 size;
struct d3dddigpuva_protection_type protection;
} unmap;
struct {
__u64 source_address;
__u64 size;
__u64 dest_address;
} copy;
};
};
enum d3dddigpuva_reservation_type {
_D3DDDIGPUVA_RESERVE_NO_ACCESS = 0,
_D3DDDIGPUVA_RESERVE_ZERO = 1,
_D3DDDIGPUVA_RESERVE_NO_COMMIT = 2
};
struct d3dkmt_updategpuvirtualaddress {
struct d3dkmthandle device;
struct d3dkmthandle context;
struct d3dkmthandle fence_object;
__u32 num_operations;
#ifdef __KERNEL__
struct d3dddi_updategpuvirtualaddress_operation *operations;
#else
__u64 operations;
#endif
__u32 reserved0;
__u32 reserved1;
__u64 reserved2;
__u64 fence_value;
union {
struct {
__u32 do_not_wait:1;
__u32 reserved:31;
};
__u32 value;
} flags;
__u32 reserved3;
};
struct d3dddi_mapgpuvirtualaddress {
struct d3dkmthandle paging_queue;
__u64 base_address;
__u64 minimum_address;
__u64 maximum_address;
struct d3dkmthandle allocation;
__u64 offset_in_pages;
__u64 size_in_pages;
struct d3dddigpuva_protection_type protection;
__u64 driver_protection;
__u32 reserved0;
__u64 reserved1;
__u64 virtual_address;
__u64 paging_fence_value;
};
struct d3dddi_reservegpuvirtualaddress {
struct d3dkmthandle adapter;
__u64 base_address;
__u64 minimum_address;
__u64 maximum_address;
__u64 size;
enum d3dddigpuva_reservation_type reservation_type;
__u64 driver_protection;
__u64 virtual_address;
__u64 paging_fence_value;
};
struct d3dkmt_freegpuvirtualaddress {
struct d3dkmthandle adapter;
__u32 reserved;
__u64 base_address;
__u64 size;
};
enum d3dkmt_memory_segment_group {
_D3DKMT_MEMORY_SEGMENT_GROUP_LOCAL = 0,
_D3DKMT_MEMORY_SEGMENT_GROUP_NON_LOCAL = 1
};
struct d3dkmt_queryvideomemoryinfo {
__u64 process;
struct d3dkmthandle adapter;
enum d3dkmt_memory_segment_group memory_segment_group;
__u64 budget;
__u64 current_usage;
__u64 current_reservation;
__u64 available_for_reservation;
__u32 physical_adapter_index;
};
struct d3dkmt_adaptertype {
union {
struct {
__u32 render_supported:1;
__u32 display_supported:1;
__u32 software_device:1;
__u32 post_device:1;
__u32 hybrid_discrete:1;
__u32 hybrid_integrated:1;
__u32 indirect_display_device:1;
__u32 paravirtualized:1;
__u32 acg_supported:1;
__u32 support_set_timings_from_vidpn:1;
__u32 detachable:1;
__u32 compute_only:1;
__u32 prototype:1;
__u32 reserved:19;
};
__u32 value;
};
};
enum kmtqueryadapterinfotype {
_KMTQAITYPE_UMDRIVERPRIVATE = 0,
_KMTQAITYPE_ADAPTERTYPE = 15,
_KMTQAITYPE_ADAPTERTYPE_RENDER = 57
};
struct d3dkmt_queryadapterinfo {
struct d3dkmthandle adapter;
enum kmtqueryadapterinfotype type;
#ifdef __KERNEL__
void *private_data;
#else
__u64 private_data;
#endif
__u32 private_data_size;
};
#pragma pack(push, 1)
struct dxgk_gpuclockdata_flags {
union {
struct {
__u32 context_management_processor:1;
__u32 reserved:31;
};
__u32 value;
};
};
struct dxgk_gpuclockdata {
__u64 gpu_frequency;
__u64 gpu_clock_counter;
__u64 cpu_clock_counter;
struct dxgk_gpuclockdata_flags flags;
} __packed;
struct d3dkmt_queryclockcalibration {
struct d3dkmthandle adapter;
__u32 node_ordinal;
__u32 physical_adapter_index;
struct dxgk_gpuclockdata clock_data;
};
#pragma pack(pop)
struct d3dkmt_flushheaptransitions {
struct d3dkmthandle adapter;
};
struct d3dddi_openallocationinfo2 {
struct d3dkmthandle allocation;
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
__u32 priv_drv_data_size;
__u64 gpu_va;
__u64 reserved[6];
};
struct d3dddi_updateallocproperty_flags {
union {
struct {
__u32 accessed_physically:1;
__u32 reserved:31;
};
__u32 value;
};
};
struct d3dddi_segmentpreference {
union {
struct {
__u32 segment_id0:5;
__u32 direction0:1;
__u32 segment_id1:5;
__u32 direction1:1;
__u32 segment_id2:5;
__u32 direction2:1;
__u32 segment_id3:5;
__u32 direction3:1;
__u32 segment_id4:5;
__u32 direction4:1;
__u32 reserved:2;
};
__u32 value;
};
};
struct d3dddi_updateallocproperty {
struct d3dkmthandle paging_queue;
struct d3dkmthandle allocation;
__u32 supported_segment_set;
struct d3dddi_segmentpreference preferred_segment;
struct d3dddi_updateallocproperty_flags flags;
__u64 paging_fence_value;
union {
struct {
__u32 set_accessed_physically:1;
__u32 set_supported_segmentSet:1;
__u32 set_preferred_segment:1;
__u32 reserved:29;
};
__u32 property_mask_value;
};
};
enum d3dkmt_offer_priority {
_D3DKMT_OFFER_PRIORITY_LOW = 1,
_D3DKMT_OFFER_PRIORITY_NORMAL = 2,
_D3DKMT_OFFER_PRIORITY_HIGH = 3,
_D3DKMT_OFFER_PRIORITY_AUTO = 4,
};
struct d3dkmt_offer_flags {
union {
struct {
__u32 offer_immediately:1;
__u32 allow_decommit:1;
__u32 reserved:30;
};
__u32 value;
};
};
struct d3dkmt_offerallocations {
struct d3dkmthandle device;
__u32 reserved;
#ifdef __KERNEL__
struct d3dkmthandle *resources;
const struct d3dkmthandle *allocations;
#else
__u64 resources;
__u64 allocations;
#endif
__u32 allocation_count;
enum d3dkmt_offer_priority priority;
struct d3dkmt_offer_flags flags;
__u32 reserved1;
};
enum d3dddi_reclaim_result {
_D3DDDI_RECLAIM_RESULT_OK = 0,
_D3DDDI_RECLAIM_RESULT_DISCARDED = 1,
_D3DDDI_RECLAIM_RESULT_NOT_COMMITTED = 2,
};
struct d3dkmt_reclaimallocations2 {
struct d3dkmthandle paging_queue;
__u32 allocation_count;
#ifdef __KERNEL__
struct d3dkmthandle *resources;
struct d3dkmthandle *allocations;
#else
__u64 resources;
__u64 allocations;
#endif
union {
#ifdef __KERNEL__
__u32 *discarded;
enum d3dddi_reclaim_result *results;
#else
__u64 discarded;
__u64 results;
#endif
};
__u64 paging_fence_value;
};
struct d3dkmt_changevideomemoryreservation {
__u64 process;
struct d3dkmthandle adapter;
enum d3dkmt_memory_segment_group memory_segment_group;
__u64 reservation;
__u32 physical_adapter_index;
};
struct d3dkmt_createhwqueue {
struct d3dkmthandle context;
struct d3dddi_createhwqueueflags flags;
__u32 priv_drv_data_size;
__u32 reserved;
#ifdef __KERNEL__
void *priv_drv_data;
#else
__u64 priv_drv_data;
#endif
struct d3dkmthandle queue;
struct d3dkmthandle queue_progress_fence;
#ifdef __KERNEL__
void *queue_progress_fence_cpu_va;
#else
__u64 queue_progress_fence_cpu_va;
#endif
__u64 queue_progress_fence_gpu_va;
};
struct d3dkmt_destroyhwqueue {
struct d3dkmthandle queue;
};
struct d3dkmt_submitwaitforsyncobjectstohwqueue {
struct d3dkmthandle hwqueue;
__u32 object_count;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
__u64 *fence_values;
#else
__u64 objects;
__u64 fence_values;
#endif
};
struct d3dkmt_submitsignalsyncobjectstohwqueue {
struct d3dddicb_signalflags flags;
__u32 hwqueue_count;
#ifdef __KERNEL__
struct d3dkmthandle *hwqueues;
#else
__u64 hwqueues;
#endif
__u32 object_count;
__u32 reserved;
#ifdef __KERNEL__
struct d3dkmthandle *objects;
__u64 *fence_values;
#else
__u64 objects;
__u64 fence_values;
#endif
};
struct d3dkmt_opensyncobjectfromnthandle2 {
__u64 nt_handle;
struct d3dkmthandle device;
struct d3dddi_synchronizationobject_flags flags;
struct d3dkmthandle sync_object;
__u32 reserved1;
union {
struct {
#ifdef __KERNEL__
void *fence_value_cpu_va;
#else
__u64 fence_value_cpu_va;
#endif
__u64 fence_value_gpu_va;
__u32 engine_affinity;
} monitored_fence;
__u64 reserved[8];
};
};
struct d3dkmt_openresourcefromnthandle {
struct d3dkmthandle device;
__u32 reserved;
__u64 nt_handle;
__u32 allocation_count;
__u32 reserved1;
#ifdef __KERNEL__
struct d3dddi_openallocationinfo2 *open_alloc_info;
#else
__u64 open_alloc_info;
#endif
int private_runtime_data_size;
__u32 reserved2;
#ifdef __KERNEL__
void *private_runtime_data;
#else
__u64 private_runtime_data;
#endif
__u32 resource_priv_drv_data_size;
__u32 reserved3;
#ifdef __KERNEL__
void *resource_priv_drv_data;
#else
__u64 resource_priv_drv_data;
#endif
__u32 total_priv_drv_data_size;
#ifdef __KERNEL__
void *total_priv_drv_data;
#else
__u64 total_priv_drv_data;
#endif
struct d3dkmthandle resource;
struct d3dkmthandle keyed_mutex;
#ifdef __KERNEL__
void *keyed_mutex_private_data;
#else
__u64 keyed_mutex_private_data;
#endif
__u32 keyed_mutex_private_data_size;
struct d3dkmthandle sync_object;
};
struct d3dkmt_queryresourceinfofromnthandle {
struct d3dkmthandle device;
__u32 reserved;
__u64 nt_handle;
#ifdef __KERNEL__
void *private_runtime_data;
#else
__u64 private_runtime_data;
#endif
__u32 private_runtime_data_size;
__u32 total_priv_drv_data_size;
__u32 resource_priv_drv_data_size;
__u32 allocation_count;
};
struct d3dkmt_shareobjects {
__u32 object_count;
__u32 reserved;
#ifdef __KERNEL__
const struct d3dkmthandle *objects;
void *object_attr; /* security attributes */
#else
__u64 objects;
__u64 object_attr;
#endif
__u32 desired_access;
__u32 reserved1;
#ifdef __KERNEL__
__u64 *shared_handle; /* output file descriptors */
#else
__u64 shared_handle;
#endif
};
union d3dkmt_enumadapters_filter {
struct {
__u64 include_compute_only:1;
__u64 include_display_only:1;
__u64 reserved:62;
};
__u64 value;
};
struct d3dkmt_enumadapters3 {
union d3dkmt_enumadapters_filter filter;
__u32 adapter_count;
__u32 reserved;
#ifdef __KERNEL__
struct d3dkmt_adapterinfo *adapters;
#else
__u64 adapters;
#endif
};
enum d3dkmt_querystatistics_type {
_D3DKMT_QUERYSTATISTICS_ADAPTER = 0,
_D3DKMT_QUERYSTATISTICS_PROCESS = 1,
_D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER = 2,
_D3DKMT_QUERYSTATISTICS_SEGMENT = 3,
_D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT = 4,
_D3DKMT_QUERYSTATISTICS_NODE = 5,
_D3DKMT_QUERYSTATISTICS_PROCESS_NODE = 6,
_D3DKMT_QUERYSTATISTICS_VIDPNSOURCE = 7,
_D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE = 8,
_D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_GROUP = 9,
_D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER = 10,
};
struct d3dkmt_querystatistics_result {
char size[0x308];
};
struct d3dkmt_querystatistics {
union {
struct {
enum d3dkmt_querystatistics_type type;
struct winluid adapter_luid;
__u64 process;
struct d3dkmt_querystatistics_result result;
};
char size[0x328];
};
};
struct d3dkmt_shareobjectwithhost {
struct d3dkmthandle device_handle;
struct d3dkmthandle object_handle;
__u64 reserved;
__u64 object_vail_nt_handle;
};
struct d3dkmt_createsyncfile {
struct d3dkmthandle device;
struct d3dkmthandle monitored_fence;
__u64 fence_value;
__u64 sync_file_handle; /* out */
};
struct d3dkmt_waitsyncfile {
__u64 sync_file_handle;
struct d3dkmthandle context;
__u32 reserved;
};
struct d3dkmt_opensyncobjectfromsyncfile {
__u64 sync_file_handle;
struct d3dkmthandle device;
struct d3dkmthandle syncobj; /* out */
__u64 fence_value; /* out */
#ifdef __KERNEL__
void *fence_value_cpu_va; /* out */
#else
__u64 fence_value_cpu_va; /* out */
#endif
__u64 fence_value_gpu_va; /* out */
};
struct d3dkmt_enumprocesses {
struct winluid adapter_luid;
#ifdef __KERNEL__
__u32 *buffer;
#else
__u64 buffer;
#endif
__u64 buffer_count;
};
enum dxgk_feature_id {
_DXGK_FEATURE_HWSCH = 0,
_DXGK_FEATURE_PAGE_BASED_MEMORY_MANAGER = 32,
_DXGK_FEATURE_KERNEL_MODE_TESTING = 33,
_DXGK_FEATURE_MAX
};
struct dxgk_isfeatureenabled_result {
__u16 version;
union {
struct {
__u16 enabled : 1;
__u16 known_feature : 1;
__u16 supported_by_driver : 1;
__u16 supported_on_config : 1;
__u16 reserved : 12;
};
__u16 value;
};
};
struct d3dkmt_isfeatureenabled {
struct d3dkmthandle adapter;
enum dxgk_feature_id feature_id;
struct dxgk_isfeatureenabled_result result;
};
struct d3dkmt_invalidatecache {
struct d3dkmthandle device;
struct d3dkmthandle allocation;
__u64 offset;
__u64 length;
};
/*
* Dxgkrnl Graphics Port Driver ioctl definitions
*
*/
#define LX_DXOPENADAPTERFROMLUID \
_IOWR(0x47, 0x01, struct d3dkmt_openadapterfromluid)
#define LX_DXCREATEDEVICE \
_IOWR(0x47, 0x02, struct d3dkmt_createdevice)
#define LX_DXCREATECONTEXTVIRTUAL \
_IOWR(0x47, 0x04, struct d3dkmt_createcontextvirtual)
#define LX_DXDESTROYCONTEXT \
_IOWR(0x47, 0x05, struct d3dkmt_destroycontext)
#define LX_DXCREATEALLOCATION \
_IOWR(0x47, 0x06, struct d3dkmt_createallocation)
#define LX_DXCREATEPAGINGQUEUE \
_IOWR(0x47, 0x07, struct d3dkmt_createpagingqueue)
#define LX_DXRESERVEGPUVIRTUALADDRESS \
_IOWR(0x47, 0x08, struct d3dddi_reservegpuvirtualaddress)
#define LX_DXQUERYADAPTERINFO \
_IOWR(0x47, 0x09, struct d3dkmt_queryadapterinfo)
#define LX_DXQUERYVIDEOMEMORYINFO \
_IOWR(0x47, 0x0a, struct d3dkmt_queryvideomemoryinfo)
#define LX_DXMAKERESIDENT \
_IOWR(0x47, 0x0b, struct d3dddi_makeresident)
#define LX_DXMAPGPUVIRTUALADDRESS \
_IOWR(0x47, 0x0c, struct d3dddi_mapgpuvirtualaddress)
#define LX_DXESCAPE \
_IOWR(0x47, 0x0d, struct d3dkmt_escape)
#define LX_DXGETDEVICESTATE \
_IOWR(0x47, 0x0e, struct d3dkmt_getdevicestate)
#define LX_DXSUBMITCOMMAND \
_IOWR(0x47, 0x0f, struct d3dkmt_submitcommand)
#define LX_DXCREATESYNCHRONIZATIONOBJECT \
_IOWR(0x47, 0x10, struct d3dkmt_createsynchronizationobject2)
#define LX_DXSIGNALSYNCHRONIZATIONOBJECT \
_IOWR(0x47, 0x11, struct d3dkmt_signalsynchronizationobject2)
#define LX_DXWAITFORSYNCHRONIZATIONOBJECT \
_IOWR(0x47, 0x12, struct d3dkmt_waitforsynchronizationobject2)
#define LX_DXDESTROYALLOCATION2 \
_IOWR(0x47, 0x13, struct d3dkmt_destroyallocation2)
#define LX_DXENUMADAPTERS2 \
_IOWR(0x47, 0x14, struct d3dkmt_enumadapters2)
#define LX_DXCLOSEADAPTER \
_IOWR(0x47, 0x15, struct d3dkmt_closeadapter)
#define LX_DXCHANGEVIDEOMEMORYRESERVATION \
_IOWR(0x47, 0x16, struct d3dkmt_changevideomemoryreservation)
#define LX_DXCREATEHWQUEUE \
_IOWR(0x47, 0x18, struct d3dkmt_createhwqueue)
#define LX_DXDESTROYHWQUEUE \
_IOWR(0x47, 0x1b, struct d3dkmt_destroyhwqueue)
#define LX_DXDESTROYPAGINGQUEUE \
_IOWR(0x47, 0x1c, struct d3dddi_destroypagingqueue)
#define LX_DXDESTROYDEVICE \
_IOWR(0x47, 0x19, struct d3dkmt_destroydevice)
#define LX_DXDESTROYSYNCHRONIZATIONOBJECT \
_IOWR(0x47, 0x1d, struct d3dkmt_destroysynchronizationobject)
#define LX_DXEVICT \
_IOWR(0x47, 0x1e, struct d3dkmt_evict)
#define LX_DXFLUSHHEAPTRANSITIONS \
_IOWR(0x47, 0x1f, struct d3dkmt_flushheaptransitions)
#define LX_DXFREEGPUVIRTUALADDRESS \
_IOWR(0x47, 0x20, struct d3dkmt_freegpuvirtualaddress)
#define LX_DXGETCONTEXTINPROCESSSCHEDULINGPRIORITY \
_IOWR(0x47, 0x21, struct d3dkmt_getcontextinprocessschedulingpriority)
#define LX_DXGETCONTEXTSCHEDULINGPRIORITY \
_IOWR(0x47, 0x22, struct d3dkmt_getcontextschedulingpriority)
#define LX_DXINVALIDATECACHE \
_IOWR(0x47, 0x24, struct d3dkmt_invalidatecache)
#define LX_DXLOCK2 \
_IOWR(0x47, 0x25, struct d3dkmt_lock2)
#define LX_DXMARKDEVICEASERROR \
_IOWR(0x47, 0x26, struct d3dkmt_markdeviceaserror)
#define LX_DXOFFERALLOCATIONS \
_IOWR(0x47, 0x27, struct d3dkmt_offerallocations)
#define LX_DXQUERYALLOCATIONRESIDENCY \
_IOWR(0x47, 0x2a, struct d3dkmt_queryallocationresidency)
#define LX_DXRECLAIMALLOCATIONS2 \
_IOWR(0x47, 0x2c, struct d3dkmt_reclaimallocations2)
#define LX_DXSETALLOCATIONPRIORITY \
_IOWR(0x47, 0x2e, struct d3dkmt_setallocationpriority)
#define LX_DXSETCONTEXTINPROCESSSCHEDULINGPRIORITY \
_IOWR(0x47, 0x2f, struct d3dkmt_setcontextinprocessschedulingpriority)
#define LX_DXSETCONTEXTSCHEDULINGPRIORITY \
_IOWR(0x47, 0x30, struct d3dkmt_setcontextschedulingpriority)
#define LX_DXSIGNALSYNCHRONIZATIONOBJECTFROMCPU \
_IOWR(0x47, 0x31, struct d3dkmt_signalsynchronizationobjectfromcpu)
#define LX_DXSIGNALSYNCHRONIZATIONOBJECTFROMGPU \
_IOWR(0x47, 0x32, struct d3dkmt_signalsynchronizationobjectfromgpu)
#define LX_DXSIGNALSYNCHRONIZATIONOBJECTFROMGPU2 \
_IOWR(0x47, 0x33, struct d3dkmt_signalsynchronizationobjectfromgpu2)
#define LX_DXSUBMITCOMMANDTOHWQUEUE \
_IOWR(0x47, 0x34, struct d3dkmt_submitcommandtohwqueue)
#define LX_DXSUBMITSIGNALSYNCOBJECTSTOHWQUEUE \
_IOWR(0x47, 0x35, struct d3dkmt_submitsignalsyncobjectstohwqueue)
#define LX_DXSUBMITWAITFORSYNCOBJECTSTOHWQUEUE \
_IOWR(0x47, 0x36, struct d3dkmt_submitwaitforsyncobjectstohwqueue)
#define LX_DXUNLOCK2 \
_IOWR(0x47, 0x37, struct d3dkmt_unlock2)
#define LX_DXUPDATEALLOCPROPERTY \
_IOWR(0x47, 0x38, struct d3dddi_updateallocproperty)
#define LX_DXUPDATEGPUVIRTUALADDRESS \
_IOWR(0x47, 0x39, struct d3dkmt_updategpuvirtualaddress)
#define LX_DXWAITFORSYNCHRONIZATIONOBJECTFROMCPU \
_IOWR(0x47, 0x3a, struct d3dkmt_waitforsynchronizationobjectfromcpu)
#define LX_DXWAITFORSYNCHRONIZATIONOBJECTFROMGPU \
_IOWR(0x47, 0x3b, struct d3dkmt_waitforsynchronizationobjectfromgpu)
#define LX_DXGETALLOCATIONPRIORITY \
_IOWR(0x47, 0x3c, struct d3dkmt_getallocationpriority)
#define LX_DXQUERYCLOCKCALIBRATION \
_IOWR(0x47, 0x3d, struct d3dkmt_queryclockcalibration)
#define LX_DXENUMADAPTERS3 \
_IOWR(0x47, 0x3e, struct d3dkmt_enumadapters3)
#define LX_DXSHAREOBJECTS \
_IOWR(0x47, 0x3f, struct d3dkmt_shareobjects)
#define LX_DXOPENSYNCOBJECTFROMNTHANDLE2 \
_IOWR(0x47, 0x40, struct d3dkmt_opensyncobjectfromnthandle2)
#define LX_DXQUERYRESOURCEINFOFROMNTHANDLE \
_IOWR(0x47, 0x41, struct d3dkmt_queryresourceinfofromnthandle)
#define LX_DXOPENRESOURCEFROMNTHANDLE \
_IOWR(0x47, 0x42, struct d3dkmt_openresourcefromnthandle)
#define LX_DXQUERYSTATISTICS \
_IOWR(0x47, 0x43, struct d3dkmt_querystatistics)
#define LX_DXSHAREOBJECTWITHHOST \
_IOWR(0x47, 0x44, struct d3dkmt_shareobjectwithhost)
#define LX_DXCREATESYNCFILE \
_IOWR(0x47, 0x45, struct d3dkmt_createsyncfile)
#define LX_DXWAITSYNCFILE \
_IOWR(0x47, 0x46, struct d3dkmt_waitsyncfile)
#define LX_DXOPENSYNCOBJECTFROMSYNCFILE \
_IOWR(0x47, 0x47, struct d3dkmt_opensyncobjectfromsyncfile)
#define LX_DXENUMPROCESSES \
_IOWR(0x47, 0x48, struct d3dkmt_enumprocesses)
#define LX_ISFEATUREENABLED \
_IOWR(0x47, 0x49, struct d3dkmt_isfeatureenabled)
#endif /* _D3DKMTHK_H */