1 module aurora.directx.d3d12.d3d12;
2 
3 public import aurora.directx.com;
4 public import aurora.directx.dxgi.dxgiformat;
5 public import aurora.directx.dxgi.dxgicommon;
6 public import aurora.directx.d3d.d3dcommon;
7 
8 public:
9 
10 ///
11 /// Constants
12 ///
13 
14 enum int D3D12_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff;
15 enum int D3D12_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff;
16 enum int D3D12_8BIT_INDEX_STRIP_CUT_VALUE = 0xff;
17 enum int D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff;
18 enum int D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9;
19 enum int D3D12_CLIP_OR_CULL_DISTANCE_COUNT = 8;
20 enum int D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2;
21 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14;
22 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4;
23 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32;
24 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15;
25 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16;
26 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
27 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15;
28 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
29 enum int D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
30 enum int D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64;
31 enum int D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
32 enum int D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1;
33 enum int D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
34 enum int D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
35 enum int D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32;
36 enum int D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1;
37 enum int D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128;
38 enum int D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1;
39 enum int D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1;
40 enum int D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128;
41 enum int D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1;
42 enum int D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16;
43 enum int D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1;
44 enum int D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1;
45 enum int D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT = 16;
46 enum int D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32;
47 enum int D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4;
48 enum int D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32;
49 enum int D3D12_COMMONSHADER_TEMP_REGISTER_COUNT = 4096;
50 enum int D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3;
51 enum int D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3;
52 enum int D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10;
53 enum int D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10;
54 enum int D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8;
55 enum int D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7;
56 enum int D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256;
57 enum int D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256;
58 enum int D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP = 64;
59 enum int D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240;
60 enum int D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP = 68;
61 enum int D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224;
62 enum int D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP = 72;
63 enum int D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208;
64 enum int D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP = 76;
65 enum int D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192;
66 enum int D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP = 84;
67 enum int D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176;
68 enum int D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP = 92;
69 enum int D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160;
70 enum int D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP = 100;
71 enum int D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144;
72 enum int D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP = 112;
73 enum int D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128;
74 enum int D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP = 128;
75 enum int D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112;
76 enum int D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP = 144;
77 enum int D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96;
78 enum int D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP = 168;
79 enum int D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80;
80 enum int D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP = 204;
81 enum int D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64;
82 enum int D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP = 256;
83 enum int D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48;
84 enum int D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP = 340;
85 enum int D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32;
86 enum int D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP = 512;
87 enum int D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16;
88 enum int D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP = 768;
89 enum int D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION = 1;
90 enum int D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT = 256;
91 enum int D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP = 768;
92 enum int D3D12_CS_4_X_THREAD_GROUP_MAX_X = 768;
93 enum int D3D12_CS_4_X_THREAD_GROUP_MAX_Y = 768;
94 enum int D3D12_CS_4_X_UAV_REGISTER_COUNT = 1;
95 enum int D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION = 65535;
96 enum int D3D12_CS_TGSM_REGISTER_COUNT = 8192;
97 enum int D3D12_CS_TGSM_REGISTER_READS_PER_INST = 1;
98 enum int D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS = 1;
99 enum int D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS = 1;
100 enum int D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS = 3;
101 enum int D3D12_CS_THREADGROUPID_REGISTER_COUNT = 1;
102 enum int D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS = 1;
103 enum int D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT = 1;
104 enum int D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS = 3;
105 enum int D3D12_CS_THREADIDINGROUP_REGISTER_COUNT = 1;
106 enum int D3D12_CS_THREADID_REGISTER_COMPONENTS = 3;
107 enum int D3D12_CS_THREADID_REGISTER_COUNT = 1;
108 enum int D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP = 1024;
109 enum int D3D12_CS_THREAD_GROUP_MAX_X = 1024;
110 enum int D3D12_CS_THREAD_GROUP_MAX_Y = 1024;
111 enum int D3D12_CS_THREAD_GROUP_MAX_Z = 64;
112 enum int D3D12_CS_THREAD_GROUP_MIN_X = 1;
113 enum int D3D12_CS_THREAD_GROUP_MIN_Y = 1;
114 enum int D3D12_CS_THREAD_GROUP_MIN_Z = 1;
115 enum int D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL = 16384;
116 enum float D3D12_DEFAULT_BLEND_FACTOR_ALPHA = 1.0f;
117 enum float D3D12_DEFAULT_BLEND_FACTOR_BLUE = 1.0f;
118 enum float D3D12_DEFAULT_BLEND_FACTOR_GREEN = 1.0f;
119 enum float D3D12_DEFAULT_BLEND_FACTOR_RED = 1.0f;
120 enum float D3D12_DEFAULT_BORDER_COLOR_COMPONENT = 0.0f;
121 enum int D3D12_DEFAULT_DEPTH_BIAS = 0;
122 enum float D3D12_DEFAULT_DEPTH_BIAS_CLAMP = 0.0f;
123 enum int D3D12_DEFAULT_MAX_ANISOTROPY = 16;
124 enum float D3D12_DEFAULT_MIP_LOD_BIAS = 0.0f;
125 enum int D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 4194304;
126 enum int D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;
127 enum int D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536;
128 enum int D3D12_DEFAULT_SAMPLE_MASK = 0xffffffff;
129 enum int D3D12_DEFAULT_SCISSOR_ENDX = 0;
130 enum int D3D12_DEFAULT_SCISSOR_ENDY = 0;
131 enum int D3D12_DEFAULT_SCISSOR_STARTX = 0;
132 enum int D3D12_DEFAULT_SCISSOR_STARTY = 0;
133 enum float D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS = 0.0f;
134 enum int D3D12_DEFAULT_STENCIL_READ_MASK = 0xff;
135 enum int D3D12_DEFAULT_STENCIL_REFERENCE = 0;
136 enum int D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff;
137 enum int D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;
138 enum int D3D12_DEFAULT_VIEWPORT_HEIGHT = 0;
139 enum float D3D12_DEFAULT_VIEWPORT_MAX_DEPTH = 0.0f;
140 enum float D3D12_DEFAULT_VIEWPORT_MIN_DEPTH = 0.0f;
141 enum int D3D12_DEFAULT_VIEWPORT_TOPLEFTX = 0;
142 enum int D3D12_DEFAULT_VIEWPORT_TOPLEFTY = 0;
143 enum int D3D12_DEFAULT_VIEWPORT_WIDTH = 0;
144 enum int D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff;
145 enum int D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END = 0xfffffff7;
146 enum int D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0;
147 enum int D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968;
148 enum int D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS = 4;
149 enum int D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32;
150 enum int D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT = 32;
151 enum int D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST = 2;
152 enum int D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS = 1;
153 enum int D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS = 3;
154 enum int D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT = 32;
155 enum int D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT = 1;
156 enum int D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST = 2;
157 enum int D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS = 1;
158 enum int D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4;
159 enum int D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32;
160 enum int D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT = 32;
161 enum int D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2;
162 enum int D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1;
163 enum int D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1;
164 enum int D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
165 enum int D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1;
166 enum int D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2;
167 enum int D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1;
168 enum int D3D12_DS_OUTPUT_REGISTER_COMPONENTS = 4;
169 enum int D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
170 enum int D3D12_DS_OUTPUT_REGISTER_COUNT = 32;
171 enum float D3D12_float16_FUSED_TOLERANCE_IN_ULP = 0.6;
172 enum float D3D12_float32_MAX = 3.402823466e+38f;
173 enum float D3D12_float32_TO_INTEGER_TOLERANCE_IN_ULP = 0.6f;
174 enum float D3D12_float_TO_SRGB_EXPONENT_DENOMINATOR = 2.4f;
175 enum float D3D12_float_TO_SRGB_EXPONENT_NUMERATOR = 1.0f;
176 enum float D3D12_float_TO_SRGB_OFFSET = 0.055f;
177 enum float D3D12_float_TO_SRGB_SCALE_1 = 12.92f;
178 enum float D3D12_float_TO_SRGB_SCALE_2 = 1.055f;
179 enum float D3D12_float_TO_SRGB_THRESHOLD = 0.0031308f;
180 enum float D3D12_FTOI_INSTRUCTION_MAX_INPUT = 2147483647.999f;
181 enum float D3D12_FTOI_INSTRUCTION_MIN_INPUT = -2147483648.999f;
182 enum float D3D12_FTOU_INSTRUCTION_MAX_INPUT = 4294967295.999f;
183 enum float D3D12_FTOU_INSTRUCTION_MIN_INPUT = 0.0f;
184 enum int D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST = 2;
185 enum int D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS = 1;
186 enum int D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS = 1;
187 enum int D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
188 enum int D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT = 1;
189 enum int D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1;
190 enum int D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32;
191 enum int D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1;
192 enum int D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2;
193 enum int D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1;
194 enum int D3D12_GS_INPUT_REGISTER_COMPONENTS = 4;
195 enum int D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
196 enum int D3D12_GS_INPUT_REGISTER_COUNT = 32;
197 enum int D3D12_GS_INPUT_REGISTER_READS_PER_INST = 2;
198 enum int D3D12_GS_INPUT_REGISTER_READ_PORTS = 1;
199 enum int D3D12_GS_INPUT_REGISTER_VERTICES = 32;
200 enum int D3D12_GS_MAX_INSTANCE_COUNT = 32;
201 enum int D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES = 1024;
202 enum int D3D12_GS_OUTPUT_ELEMENTS = 32;
203 enum int D3D12_GS_OUTPUT_REGISTER_COMPONENTS = 4;
204 enum int D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
205 enum int D3D12_GS_OUTPUT_REGISTER_COUNT = 32;
206 enum int D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT = 32;
207 enum int D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT = 32;
208 enum int D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS = 4;
209 enum int D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32;
210 enum int D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST = 2;
211 enum int D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS = 1;
212 enum int D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xffffffff;
213 enum int D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS = 1;
214 enum int D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
215 enum int D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT = 1;
216 enum int D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST = 2;
217 enum int D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS = 1;
218 enum int D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS = 1;
219 enum int D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
220 enum int D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT = 1;
221 enum int D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST = 2;
222 enum int D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS = 1;
223 enum int D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1;
224 enum int D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
225 enum int D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1;
226 enum int D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2;
227 enum int D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1;
228 enum int D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xffffffff;
229 enum float D3D12_HS_MAXTESSFACTOR_LOWER_BOUND = 1.0f;
230 enum float D3D12_HS_MAXTESSFACTOR_UPPER_BOUND = 64.0f;
231 enum int D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968;
232 enum int D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS = 1;
233 enum int D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
234 enum int D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT = 1;
235 enum int D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST = 2;
236 enum int D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS = 1;
237 enum int D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4;
238 enum int D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32;
239 enum int D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT = 32;
240 enum int D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2;
241 enum int D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1;
242 enum int D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS = 128;
243 enum int D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0;
244 enum int D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0;
245 enum int D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0;
246 enum int D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1;
247 enum int D3D12_IA_INSTANCE_ID_BIT_COUNT = 32;
248 enum int D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32;
249 enum int D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT = 32;
250 enum int D3D12_IA_PRIMITIVE_ID_BIT_COUNT = 32;
251 enum int D3D12_IA_VERTEX_ID_BIT_COUNT = 32;
252 enum int D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;
253 enum int D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128;
254 enum int D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32;
255 enum int D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff;
256 enum int D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff;
257 enum int D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff;
258 enum int D3D12_KEEP_UNORDERED_ACCESS_VIEWS = 0xffffffff;
259 enum float D3D12_LINEAR_GAMMA = 1.0f;
260 enum int D3D12_MAJOR_VERSION = 12;
261 enum float D3D12_MAX_BORDER_COLOR_COMPONENT = 1.0f;
262 enum float D3D12_MAX_DEPTH = 1.0f;
263 enum int D3D12_MAX_LIVE_STATIC_SAMPLERS = 2032;
264 enum int D3D12_MAX_MAXANISOTROPY = 16;
265 enum int D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
266 enum float D3D12_MAX_POSITION_VALUE = 3.402823466e+34f;
267 enum int D3D12_MAX_ROOT_COST = 64;
268 enum int D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_size_tIER_1 = 1000000;
269 enum int D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_size_tIER_2 = 1000000;
270 enum int D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE = 2048;
271 enum int D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17;
272 enum int D3D12_MAX_VIEW_INSTANCE_COUNT = 4;
273 enum int D3D12_MINOR_VERSION = 0;
274 enum float D3D12_MIN_BORDER_COLOR_COMPONENT = 0.0f;
275 enum float D3D12_MIN_DEPTH = 0.0f;
276 enum int D3D12_MIN_MAXANISOTROPY = 0;
277 enum float D3D12_MIP_LOD_BIAS_MAX = 15.99f;
278 enum float D3D12_MIP_LOD_BIAS_MIN = -16.0f;
279 enum int D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT = 8;
280 enum int D3D12_MIP_LOD_RANGE_BIT_COUNT = 8;
281 enum float D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH = 1.4f;
282 enum int D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0;
283 enum int D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff;
284 enum int D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8;
285 enum int D3D12_PACKED_TILE = 0xffffffff;
286 enum int D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15;
287 enum int D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16;
288 enum int D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1;
289 enum int D3D12_PS_CS_UAV_REGISTER_COUNT = 8;
290 enum int D3D12_PS_CS_UAV_REGISTER_READS_PER_INST = 1;
291 enum int D3D12_PS_CS_UAV_REGISTER_READ_PORTS = 1;
292 enum int D3D12_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff;
293 enum int D3D12_PS_FRONTFACING_FALSE_VALUE = 0;
294 enum int D3D12_PS_FRONTFACING_TRUE_VALUE = 0xffffffff;
295 enum int D3D12_PS_INPUT_REGISTER_COMPONENTS = 4;
296 enum int D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
297 enum int D3D12_PS_INPUT_REGISTER_COUNT = 32;
298 enum int D3D12_PS_INPUT_REGISTER_READS_PER_INST = 2;
299 enum int D3D12_PS_INPUT_REGISTER_READ_PORTS = 1;
300 enum float D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.0f;
301 enum int D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1;
302 enum int D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32;
303 enum int D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1;
304 enum int D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1;
305 enum int D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32;
306 enum int D3D12_PS_OUTPUT_MASK_REGISTER_COUNT = 1;
307 enum int D3D12_PS_OUTPUT_REGISTER_COMPONENTS = 4;
308 enum int D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
309 enum int D3D12_PS_OUTPUT_REGISTER_COUNT = 8;
310 enum float D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.5f;
311 enum int D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT = 16;
312 enum int D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE = 4096;
313 enum int D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27;
314 enum int D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
315 enum int D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096;
316 enum int D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32;
317 enum int D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32;
318 enum int D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384;
319 enum int D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024;
320 enum int D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
321 enum int D3D12_REQ_MAXANISOTROPY = 16;
322 enum int D3D12_REQ_MIP_LEVELS = 15;
323 enum int D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048;
324 enum int D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096;
325 enum int D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 16384;
326 enum int D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128;
327 enum float D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM = 0.25f;
328 enum int D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048;
329 enum int D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20;
330 enum int D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE = 4096;
331 enum int D3D12_REQ_SUBRESOURCES = 30720;
332 enum int D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048;
333 enum int D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384;
334 enum int D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048;
335 enum int D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384;
336 enum int D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048;
337 enum int D3D12_REQ_TEXTURECUBE_DIMENSION = 16384;
338 enum int D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0;
339 enum int D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff;
340 enum int D3D12_SHADER_MAJOR_VERSION = 5;
341 enum int D3D12_SHADER_MAX_INSTANCES = 65535;
342 enum int D3D12_SHADER_MAX_INTERFACES = 253;
343 enum int D3D12_SHADER_MAX_INTERFACE_CALL_SITES = 4096;
344 enum int D3D12_SHADER_MAX_TYPES = 65535;
345 enum int D3D12_SHADER_MINOR_VERSION = 1;
346 enum int D3D12_SHIFT_INSTRUCTION_PAD_VALUE = 0;
347 enum int D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5;
348 enum int D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
349 enum int D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 65536;
350 enum int D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT = 4096;
351 enum int D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048;
352 enum int D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 512;
353 enum int D3D12_SO_BUFFER_SLOT_COUNT = 4;
354 enum int D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff;
355 enum int D3D12_SO_NO_RASTERIZED_STREAM = 0xffffffff;
356 enum int D3D12_SO_OUTPUT_COMPONENT_COUNT = 128;
357 enum int D3D12_SO_STREAM_COUNT = 4;
358 enum int D3D12_SPEC_DATE_DAY = 14;
359 enum int D3D12_SPEC_DATE_MONTH = 11;
360 enum int D3D12_SPEC_DATE_YEAR = 2014;
361 enum float D3D12_SPEC_VERSION = 1.16;
362 enum float D3D12_SRGB_GAMMA = 2.2f;
363 enum float D3D12_SRGB_TO_float_DENOMINATOR_1 = 12.92f;
364 enum float D3D12_SRGB_TO_float_DENOMINATOR_2 = 1.055f;
365 enum float D3D12_SRGB_TO_float_EXPONENT = 2.4f;
366 enum float D3D12_SRGB_TO_float_OFFSET = 0.055f;
367 enum float D3D12_SRGB_TO_float_THRESHOLD = 0.04045f;
368 enum float D3D12_SRGB_TO_float_TOLERANCE_IN_ULP = 0.5f;
369 enum int D3D12_STANDARD_COMPONENT_BIT_COUNT = 32;
370 enum int D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64;
371 enum int D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4;
372 enum int D3D12_STANDARD_PIXEL_COMPONENT_COUNT = 128;
373 enum int D3D12_STANDARD_PIXEL_ELEMENT_COUNT = 32;
374 enum int D3D12_STANDARD_VECTOR_SIZE = 4;
375 enum int D3D12_STANDARD_VERTEX_ELEMENT_COUNT = 32;
376 enum int D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64;
377 enum int D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8;
378 enum int D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT = 8;
379 enum int D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff;
380 enum int D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0;
381 enum int D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR = 64;
382 enum int D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR = 64;
383 enum int D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR = 63;
384 enum int D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR = 64;
385 enum int D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR = 2;
386 enum int D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR = 1;
387 enum int D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1;
388 enum int D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16;
389 enum int D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256;
390 enum int D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512;
391 enum int D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 65536;
392 enum int D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096;
393 enum int D3D12_UAV_SLOT_COUNT = 64;
394 enum int D3D12_UNBOUND_MEMORY_ACCESS_RESULT = 0;
395 enum int D3D12_VIDEO_DECODE_MAX_ARGUMENTS = 10;
396 enum int D3D12_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN = 0xffffffff;
397 enum int D3D12_VIDEO_PROCESS_MAX_FILTERS = 32;
398 enum int D3D12_VIDEO_PROCESS_STEREO_VIEWS = 2;
399 enum int D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15;
400 enum int D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;
401 enum int D3D12_VIEWPORT_BOUNDS_MAX = 32767;
402 enum int D3D12_VIEWPORT_BOUNDS_MIN = -32768;
403 enum int D3D12_VS_INPUT_REGISTER_COMPONENTS = 4;
404 enum int D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
405 enum int D3D12_VS_INPUT_REGISTER_COUNT = 32;
406 enum int D3D12_VS_INPUT_REGISTER_READS_PER_INST = 2;
407 enum int D3D12_VS_INPUT_REGISTER_READ_PORTS = 1;
408 enum int D3D12_VS_OUTPUT_REGISTER_COMPONENTS = 4;
409 enum int D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
410 enum int D3D12_VS_OUTPUT_REGISTER_COUNT = 32;
411 enum int D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10;
412 enum int D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25;
413 enum int D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25;
414 
415 enum int D3D12_SHADER_COMPONENT_MAPPING_MASK = 0x7;
416 enum int D3D12_SHADER_COMPONENT_MAPPING_SHIFT = 3;
417 enum int D3D12_FILTER_REDUCTION_TYPE_MASK = 0x3;
418 enum int D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7;
419 enum int D3D12_FILTER_TYPE_MASK = 0x3;
420 enum int D3D12_MIN_FILTER_SHIFT = 4;
421 enum int D3D12_MAG_FILTER_SHIFT = 2;
422 enum int D3D12_MIP_FILTER_SHIFT = 0;
423 enum int D3D12_ANISOTROPIC_FILTERING_BIT = 0x40;
424 
425 const IID D3D12ExperimentalShaderModels = { 0x76f5573e, 0xf13a, 0x40f5, [0xb2, 0x97, 0x81, 0xce, 0x9e, 0x18, 0x93, 0x3f]};
426 
427 alias ulong D3D12_GPU_VIRTUAL_ADDRESS;
428 alias D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
429 alias D3D_PRIMITIVE D3D12_PRIMITIVE;
430 alias RECT D3D12_RECT;
431 
432 
433 ///
434 /// Mixins
435 ///
436 
437 ///This macros have not yet been converted to mixins
438 /*
439 #define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*4)) 
440 #define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \
441                                                                 (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<D3D12_SHADER_COMPONENT_MAPPING_SHIFT)| \
442                                                                 (((Src2)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*2))| \
443                                                                 (((Src3)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*3))| \
444                                                                 D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES))
445 #define D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(ComponentToExtract,Mapping) ((D3D12_SHADER_COMPONENT_MAPPING)(Mapping >> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK))
446 #define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3) 
447 #define D3D12_ENCODE_BASIC_FILTER( min, mag, mip, reduction )                                                     \
448                                    ( ( D3D12_FILTER ) (                                                           \
449                                    ( ( ( min ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIN_FILTER_SHIFT ) |           \
450                                    ( ( ( mag ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MAG_FILTER_SHIFT ) |           \
451                                    ( ( ( mip ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIP_FILTER_SHIFT ) |           \
452                                    ( ( ( reduction ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) << D3D12_FILTER_REDUCTION_TYPE_SHIFT ) ) ) 
453 #define D3D12_ENCODE_ANISOTROPIC_FILTER( reduction )                                                  \
454                                          ( ( D3D12_FILTER ) (                                         \
455                                          D3D12_ANISOTROPIC_FILTERING_BIT |                            \
456                                          D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR,         \
457                                                                     D3D12_FILTER_TYPE_LINEAR,         \
458                                                                     D3D12_FILTER_TYPE_LINEAR,         \
459                                                                     reduction ) ) )                     
460 #define D3D12_DECODE_MIN_FILTER( D3D12Filter )                                                              \
461                                  ( ( D3D12_FILTER_TYPE )                                                    \
462                                  ( ( ( D3D12Filter ) >> D3D12_MIN_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) 
463 #define D3D12_DECODE_MAG_FILTER( D3D12Filter )                                                              \
464                                  ( ( D3D12_FILTER_TYPE )                                                    \
465                                  ( ( ( D3D12Filter ) >> D3D12_MAG_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) 
466 #define D3D12_DECODE_MIP_FILTER( D3D12Filter )                                                              \
467                                  ( ( D3D12_FILTER_TYPE )                                                    \
468                                  ( ( ( D3D12Filter ) >> D3D12_MIP_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) 
469 #define D3D12_DECODE_FILTER_REDUCTION( D3D12Filter )                                                        \
470                                  ( ( D3D12_FILTER_REDUCTION_TYPE )                                                      \
471                                  ( ( ( D3D12Filter ) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) ) 
472 #define D3D12_DECODE_IS_COMPARISON_FILTER( D3D12Filter )                                                    \
473                                  ( D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON ) 
474 #define D3D12_DECODE_IS_ANISOTROPIC_FILTER( D3D12Filter )                                               \
475                             ( ( ( D3D12Filter ) & D3D12_ANISOTROPIC_FILTERING_BIT ) &&                  \
476                             ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER( D3D12Filter ) ) &&   \
477                             ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER( D3D12Filter ) ) &&   \
478                             ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIP_FILTER( D3D12Filter ) ) )      
479 */
480 
481 ///
482 /// Functions
483 ///
484 
485 HRESULT D3D12CreateDevice(IUnknown pAdapter, D3D_FEATURE_LEVEL MinimumFeatureLevel, REFIID riid, void** ppDevice );
486 HRESULT D3D12GetDebugInterface(REFIID riid, void** ppvDebug);
487 HRESULT D3D12EnableExperimentalFeatures(uint NumFeatures, const IID* pIIDs, void* pConfigurationStructs, uint* pConfigurationStructSizes);
488 HRESULT D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC* pRootSignature, D3D_ROOT_SIGNATURE_VERSION Version, ID3DBlob* ppBlob, ID3DBlob* ppErrorBlob);
489 HRESULT D3D12CreateRootSignatureDeserializer(const void *pSrcData, size_t SrcDataSizeInBytes, REFIID pRootSignatureDeserializerInterface, void** ppRootSignatureDeserializer);
490 HRESULT D3D12SerializeVersionedRootSignature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature, ID3DBlob* ppBlob, ID3DBlob* ppErrorBlob);
491 HRESULT D3D12CreateVersionedRootSignatureDeserializer(const void *pSrcData, size_t SrcDataSizeInBytes, REFIID pRootSignatureDeserializerInterface, void** ppRootSignatureDeserializer);
492 
493 ///
494 /// Enumerations
495 ///
496 
497 enum D3D12_COMMAND_LIST_TYPE
498 {
499     DIRECT= 0,
500     BUNDLE= 1,
501     COMPUTE= 2,
502     COPY= 3,
503     VIDEO_DECODE= 4,
504     VIDEO_PROCESS= 5
505 }
506 
507 enum D3D12_COMMAND_QUEUE_FLAGS
508 {
509     NONE = 0,
510     DISABLE_GPU_TIMEOUT= 0x1
511 }
512 
513 enum D3D12_COMMAND_QUEUE_PRIORITY
514 {
515     NORMAL= 0,
516     HIGH= 100,
517     GLOBAL_REALTIME= 10000
518 }
519 
520 enum D3D12_PRIMITIVE_TOPOLOGY_TYPE
521 {
522     UNDEFINED= 0,
523     POINT= 1,
524     LINE= 2,
525     TRIANGLE= 3,
526     PATCH= 4
527 }
528 
529 enum D3D12_INPUT_CLASSIFICATION
530 {
531     PER_VERTEX_DATA= 0,
532     PER_INSTANCE_DATA= 1
533 }
534 
535 enum D3D12_FILL_MODE
536 {
537     D3D12_FILL_MODE_WIREFRAME= 2,
538     D3D12_FILL_MODE_SOLID= 3
539 }
540 
541 enum D3D12_CULL_MODE
542 {
543     NONE= 1,
544     FRONT= 2,
545     BACK= 3
546 }
547 
548 enum D3D12_COMPARISON_FUNC
549 {
550     NEVER = 1,
551     LESS = 2,
552     EQUAL = 3,
553     LESS_EQUAL = 4,
554     GREATER = 5,
555     NOT_EQUAL = 6,
556     GREATER_EQUAL = 7,
557     ALWAYS = 8
558 }
559 
560 enum D3D12_DEPTH_WRITE_MASK
561 {
562     ZERO = 0,
563     ALL = 1
564 }
565 
566 enum D3D12_STENCIL_OP
567 {
568     KEEP = 1,
569     ZERO = 2,
570     REPLACE = 3,
571     INCR_SAT = 4,
572     DECR_SAT = 5,
573     INVERT = 6,
574     INCR = 7,
575     DECR = 8
576 }
577 
578 enum D3D12_BLEND
579 {
580     ZERO = 1,
581     ONE = 2,
582     SRC_COLOR = 3,
583     INV_SRC_COLOR = 4,
584     SRC_ALPHA = 5,
585     INV_SRC_ALPHA = 6,
586     DEST_ALPHA = 7,
587     INV_DEST_ALPHA = 8,
588     DEST_COLOR = 9,
589     INV_DEST_COLOR = 10,
590     SRC_ALPHA_SAT = 11,
591     BLEND_FACTOR = 14,
592     INV_BLEND_FACTOR = 15,
593     SRC1_COLOR = 16,
594     INV_SRC1_COLOR = 17,
595     SRC1_ALPHA = 18,
596     INV_SRC1_ALPHA = 19
597 }
598 
599 enum D3D12_BLEND_OP
600 {
601     ADD = 1,
602     SUBTRACT = 2,
603     REV_SUBTRACT = 3,
604     MIN = 4,
605     MAX = 5
606 }
607 
608 enum D3D12_COLOR_WRITE_ENABLE
609 {
610     RED = 1,
611     GREEN = 2,
612     BLUE = 4,
613     ALPHA = 8,
614     ALL = ( ( ( RED | GREEN )  | BLUE )  | ALPHA ) 
615 }
616 
617 enum D3D12_LOGIC_OP
618 {
619     CLEAR = 0,
620     SET = ( CLEAR + 1 ),
621     COPY = ( SET + 1 ),
622     COPY_INVERTED = ( COPY + 1 ),
623     NOOP = ( COPY_INVERTED + 1 ),
624     INVERT = ( NOOP + 1 ),
625     AND = ( INVERT + 1 ),
626     NAND = ( AND + 1 ),
627     OR = ( NAND + 1 ),
628     NOR = ( OR + 1 ),
629     XOR = ( NOR + 1 ),
630     EQUIV = ( XOR + 1 ),
631     AND_REVERSE = ( EQUIV + 1 ),
632     AND_INVERTED = ( AND_REVERSE + 1 ),
633     OR_REVERSE = ( AND_INVERTED + 1 ),
634     OR_INVERTED = ( OR_REVERSE + 1 ) }
635 
636 enum D3D12_CONSERVATIVE_RASTERIZATION_MODE
637 {
638     OFF = 0,
639     ON = 1
640 }
641 
642 enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE
643 {
644     VALUE_DISABLED = 0,
645     VALUE_0xFFFF = 1,
646     VALUE_0xFFFFFFFF = 2
647 }
648 
649 enum D3D12_PIPELINE_STATE_FLAGS
650 {
651     NONE = 0,
652     TOOL_DEBUG = 0x1
653 }
654 
655 enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE
656 {
657     ROOT_SIGNATURE = 0,
658     VS = ( ROOT_SIGNATURE + 1 ),
659     PS = ( VS + 1 ),
660     DS = ( PS + 1 ),
661     HS = ( DS + 1 ),
662     GS = ( HS + 1 ),
663     CS = ( GS + 1 ),
664     STREAM_OUTPUT = ( CS + 1 ),
665     BLEND = ( STREAM_OUTPUT + 1 ),
666     SAMPLE_MASK = ( BLEND + 1 ),
667     RASTERIZER = ( SAMPLE_MASK + 1 ),
668     DEPTH_STENCIL = ( RASTERIZER + 1 ),
669     INPUT_LAYOUT = ( DEPTH_STENCIL + 1 ),
670     IB_STRIP_CUT_VALUE = ( INPUT_LAYOUT + 1 ),
671     PRIMITIVE_TOPOLOGY = ( IB_STRIP_CUT_VALUE + 1 ),
672     RENDER_TARGET_FORMATS = ( PRIMITIVE_TOPOLOGY + 1 ),
673     DEPTH_STENCIL_FORMAT = ( RENDER_TARGET_FORMATS + 1 ),
674     SAMPLE_DESC = ( DEPTH_STENCIL_FORMAT + 1 ),
675     NODE_MASK = ( SAMPLE_DESC + 1 ),
676     CACHED_PSO = ( NODE_MASK + 1 ),
677     FLAGS = ( CACHED_PSO + 1 ),
678     DEPTH_STENCIL1 = ( FLAGS + 1 ),
679     VIEW_INSTANCING = ( DEPTH_STENCIL1 + 1 ),
680     MAX_VALID = ( VIEW_INSTANCING + 1 )
681 }
682 
683 enum D3D12_FEATURE
684 {
685     D3D12_OPTIONS = 0,
686     ARCHITECTURE = 1,
687     FEATURE_LEVELS = 2,
688     FORMAT_SUPPORT = 3,
689     MULTISAMPLE_QUALITY_LEVELS = 4,
690     FORMAT_INFO = 5,
691     GPU_VIRTUAL_ADDRESS_SUPPORT = 6,
692     SHADER_MODEL = 7,
693     D3D12_OPTIONS1 = 8,
694     ROOT_SIGNATURE = 12,
695     ARCHITECTURE1 = 16,
696     D3D12_OPTIONS2 = 18,
697     SHADER_CACHE = 19,
698     COMMAND_QUEUE_PRIORITY = 20,
699     D3D12_OPTIONS3 = 21,
700     EXISTING_HEAPS = 22
701 }
702 
703 enum D3D12_SHADER_MIN_PRECISION_SUPPORT
704 {
705     SUPPORT_NONE = 0,
706     SUPPORT_10_BIT = 0x1,
707     SUPPORT_16_BIT = 0x2
708 }
709 
710 enum D3D12_TILED_RESOURCES_TIER
711 {
712     TIER_NOT_SUPPORTED = 0,
713     TIER_1 = 1,
714     TIER_2 = 2,
715     TIER_3 = 3
716 }
717 
718 enum D3D12_RESOURCE_BINDING_TIER
719 {
720     TIER_1 = 1,
721     TIER_2 = 2,
722     TIER_3 = 3
723 }
724 
725 enum D3D12_CONSERVATIVE_RASTERIZATION_TIER
726 {
727     TIER_NOT_SUPPORTED = 0,
728     TIER_1 = 1,
729     TIER_2 = 2,
730     TIER_3 = 3
731 }
732 
733 enum D3D12_FORMAT_SUPPORT1
734 {
735     NONE = 0,
736     BUFFER = 0x1,
737     IA_VERTEX_BUFFER = 0x2,
738     IA_INDEX_BUFFER = 0x4,
739     SO_BUFFER = 0x8,
740     TEXTURE1D = 0x10,
741     TEXTURE2D = 0x20,
742     TEXTURE3D = 0x40,
743     TEXTURECUBE = 0x80,
744     SHADER_LOAD = 0x100,
745     SHADER_SAMPLE = 0x200,
746     SHADER_SAMPLE_COMPARISON = 0x400,
747     SHADER_SAMPLE_MONO_TEXT = 0x800,
748     MIP = 0x1000,
749     RENDER_TARGET = 0x4000,
750     BLENDABLE = 0x8000,
751     DEPTH_STENCIL = 0x10000,
752     MULTISAMPLE_RESOLVE = 0x40000,
753     DISPLAY = 0x80000,
754     CAST_WITHIN_BIT_LAYOUT = 0x100000,
755     MULTISAMPLE_RENDERTARGET = 0x200000,
756     MULTISAMPLE_LOAD = 0x400000,
757     SHADER_GATHER = 0x800000,
758     BACK_BUFFER_CAST = 0x1000000,
759     TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
760     SHADER_GATHER_COMPARISON = 0x4000000,
761     DECODER_OUTPUT = 0x8000000,
762     VIDEO_PROCESSOR_OUTPUT = 0x10000000,
763     VIDEO_PROCESSOR_INPUT = 0x20000000,
764     VIDEO_ENCODER = 0x40000000
765 }
766 
767 enum D3D12_FORMAT_SUPPORT2
768 {
769     NONE = 0,
770     UAV_ATOMIC_ADD = 0x1,
771     UAV_ATOMIC_BITWISE_OPS = 0x2,
772     UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4,
773     UAV_ATOMIC_EXCHANGE = 0x8,
774     UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x10,
775     UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x20,
776     UAV_TYPED_LOAD = 0x40,
777     UAV_TYPED_STORE = 0x80,
778     OUTPUT_MERGER_LOGIC_OP = 0x100,
779     TILED = 0x200,
780     MULTIPLANE_OVERLAY = 0x4000
781 }
782 
783 enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS
784 {
785     NONE = 0,
786     TILED_RESOURCE = 0x1
787 }
788 
789 enum D3D12_CROSS_NODE_SHARING_TIER
790 {
791     TIER_NOT_SUPPORTED = 0,
792     TIER_1_EMULATED = 1,
793     TIER_1 = 2,
794     TIER_2 = 3
795 }
796 
797 enum D3D12_RESOURCE_HEAP_TIER
798 {
799     TIER_1 = 1,
800     TIER_2 = 2
801 }
802 
803 enum D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER
804 {
805     TIER_NOT_SUPPORTED = 0,
806     TIER_1 = 1,
807     TIER_2 = 2
808 }
809 
810 enum D3D12_VIEW_INSTANCING_TIER
811 {
812     TIER_NOT_SUPPORTED = 0,
813     TIER_1 = 1,
814     TIER_2 = 2,
815     TIER_3 = 3
816 }
817 
818 enum D3D_ROOT_SIGNATURE_VERSION
819 {
820     VERSION_1 = 0x1,
821     VERSION_1_0 = 0x1,
822     VERSION_1_1 = 0x2
823 }
824 
825 enum D3D_SHADER_MODEL
826 {
827     MODEL_5_1 = 0x51,
828     MODEL_6_0 = 0x60,
829     MODEL_6_1 = 0x61
830 }
831 
832 enum D3D12_SHADER_CACHE_SUPPORT_FLAGS
833 {
834     NONE = 0,
835     SINGLE_PSO = 0x1,
836     LIBRARY = 0x2,
837     AUTOMATIC_INPROC_CACHE = 0x4,
838     AUTOMATIC_DISK_CACHE = 0x8
839 }
840 
841 enum D3D12_COMMAND_LIST_SUPPORT_FLAGS
842 {
843     NONE = 0,
844     DIRECT = ( 1 << D3D12_COMMAND_LIST_TYPE.DIRECT ),
845     BUNDLE = ( 1 << D3D12_COMMAND_LIST_TYPE.BUNDLE ),
846     COMPUTE = ( 1 << D3D12_COMMAND_LIST_TYPE.COMPUTE ),
847     COPY = ( 1 << D3D12_COMMAND_LIST_TYPE.COPY ),
848     VIDEO_DECODE = ( 1 << D3D12_COMMAND_LIST_TYPE.VIDEO_DECODE ),
849     VIDEO_PROCESS = ( 1 << D3D12_COMMAND_LIST_TYPE.VIDEO_PROCESS )
850 }
851 
852 enum D3D12_HEAP_TYPE
853 {
854     DEFAULT = 1,
855     UPLOAD = 2,
856     READBACK = 3,
857     CUSTOM = 4
858 }
859 
860 enum D3D12_CPU_PAGE_PROPERTY
861 {
862     UNKNOWN = 0,
863     NOT_AVAILABLE = 1,
864     WRITE_COMBINE = 2,
865     WRITE_BACK = 3
866 }
867 
868 enum D3D12_MEMORY_POOL
869 {
870     POOL_UNKNOWN = 0,
871     POOL_L0 = 1,
872     POOL_L1 = 2
873 }
874 
875 enum D3D12_HEAP_FLAGS
876 {
877     NONE = 0,
878     SHARED = 0x1,
879     DENY_BUFFERS = 0x4,
880     ALLOW_DISPLAY = 0x8,
881     SHARED_CROSS_ADAPTER = 0x20,
882     DENY_RT_DS_TEXTURES = 0x40,
883     DENY_NON_RT_DS_TEXTURES = 0x80,
884     HARDWARE_PROTECTED = 0x100,
885     ALLOW_WRITE_WATCH = 0x200,
886     ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
887     ALLOW_ONLY_BUFFERS = 0xc0,
888     ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
889     ALLOW_ONLY_RT_DS_TEXTURES = 0x84
890 }
891 
892 enum D3D12_RESOURCE_DIMENSION
893 {
894     UNKNOWN = 0,
895     BUFFER = 1,
896     TEXTURE1D = 2,
897     TEXTURE2D = 3,
898     TEXTURE3D = 4
899 }
900 
901 enum D3D12_TEXTURE_LAYOUT
902 {
903     LAYOUT_UNKNOWN = 0,
904     LAYOUT_ROW_MAJOR = 1,
905     LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
906     LAYOUT_64KB_STANDARD_SWIZZLE = 3
907 }
908 
909 enum D3D12_RESOURCE_FLAGS
910 {
911     NONE = 0,
912     ALLOW_RENDER_TARGET = 0x1,
913     ALLOW_DEPTH_STENCIL = 0x2,
914     ALLOW_UNORDERED_ACCESS = 0x4,
915     DENY_SHADER_RESOURCE = 0x8,
916     ALLOW_CROSS_ADAPTER = 0x10,
917     ALLOW_SIMULTANEOUS_ACCESS = 0x20,
918     VIDEO_DECODE_REFERENCE_ONLY = 0x40
919 }
920 
921 enum D3D12_TILE_RANGE_FLAGS
922 {
923     NONE = 0,
924     NULL = 1,
925     SKIP = 2,
926     REUSE_SINGLE_TILE = 4
927 }
928 
929 enum D3D12_TILE_MAPPING_FLAGS
930 {
931     NONE = 0,
932     NO_HAZARD = 0x1
933 }
934 
935 enum D3D12_TILE_COPY_FLAGS
936 {
937     NONE = 0,
938     NO_HAZARD = 0x1,
939     LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
940     SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4
941 }
942 
943 enum D3D12_RESOURCE_STATES
944 {
945     COMMON = 0,
946     VERTEX_AND_CONSTANT_BUFFER = 0x1,
947     INDEX_BUFFER = 0x2,
948     RENDER_TARGET = 0x4,
949     UNORDERED_ACCESS = 0x8,
950     DEPTH_WRITE = 0x10,
951     DEPTH_READ = 0x20,
952     NON_PIXEL_SHADER_RESOURCE = 0x40,
953     PIXEL_SHADER_RESOURCE = 0x80,
954     STREAM_OUT = 0x100,
955     INDIRECT_ARGUMENT = 0x200,
956     COPY_DEST = 0x400,
957     COPY_SOURCE = 0x800,
958     RESOLVE_DEST = 0x1000,
959     RESOLVE_SOURCE = 0x2000,
960     GENERIC_READ = ( ( ( ( ( 0x1 | 0x2 )  | 0x40 )  | 0x80 )  | 0x200 )  | 0x800 ) ,
961     PRESENT = 0,
962     PREDICATION = 0x200,
963     VIDEO_DECODE_READ = 0x10000,
964     VIDEO_DECODE_WRITE = 0x20000,
965     VIDEO_PROCESS_READ = 0x40000,
966     VIDEO_PROCESS_WRITE = 0x80000
967 }
968 
969 enum D3D12_RESOURCE_BARRIER_TYPE
970 {
971     TRANSITION = 0,
972     ALIASING = ( TRANSITION + 1 ) ,
973     UAV = ( ALIASING + 1 ) 
974 }
975 
976 enum D3D12_RESOURCE_BARRIER_FLAGS
977 {
978     NONE = 0,
979     BEGIN_ONLY = 0x1,
980     END_ONLY = 0x2
981 }
982 
983 enum D3D12_TEXTURE_COPY_TYPE
984 {
985     SUBRESOURCE_INDEX = 0,
986     PLACED_FOOTPRINT = 1
987 }
988 
989 enum D3D12_RESOLVE_MODE
990 {
991     DECOMPRESS = 0,
992     MIN = 1,
993     MAX = 2,
994     AVERAGE = 3
995 }
996 
997 enum D3D12_VIEW_INSTANCING_FLAGS
998 {
999     NONE = 0,
1000     ENABLE_VIEW_INSTANCE_MASKING = 0x1
1001 }
1002 
1003 enum D3D12_SHADER_COMPONENT_MAPPING
1004 {
1005     FROM_MEMORY_COMPONENT_0 = 0,
1006     FROM_MEMORY_COMPONENT_1 = 1,
1007     FROM_MEMORY_COMPONENT_2 = 2,
1008     FROM_MEMORY_COMPONENT_3 = 3,
1009     FORCE_VALUE_0 = 4,
1010     FORCE_VALUE_1 = 5
1011 }
1012 
1013 enum D3D12_BUFFER_SRV_FLAGS
1014 {
1015     NONE = 0,
1016     RAW = 0x1
1017 }
1018 
1019 enum D3D12_SRV_DIMENSION
1020 {
1021     UNKNOWN = 0,
1022     BUFFER = 1,
1023     TEXTURE1D = 2,
1024     TEXTURE1DARRAY = 3,
1025     TEXTURE2D = 4,
1026     TEXTURE2DARRAY = 5,
1027     TEXTURE2DMS = 6,
1028     TEXTURE2DMSARRAY = 7,
1029     TEXTURE3D = 8,
1030     TEXTURECUBE = 9,
1031     TEXTURECUBEARRAY = 10
1032 }
1033 
1034 enum D3D12_FILTER
1035 {
1036     MIN_MAG_MIP_POINT = 0,
1037     MIN_MAG_POINT_MIP_LINEAR = 0x1,
1038     MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
1039     MIN_POINT_MAG_MIP_LINEAR = 0x5,
1040     MIN_LINEAR_MAG_MIP_POINT = 0x10,
1041     MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
1042     MIN_MAG_LINEAR_MIP_POINT = 0x14,
1043     MIN_MAG_MIP_LINEAR = 0x15,
1044     ANISOTROPIC = 0x55,
1045     COMPARISON_MIN_MAG_MIP_POINT = 0x80,
1046     COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
1047     COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
1048     COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
1049     COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
1050     COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
1051     COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
1052     COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
1053     COMPARISON_ANISOTROPIC = 0xd5,
1054     MINIMUM_MIN_MAG_MIP_POINT = 0x100,
1055     MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
1056     MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
1057     MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
1058     MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
1059     MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
1060     MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
1061     MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
1062     MINIMUM_ANISOTROPIC = 0x155,
1063     MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
1064     MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
1065     MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
1066     MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
1067     MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
1068     MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
1069     MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
1070     MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
1071     MAXIMUM_ANISOTROPIC = 0x1d5
1072 }
1073 
1074 enum D3D12_FILTER_TYPE
1075 {
1076     POINT = 0,
1077     LINEAR = 1
1078 }
1079 
1080 enum REDUCTION_TYPE
1081 {
1082     STANDARD = 0,
1083     COMPARISON = 1,
1084     MINIMUM = 2,
1085     MAXIMUM = 3
1086 }
1087 
1088 enum D3D12_TEXTURE_ADDRESS_MODE
1089 {
1090     WRAP = 1,
1091     MIRROR = 2,
1092     CLAMP = 3,
1093     BORDER = 4,
1094     MIRROR_ONCE = 5
1095 }
1096 
1097 enum D3D12_BUFFER_UAV_FLAGS
1098 {
1099     NONE = 0,
1100     RAW = 0x1
1101 }
1102 
1103 enum D3D12_UAV_DIMENSION
1104 {
1105     UNKNOWN = 0,
1106     BUFFER = 1,
1107     TEXTURE1D = 2,
1108     TEXTURE1DARRAY = 3,
1109     TEXTURE2D = 4,
1110     TEXTURE2DARRAY = 5,
1111     TEXTURE3D = 8
1112 }
1113 
1114 enum D3D12_RTV_DIMENSION
1115 {
1116     UNKNOWN = 0,
1117     BUFFER = 1,
1118     TEXTURE1D = 2,
1119     TEXTURE1DARRAY = 3,
1120     TEXTURE2D = 4,
1121     TEXTURE2DARRAY = 5,
1122     TEXTURE2DMS = 6,
1123     TEXTURE2DMSARRAY = 7,
1124     TEXTURE3D = 8
1125 }
1126 
1127 enum D3D12_DSV_FLAGS
1128 {
1129     NONE = 0,
1130     READ_ONLY_DEPTH = 0x1,
1131     READ_ONLY_STENCIL = 0x2
1132 }
1133 
1134 enum D3D12_DSV_DIMENSION
1135 {
1136     UNKNOWN = 0,
1137     TEXTURE1D = 1,
1138     TEXTURE1DARRAY = 2,
1139     TEXTURE2D = 3,
1140     TEXTURE2DARRAY = 4,
1141     TEXTURE2DMS = 5,
1142     TEXTURE2DMSARRAY = 6
1143 }
1144 
1145 enum D3D12_CLEAR_FLAGS
1146 {
1147     DEPTH = 0x1,
1148     STENCIL = 0x2
1149 }
1150 
1151 enum D3D12_FENCE_FLAGS
1152 {
1153     NONE = 0,
1154     SHARED = 0x1,
1155     SHARED_CROSS_ADAPTER = 0x2,
1156     NON_MONITORED = 0x4
1157 }
1158 
1159 enum D3D12_DESCRIPTOR_HEAP_TYPE
1160 {
1161     CBV_SRV_UAV = 0,
1162     SAMPLER = ( CBV_SRV_UAV + 1 ) ,
1163     RTV = ( SAMPLER + 1 ) ,
1164     DSV = ( RTV + 1 ) ,
1165     NUM_TYPES = ( DSV + 1 ) 
1166 }
1167 
1168 enum D3D12_DESCRIPTOR_HEAP_FLAGS
1169 {
1170     NONE = 0,
1171     SHADER_VISIBLE = 0x1
1172 }
1173 
1174 enum D3D12_DESCRIPTOR_RANGE_TYPE
1175 {
1176     SRV = 0,
1177     UAV = ( SRV + 1 ) ,
1178     CBV = ( UAV + 1 ) ,
1179     SAMPLER = ( CBV + 1 ) 
1180 }
1181 
1182 enum D3D12_SHADER_VISIBILITY
1183 {
1184     ALL = 0,
1185     VERTEX = 1,
1186     HULL = 2,
1187     DOMAIN = 3,
1188     GEOMETRY = 4,
1189     PIXEL = 5
1190 }
1191 
1192 enum D3D12_ROOT_PARAMETER_TYPE
1193 {
1194     TYPE_DESCRIPTOR_TABLE = 0,
1195     TYPE_32BIT_CONSTANTS = ( TYPE_DESCRIPTOR_TABLE + 1 ) ,
1196     TYPE_CBV = ( TYPE_32BIT_CONSTANTS + 1 ) ,
1197     TYPE_SRV = ( TYPE_CBV + 1 ) ,
1198     TYPE_UAV = ( TYPE_SRV + 1 ) 
1199 }
1200 
1201 enum D3D12_ROOT_SIGNATURE_FLAGS
1202 {
1203     NONE = 0,
1204     ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
1205     DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2,
1206     DENY_HULL_SHADER_ROOT_ACCESS = 0x4,
1207     DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8,
1208     DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
1209     DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
1210     ALLOW_STREAM_OUTPUT = 0x40
1211 }
1212 
1213 enum D3D12_STATIC_BORDER_COLOR
1214 {
1215     TRANSPARENT_BLACK = 0,
1216     OPAQUE_BLACK = ( TRANSPARENT_BLACK + 1 ) ,
1217     OPAQUE_WHITE = ( OPAQUE_BLACK + 1 ) 
1218 }
1219 
1220 enum D3D12_DESCRIPTOR_RANGE_FLAGS
1221 {
1222     NONE = 0,
1223     DESCRIPTORS_VOLATILE = 0x1,
1224     DATA_VOLATILE = 0x2,
1225     DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
1226     DATA_STATIC = 0x8
1227 }
1228 
1229 enum D3D12_ROOT_DESCRIPTOR_FLAGS
1230 {
1231     NONE = 0,
1232     DATA_VOLATILE = 0x2,
1233     DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
1234     DATA_STATIC = 0x8
1235 }
1236 
1237 enum D3D12_QUERY_HEAP_TYPE
1238 {
1239     OCCLUSION = 0,
1240     TIMESTAMP = 1,
1241     PIPELINE_STATISTICS = 2,
1242     SO_STATISTICS = 3,
1243     VIDEO_DECODE_STATISTICS = 4,
1244     COPY_QUEUE_TIMESTAMP = 5
1245 }
1246 
1247 enum D3D12_QUERY_TYPE
1248 {
1249     OCCLUSION = 0,
1250     BINARY_OCCLUSION = 1,
1251     TIMESTAMP = 2,
1252     PIPELINE_STATISTICS = 3,
1253     SO_STATISTICS_STREAM0 = 4,
1254     SO_STATISTICS_STREAM1 = 5,
1255     SO_STATISTICS_STREAM2 = 6,
1256     SO_STATISTICS_STREAM3 = 7,
1257     VIDEO_DECODE_STATISTICS = 8
1258 }
1259 
1260 enum D3D12_PREDICATION_OP
1261 {
1262     EQUAL_ZERO = 0,
1263     NOT_EQUAL_ZERO = 1
1264 }
1265 
1266 enum D3D12_INDIRECT_ARGUMENT_TYPE
1267 {
1268     DRAW = 0,
1269     DRAW_INDEXED = ( DRAW + 1 ) ,
1270     DISPATCH = ( DRAW_INDEXED + 1 ) ,
1271     VERTEX_BUFFER_VIEW = ( DISPATCH + 1 ) ,
1272     INDEX_BUFFER_VIEW = ( VERTEX_BUFFER_VIEW + 1 ) ,
1273     CONSTANT = ( INDEX_BUFFER_VIEW + 1 ) ,
1274     CONSTANT_BUFFER_VIEW = ( CONSTANT + 1 ) ,
1275     SHADER_RESOURCE_VIEW = ( CONSTANT_BUFFER_VIEW + 1 ) ,
1276     UNORDERED_ACCESS_VIEW = ( SHADER_RESOURCE_VIEW + 1 ) 
1277 }
1278 
1279 enum D3D12_WRITEBUFFERIMMEDIATE_MODE
1280 {
1281     DEFAULT = 0,
1282     MARKER_IN = 0x1,
1283     MARKER_OUT = 0x2
1284 }
1285 
1286 enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS
1287 {
1288     NONE = 0,
1289     ANY = 0x1,
1290     ALL = 0
1291 }
1292 
1293 enum D3D12_RESIDENCY_PRIORITY
1294 {
1295     MINIMUM	= 0x28000000,
1296     LOW	= 0x50000000,
1297     NORMAL = 0x78000000,
1298     HIGH = 0xa0010000,
1299     MAXIMUM = 0xc8000000
1300 }
1301 
1302 enum D3D12_RESIDENCY_FLAGS
1303 {
1304     NONE = 0,
1305     DENY_OVERBUDGET = 0x1
1306 }
1307 
1308 ///
1309 /// Structures
1310 ///
1311 
1312 struct D3D12_COMMAND_QUEUE_DESC
1313 {
1314     D3D12_COMMAND_LIST_TYPE Type;
1315     int Priority;
1316     D3D12_COMMAND_QUEUE_FLAGS Flags;
1317     uint NodeMask;
1318 }
1319 
1320 struct D3D12_INPUT_ELEMENT_DESC
1321 {
1322     LPCSTR SemanticName;
1323     uint SemanticIndex;
1324     DXGI_FORMAT Format;
1325     uint InputSlot;
1326     uint AlignedByteOffset;
1327     D3D12_INPUT_CLASSIFICATION InputSlotClass;
1328     uint InstanceDataStepRate;
1329 }
1330 
1331 struct D3D12_SO_DECLARATION_ENTRY
1332 {
1333     uint Stream;
1334     LPCSTR SemanticName;
1335     uint SemanticIndex;
1336     BYTE StartComponent;
1337     BYTE ComponentCount;
1338     BYTE OutputSlot;
1339 }
1340 
1341 struct D3D12_VIEWPORT
1342 {
1343     float TopLeftX;
1344     float TopLeftY;
1345     float Width;
1346     float Height;
1347     float MinDepth;
1348     float MaxDepth;
1349 }
1350 
1351 
1352 struct D3D12_BOX
1353 {
1354     uint left;
1355     uint top;
1356     uint front;
1357     uint right;
1358     uint bottom;
1359     uint back;
1360 }
1361 
1362 struct D3D12_DEPTH_STENCILOP_DESC
1363 {
1364     D3D12_STENCIL_OP StencilFailOp;
1365     D3D12_STENCIL_OP StencilDepthFailOp;
1366     D3D12_STENCIL_OP StencilPassOp;
1367     D3D12_COMPARISON_FUNC StencilFunc;
1368 }
1369 
1370 struct D3D12_DEPTH_STENCIL_DESC
1371 {
1372     bool DepthEnable;
1373     D3D12_DEPTH_WRITE_MASK DepthWriteMask;
1374     D3D12_COMPARISON_FUNC DepthFunc;
1375     bool StencilEnable;
1376     ubyte StencilReadMask;
1377     ubyte StencilWriteMask;
1378     D3D12_DEPTH_STENCILOP_DESC FrontFace;
1379     D3D12_DEPTH_STENCILOP_DESC BackFace;
1380 }
1381 
1382 struct D3D12_DEPTH_STENCIL_DESC1
1383 {
1384     bool DepthEnable;
1385     D3D12_DEPTH_WRITE_MASK DepthWriteMask;
1386     D3D12_COMPARISON_FUNC DepthFunc;
1387     bool StencilEnable;
1388     ubyte StencilReadMask;
1389     ubyte StencilWriteMask;
1390     D3D12_DEPTH_STENCILOP_DESC FrontFace;
1391     D3D12_DEPTH_STENCILOP_DESC BackFace;
1392     bool DepthBoundsTestEnable;
1393 }
1394 
1395 struct D3D12_RENDER_TARGET_BLEND_DESC
1396 {
1397     bool BlendEnable;
1398     bool LogicOpEnable;
1399     D3D12_BLEND SrcBlend;
1400     D3D12_BLEND DestBlend;
1401     D3D12_BLEND_OP BlendOp;
1402     D3D12_BLEND SrcBlendAlpha;
1403     D3D12_BLEND DestBlendAlpha;
1404     D3D12_BLEND_OP BlendOpAlpha;
1405     D3D12_LOGIC_OP LogicOp;
1406     ubyte RenderTargetWriteMask;
1407 }
1408 
1409 struct D3D12_BLEND_DESC
1410 {
1411     bool AlphaToCoverageEnable;
1412     bool IndependentBlendEnable;
1413     D3D12_RENDER_TARGET_BLEND_DESC[8] RenderTarget;
1414 }
1415 
1416 struct D3D12_RASTERIZER_DESC
1417 {
1418     D3D12_FILL_MODE FillMode;
1419     D3D12_CULL_MODE CullMode;
1420     bool FrontCounterClockwise;
1421     int DepthBias;
1422     float DepthBiasClamp;
1423     float SlopeScaledDepthBias;
1424     bool DepthClipEnable;
1425     bool MultisampleEnable;
1426     bool AntialiasedLineEnable;
1427     uint ForcedSampleCount;
1428     D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
1429 }
1430 
1431 struct D3D12_SHADER_BYTECODE
1432 {
1433     const void *pShaderBytecode;
1434     size_t BytecodeLength;
1435 }
1436 
1437 struct D3D12_STREAM_OUTPUT_DESC
1438 {
1439     const D3D12_SO_DECLARATION_ENTRY *pSODeclaration;
1440     uint NumEntries;
1441     const uint *pBufferStrides;
1442     uint NumStrides;
1443     uint RasterizedStream;
1444 }
1445 
1446 struct D3D12_INPUT_LAYOUT_DESC
1447 {
1448     const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs;
1449     uint NumElements;
1450 }
1451 
1452 struct D3D12_CACHED_PIPELINE_STATE
1453 {
1454     const void *pCachedBlob;
1455     size_t CachedBlobSizeInBytes;
1456 }
1457 
1458 struct D3D12_GRAPHICS_PIPELINE_STATE_DESC
1459 {
1460     ID3D12RootSignature pRootSignature;
1461     D3D12_SHADER_BYTECODE VS;
1462     D3D12_SHADER_BYTECODE PS;
1463     D3D12_SHADER_BYTECODE DS;
1464     D3D12_SHADER_BYTECODE HS;
1465     D3D12_SHADER_BYTECODE GS;
1466     D3D12_STREAM_OUTPUT_DESC StreamOutput;
1467     D3D12_BLEND_DESC BlendState;
1468     uint SampleMask;
1469     D3D12_RASTERIZER_DESC RasterizerState;
1470     D3D12_DEPTH_STENCIL_DESC DepthStencilState;
1471     D3D12_INPUT_LAYOUT_DESC InputLayout;
1472     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;
1473     D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;
1474     uint NumRenderTargets;
1475     DXGI_FORMAT[8] RTVFormats;
1476     DXGI_FORMAT DSVFormat;
1477     DXGI_SAMPLE_DESC SampleDesc;
1478     uint NodeMask;
1479     D3D12_CACHED_PIPELINE_STATE CachedPSO;
1480     D3D12_PIPELINE_STATE_FLAGS Flags;
1481 }
1482 
1483 struct D3D12_COMPUTE_PIPELINE_STATE_DESC
1484 {
1485     ID3D12RootSignature pRootSignature;
1486     D3D12_SHADER_BYTECODE CS;
1487     uint NodeMask;
1488     D3D12_CACHED_PIPELINE_STATE CachedPSO;
1489     D3D12_PIPELINE_STATE_FLAGS Flags;
1490 }
1491 
1492 struct D3D12_RT_FORMAT_ARRAY
1493 {
1494     DXGI_FORMAT[8] RTFormats;
1495     uint NumRenderTargets;
1496 }
1497 
1498 struct D3D12_PIPELINE_STATE_STREAM_DESC
1499 {
1500     size_t SizeInBytes;
1501     void *pPipelineStateSubobjectStream;
1502 }
1503 
1504 struct D3D12_FEATURE_DATA_D3D12_OPTIONS
1505 {
1506     bool DoublePrecisionFloatShaderOps;
1507     bool OutputMergerLogicOp;
1508     D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;
1509     D3D12_TILED_RESOURCES_TIER TiledResourcesTier;
1510     D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;
1511     bool PSSpecifiedStencilRefSupported;
1512     bool TypedUAVLoadAdditionalFormats;
1513     bool ROVsSupported;
1514     D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
1515     uint MaxGPUVirtualAddressBitsPerResource;
1516     bool StandardSwizzle64KBSupported;
1517     D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;
1518     bool CrossAdapterRowMajorTextureSupported;
1519     bool VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
1520     D3D12_RESOURCE_HEAP_TIER ResourceHeapTier;
1521 }
1522 
1523 struct D3D12_FEATURE_DATA_D3D12_OPTIONS1
1524 {
1525     bool WaveOps;
1526     uint WaveLaneCountMin;
1527     uint WaveLaneCountMax;
1528     uint TotalLaneCount;
1529     bool ExpandedComputeResourceStates;
1530     bool Int64ShaderOps;
1531 }
1532 
1533 struct D3D12_FEATURE_DATA_D3D12_OPTIONS2
1534 {
1535     bool DepthBoundsTestSupported;
1536     D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier;
1537 }
1538 
1539 struct D3D12_FEATURE_DATA_ROOT_SIGNATURE
1540 {
1541     D3D_ROOT_SIGNATURE_VERSION HighestVersion;
1542 }
1543 
1544 struct D3D12_FEATURE_DATA_ARCHITECTURE
1545 {
1546     uint NodeIndex;
1547     bool TileBasedRenderer;
1548     bool UMA;
1549     bool CacheCoherentUMA;
1550 }
1551 
1552 struct D3D12_FEATURE_DATA_ARCHITECTURE1
1553 {
1554     uint NodeIndex;
1555     bool TileBasedRenderer;
1556     bool UMA;
1557     bool CacheCoherentUMA;
1558     bool IsolatedMMU;
1559 }
1560 
1561 struct D3D12_FEATURE_DATA_FEATURE_LEVELS
1562 {
1563     uint NumFeatureLevels;
1564     const D3D_FEATURE_LEVEL *pFeatureLevelsRequested;
1565     D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;
1566 }
1567 
1568 struct D3D12_FEATURE_DATA_SHADER_MODEL
1569 {
1570     D3D_SHADER_MODEL HighestShaderModel;
1571 }
1572 
1573 struct D3D12_FEATURE_DATA_FORMAT_SUPPORT
1574 {
1575     DXGI_FORMAT Format;
1576     D3D12_FORMAT_SUPPORT1 Support1;
1577     D3D12_FORMAT_SUPPORT2 Support2;
1578 }
1579 
1580 struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS
1581 {
1582     DXGI_FORMAT Format;
1583     uint SampleCount;
1584     D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags;
1585     uint NumQualityLevels;
1586 }
1587 
1588 struct D3D12_FEATURE_DATA_FORMAT_INFO
1589 {
1590     DXGI_FORMAT Format;
1591     ubyte PlaneCount;
1592 }
1593 
1594 struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT
1595 {
1596     uint MaxGPUVirtualAddressBitsPerResource;
1597     uint MaxGPUVirtualAddressBitsPerProcess;
1598 }
1599 
1600 struct D3D12_FEATURE_DATA_SHADER_CACHE
1601 {
1602     D3D12_SHADER_CACHE_SUPPORT_FLAGS SupportFlags;
1603 }
1604 
1605 struct D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY
1606 {
1607     D3D12_COMMAND_LIST_TYPE CommandListType;
1608     uint Priority;
1609     bool PriorityForTypeIsSupported;
1610 }
1611 
1612 struct D3D12_FEATURE_DATA_D3D12_OPTIONS3
1613 {
1614     bool CopyQueueTimestampQueriesSupported;
1615     bool CastingFullyTypedFormatSupported;
1616     D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags;
1617     D3D12_VIEW_INSTANCING_TIER ViewInstancingTier;
1618     bool BarycentricsSupported;
1619 }
1620 
1621 struct D3D12_FEATURE_DATA_EXISTING_HEAPS
1622 {
1623     bool Supported;
1624 }
1625 
1626 struct D3D12_RESOURCE_ALLOCATION_INFO
1627 {
1628     ulong SizeInBytes;
1629     ulong Alignment;
1630 }
1631 
1632 struct D3D12_HEAP_PROPERTIES
1633 {
1634     D3D12_HEAP_TYPE Type;
1635     D3D12_CPU_PAGE_PROPERTY CPUPageProperty;
1636     D3D12_MEMORY_POOL MemoryPoolPreference;
1637     uint CreationNodeMask;
1638     uint VisibleNodeMask;
1639 }
1640 
1641 struct D3D12_HEAP_DESC
1642 {
1643     ulong SizeInBytes;
1644     D3D12_HEAP_PROPERTIES Properties;
1645     ulong Alignment;
1646     D3D12_HEAP_FLAGS Flags;
1647 }
1648 
1649 struct D3D12_RESOURCE_DESC
1650 {
1651     D3D12_RESOURCE_DIMENSION Dimension;
1652     ulong Alignment;
1653     ulong Width;
1654     uint Height;
1655     ushort DepthOrArraySize;
1656     ushort MipLevels;
1657     DXGI_FORMAT Format;
1658     DXGI_SAMPLE_DESC SampleDesc;
1659     D3D12_TEXTURE_LAYOUT Layout;
1660     D3D12_RESOURCE_FLAGS Flags;
1661 }
1662 
1663 struct D3D12_DEPTH_STENCIL_VALUE
1664 {
1665     float Depth;
1666     ubyte Stencil;
1667 }
1668 
1669 struct D3D12_CLEAR_VALUE
1670 {
1671     DXGI_FORMAT Format;
1672     union 
1673 {
1674         float[4] Color;
1675         D3D12_DEPTH_STENCIL_VALUE DepthStencil;
1676     }
1677 }
1678 
1679 struct D3D12_RANGE
1680 {
1681     size_t Begin;
1682     size_t End;
1683 }
1684 
1685 struct D3D12_RANGE_UINT64
1686 {
1687     ulong Begin;
1688     ulong End;
1689 }
1690 
1691 struct D3D12_SUBRESOURCE_RANGE_UINT64
1692 {
1693     uint Subresource;
1694     D3D12_RANGE_UINT64 Range;
1695 }
1696 
1697 struct D3D12_SUBRESOURCE_INFO
1698 {
1699     ulong Offset;
1700     uint RowPitch;
1701     uint DepthPitch;
1702 }
1703 
1704 struct D3D12_TILED_RESOURCE_COORDINATE
1705 {
1706     uint X;
1707     uint Y;
1708     uint Z;
1709     uint Subresource;
1710 }
1711 
1712 struct D3D12_TILE_REGION_SIZE
1713 {
1714     uint NumTiles;
1715     bool UseBox;
1716     uint Width;
1717     ushort Height;
1718     ushort Depth;
1719 }
1720 
1721 struct D3D12_SUBRESOURCE_TILING
1722 {
1723     uint WidthInTiles;
1724     ushort HeightInTiles;
1725     ushort DepthInTiles;
1726     uint StartTileIndexInOverallResource;
1727 }
1728 
1729 struct D3D12_TILE_SHAPE
1730 {
1731     uint WidthInTexels;
1732     uint HeightInTexels;
1733     uint DepthInTexels;
1734 }
1735 
1736 struct D3D12_PACKED_MIP_INFO
1737 {
1738     ubyte NumStandardMips;
1739     ubyte NumPackedMips;
1740     uint NumTilesForPackedMips;
1741     uint StartTileIndexInOverallResource;
1742 }
1743 
1744 struct D3D12_RESOURCE_TRANSITION_BARRIER
1745 {
1746     ID3D12Resource pResource;
1747     uint Subresource;
1748     D3D12_RESOURCE_STATES StateBefore;
1749     D3D12_RESOURCE_STATES StateAfter;
1750 }
1751 
1752 struct D3D12_RESOURCE_ALIASING_BARRIER
1753 {
1754     ID3D12Resource pResourceBefore;
1755     ID3D12Resource pResourceAfter;
1756 }
1757 
1758 struct D3D12_RESOURCE_UAV_BARRIER
1759 {
1760     ID3D12Resource pResource;
1761 }
1762 
1763 struct D3D12_RESOURCE_BARRIER
1764 {
1765     D3D12_RESOURCE_BARRIER_TYPE Type;
1766     D3D12_RESOURCE_BARRIER_FLAGS Flags;
1767     union 
1768     {
1769         D3D12_RESOURCE_TRANSITION_BARRIER Transition;
1770         D3D12_RESOURCE_ALIASING_BARRIER Aliasing;
1771         D3D12_RESOURCE_UAV_BARRIER UAV;
1772     }
1773 }
1774 
1775 struct D3D12_SUBRESOURCE_FOOTPRINT
1776 {
1777     DXGI_FORMAT Format;
1778     uint Width;
1779     uint Height;
1780     uint Depth;
1781     uint RowPitch;
1782 }
1783 
1784 struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT
1785 {
1786     ulong Offset;
1787     D3D12_SUBRESOURCE_FOOTPRINT Footprint;
1788 }
1789 
1790 struct D3D12_TEXTURE_COPY_LOCATION
1791 {
1792     ID3D12Resource pResource;
1793     D3D12_TEXTURE_COPY_TYPE Type;
1794     union 
1795     {
1796         D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
1797         uint SubresourceIndex;
1798     }
1799 }
1800 
1801 struct D3D12_SAMPLE_POSITION
1802 {
1803     byte X;
1804     byte Y;
1805 }
1806 
1807 struct D3D12_VIEW_INSTANCE_LOCATION
1808 {
1809     uint ViewportArrayIndex;
1810     uint RenderTargetArrayIndex;
1811 }
1812 
1813 struct D3D12_VIEW_INSTANCING_DESC
1814 {
1815     uint ViewInstanceCount;
1816     const D3D12_VIEW_INSTANCE_LOCATION *pViewInstanceLocations;
1817     D3D12_VIEW_INSTANCING_FLAGS Flags;
1818 }
1819 
1820 struct D3D12_BUFFER_SRV
1821 {
1822     ulong FirstElement;
1823     uint NumElements;
1824     uint StructureByteStride;
1825     D3D12_BUFFER_SRV_FLAGS Flags;
1826 }
1827 
1828 struct D3D12_TEX1D_SRV
1829 {
1830     uint MostDetailedMip;
1831     uint MipLevels;
1832     float ResourceMinLODClamp;
1833 }
1834 
1835 struct D3D12_TEX1D_ARRAY_SRV
1836 {
1837     uint MostDetailedMip;
1838     uint MipLevels;
1839     uint FirstArraySlice;
1840     uint ArraySize;
1841     float ResourceMinLODClamp;
1842 }
1843 
1844 struct D3D12_TEX2D_SRV
1845 {
1846     uint MostDetailedMip;
1847     uint MipLevels;
1848     uint PlaneSlice;
1849     float ResourceMinLODClamp;
1850 }
1851 
1852 struct D3D12_TEX2D_ARRAY_SRV
1853 {
1854     uint MostDetailedMip;
1855     uint MipLevels;
1856     uint FirstArraySlice;
1857     uint ArraySize;
1858     uint PlaneSlice;
1859     float ResourceMinLODClamp;
1860 }
1861 
1862 struct D3D12_TEX3D_SRV
1863 {
1864     uint MostDetailedMip;
1865     uint MipLevels;
1866     float ResourceMinLODClamp;
1867 }
1868 
1869 struct D3D12_TEXCUBE_SRV
1870 {
1871     uint MostDetailedMip;
1872     uint MipLevels;
1873     float ResourceMinLODClamp;
1874 }
1875 
1876 struct D3D12_TEXCUBE_ARRAY_SRV
1877 {
1878     uint MostDetailedMip;
1879     uint MipLevels;
1880     uint First2DArrayFace;
1881     uint NumCubes;
1882     float ResourceMinLODClamp;
1883 }
1884 
1885 struct D3D12_TEX2DMS_SRV
1886 {
1887     uint UnusedField_NothingToDefine;
1888 }
1889 
1890 struct D3D12_TEX2DMS_ARRAY_SRV
1891 {
1892     uint FirstArraySlice;
1893     uint ArraySize;
1894 }
1895 
1896 struct D3D12_SHADER_RESOURCE_VIEW_DESC
1897 {
1898     DXGI_FORMAT Format;
1899     D3D12_SRV_DIMENSION ViewDimension;
1900     uint Shader4ComponentMapping;
1901     union 
1902     {
1903         D3D12_BUFFER_SRV Buffer;
1904         D3D12_TEX1D_SRV Texture1D;
1905         D3D12_TEX1D_ARRAY_SRV Texture1DArray;
1906         D3D12_TEX2D_SRV Texture2D;
1907         D3D12_TEX2D_ARRAY_SRV Texture2DArray;
1908         D3D12_TEX2DMS_SRV Texture2DMS;
1909         D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
1910         D3D12_TEX3D_SRV Texture3D;
1911         D3D12_TEXCUBE_SRV TextureCube;
1912         D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
1913     }
1914 }
1915 
1916 struct D3D12_CONSTANT_BUFFER_VIEW_DESC
1917 {
1918     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
1919     uint SizeInBytes;
1920 }
1921 
1922 struct D3D12_SAMPLER_DESC
1923 {
1924     D3D12_FILTER Filter;
1925     D3D12_TEXTURE_ADDRESS_MODE AddressU;
1926     D3D12_TEXTURE_ADDRESS_MODE AddressV;
1927     D3D12_TEXTURE_ADDRESS_MODE AddressW;
1928     float MipLODBias;
1929     uint MaxAnisotropy;
1930     D3D12_COMPARISON_FUNC ComparisonFunc;
1931     float[4] BorderColor;
1932     float MinLOD;
1933     float MaxLOD;
1934 }
1935 
1936 struct D3D12_BUFFER_UAV
1937 {
1938     ulong FirstElement;
1939     uint NumElements;
1940     uint StructureByteStride;
1941     ulong CounterOffsetInBytes;
1942     D3D12_BUFFER_UAV_FLAGS Flags;
1943 }
1944 
1945 struct D3D12_TEX1D_UAV
1946 {
1947     uint MipSlice;
1948 }
1949 
1950 struct D3D12_TEX1D_ARRAY_UAV
1951 {
1952     uint MipSlice;
1953     uint FirstArraySlice;
1954     uint ArraySize;
1955 }
1956 
1957 struct D3D12_TEX2D_UAV
1958 {
1959     uint MipSlice;
1960     uint PlaneSlice;
1961 }
1962 
1963 struct D3D12_TEX2D_ARRAY_UAV
1964 {
1965     uint MipSlice;
1966     uint FirstArraySlice;
1967     uint ArraySize;
1968     uint PlaneSlice;
1969 }
1970 
1971 struct D3D12_TEX3D_UAV
1972 {
1973     uint MipSlice;
1974     uint FirstWSlice;
1975     uint WSize;
1976 }
1977 
1978 struct D3D12_UNORDERED_ACCESS_VIEW_DESC
1979 {
1980     DXGI_FORMAT Format;
1981     D3D12_UAV_DIMENSION ViewDimension;
1982     union 
1983     {
1984         D3D12_BUFFER_UAV Buffer;
1985         D3D12_TEX1D_UAV Texture1D;
1986         D3D12_TEX1D_ARRAY_UAV Texture1DArray;
1987         D3D12_TEX2D_UAV Texture2D;
1988         D3D12_TEX2D_ARRAY_UAV Texture2DArray;
1989         D3D12_TEX3D_UAV Texture3D;
1990     }
1991 }
1992 
1993 struct D3D12_BUFFER_RTV
1994 {
1995     ulong FirstElement;
1996     uint NumElements;
1997 }
1998 
1999 struct D3D12_TEX1D_RTV
2000 {
2001     uint MipSlice;
2002 }
2003 
2004 struct D3D12_TEX1D_ARRAY_RTV
2005 {
2006     uint MipSlice;
2007     uint FirstArraySlice;
2008     uint ArraySize;
2009 }
2010 
2011 struct D3D12_TEX2D_RTV
2012 {
2013     uint MipSlice;
2014     uint PlaneSlice;
2015 }
2016 
2017 struct D3D12_TEX2DMS_RTV
2018 {
2019     uint UnusedField_NothingToDefine;
2020 }
2021 
2022 struct D3D12_TEX2D_ARRAY_RTV
2023 {
2024     uint MipSlice;
2025     uint FirstArraySlice;
2026     uint ArraySize;
2027     uint PlaneSlice;
2028 }
2029 
2030 struct D3D12_TEX2DMS_ARRAY_RTV
2031 {
2032     uint FirstArraySlice;
2033     uint ArraySize;
2034 }
2035 
2036 struct D3D12_TEX3D_RTV
2037 {
2038     uint MipSlice;
2039     uint FirstWSlice;
2040     uint WSize;
2041 }
2042 
2043 struct D3D12_RENDER_TARGET_VIEW_DESC
2044 {
2045     DXGI_FORMAT Format;
2046     D3D12_RTV_DIMENSION ViewDimension;
2047     union 
2048     {
2049         D3D12_BUFFER_RTV Buffer;
2050         D3D12_TEX1D_RTV Texture1D;
2051         D3D12_TEX1D_ARRAY_RTV Texture1DArray;
2052         D3D12_TEX2D_RTV Texture2D;
2053         D3D12_TEX2D_ARRAY_RTV Texture2DArray;
2054         D3D12_TEX2DMS_RTV Texture2DMS;
2055         D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
2056         D3D12_TEX3D_RTV Texture3D;
2057     }
2058 }
2059 
2060 struct D3D12_TEX1D_DSV
2061 {
2062     uint MipSlice;
2063 }
2064 
2065 struct D3D12_TEX1D_ARRAY_DSV
2066 {
2067     uint MipSlice;
2068     uint FirstArraySlice;
2069     uint ArraySize;
2070 }
2071 
2072 struct D3D12_TEX2D_DSV
2073 {
2074     uint MipSlice;
2075 }
2076 
2077 struct D3D12_TEX2D_ARRAY_DSV
2078 {
2079     uint MipSlice;
2080     uint FirstArraySlice;
2081     uint ArraySize;
2082 }
2083 
2084 struct D3D12_TEX2DMS_DSV
2085 {
2086     uint UnusedField_NothingToDefine;
2087 }
2088 
2089 struct D3D12_TEX2DMS_ARRAY_DSV
2090 {
2091     uint FirstArraySlice;
2092     uint ArraySize;
2093 }
2094 
2095 struct D3D12_DEPTH_STENCIL_VIEW_DESC
2096 {
2097     DXGI_FORMAT Format;
2098     D3D12_DSV_DIMENSION ViewDimension;
2099     D3D12_DSV_FLAGS Flags;
2100     union 
2101     {
2102         D3D12_TEX1D_DSV Texture1D;
2103         D3D12_TEX1D_ARRAY_DSV Texture1DArray;
2104         D3D12_TEX2D_DSV Texture2D;
2105         D3D12_TEX2D_ARRAY_DSV Texture2DArray;
2106         D3D12_TEX2DMS_DSV Texture2DMS;
2107         D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
2108     }
2109 }
2110 
2111 struct D3D12_DESCRIPTOR_HEAP_DESC
2112 {
2113     D3D12_DESCRIPTOR_HEAP_TYPE Type;
2114     uint NumDescriptors;
2115     D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
2116     uint NodeMask;
2117 }
2118 
2119 struct D3D12_DESCRIPTOR_RANGE
2120 {
2121     D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
2122     uint NumDescriptors;
2123     uint BaseShaderRegister;
2124     uint RegisterSpace;
2125     uint OffsetInDescriptorsFromTableStart;
2126 }
2127 
2128 struct D3D12_ROOT_DESCRIPTOR_TABLE
2129 {
2130     uint NumDescriptorRanges;
2131     const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;
2132 }
2133 
2134 struct D3D12_ROOT_CONSTANTS
2135 {
2136     uint ShaderRegister;
2137     uint RegisterSpace;
2138     uint Num32BitValues;
2139 }
2140 
2141 struct D3D12_ROOT_DESCRIPTOR
2142 {
2143     uint ShaderRegister;
2144     uint RegisterSpace;
2145 }
2146 
2147 struct D3D12_ROOT_PARAMETER
2148 {
2149     D3D12_ROOT_PARAMETER_TYPE ParameterType;
2150     union 
2151     {
2152         D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
2153         D3D12_ROOT_CONSTANTS Constants;
2154         D3D12_ROOT_DESCRIPTOR Descriptor;
2155     }
2156     D3D12_SHADER_VISIBILITY ShaderVisibility;
2157 }
2158 
2159 struct D3D12_STATIC_SAMPLER_DESC
2160 {
2161     D3D12_FILTER Filter;
2162     D3D12_TEXTURE_ADDRESS_MODE AddressU;
2163     D3D12_TEXTURE_ADDRESS_MODE AddressV;
2164     D3D12_TEXTURE_ADDRESS_MODE AddressW;
2165     float MipLODBias;
2166     uint MaxAnisotropy;
2167     D3D12_COMPARISON_FUNC ComparisonFunc;
2168     D3D12_STATIC_BORDER_COLOR BorderColor;
2169     float MinLOD;
2170     float MaxLOD;
2171     uint ShaderRegister;
2172     uint RegisterSpace;
2173     D3D12_SHADER_VISIBILITY ShaderVisibility;
2174 }
2175 
2176 struct D3D12_ROOT_SIGNATURE_DESC
2177 {
2178     uint NumParameters;
2179     const D3D12_ROOT_PARAMETER *pParameters;
2180     uint NumStaticSamplers;
2181     const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
2182     D3D12_ROOT_SIGNATURE_FLAGS Flags;
2183 }
2184 
2185 struct D3D12_DESCRIPTOR_RANGE1
2186 {
2187     D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
2188     uint NumDescriptors;
2189     uint BaseShaderRegister;
2190     uint RegisterSpace;
2191     D3D12_DESCRIPTOR_RANGE_FLAGS Flags;
2192     uint OffsetInDescriptorsFromTableStart;
2193 }
2194 
2195 struct D3D12_ROOT_DESCRIPTOR_TABLE1
2196 {
2197     uint NumDescriptorRanges;
2198     const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges;
2199 }
2200 
2201 struct D3D12_ROOT_DESCRIPTOR1
2202 {
2203     uint ShaderRegister;
2204     uint RegisterSpace;
2205     D3D12_ROOT_DESCRIPTOR_FLAGS Flags;
2206 }
2207 
2208 struct D3D12_ROOT_PARAMETER1
2209 {
2210     D3D12_ROOT_PARAMETER_TYPE ParameterType;
2211     union 
2212     {
2213         D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable;
2214         D3D12_ROOT_CONSTANTS Constants;
2215         D3D12_ROOT_DESCRIPTOR1 Descriptor;
2216     }
2217     D3D12_SHADER_VISIBILITY ShaderVisibility;
2218 }
2219 
2220 struct D3D12_ROOT_SIGNATURE_DESC1
2221 {
2222     uint NumParameters;
2223     const D3D12_ROOT_PARAMETER1 *pParameters;
2224     uint NumStaticSamplers;
2225     const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
2226     D3D12_ROOT_SIGNATURE_FLAGS Flags;
2227 }
2228 
2229 struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC
2230 {
2231     D3D_ROOT_SIGNATURE_VERSION Version;
2232     union 
2233     {
2234         D3D12_ROOT_SIGNATURE_DESC Desc_1_0;
2235         D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1;
2236     }
2237 }
2238 
2239 struct D3D12_CPU_DESCRIPTOR_HANDLE
2240 {
2241     size_t ptr;
2242 }
2243 
2244 struct D3D12_GPU_DESCRIPTOR_HANDLE
2245 {
2246     ulong ptr;
2247 }
2248 
2249 struct D3D12_DISCARD_REGION
2250 {
2251     uint NumRects;
2252     const D3D12_RECT *pRects;
2253     uint FirstSubresource;
2254     uint NumSubresources;
2255 }
2256 
2257 struct D3D12_QUERY_HEAP_DESC
2258 {
2259     D3D12_QUERY_HEAP_TYPE Type;
2260     uint Count;
2261     uint NodeMask;
2262 }
2263 
2264 struct D3D12_QUERY_DATA_PIPELINE_STATISTICS
2265 {
2266     ulong IAVertices;
2267     ulong IAPrimitives;
2268     ulong VSInvocations;
2269     ulong GSInvocations;
2270     ulong GSPrimitives;
2271     ulong CInvocations;
2272     ulong CPrimitives;
2273     ulong PSInvocations;
2274     ulong HSInvocations;
2275     ulong DSInvocations;
2276     ulong CSInvocations;
2277 }
2278 
2279 struct D3D12_QUERY_DATA_SO_STATISTICS
2280 {
2281     ulong NumPrimitivesWritten;
2282     ulong PrimitivesStorageNeeded;
2283 }
2284 
2285 struct D3D12_STREAM_OUTPUT_BUFFER_VIEW
2286 {
2287     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2288     ulong SizeInBytes;
2289     D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
2290 }
2291 
2292 struct D3D12_DRAW_ARGUMENTS
2293 {
2294     uint VertexCountPerInstance;
2295     uint InstanceCount;
2296     uint StartVertexLocation;
2297     uint StartInstanceLocation;
2298 }
2299 
2300 struct D3D12_DRAW_INDEXED_ARGUMENTS
2301 {
2302     uint IndexCountPerInstance;
2303     uint InstanceCount;
2304     uint StartIndexLocation;
2305     int BaseVertexLocation;
2306     uint StartInstanceLocation;
2307 }
2308 
2309 struct D3D12_DISPATCH_ARGUMENTS
2310 {
2311     uint ThreadGroupCountX;
2312     uint ThreadGroupCountY;
2313     uint ThreadGroupCountZ;
2314 }
2315 
2316 struct D3D12_VERTEX_BUFFER_VIEW
2317 {
2318     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2319     uint SizeInBytes;
2320     uint StrideInBytes;
2321 }
2322 
2323 struct D3D12_INDEX_BUFFER_VIEW
2324 {
2325     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2326     uint SizeInBytes;
2327     DXGI_FORMAT Format;
2328 }
2329 
2330 struct D3D12_INDIRECT_ARGUMENT_DESC
2331 {
2332     D3D12_INDIRECT_ARGUMENT_TYPE Type;
2333     union 
2334     {
2335         struct VertexBuffer
2336         {
2337             uint Slot;
2338         };
2339         struct Constant 
2340         {
2341             uint RootParameterIndex;
2342             uint DestOffsetIn32BitValues;
2343             uint Num32BitValuesToSet;
2344         };
2345         struct ConstantBufferView
2346         {
2347             uint RootParameterIndex;
2348         };
2349         struct ShaderResourceView
2350         {
2351             uint RootParameterIndex;
2352         };
2353         struct UnorderedAccessView
2354         {
2355             uint RootParameterIndex;
2356         };
2357     };
2358 }
2359 
2360 struct D3D12_COMMAND_SIGNATURE_DESC
2361 {
2362     uint ByteStride;
2363     uint NumArgumentDescs;
2364     const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs;
2365     uint NodeMask;
2366 }
2367 
2368 struct D3D12_WRITEBUFFERIMMEDIATE_PARAMETER
2369 {
2370     D3D12_GPU_VIRTUAL_ADDRESS Dest;
2371     uint Value;
2372 }
2373 struct D3D12_SUBRESOURCE_DATA
2374 {
2375     const void *pData;
2376     LONG_PTR RowPitch;
2377     LONG_PTR SlicePitch;
2378 }
2379 
2380 struct D3D12_MEMCPY_DEST
2381 {
2382     void *pData;
2383     size_t RowPitch;
2384     size_t SlicePitch;
2385 }
2386 
2387 struct D3D12_RESOURCE_ALLOCATION_INFO1
2388 {
2389     ulong Offset;
2390     ulong Alignment;
2391     ulong SizeInBytes;
2392 }
2393 
2394 ///
2395 /// Interfaces
2396 ///
2397 
2398 mixin(uuid!(ID3D12Object, "c4fec28f-7966-4e95-9f94-f431cb56c3b8"));
2399 public interface ID3D12Object : IUnknown
2400 {
2401 extern(Windows):
2402 	HRESULT GetPrivateData(REFGUID guid, uint *pDataSize, void *pData);
2403     HRESULT SetName(const wchar *Name);
2404     HRESULT SetPrivateData(REFGUID guid, uint DataSize, const void *pData);
2405     HRESULT SetPrivateDataInterface(REFGUID guid, const IUnknown *pData);
2406 }
2407 
2408 mixin(uuid!(ID3D12DeviceChild, "905db94b-a00c-4140-9df5-2b64ca9ea357"));
2409 public interface ID3D12DeviceChild : ID3D12Object
2410 {
2411 extern(Windows):
2412 	HRESULT GetDevice(REFIID riid, void **ppvDevice);
2413 }
2414 
2415 mixin(uuid!(ID3D12RootSignature, "c54a6b66-72df-4ee8-8be5-a946a1429214"));
2416 public interface ID3D12RootSignature : ID3D12DeviceChild
2417 {
2418 extern(Windows):
2419 }
2420 
2421 mixin(uuid!(ID3D12RootSignatureDeserializer, "34AB647B-3CC8-46AC-841B-C0965645C046"));
2422 public interface ID3D12RootSignatureDeserializer : IUnknown
2423 {
2424 extern(Windows):
2425     D3D12_ROOT_SIGNATURE_DESC* GetRootSignatureDesc();
2426 }
2427 
2428 mixin(uuid!(ID3D12VersionedRootSignatureDeserializer, "7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0"));
2429 public interface ID3D12VersionedRootSignatureDeserializer : IUnknown
2430 {
2431 extern(Windows):
2432     HRESULT GetRootSignatureDescAtVersion(D3D_ROOT_SIGNATURE_VERSION convertToVersion, const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **ppDesc);
2433     const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* GetUnconvertedRootSignatureDesc();
2434 }
2435 
2436 mixin(uuid!(ID3D12Pageable, "63ee58fb-1268-4835-86da-f008ce62f0d6"));
2437 public interface ID3D12Pageable : ID3D12DeviceChild
2438 {
2439 extern(Windows):
2440 }
2441 
2442 mixin(uuid!(ID3D12Heap, "6b3b2502-6e51-45b3-90ee-9884265e8df3"));
2443 public interface ID3D12Heap : ID3D12Pageable
2444 {
2445 extern(Windows):
2446     D3D12_HEAP_DESC GetDesc();
2447 }
2448 
2449 mixin(uuid!(ID3D12Resource, "696442be-a72e-4059-bc79-5b5c98040fad"));
2450 public interface ID3D12Resource : ID3D12Pageable
2451 {
2452 extern(Windows):
2453     HRESULT Map(uint Subresource, const D3D12_RANGE *pReadRange, void **ppData);
2454     void Unmap(uint Subresource, const D3D12_RANGE *pWrittenRange);
2455     D3D12_RESOURCE_DESC GetDesc();
2456     D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress();
2457     HRESULT WriteToSubresource(uint DstSubresource, const D3D12_BOX *pDstBox, const void *pSrcData, uint SrcRowPitch, uint SrcDepthPitch);
2458     HRESULT ReadFromSubresource(void *pDstData, uint DstRowPitch, uint DstDepthPitch, uint SrcSubresource, const D3D12_BOX *pSrcBox);
2459     HRESULT GetHeapProperties(D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS *pHeapFlags);
2460 }
2461 
2462 mixin(uuid!(ID3D12CommandAllocator, "6102dee4-af59-4b09-b999-b44d73f09b24"));
2463 public interface ID3D12CommandAllocator : ID3D12Pageable
2464 {
2465 extern(Windows):
2466     HRESULT Reset();
2467 }
2468 
2469 mixin(uuid!(ID3D12Fence, "0a753dcf-c4d8-4b91-adf6-be5a60d95a76"));
2470 public interface ID3D12Fence : ID3D12Pageable
2471 {
2472 extern(Windows):
2473     ulong GetCompletedValue();
2474     HRESULT SetEventOnCompletion(ulong Value, HANDLE hEvent);
2475     HRESULT Signal(ulong Value);
2476 }
2477 
2478 mixin(uuid!(ID3D12Fence1, "433685fe-e22b-4ca0-a8db-b5b4f4dd0e4a"));
2479 public interface ID3D12Fence1 : ID3D12Fence
2480 {
2481 extern(Windows):
2482     D3D12_FENCE_FLAGS GetCreationFlags();
2483 }
2484 
2485 mixin(uuid!(ID3D12PipelineState, "765a30f3-f624-4c6f-a828-ace948622445"));
2486 public interface ID3D12PipelineState : ID3D12Pageable
2487 {
2488 extern(Windows):
2489     HRESULT GetCachedBlob(ID3DBlob *ppBlob);
2490 }
2491 
2492 mixin(uuid!(ID3D12DescriptorHeap, "8efb471d-616c-4f49-90f7-127bb763fa51"));
2493 public interface ID3D12DescriptorHeap : ID3D12Pageable
2494 {
2495 extern(Windows):
2496     D3D12_DESCRIPTOR_HEAP_DESC GetDesc();
2497     D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();
2498     D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();
2499 }
2500 
2501 mixin(uuid!(ID3D12QueryHeap, "0d9658ae-ed45-469e-a61d-970ec583cab4"));
2502 public interface ID3D12QueryHeap : ID3D12Pageable
2503 {
2504 extern(Windows):
2505 }
2506 
2507 mixin(uuid!(ID3D12CommandSignature, "c36a797c-ec80-4f0a-8985-a7b2475082d1"));
2508 public interface ID3D12CommandSignature : ID3D12Pageable
2509 {
2510 extern(Windows):
2511 }
2512 
2513 mixin(uuid!(ID3D12CommandList, "7116d91c-e7e4-47ce-b8c6-ec8168f437e5"));
2514 public interface ID3D12CommandList : ID3D12DeviceChild
2515 {
2516 extern(Windows):
2517     D3D12_COMMAND_LIST_TYPE GetType();
2518 }
2519 
2520 mixin(uuid!(ID3D12GraphicsCommandList, "5b160d0f-ac1b-4185-8ba8-b3ae42a5a455"));
2521 public interface ID3D12GraphicsCommandList : ID3D12CommandList
2522 {
2523 extern(Windows):
2524     HRESULT Close();
2525     HRESULT Reset(ID3D12CommandAllocator pAllocator, ID3D12PipelineState pInitialState);
2526     void ClearState(ID3D12PipelineState pPipelineState);
2527     void DrawInstanced(uint VertexCountPerInstance, uint InstanceCount, uint StartVertexLocation, uint StartInstanceLocation);
2528     void DrawIndexedInstanced(uint IndexCountPerInstance, uint InstanceCount, uint StartIndexLocation, int BaseVertexLocation, uint StartInstanceLocation);
2529     void Dispatch(uint ThreadGroupCountX, uint ThreadGroupCountY, uint ThreadGroupCountZ);
2530     void CopyBufferRegion(ID3D12Resource pDstBuffer, ulong DstOffset, ID3D12Resource pSrcBuffer, ulong SrcOffset, ulong NumBytes);
2531     void CopyTextureRegion(const D3D12_TEXTURE_COPY_LOCATION *pDst, uint DstX, uint DstY, uint DstZ, const D3D12_TEXTURE_COPY_LOCATION *pSrc, const D3D12_BOX *pSrcBox);
2532     void CopyResource(ID3D12Resource pDstResource, ID3D12Resource pSrcResource);
2533     void CopyTiles(ID3D12Resource pTiledResource, const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, const D3D12_TILE_REGION_SIZE *pTileRegionSize, ID3D12Resource pBuffer, ulong BufferStartOffsetInBytes, D3D12_TILE_COPY_FLAGS Flags);
2534     void ResolveSubresource(ID3D12Resource pDstResource, uint DstSubresource, ID3D12Resource pSrcResource, uint SrcSubresource, DXGI_FORMAT Format);
2535     void IASetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
2536     void RSSetViewports(uint NumViewports, const D3D12_VIEWPORT *pViewports);
2537     void RSSetScissorRects(uint NumRects, const D3D12_RECT *pRects);
2538     void OMSetBlendFactor(const float[4] BlendFactor);
2539     void OMSetStencilRef(uint StencilRef);
2540     void SetPipelineState(ID3D12PipelineState pPipelineState);
2541     void ResourceBarrier(uint NumBarriers, const D3D12_RESOURCE_BARRIER *pBarriers);
2542     void ExecuteBundle(ID3D12GraphicsCommandList pCommandList);
2543     void SetDescriptorHeaps(uint NumDescriptorHeaps, const(ID3D12DescriptorHeap) *ppDescriptorHeaps);
2544     void SetComputeRootSignature(ID3D12RootSignature pRootSignature);
2545     void SetGraphicsRootSignature(ID3D12RootSignature pRootSignature);
2546     void SetComputeRootDescriptorTable(uint RootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
2547     void SetGraphicsRootDescriptorTable(uint RootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
2548     void SetComputeRoot32BitConstant(uint RootParameterIndex, uint SrcData, uint DestOffsetIn32BitValues);
2549     void SetGraphicsRoot32BitConstant(uint RootParameterIndex, uint SrcData, uint DestOffsetIn32BitValues);
2550     void SetComputeRoot32BitConstants(uint RootParameterIndex, uint Num32BitValuesToSet, const void *pSrcData, uint DestOffsetIn32BitValues);
2551     void SetGraphicsRoot32BitConstants(uint RootParameterIndex, uint Num32BitValuesToSet, const void *pSrcData, uint DestOffsetIn32BitValues);
2552     void SetComputeRootConstantBufferView(uint RootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2553     void SetGraphicsRootConstantBufferView(uint RootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2554     void SetComputeRootShaderResourceView(uint RootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2555     void SetGraphicsRootShaderResourceView(uint RootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2556     void SetComputeRootUnorderedAccessView(uint RootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2557     void SetGraphicsRootUnorderedAccessView(uint RootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2558     void IASetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW *pView);
2559     void IASetVertexBuffers(uint StartSlot, uint NumViews, const D3D12_VERTEX_BUFFER_VIEW *pViews);
2560     void SOSetTargets(uint StartSlot, uint NumViews, const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
2561     void OMSetRenderTargets(uint NumRenderTargetDescriptors, const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, bool RTsSingleHandleToDescriptorRange, const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
2562     void ClearDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, D3D12_CLEAR_FLAGS ClearFlags, float Depth, ubyte Stencil, uint NumRects, const D3D12_RECT *pRects);
2563     void ClearRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, const float[4] ColorRGBA, uint NumRects, const D3D12_RECT *pRects);
2564     void ClearUnorderedAccessViewUint(D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, ID3D12Resource pResource, const uint[4] Values, uint NumRects, const D3D12_RECT *pRects);
2565     void ClearUnorderedAccessViewFloat(D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, ID3D12Resource pResource, const float[4] Values, uint NumRects, const D3D12_RECT *pRects);
2566     void DiscardResource(ID3D12Resource pResource, const D3D12_DISCARD_REGION *pRegion);
2567     void BeginQuery(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint Index);
2568     void EndQuery(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint Index);
2569     void ResolveQueryData(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint StartIndex, uint NumQueries, ID3D12Resource pDestinationBuffer, ulong AlignedDestinationBufferOffset);
2570     void SetPredication(ID3D12Resource pBuffer, ulong AlignedBufferOffset, D3D12_PREDICATION_OP Operation);
2571     void SetMarker(uint Metadata, const void *pData, uint Size);
2572     void BeginEvent(uint Metadata, const void *pData, uint Size);
2573     void EndEvent();
2574     void ExecuteIndirect(ID3D12CommandSignature pCommandSignature, uint MaxCommandCount, ID3D12Resource pArgumentBuffer, ulong ArgumentBufferOffset, ID3D12Resource pCountBuffer, ulong CountBufferOffset);
2575 }
2576 
2577 mixin(uuid!(ID3D12GraphicsCommandList1, "553103fb-1fe7-4557-bb38-946d7d0e7ca7"));
2578 public interface ID3D12GraphicsCommandList1 : ID3D12GraphicsCommandList
2579 {
2580 extern(Windows):
2581     void AtomicCopyBufferUINT(ID3D12Resource pDstBuffer, ulong DstOffset, ID3D12Resource pSrcBuffer, ulong SrcOffset, uint Dependencies, const(ID3D12Resource) *ppDependentResources, const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
2582     void AtomicCopyBufferUINT64(ID3D12Resource pDstBuffer, ulong DstOffset, ID3D12Resource pSrcBuffer, ulong SrcOffset, uint Dependencies, const(ID3D12Resource) *ppDependentResources, const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
2583     void OMSetDepthBounds(float Min, float Max);
2584     void SetSamplePositions(uint NumSamplesPerPixel, uint NumPixels, D3D12_SAMPLE_POSITION *pSamplePositions);
2585     void ResolveSubresourceRegion(ID3D12Resource pDstResource, uint DstSubresource, uint DstX, uint DstY, ID3D12Resource pSrcResource, uint SrcSubresource, D3D12_RECT *pSrcRect, DXGI_FORMAT Format, D3D12_RESOLVE_MODE ResolveMode);
2586     void SetViewInstanceMask(uint Mask);
2587 }
2588 
2589 mixin(uuid!(ID3D12GraphicsCommandList2, "38C3E585-FF17-412C-9150-4FC6F9D72A28"));
2590 public interface ID3D12GraphicsCommandList2 : ID3D12GraphicsCommandList1
2591 {
2592 extern(Windows):
2593     void WriteBufferImmediate(uint Count, const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
2594 }
2595 
2596 mixin(uuid!(ID3D12CommandQueue, "0ec870a6-5d7e-4c22-8cfc-5baae07616ed"));
2597 public interface ID3D12CommandQueue : ID3D12Pageable
2598 {
2599 extern(Windows):
2600         void UpdateTileMappings(ID3D12Resource pResource, uint NumResourceRegions, const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates, const D3D12_TILE_REGION_SIZE *pResourceRegionSizes, ID3D12Heap pHeap, uint NumRanges, const D3D12_TILE_RANGE_FLAGS *pRangeFlags, const uint *pHeapRangeStartOffsets, const uint *pRangeTileCounts, D3D12_TILE_MAPPING_FLAGS Flags);
2601         void CopyTileMappings(ID3D12Resource pDstResource, const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate, ID3D12Resource pSrcResource, const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate, const D3D12_TILE_REGION_SIZE *pRegionSize, D3D12_TILE_MAPPING_FLAGS Flags);
2602         void ExecuteCommandLists(uint NumCommandLists, const(ID3D12CommandList) *ppCommandLists);
2603         void SetMarker( uint Metadata, const void *pData, uint Size);
2604         void BeginEvent(uint Metadata, const void *pData, uint Size);
2605         void EndEvent();
2606         HRESULT Signal(ID3D12Fence pFence, ulong Value);
2607         HRESULT Wait(ID3D12Fence pFence, ulong Value);
2608         HRESULT GetTimestampFrequency(ulong *pFrequency);
2609         HRESULT GetClockCalibration(ulong *pGpuTimestamp, ulong *pCpuTimestamp);
2610         D3D12_COMMAND_QUEUE_DESC GetDesc();
2611 }
2612 
2613 mixin(uuid!(ID3D12Device, "189819f1-1db6-4b57-be54-1821339b85f7"));
2614 public interface ID3D12Device : ID3D12Object
2615 {
2616 extern(Windows):
2617     uint GetNodeCount();
2618     HRESULT CreateCommandQueue(const D3D12_COMMAND_QUEUE_DESC *pDesc, REFIID riid, void **ppCommandQueue);
2619     HRESULT CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE type, REFIID riid, void **ppCommandAllocator);
2620     HRESULT CreateGraphicsPipelineState(const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, REFIID riid, void **ppPipelineState);
2621     HRESULT CreateComputePipelineState(const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, REFIID riid, void **ppPipelineState);
2622     HRESULT CreateCommandList(uint nodeMask, D3D12_COMMAND_LIST_TYPE type, ID3D12CommandAllocator pCommandAllocator, ID3D12PipelineState pInitialState, REFIID riid, void **ppCommandList);
2623     HRESULT CheckFeatureSupport(D3D12_FEATURE Feature, void *pFeatureSupportData, uint FeatureSupportDataSize);
2624     HRESULT CreateDescriptorHeap(const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, REFIID riid, void **ppvHeap);
2625     uint GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
2626     HRESULT CreateRootSignature(uint nodeMask, const void *pBlobWithRootSignature, size_t blobLengthInBytes, REFIID riid, void **ppvRootSignature);
2627     void CreateConstantBufferView(const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2628     void CreateShaderResourceView(ID3D12Resource pResource, const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2629     void CreateUnorderedAccessView(ID3D12Resource pResource, ID3D12Resource pCounterResource, const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2630     void CreateRenderTargetView(ID3D12Resource pResource, const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2631     void CreateDepthStencilView(ID3D12Resource pResource, const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2632     void CreateSampler(const D3D12_SAMPLER_DESC *pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2633     void CopyDescriptors(uint NumDestDescriptorRanges, const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, const uint *pDestDescriptorRangeSizes, uint NumSrcDescriptorRanges, const D3D12_CPU_DESCRIPTOR_HANDLE *pSr, const uint *pSrcDescriptorRangeSizes, D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
2634     void CopyDescriptorsSimple(uint NumDescriptors, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
2635     D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(uint visibleMask, uint numResourceDescs, const D3D12_RESOURCE_DESC *pResourceDescs);
2636     D3D12_HEAP_PROPERTIES GetCustomHeapProperties(uint nodeMask, D3D12_HEAP_TYPE heapType);
2637     HRESULT CreateCommittedResource(const D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS HeapFlags, const D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riidResource, void **ppvResource);
2638     HRESULT CreateHeap(const D3D12_HEAP_DESC *pDesc, REFIID riid, void **ppvHeap);
2639     HRESULT CreatePlacedResource(ID3D12Heap pHeap, ulong HeapOffset, const D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riid, void **ppvResource);
2640     HRESULT CreateReservedResource(const D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riid, void **ppvResource);
2641     HRESULT CreateSharedHandle(ID3D12DeviceChild pObject, const SECURITY_ATTRIBUTES *pAttributes, uint Access, const wchar *Name, HANDLE *pHandle);
2642     HRESULT OpenSharedHandle(HANDLE NTHandle, REFIID riid, void **ppvObj);
2643     HRESULT OpenSharedHandleByName(const wchar *Name, uint Access, HANDLE *pNTHandle);
2644     HRESULT MakeResident( uint NumObjects, const(ID3D12Pageable) *ppObjects);
2645     HRESULT Evict(uint NumObjects, const(ID3D12Pageable) *ppObjects);
2646     HRESULT CreateFence(ulong InitialValue, D3D12_FENCE_FLAGS Flags, REFIID riid, void **ppFence);
2647     HRESULT GetDeviceRemovedReason();
2648     void GetCopyableFootprints(const D3D12_RESOURCE_DESC *pResourceDesc, uint FirstSubresource, uint NumSubresources, ulong BaseOffset, D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, uint *pNumRows, ulong *pRowSizeInBytes, ulong *pTotalBytes);
2649     HRESULT CreateQueryHeap(const D3D12_QUERY_HEAP_DESC *pDesc, REFIID riid, void **ppvHeap);
2650     HRESULT SetStablePowerState(bool Enable);
2651     HRESULT CreateCommandSignature(const D3D12_COMMAND_SIGNATURE_DESC *pDesc, ID3D12RootSignature pRootSignature, REFIID riid, void **ppvCommandSignature);
2652     void GetResourceTiling(ID3D12Resource pTiledResource, uint *pNumTilesForEntireResource, D3D12_PACKED_MIP_INFO *pPackedMipDesc, D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, uint *pNumSubresourceTilings, uint FirstSubresourceTilingToGet, D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips);
2653     LUID GetAdapterLuid();
2654 }
2655 
2656 mixin(uuid!(ID3D12PipelineLibrary, "c64226a8-9201-46af-b4cc-53fb9ff7414f"));
2657 public interface ID3D12PipelineLibrary : ID3D12DeviceChild
2658 {
2659 extern(Windows):
2660     HRESULT StorePipeline(const wchar *pName, ID3D12PipelineState pPipeline);
2661     HRESULT LoadGraphicsPipeline(const wchar *pName, const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, REFIID riid, void **ppPipelineState);
2662     HRESULT LoadComputePipeline(const wchar *pName, const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, REFIID riid, void **ppPipelineState);
2663     size_t GetSerializedSize();
2664     HRESULT Serialize(void *pData, size_t DataSizeInBytes);
2665 }
2666 
2667 mixin(uuid!(ID3D12PipelineLibrary1, "80eabf42-2568-4e5e-bd82-c37f86961dc3"));
2668 public interface ID3D12PipelineLibrary1 : ID3D12PipelineLibrary
2669 {
2670 extern(Windows):
2671     HRESULT LoadPipeline(const wchar *Name, const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, REFIID riid, void **ppPipelineState);
2672 }
2673 
2674 mixin(uuid!(ID3D12Device1, "77acce80-638e-4e65-8895-c1f23386863e"));
2675 public interface ID3D12Device1 : ID3D12Device
2676 {
2677 extern(Windows):
2678     HRESULT CreatePipelineLibrary(const void *pLibraryBlob, size_t BlobLength, REFIID riid, void **ppPipelineLibrary);
2679     HRESULT SetEventOnMultipleFenceCompletion(const(ID3D12Fence) *ppFences, const ulong *pFenceValues, uint NumFences, D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, HANDLE hEvent);
2680     HRESULT SetResidencyPriority(uint NumObjects, const(ID3D12Pageable) *ppObjects, const D3D12_RESIDENCY_PRIORITY *pPriorities);
2681 }
2682 
2683 mixin(uuid!(ID3D12Device2, "30baa41e-b15b-475c-a0bb-1af5c5b64328"));
2684 public interface ID3D12Device2 : ID3D12Device1
2685 {
2686 extern(Windows):
2687     HRESULT CreatePipelineState(const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, REFIID riid, void **ppPipelineState);
2688 }
2689 
2690 mixin(uuid!(ID3D12Device3, "81dadc15-2bad-4392-93c5-101345c4aa98"));
2691 public interface ID3D12Device3 : ID3D12Device2
2692 {
2693 extern(Windows):
2694     HRESULT OpenExistingHeapFromAddress(const void *pAddress, REFIID riid, void **ppvHeap);
2695     HRESULT OpenExistingHeapFromFileMapping(HANDLE hFileMapping, REFIID riid, void **ppvHeap);
2696     HRESULT EnqueueMakeResident(D3D12_RESIDENCY_FLAGS Flags, uint NumObjects, const(ID3D12Pageable) *ppObjects, ID3D12Fence pFenceToSignal, ulong FenceValueToSignal);
2697 }
2698 
2699 mixin(uuid!(ID3D12Tools, "7071e1f0-e84b-4b33-974f-12fa49de65c5"));
2700 public interface ID3D12Tools : IUnknown
2701 {
2702 extern(Windows):
2703     void EnableShaderInstrumentation(bool bEnable);
2704     bool ShaderInstrumentationEnabled();
2705 }
2706 
2707 enum D3D12_COMMAND_LIST_FLAGS
2708 {
2709     D3D12_COMMAND_LIST_FLAG_NONE = 0
2710 }
2711 
2712 enum D3D12_COMMAND_POOL_FLAGS
2713 {
2714     D3D12_COMMAND_POOL_FLAG_NONE = 0
2715 }
2716 
2717 enum D3D12_COMMAND_RECORDER_FLAGS
2718 {
2719     D3D12_COMMAND_RECORDER_FLAG_NONE = 0
2720 }
2721 
2722 enum D3D12_PROTECTED_SESSION_STATUS
2723 {
2724     D3D12_PROTECTED_SESSION_STATUS_OK = 0,
2725     D3D12_PROTECTED_SESSION_STATUS_INVALID = 1
2726 }
2727 
2728 enum D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS
2729 {
2730     D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE = 0,
2731     D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_SUPPORTED = 0x1
2732 }
2733 
2734 enum D3D12_PROTECTED_RESOURCE_SESSION_FLAGS
2735 {
2736     D3D12_PROTECTED_RESOURCE_SESSION_FLAG_NONE = 0
2737 }
2738 
2739 enum D3D12_LIFETIME_STATE
2740 {
2741     D3D12_LIFETIME_STATE_IN_USE = 0,
2742     D3D12_LIFETIME_STATE_NOT_IN_USE = ( D3D12_LIFETIME_STATE_IN_USE + 1 ) 
2743 }
2744 
2745 enum D3D12_META_COMMAND_PARAMETER_TYPE
2746 {
2747     D3D12_META_COMMAND_PARAMETER_TYPE_FLOAT = 0,
2748     D3D12_META_COMMAND_PARAMETER_TYPE_UINT64 = 1,
2749     D3D12_META_COMMAND_PARAMETER_TYPE_GPU_VIRTUAL_ADDRESS = 2,
2750     D3D12_META_COMMAND_PARAMETER_TYPE_CPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 3,
2751     D3D12_META_COMMAND_PARAMETER_TYPE_GPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 4
2752 }
2753 
2754 enum D3D12_META_COMMAND_PARAMETER_FLAGS
2755 {
2756     D3D12_META_COMMAND_PARAMETER_FLAG_INPUT = 0x1,
2757     D3D12_META_COMMAND_PARAMETER_FLAG_OUTPUT = 0x2
2758 }
2759 
2760 enum D3D12_META_COMMAND_PARAMETER_STAGE
2761 {
2762     D3D12_META_COMMAND_PARAMETER_STAGE_CREATION = 0,
2763     D3D12_META_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1,
2764     D3D12_META_COMMAND_PARAMETER_STAGE_EXECUTION = 2
2765 }
2766 
2767 struct D3D12_META_COMMAND_PARAMETER_DESC
2768 {
2769     const wchar *Name;
2770     D3D12_META_COMMAND_PARAMETER_TYPE Type;
2771     D3D12_META_COMMAND_PARAMETER_FLAGS Flags;
2772     D3D12_RESOURCE_STATES RequiredResourceState;
2773     uint StructureOffset;
2774 }
2775 
2776 enum D3D12_GRAPHICS_STATES
2777 {
2778     D3D12_GRAPHICS_STATE_NONE = 0,
2779     D3D12_GRAPHICS_STATE_IA_VERTEX_BUFFERS = ( 1 << 0 ) ,
2780     D3D12_GRAPHICS_STATE_IA_INDEX_BUFFER = ( 1 << 1 ) ,
2781     D3D12_GRAPHICS_STATE_IA_PRIMITIVE_TOPOLOGY = ( 1 << 2 ) ,
2782     D3D12_GRAPHICS_STATE_DESCRIPTOR_HEAP = ( 1 << 3 ) ,
2783     D3D12_GRAPHICS_STATE_GRAPHICS_ROOT_SIGNATURE = ( 1 << 4 ) ,
2784     D3D12_GRAPHICS_STATE_COMPUTE_ROOT_SIGNATURE = ( 1 << 5 ) ,
2785     D3D12_GRAPHICS_STATE_RS_VIEWPORTS = ( 1 << 6 ) ,
2786     D3D12_GRAPHICS_STATE_RS_SCISSOR_RECTS = ( 1 << 7 ) ,
2787     D3D12_GRAPHICS_STATE_PREDICATION = ( 1 << 8 ) ,
2788     D3D12_GRAPHICS_STATE_OM_RENDER_TARGETS = ( 1 << 9 ) ,
2789     D3D12_GRAPHICS_STATE_OM_STENCIL_REF = ( 1 << 10 ) ,
2790     D3D12_GRAPHICS_STATE_OM_BLEND_FACTOR = ( 1 << 11 ) ,
2791     D3D12_GRAPHICS_STATE_PIPELINE_STATE = ( 1 << 12 ) ,
2792     D3D12_GRAPHICS_STATE_SO_TARGETS = ( 1 << 13 ) ,
2793     D3D12_GRAPHICS_STATE_OM_DEPTH_BOUNDS = ( 1 << 14 ) ,
2794     D3D12_GRAPHICS_STATE_SAMPLE_POSITIONS = ( 1 << 15 ) ,
2795     D3D12_GRAPHICS_STATE_VIEW_INSTANCE_MASK = ( 1 << 16 ) 
2796 }
2797 
2798 struct D3D12_META_COMMAND_DESC
2799 {
2800     GUID Id;
2801     const wchar *Name;
2802     D3D12_GRAPHICS_STATES InitializationDirtyState;
2803     D3D12_GRAPHICS_STATES ExecutionDirtyState;
2804 }
2805 
2806 
2807 struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT
2808 {
2809     uint NodeIndex;
2810     D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS Support;
2811 }
2812 
2813 struct D3D12_PROTECTED_RESOURCE_SESSION_DESC
2814 {
2815     uint NodeMask;
2816     D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags;
2817 }
2818 
2819 mixin(uuid!(ID3D12ProtectedSession, "A1533D18-0AC1-4084-85B9-89A96116806B"));
2820 public interface ID3D12ProtectedSession : ID3D12DeviceChild
2821 {
2822 extern(Windows):
2823     HRESULT GetStatusFence(REFIID riid, void **ppFence);
2824     D3D12_PROTECTED_SESSION_STATUS GetSessionStatus();
2825 }
2826 
2827 mixin(uuid!(ID3D12ProtectedResourceSession, "6CD696F4-F289-40CC-8091-5A6C0A099C3D"));
2828 public interface ID3D12ProtectedResourceSession : ID3D12ProtectedSession
2829 {
2830 extern(Windows):
2831     D3D12_PROTECTED_RESOURCE_SESSION_DESC GetDesc();
2832 }
2833 
2834 mixin(uuid!(ID3D12Device4, "e865df17-a9ee-46f9-a463-3098315aa2e5"));
2835 public interface ID3D12Device4 : ID3D12Device3
2836 {
2837 extern(Windows):
2838     HRESULT CreateCommandList1(uint nodeMask, D3D12_COMMAND_LIST_TYPE type, D3D12_COMMAND_LIST_FLAGS flags, REFIID riid, void **ppCommandList);
2839     HRESULT CreateProtectedResourceSession(const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, REFIID riid, void **ppSession);
2840     HRESULT CreateCommittedResource1(const D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS HeapFlags, const D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession pProtectedSession, REFIID riidResource, void **ppvResource);
2841     HRESULT CreateHeap1(const D3D12_HEAP_DESC *pDesc, ID3D12ProtectedResourceSession pProtectedSession, REFIID riid, void **ppvHeap);
2842     HRESULT CreateReservedResource1(const D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession pProtectedSession, REFIID riid, void **ppvResource);
2843     D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo1(uint visibleMask, uint numResourceDescs, const D3D12_RESOURCE_DESC *pResourceDescs, D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
2844 }
2845 
2846 mixin(uuid!(ID3D12LifetimeOwner, "e667af9f-cd56-4f46-83ce-032e595d70a8"));
2847 public interface ID3D12LifetimeOwner : IUnknown
2848 {
2849 extern(Windows):
2850     void LifetimeStateUpdated(D3D12_LIFETIME_STATE NewState);
2851 }
2852 
2853 mixin(uuid!(ID3D12SwapChainAssistant, "f1df64b6-57fd-49cd-8807-c0eb88b45c8f"));
2854 public interface ID3D12SwapChainAssistant : IUnknown
2855 {
2856 extern(Windows):
2857     LUID GetLUID();
2858     HRESULT GetSwapChainObject(REFIID riid, void **ppv);
2859     HRESULT GetCurrentResourceAndCommandQueue(REFIID riidResource, void **ppvResource, REFIID riidQueue, void **ppvQueue);
2860     HRESULT InsertImplicitSync();
2861 }
2862 
2863 mixin(uuid!(ID3D12LifetimeTracker, "3fd03d36-4eb1-424a-a582-494ecb8ba813"));
2864 public interface ID3D12LifetimeTracker : ID3D12DeviceChild
2865 {
2866 extern(Windows):
2867     HRESULT DestroyOwnedObject(ID3D12DeviceChild pObject);
2868 }
2869 
2870 mixin(uuid!(ID3D12StateObject, "47016943-fca8-4594-93ea-af258b55346d"));
2871 public interface ID3D12StateObject : ID3D12Pageable
2872 {
2873 extern(Windows):
2874 }
2875 
2876 mixin(uuid!(ID3D12StateObjectProperties, "de5fa827-9bf9-4f26-89ff-d7f56fde3860"));
2877 public interface ID3D12StateObjectProperties : IUnknown
2878 {
2879 extern(Windows):
2880     void *GetShaderIdentifier(const wchar *pExportName);
2881     ulong GetShaderStackSize(const wchar *pExportName);
2882     ulong GetPipelineStackSize();
2883     void SetPipelineStackSize(ulong PipelineStackSizeInBytes);
2884 }
2885 
2886 enum D3D12_STATE_SUBOBJECT_TYPE
2887 {
2888     D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG = 0,
2889     D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE = 1,
2890     D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE = 2,
2891     D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK = 3,
2892     D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY = 5,
2893     D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION = 6,
2894     D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 7,
2895     D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 8,
2896     D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG = 9,
2897     D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG = 10,
2898     D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP = 11,
2899     D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP + 1 ) 
2900 }
2901 
2902 struct D3D12_STATE_SUBOBJECT
2903 {
2904     D3D12_STATE_SUBOBJECT_TYPE Type;
2905     const void *pDesc;
2906 }
2907 
2908 enum D3D12_STATE_OBJECT_FLAGS
2909 {
2910     D3D12_STATE_OBJECT_FLAG_NONE = 0,
2911     D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS = 0x1,
2912     D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS = 0x2
2913 }
2914 
2915 struct D3D12_STATE_OBJECT_CONFIG
2916 {
2917     D3D12_STATE_OBJECT_FLAGS Flags;
2918 }
2919 
2920 struct D3D12_GLOBAL_ROOT_SIGNATURE
2921 {
2922     ID3D12RootSignature pGlobalRootSignature;
2923 }
2924 
2925 struct D3D12_LOCAL_ROOT_SIGNATURE
2926 {
2927     ID3D12RootSignature pLocalRootSignature;
2928 }
2929 
2930 struct D3D12_NODE_MASK
2931 {
2932     uint NodeMask;
2933 }
2934 
2935 enum D3D12_EXPORT_FLAGS
2936 {
2937     D3D12_EXPORT_FLAG_NONE = 0
2938 }
2939 
2940 struct D3D12_EXPORT_DESC
2941 {
2942     const wchar *Name;
2943     const wchar *ExportToRename;
2944     D3D12_EXPORT_FLAGS Flags;
2945 }
2946 
2947 struct D3D12_DXIL_LIBRARY_DESC
2948 {
2949     D3D12_SHADER_BYTECODE DXILLibrary;
2950     uint NumExports;
2951     D3D12_EXPORT_DESC *pExports;
2952 }
2953 
2954 struct D3D12_EXISTING_COLLECTION_DESC
2955 {
2956     ID3D12StateObject pExistingCollection;
2957     uint NumExports;
2958     D3D12_EXPORT_DESC *pExports;
2959 }
2960 
2961 struct D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION
2962     {
2963     const D3D12_STATE_SUBOBJECT *pSubobjectToAssociate;
2964     uint NumExports;
2965     const wchar **pExports;
2966 }
2967 
2968 struct D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION
2969 {
2970     const wchar *SubobjectToAssociate;
2971     uint NumExports;
2972     const wchar **pExports;
2973 }
2974 
2975 enum D3D12_HIT_GROUP_TYPE
2976 {
2977     D3D12_HIT_GROUP_TYPE_TRIANGLES = 0,
2978     D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE = 0x1
2979 }
2980 
2981 struct D3D12_HIT_GROUP_DESC
2982 {
2983     const wchar *HitGroupExport;
2984     D3D12_HIT_GROUP_TYPE Type;
2985     const wchar *AnyHitShaderImport;
2986     const wchar *ClosestHitShaderImport;
2987     const wchar *IntersectionShaderImport;
2988 }
2989 
2990 struct D3D12_RAYTRACING_SHADER_CONFIG
2991 {
2992     uint MaxPayloadSizeInBytes;
2993     uint MaxAttributeSizeInBytes;
2994 }
2995 
2996 struct D3D12_RAYTRACING_PIPELINE_CONFIG
2997 {
2998     uint MaxTraceRecursionDepth;
2999 }
3000 
3001 enum D3D12_STATE_OBJECT_TYPE
3002 {
3003     D3D12_STATE_OBJECT_TYPE_COLLECTION = 0,
3004     D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE = 3
3005 }
3006 
3007 struct D3D12_STATE_OBJECT_DESC
3008 {
3009     D3D12_STATE_OBJECT_TYPE Type;
3010     uint NumSubobjects;
3011     const D3D12_STATE_SUBOBJECT *pSubobjects;
3012 }
3013 
3014 enum D3D12_RAYTRACING_GEOMETRY_FLAGS
3015 {
3016     D3D12_RAYTRACING_GEOMETRY_FLAG_NONE = 0,
3017     D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE = 0x1,
3018     D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 0x2
3019 }
3020 
3021 enum D3D12_RAYTRACING_GEOMETRY_TYPE
3022 {
3023     D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES = 0,
3024     D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS = ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) 
3025 }
3026 
3027 enum D3D12_RAYTRACING_INSTANCE_FLAGS
3028 {
3029     D3D12_RAYTRACING_INSTANCE_FLAG_NONE = 0,
3030     D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1,
3031     D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2,
3032     D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4,
3033     D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8
3034 }
3035 
3036 struct D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE
3037 {
3038     D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
3039     ulong StrideInBytes;
3040 }
3041 
3042 struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE
3043 {
3044     D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
3045     ulong SizeInBytes;
3046 }
3047 
3048 struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE
3049 {
3050     D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
3051     ulong SizeInBytes;
3052     ulong StrideInBytes;
3053 }
3054 
3055 struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC
3056 {
3057     D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
3058     DXGI_FORMAT IndexFormat;
3059     DXGI_FORMAT VertexFormat;
3060     uint IndexCount;
3061     uint VertexCount;
3062     D3D12_GPU_VIRTUAL_ADDRESS IndexBuffer;
3063     D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer;
3064 }
3065 
3066 struct D3D12_RAYTRACING_AABB
3067 {
3068     float MinX;
3069     float MinY;
3070     float MinZ;
3071     float MaxX;
3072     float MaxY;
3073     float MaxZ;
3074 }
3075 
3076 struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC
3077 {
3078     ulong AABBCount;
3079     D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs;
3080 }
3081 
3082 enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
3083 {
3084     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE = 0,
3085     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_UPDATE = 0x1,
3086     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_COMPACTION = 0x2,
3087     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE = 0x4,
3088     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x8,
3089     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10,
3090     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20
3091 }
3092 
3093 enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE
3094 {
3095     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_CLONE = 0,
3096     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_COMPACT = 0x1,
3097     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_VISUALIZATION_DECODE_FOR_TOOLS = 0x2,
3098     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_SERIALIZE = 0x3,
3099     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_DESERIALIZE = 0x4
3100 }
3101 
3102 enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE
3103 {
3104     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0,
3105     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1
3106 }
3107 
3108 enum D3D12_ELEMENTS_LAYOUT
3109 {
3110     D3D12_ELEMENTS_LAYOUT_ARRAY = 0,
3111     D3D12_ELEMENTS_LAYOUT_ARRAY_OF_POINTERS = 0x1
3112 }
3113 
3114 enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE
3115 {
3116     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE = 0,
3117     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1,
3118     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION = 0x2,
3119     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE = 0x3
3120 }
3121 
3122 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC
3123 {
3124     D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
3125     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE InfoType;
3126 }
3127 
3128 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC
3129 {
3130     ulong CompactedSizeInBytes;
3131 }
3132 
3133 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
3134 {
3135     ulong DecodedSizeInBytes;
3136 }
3137 
3138 struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER
3139 {
3140     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
3141     uint NumDescs;
3142 }
3143 
3144 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC
3145 {
3146     ulong SerializedSizeInBytes;
3147     ulong NumBottomLevelAccelerationStructurePointers;
3148 }
3149 
3150 struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
3151 {
3152     GUID DriverOpaqueGUID;
3153     ubyte[16] DriverOpaqueVersioningData;
3154 }
3155 
3156 enum D3D12_SERIALIZED_DATA_TYPE
3157 {
3158     D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0
3159 }
3160 
3161 enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS
3162 {
3163     D3D12_DRIVER_MATCHING_IDENTIFIER_COMPATIBLE_WITH_DEVICE = 0,
3164     D3D12_DRIVER_MATCHING_IDENTIFIER_UNSUPPORTED_TYPE = 0x1,
3165     D3D12_DRIVER_MATCHING_IDENTIFIER_UNRECOGNIZED = 0x2,
3166     D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_VERSION = 0x3,
3167     D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_TYPE = 0x4
3168 }
3169 
3170 struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER
3171 {
3172     D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
3173     ulong SerializedSizeInBytesIncludingHeader;
3174     ulong DeserializedSizeInBytes;
3175     ulong NumBottomLevelAccelerationStructurePointersAfterHeader;
3176 }
3177 
3178 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC
3179 {
3180     ulong CurrentSizeInBytes;
3181 }
3182 
3183 struct D3D12_RAYTRACING_INSTANCE_DESC
3184 {
3185     float[3][4] Transform;
3186     uint InstanceID;
3187     uint InstanceMask;
3188     uint InstanceContributionToHitGroupIndex;
3189     uint Flags;
3190     D3D12_GPU_VIRTUAL_ADDRESS AccelerationStructure;
3191 }
3192 
3193 struct D3D12_RAYTRACING_GEOMETRY_DESC
3194 {
3195     D3D12_RAYTRACING_GEOMETRY_TYPE Type;
3196     D3D12_RAYTRACING_GEOMETRY_FLAGS Flags;
3197     union
3198     {
3199         D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles;
3200         D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs;
3201     };
3202 }
3203 
3204 struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
3205 {
3206     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
3207     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS Flags;
3208     uint NumDescs;
3209     D3D12_ELEMENTS_LAYOUT DescsLayout;
3210     union
3211     {
3212         D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs;
3213         const D3D12_RAYTRACING_GEOMETRY_DESC *pGeometryDescs;
3214         const D3D12_RAYTRACING_GEOMETRY_DESC **ppGeometryDescs;
3215     };
3216 }
3217 
3218 struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC
3219 {
3220     D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData;
3221     D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS Inputs;
3222     D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData;
3223     D3D12_GPU_VIRTUAL_ADDRESS ScratchAccelerationStructureData;
3224 }
3225 
3226 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO
3227 {
3228     ulong ResultDataMaxSizeInBytes;
3229     ulong ScratchDataSizeInBytes;
3230     ulong UpdateScratchDataSizeInBytes;
3231 }
3232 
3233 enum D3D12_RAY_FLAGS
3234 {
3235     D3D12_RAY_FLAG_NONE = 0,
3236     D3D12_RAY_FLAG_FORCE_OPAQUE = 0x1,
3237     D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 0x2,
3238     D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 0x4,
3239     D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 0x8,
3240     D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 0x10,
3241     D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 0x20,
3242     D3D12_RAY_FLAG_CULL_OPAQUE = 0x40,
3243     D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80
3244 }
3245 
3246 enum D3D12_HIT_KIND
3247 {
3248     D3D12_HIT_KIND_TRIANGLE_FRONT_FACE = 0xfe,
3249     D3D12_HIT_KIND_TRIANGLE_BACK_FACE = 0xff
3250 }
3251 
3252 mixin(uuid!(ID3D12Device5, "8b4f173b-2fea-4b80-8f58-4307191ab95d"));
3253 public interface ID3D12Device5 : ID3D12Device4
3254 {
3255 extern(Windows):
3256     HRESULT CreateLifetimeTracker(ID3D12LifetimeOwner pOwner, REFIID riid, void **ppvTracker);
3257     void RemoveDevice();
3258     HRESULT EnumerateMetaCommands(uint *pNumMetaCommands, D3D12_META_COMMAND_DESC *pDescs);
3259     HRESULT EnumerateMetaCommandParameters(REFGUID CommandId, D3D12_META_COMMAND_PARAMETER_STAGE Stage, uint *pTotalStructureSizeInBytes, uint *pParameterCount, D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
3260     HRESULT CreateMetaCommand(REFGUID CommandId, uint NodeMask, const void *pCreationParametersData, size_t CreationParametersDataSizeInBytes, REFIID riid, void **ppMetaCommand);
3261     HRESULT CreateStateObject(const D3D12_STATE_OBJECT_DESC *pDesc, REFIID riid, void **ppStateObject);
3262     void GetRaytracingAccelerationStructurePrebuildInfo(const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
3263     D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS CheckDriverMatchingIdentifier(D3D12_SERIALIZED_DATA_TYPE SerializedDataType, const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
3264 }
3265 
3266 enum D3D12_AUTO_BREADCRUMB_OP
3267 {
3268     D3D12_AUTO_BREADCRUMB_OP_SETMARKER = 0,
3269     D3D12_AUTO_BREADCRUMB_OP_BEGINEVENT = 1,
3270     D3D12_AUTO_BREADCRUMB_OP_ENDEVENT = 2,
3271     D3D12_AUTO_BREADCRUMB_OP_DRAWINSTANCED = 3,
3272     D3D12_AUTO_BREADCRUMB_OP_DRAWINDEXEDINSTANCED = 4,
3273     D3D12_AUTO_BREADCRUMB_OP_EXECUTEINDIRECT = 5,
3274     D3D12_AUTO_BREADCRUMB_OP_DISPATCH = 6,
3275     D3D12_AUTO_BREADCRUMB_OP_COPYBUFFERREGION = 7,
3276     D3D12_AUTO_BREADCRUMB_OP_COPYTEXTUREREGION = 8,
3277     D3D12_AUTO_BREADCRUMB_OP_COPYRESOURCE = 9,
3278     D3D12_AUTO_BREADCRUMB_OP_COPYTILES = 10,
3279     D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCE = 11,
3280     D3D12_AUTO_BREADCRUMB_OP_CLEARRENDERTARGETVIEW = 12,
3281     D3D12_AUTO_BREADCRUMB_OP_CLEARUNORDEREDACCESSVIEW = 13,
3282     D3D12_AUTO_BREADCRUMB_OP_CLEARDEPTHSTENCILVIEW = 14,
3283     D3D12_AUTO_BREADCRUMB_OP_RESOURCEBARRIER = 15,
3284     D3D12_AUTO_BREADCRUMB_OP_EXECUTEBUNDLE = 16,
3285     D3D12_AUTO_BREADCRUMB_OP_PRESENT = 17,
3286     D3D12_AUTO_BREADCRUMB_OP_RESOLVEQUERYDATA = 18,
3287     D3D12_AUTO_BREADCRUMB_OP_BEGINSUBMISSION = 19,
3288     D3D12_AUTO_BREADCRUMB_OP_ENDSUBMISSION = 20,
3289     D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME = 21,
3290     D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES = 22,
3291     D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT = 23,
3292     D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT64 = 24,
3293     D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCEREGION = 25,
3294     D3D12_AUTO_BREADCRUMB_OP_WRITEBUFFERIMMEDIATE = 26,
3295     D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME1 = 27,
3296     D3D12_AUTO_BREADCRUMB_OP_SETPROTECTEDRESOURCESESSION = 28,
3297     D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME2 = 29,
3298     D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES1 = 30,
3299     D3D12_AUTO_BREADCRUMB_OP_BUILDRAYTRACINGACCELERATIONSTRUCTURE = 31,
3300     D3D12_AUTO_BREADCRUMB_OP_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = 32,
3301     D3D12_AUTO_BREADCRUMB_OP_COPYRAYTRACINGACCELERATIONSTRUCTURE = 33,
3302     D3D12_AUTO_BREADCRUMB_OP_DISPATCHRAYS = 34,
3303     D3D12_AUTO_BREADCRUMB_OP_INITIALIZEMETACOMMAND = 35,
3304     D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND = 36,
3305     D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION = 37,
3306     D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP = 38,
3307     D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = 39
3308 }
3309 
3310 struct D3D12_AUTO_BREADCRUMB_NODE
3311 {
3312     const char *pCommandListDebugNameA;
3313     const wchar *pCommandListDebugNameW;
3314     const char *pCommandQueueDebugNameA;
3315     const wchar *pCommandQueueDebugNameW;
3316     ID3D12GraphicsCommandList pCommandList;
3317     ID3D12CommandQueue pCommandQueue;
3318     uint BreadcrumbCount;
3319     uint *pLastBreadcrumbValue;
3320     D3D12_AUTO_BREADCRUMB_OP *pCommandHistory;
3321     D3D12_AUTO_BREADCRUMB_NODE *pNext;
3322 }
3323 
3324 enum D3D12_DRED_VERSION
3325 {
3326     D3D12_DRED_VERSION_1_0 = 0x1
3327 }
3328 
3329 enum D3D12_DRED_FLAGS
3330 {
3331     D3D12_DRED_FLAG_NONE = 0,
3332     D3D12_DRED_FLAG_FORCE_ENABLE = 1,
3333     D3D12_DRED_FLAG_DISABLE_AUTOBREADCRUMBS = 2
3334 }
3335 
3336 struct D3D12_DEVICE_REMOVED_EXTENDED_DATA
3337 {
3338     D3D12_DRED_FLAGS Flags;
3339     D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode;
3340 }
3341 
3342 struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA
3343 {
3344     D3D12_DRED_VERSION Version;
3345     union
3346     {
3347        D3D12_DEVICE_REMOVED_EXTENDED_DATA Dred_1_0;
3348     };
3349 }
3350 
3351 mixin(uuid!(ID3D12Resource1, "9D5E227A-4430-4161-88B3-3ECA6BB16E19"));
3352 public interface ID3D12Resource1 : ID3D12Resource
3353 {
3354 extern(Windows):
3355     HRESULT GetProtectedResourceSession(REFIID riid, void **ppProtectedSession);
3356 }
3357 
3358 mixin(uuid!(ID3D12Heap1, "572F7389-2168-49E3-9693-D6DF5871BF6D"));
3359 public interface ID3D12Heap1 : ID3D12Heap
3360 {
3361 extern(Windows):
3362     HRESULT GetProtectedResourceSession(REFIID riid, void **ppProtectedSession);
3363 }
3364 
3365 mixin(uuid!(ID3D12GraphicsCommandList3, "6FDA83A7-B84C-4E38-9AC8-C7BD22016B3D"));
3366 public interface ID3D12GraphicsCommandList3 : ID3D12GraphicsCommandList2
3367 {
3368 extern(Windows):
3369     void SetProtectedResourceSession(ID3D12ProtectedResourceSession pProtectedResourceSession);
3370 }
3371 
3372 enum D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE
3373 {
3374     D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD = 0,
3375     D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD + 1 ) ,
3376     D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE + 1 ) ,
3377     D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR + 1 ) 
3378 }
3379 
3380 struct D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS
3381 {
3382     D3D12_CLEAR_VALUE ClearValue;
3383 }
3384 
3385 struct D3D12_RENDER_PASS_BEGINNING_ACCESS
3386 {
3387     D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE Type;
3388     union 
3389     {
3390         D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS Clear;
3391     };
3392 }
3393 
3394 enum D3D12_RENDER_PASS_ENDING_ACCESS_TYPE
3395 {
3396     D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD = 0,
3397     D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD + 1 ),
3398     D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE + 1 ),
3399     D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE + 1 )
3400 }
3401 
3402 struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS
3403 {
3404     uint SrcSubresource;
3405     uint DstSubresource;
3406     uint DstX;
3407     uint DstY;
3408     D3D12_RECT SrcRect;
3409 }
3410 
3411 struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS
3412 {
3413     ID3D12Resource pSrcResource;
3414     ID3D12Resource pDstResource;
3415     uint SubresourceCount;
3416     const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS *pSubresourceParameters;
3417     DXGI_FORMAT Format;
3418     D3D12_RESOLVE_MODE ResolveMode;
3419     bool PreserveResolveSource;
3420 }
3421 
3422 struct D3D12_RENDER_PASS_ENDING_ACCESS
3423 {
3424     D3D12_RENDER_PASS_ENDING_ACCESS_TYPE Type;
3425     union 
3426     {
3427         D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS Resolve;
3428     };
3429 }
3430 
3431 struct D3D12_RENDER_PASS_RENDER_TARGET_DESC
3432 {
3433     D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor;
3434     D3D12_RENDER_PASS_BEGINNING_ACCESS BeginningAccess;
3435     D3D12_RENDER_PASS_ENDING_ACCESS EndingAccess;
3436 }
3437 
3438 struct D3D12_RENDER_PASS_DEPTH_STENCIL_DESC
3439 {
3440     D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor;
3441     D3D12_RENDER_PASS_BEGINNING_ACCESS DepthBeginningAccess;
3442     D3D12_RENDER_PASS_BEGINNING_ACCESS StencilBeginningAccess;
3443     D3D12_RENDER_PASS_ENDING_ACCESS DepthEndingAccess;
3444     D3D12_RENDER_PASS_ENDING_ACCESS StencilEndingAccess;
3445 }
3446 
3447 enum D3D12_RENDER_PASS_FLAGS
3448 {
3449     D3D12_RENDER_PASS_FLAG_NONE = 0,
3450     D3D12_RENDER_PASS_FLAG_ALLOW_UAV_WRITES = 0x1,
3451     D3D12_RENDER_PASS_FLAG_SUSPENDING_PASS = 0x2,
3452     D3D12_RENDER_PASS_FLAG_RESUMING_PASS = 0x4
3453 }
3454 
3455 mixin(uuid!(ID3D12MetaCommand, "DBB84C27-36CE-4FC9-B801-F048C46AC570"));
3456 public interface ID3D12MetaCommand : ID3D12Pageable
3457 {
3458 extern(Windows):
3459     ulong GetRequiredParameterResourceSize(D3D12_META_COMMAND_PARAMETER_STAGE Stage, uint ParameterIndex);
3460 }
3461 
3462 struct D3D12_DISPATCH_RAYS_DESC
3463 {
3464     D3D12_GPU_VIRTUAL_ADDRESS_RANGE RayGenerationShaderRecord;
3465     D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE MissShaderTable;
3466     D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE HitGroupTable;
3467     D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE CallableShaderTable;
3468     uint Width;
3469     uint Height;
3470     uint Depth;
3471 }
3472 
3473 mixin(uuid!(ID3D12GraphicsCommandList4, "8754318e-d3a9-4541-98cf-645b50dc4874"));
3474 public interface ID3D12GraphicsCommandList4 : ID3D12GraphicsCommandList3
3475 {
3476 extern(Windows):
3477     void BeginRenderPass(uint NumRenderTargets, const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, D3D12_RENDER_PASS_FLAGS Flags);
3478     void EndRenderPass();
3479     void InitializeMetaCommand(ID3D12MetaCommand pMetaCommand, const void *pInitializationParametersData, size_t InitializationParametersDataSizeInBytes);
3480     void ExecuteMetaCommand(ID3D12MetaCommand pMetaCommand, const void *pExecutionParametersData, size_t ExecutionParametersDataSizeInBytes);
3481     void BuildRaytracingAccelerationStructure(const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, uint NumPostbuildInfoDescs, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
3482     void EmitRaytracingAccelerationStructurePostbuildInfo(const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, uint NumSourceAccelerationStructures, const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
3483     void CopyRaytracingAccelerationStructure(D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
3484     void SetPipelineState1(ID3D12StateObject pStateObject);
3485     void DispatchRays(const D3D12_DISPATCH_RAYS_DESC *pDesc);
3486 }
3487