1 module directx.d3d12;
2 /*-------------------------------------------------------------------------------------
3  *
4  * Copyright (c) Microsoft Corporation
5  *
6  *-------------------------------------------------------------------------------------*/
7 
8 version(Windows):
9 
10 public import directx.dxgi;
11 public import directx.d3dcommon;
12 
13 enum {
14     D3D12_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff,
15     D3D12_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff,
16     D3D12_8BIT_INDEX_STRIP_CUT_VALUE = 0xff,
17 
18     D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff,
19 
20     D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9,
21 
22     D3D12_CLIP_OR_CULL_DISTANCE_COUNT = 8,
23     D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2,
24 
25     D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14,
26     D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4,
27     D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32,
28     D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15,
29     D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16,
30     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4,
31     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15,
32     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1,
33     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1,
34 
35     D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64,
36 
37     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4,
38     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1,
39     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1,
40     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1,
41 
42     D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32,
43 
44     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1,
45     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128,
46     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1,
47     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1,
48     D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128,
49 
50     D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1,
51     D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16,
52     D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1,
53     D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1,
54     D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT = 16,
55 
56     D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32,
57 
58     D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4,
59     D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32,
60     D3D12_COMMONSHADER_TEMP_REGISTER_COUNT = 4096,
61     D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3,
62     D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3,
63 
64     D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10,
65     D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10,
66 
67     D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8,
68     D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7,
69 
70     D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256,
71 
72     D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256,
73     D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP = 64,
74     D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240,
75     D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP = 68,
76     D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224,
77     D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP = 72,
78     D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208,
79     D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP = 76,
80     D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192,
81     D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP = 84,
82     D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176,
83     D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP = 92,
84     D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160,
85     D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP = 100,
86     D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144,
87     D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP = 112,
88     D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128,
89     D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP = 128,
90     D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112,
91     D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP = 144,
92     D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96,
93     D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP = 168,
94     D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80,
95     D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP = 204,
96     D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64,
97     D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP = 256,
98     D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48,
99     D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP = 340,
100     D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32,
101     D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP = 512,
102     D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16,
103     D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP = 768,
104 
105     D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION = 1,
106     D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT = 256,
107     D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP = 768,
108     D3D12_CS_4_X_THREAD_GROUP_MAX_X = 768,
109     D3D12_CS_4_X_THREAD_GROUP_MAX_Y = 768,
110     D3D12_CS_4_X_UAV_REGISTER_COUNT = 1,
111 
112     D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION = 65535,
113 
114     D3D12_CS_TGSM_REGISTER_COUNT = 8192,
115     D3D12_CS_TGSM_REGISTER_READS_PER_INST = 1,
116     D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS = 1,
117     D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS = 1,
118 
119     D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS = 3,
120     D3D12_CS_THREADGROUPID_REGISTER_COUNT = 1,
121 
122     D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS = 1,
123     D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT = 1,
124 
125     D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS = 3,
126     D3D12_CS_THREADIDINGROUP_REGISTER_COUNT = 1,
127 
128     D3D12_CS_THREADID_REGISTER_COMPONENTS = 3,
129     D3D12_CS_THREADID_REGISTER_COUNT = 1,
130 
131     D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP = 1024,
132     D3D12_CS_THREAD_GROUP_MAX_X = 1024,
133     D3D12_CS_THREAD_GROUP_MAX_Y = 1024,
134     D3D12_CS_THREAD_GROUP_MAX_Z = 64,
135     D3D12_CS_THREAD_GROUP_MIN_X = 1,
136     D3D12_CS_THREAD_GROUP_MIN_Y = 1,
137     D3D12_CS_THREAD_GROUP_MIN_Z = 1,
138 
139     D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL = 16384,
140 
141     D3D12_DEFAULT_BLEND_FACTOR_ALPHA = 10f,
142     D3D12_DEFAULT_BLEND_FACTOR_BLUE = 10f,
143     D3D12_DEFAULT_BLEND_FACTOR_GREEN = 10f,
144     D3D12_DEFAULT_BLEND_FACTOR_RED = 10f,
145     D3D12_DEFAULT_BORDER_COLOR_COMPONENT = 0f,
146     D3D12_DEFAULT_DEPTH_BIAS = 0,
147 
148     D3D12_DEFAULT_DEPTH_BIAS_CLAMP = 0f,
149     D3D12_DEFAULT_MAX_ANISOTROPY = 16,
150 
151     D3D12_DEFAULT_MIP_LOD_BIAS = 0f ,
152     D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 4194304,
153 
154     D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0,
155     D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536,
156     D3D12_DEFAULT_SAMPLE_MASK = 0xffffffff,
157 
158     D3D12_DEFAULT_SCISSOR_ENDX = 0,
159     D3D12_DEFAULT_SCISSOR_ENDY = 0,
160     D3D12_DEFAULT_SCISSOR_STARTX = 0,
161     D3D12_DEFAULT_SCISSOR_STARTY = 0,
162 
163     D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS = 0f,
164     D3D12_DEFAULT_STENCIL_READ_MASK = 0xff,
165     D3D12_DEFAULT_STENCIL_REFERENCE = 0,
166     D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff,
167 
168     D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0,
169     D3D12_DEFAULT_VIEWPORT_HEIGHT = 0,
170     D3D12_DEFAULT_VIEWPORT_MAX_DEPTH = 0f,
171     D3D12_DEFAULT_VIEWPORT_MIN_DEPTH = 0f,
172     D3D12_DEFAULT_VIEWPORT_TOPLEFTX = 0,
173     D3D12_DEFAULT_VIEWPORT_TOPLEFTY = 0,
174     D3D12_DEFAULT_VIEWPORT_WIDTH = 0,
175 
176     D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff,
177 
178     D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END = 0xfffffff7,
179     D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0,
180 
181     D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS= 3968,
182     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS = 4,
183     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32,
184     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT = 32,
185     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST = 2,
186     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS = 1,
187     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS= 3,
188     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT = 32,
189     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT = 1,
190     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST = 2,
191     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS= 1,
192     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4,
193     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32,
194     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT = 32,
195     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2,
196     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1,
197     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS= 1,
198     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
199     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1,
200     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2,
201     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS= 1,
202     D3D12_DS_OUTPUT_REGISTER_COMPONENTS = 4,
203     D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
204     D3D12_DS_OUTPUT_REGISTER_COUNT = 32,
205 
206     D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP = 6,
207     //D3D12_FLOAT32_MAX = 3402823466e+38f,
208     D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP = 6f,
209     D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR = 24f,
210     D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR = 10f,
211     D3D12_FLOAT_TO_SRGB_OFFSET = 55f,
212     D3D12_FLOAT_TO_SRGB_SCALE_1 = 1292f,
213     D3D12_FLOAT_TO_SRGB_SCALE_2 = 1055f,
214     D3D12_FLOAT_TO_SRGB_THRESHOLD = 31308f,
215     D3D12_FTOI_INSTRUCTION_MAX_INPUT = 2147483647999f,
216     D3D12_FTOI_INSTRUCTION_MIN_INPUT = -2147483648999f,
217     D3D12_FTOU_INSTRUCTION_MAX_INPUT = 4294967295999f,
218     D3D12_FTOU_INSTRUCTION_MIN_INPUT = 0f,
219 
220     D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST = 2,
221     D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS = 1,
222     D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS = 1,
223     D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT= 32,
224     D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT = 1,
225     D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1,
226     D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32,
227     D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1,
228     D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2,
229     D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1,
230     D3D12_GS_INPUT_REGISTER_COMPONENTS = 4,
231     D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
232     D3D12_GS_INPUT_REGISTER_COUNT = 32,
233     D3D12_GS_INPUT_REGISTER_READS_PER_INST = 2,
234     D3D12_GS_INPUT_REGISTER_READ_PORTS = 1,
235     D3D12_GS_INPUT_REGISTER_VERTICES = 32,
236     D3D12_GS_MAX_INSTANCE_COUNT = 32,
237     D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES = 1024,
238     D3D12_GS_OUTPUT_ELEMENTS = 32,
239     D3D12_GS_OUTPUT_REGISTER_COMPONENTS = 4,
240     D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
241     D3D12_GS_OUTPUT_REGISTER_COUNT = 32,
242     D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT = 32,
243     D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT = 32,
244     D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS = 4,
245     D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32,
246     D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST = 2,
247     D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS = 1,
248     D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xffffffff,
249     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS = 1,
250     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
251     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT = 1,
252     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST = 2,
253     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS = 1,
254     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS = 1,
255     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
256     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT = 1,
257     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST = 2,
258     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS = 1,
259     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1,
260     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
261     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1,
262     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2,
263     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1,
264     D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xffffffff,
265     D3D12_HS_MAXTESSFACTOR_LOWER_BOUND = 10f,
266     D3D12_HS_MAXTESSFACTOR_UPPER_BOUND = 640f,
267     D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968,
268     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS = 1,
269     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
270     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT = 1,
271     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST = 2,
272     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS = 1,
273     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4,
274     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32,
275     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT = 32,
276     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2,
277     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1,
278     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS = 128,
279     D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0,
280     D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0,
281     D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0,
282     D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1,
283     D3D12_IA_INSTANCE_ID_BIT_COUNT = 32,
284     D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32,
285     D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT = 32,
286     D3D12_IA_PRIMITIVE_ID_BIT_COUNT= 32,
287     D3D12_IA_VERTEX_ID_BIT_COUNT = 32,
288     D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32,
289     D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128,
290     D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32,
291     D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff,
292     D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff,
293     D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff,
294     D3D12_KEEP_UNORDERED_ACCESS_VIEWS = 0xffffffff,
295     D3D12_LINEAR_GAMMA = 10f,
296     D3D12_MAJOR_VERSION = 12,
297     D3D12_MAX_BORDER_COLOR_COMPONENT = 10f,
298     D3D12_MAX_DEPTH = 10f,
299     D3D12_MAX_LIVE_STATIC_SAMPLERS = 2032,
300     D3D12_MAX_MAXANISOTROPY = 16,
301     D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT = 32,
302     //D3D12_MAX_POSITION_VALUE = 3402823466e+34f,
303     D3D12_MAX_ROOT_COST = 64,
304     D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1 = 1000000,
305     D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2 = 1000000,
306     D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE = 2048,
307     D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17,
308     D3D12_MINOR_VERSION = 0,
309     D3D12_MIN_BORDER_COLOR_COMPONENT = 0f,
310     D3D12_MIN_DEPTH = 0f,
311     D3D12_MIN_MAXANISOTROPY = 0,
312     D3D12_MIP_LOD_BIAS_MAX = 1599f,
313     D3D12_MIP_LOD_BIAS_MIN = -160f,
314     D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT = 8,
315     D3D12_MIP_LOD_RANGE_BIT_COUNT = 8,
316     D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH = 14f,
317     D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0,
318     D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff,
319     D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8,
320     D3D12_PACKED_TILE = 0xffffffff,
321     D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15,
322     D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16,
323     D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1,
324     D3D12_PS_CS_UAV_REGISTER_COUNT = 8,
325     D3D12_PS_CS_UAV_REGISTER_READS_PER_INST = 1,
326     D3D12_PS_CS_UAV_REGISTER_READ_PORTS = 1,
327     D3D12_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff,
328     D3D12_PS_FRONTFACING_FALSE_VALUE = 0,
329     D3D12_PS_FRONTFACING_TRUE_VALUE = 0xffffffff,
330     D3D12_PS_INPUT_REGISTER_COMPONENTS = 4,
331     D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
332     D3D12_PS_INPUT_REGISTER_COUNT = 32,
333     D3D12_PS_INPUT_REGISTER_READS_PER_INST = 2,
334     D3D12_PS_INPUT_REGISTER_READ_PORTS = 1,
335     D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0f,
336     D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1,
337     D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32,
338     D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1,
339     D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1,
340     D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32,
341     D3D12_PS_OUTPUT_MASK_REGISTER_COUNT = 1,
342     D3D12_PS_OUTPUT_REGISTER_COMPONENTS = 4,
343     D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
344     D3D12_PS_OUTPUT_REGISTER_COUNT = 8,
345     D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT = 5f,
346     D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT = 16,
347     D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE = 4096,
348     D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27,
349     D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096,
350     D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096,
351     D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32,
352     D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32,
353     D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384,
354     D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024,
355     D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096,
356     D3D12_REQ_MAXANISOTROPY = 16,
357     D3D12_REQ_MIP_LEVELS = 15,
358     D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048,
359     D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096,
360     D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 16384,
361     D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128,
362     D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM = 25f,
363     D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048,
364     D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20,
365     D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE = 4096,
366     D3D12_REQ_SUBRESOURCES = 30720,
367     D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048,
368     D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384,
369     D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048,
370     D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384,
371     D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048,
372     D3D12_REQ_TEXTURECUBE_DIMENSION = 16384,
373     D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0,
374     D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff,
375     D3D12_SHADER_MAJOR_VERSION = 5,
376     D3D12_SHADER_MAX_INSTANCES = 65535,
377     D3D12_SHADER_MAX_INTERFACES = 253,
378     D3D12_SHADER_MAX_INTERFACE_CALL_SITES = 4096,
379     D3D12_SHADER_MAX_TYPES = 65535,
380     D3D12_SHADER_MINOR_VERSION = 1,
381     D3D12_SHIFT_INSTRUCTION_PAD_VALUE = 0,
382     D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5,
383     D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8,
384     D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 65536,
385     D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT = 4096,
386     D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048,
387     D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 512,
388     D3D12_SO_BUFFER_SLOT_COUNT = 4,
389     D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff,
390     D3D12_SO_NO_RASTERIZED_STREAM = 0xffffffff,
391     D3D12_SO_OUTPUT_COMPONENT_COUNT = 128,
392     D3D12_SO_STREAM_COUNT = 4,
393     D3D12_SPEC_DATE_DAY = 14,
394     D3D12_SPEC_DATE_MONTH = 11,
395     D3D12_SPEC_DATE_YEAR = 2014,
396     D3D12_SPEC_VERSION = 116 ,
397     D3D12_SRGB_GAMMA = 22f ,
398     D3D12_SRGB_TO_FLOAT_DENOMINATOR_1 = 1292f ,
399     D3D12_SRGB_TO_FLOAT_DENOMINATOR_2 = 1055f ,
400     D3D12_SRGB_TO_FLOAT_EXPONENT = 24f,
401     D3D12_SRGB_TO_FLOAT_OFFSET = 55f,
402     D3D12_SRGB_TO_FLOAT_THRESHOLD = 4045f,
403     D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP = 5f,
404     D3D12_STANDARD_COMPONENT_BIT_COUNT = 32,
405     D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64,
406     D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4,
407     D3D12_STANDARD_PIXEL_COMPONENT_COUNT = 128,
408     D3D12_STANDARD_PIXEL_ELEMENT_COUNT = 32,
409     D3D12_STANDARD_VECTOR_SIZE = 4,
410     D3D12_STANDARD_VERTEX_ELEMENT_COUNT = 32,
411     D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64,
412     D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8,
413     D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT = 8,
414     D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff,
415     D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0,
416     D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR = 64,
417     D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR = 64,
418     D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR = 63,
419     D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR = 64,
420     D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR = 2,
421     D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR = 1,
422     D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1,
423     D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16,
424     D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256,
425     D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512,
426     D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES= 65536,
427     D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096,
428     D3D12_UAV_SLOT_COUNT = 64,
429     D3D12_UNBOUND_MEMORY_ACCESS_RESULT = 0,
430     D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15,
431     D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16,
432     D3D12_VIEWPORT_BOUNDS_MAX = 32767,
433     D3D12_VIEWPORT_BOUNDS_MIN = -32768,
434     D3D12_VS_INPUT_REGISTER_COMPONENTS = 4,
435     D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
436     D3D12_VS_INPUT_REGISTER_COUNT = 32,
437     D3D12_VS_INPUT_REGISTER_READS_PER_INST = 2,
438     D3D12_VS_INPUT_REGISTER_READ_PORTS = 1,
439     D3D12_VS_OUTPUT_REGISTER_COMPONENTS = 4,
440     D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
441     D3D12_VS_OUTPUT_REGISTER_COUNT = 32,
442     D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10,
443     D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25,
444     D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25
445 }
446 
447 alias UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
448 
449 alias D3D12_COMMAND_LIST_TYPE = uint;
450 enum : D3D12_COMMAND_LIST_TYPE {
451     D3D12_COMMAND_LIST_TYPE_DIRECT  = 0,
452     D3D12_COMMAND_LIST_TYPE_BUNDLE  = 1,
453     D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
454     D3D12_COMMAND_LIST_TYPE_COPY    = 3
455 }
456 
457 alias D3D12_COMMAND_QUEUE_FLAGS = uint;
458 enum : D3D12_COMMAND_QUEUE_FLAGS {
459     D3D12_COMMAND_QUEUE_FLAG_NONE                = 0,
460     D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1
461 }
462 
463 alias D3D12_COMMAND_QUEUE_PRIORITY = uint;
464 enum : D3D12_COMMAND_QUEUE_PRIORITY {
465     D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,
466     D3D12_COMMAND_QUEUE_PRIORITY_HIGH   = 100
467 }
468 
469 struct D3D12_COMMAND_QUEUE_DESC {
470 	this(this) {}
471     D3D12_COMMAND_LIST_TYPE   Type;
472     INT                       Priority;
473     D3D12_COMMAND_QUEUE_FLAGS Flags;
474     UINT                      NodeMask;
475 }
476 
477 alias D3D12_PRIMITIVE_TOPOLOGY_TYPE = uint;
478 enum : D3D12_PRIMITIVE_TOPOLOGY_TYPE {
479     D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
480     D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT     = 1,
481     D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE      = 2,
482     D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE  = 3,
483     D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH     = 4
484 }
485 
486 alias D3D12_INPUT_CLASSIFICATION = uint;
487 enum : D3D12_INPUT_CLASSIFICATION {
488     D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA   = 0,
489     D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1
490 }
491 
492 struct D3D12_INPUT_ELEMENT_DESC {
493     LPCSTR                     SemanticName;
494     UINT                       SemanticIndex;
495     DXGI_FORMAT                Format;
496     UINT                       InputSlot;
497     UINT                       AlignedByteOffset;
498     D3D12_INPUT_CLASSIFICATION InputSlotClass;
499     UINT                       InstanceDataStepRate;
500 }
501 
502 alias D3D12_FILL_MODE = uint;
503 enum : D3D12_FILL_MODE {
504     D3D12_FILL_MODE_WIREFRAME = 2,
505     D3D12_FILL_MODE_SOLID     = 3
506 }
507 
508 alias D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
509 alias D3D_PRIMITIVE          D3D12_PRIMITIVE;
510 
511 alias D3D12_CULL_MODE = uint;
512 enum : D3D12_CULL_MODE {
513     D3D12_CULL_MODE_NONE  = 1,
514     D3D12_CULL_MODE_FRONT = 2,
515     D3D12_CULL_MODE_BACK  = 3
516 }
517 
518 struct D3D12_SO_DECLARATION_ENTRY {
519     UINT   Stream;
520     LPCSTR SemanticName;
521     UINT   SemanticIndex;
522     BYTE   StartComponent;
523     BYTE   ComponentCount;
524     BYTE   OutputSlot;
525 }
526 
527 struct D3D12_VIEWPORT {
528     FLOAT TopLeftX = 0.0f;
529     FLOAT TopLeftY = 0.0f;
530     FLOAT Width = 0.0f;
531     FLOAT Height = 0.0f;
532     FLOAT MinDepth = 0.0f;
533     FLOAT MaxDepth = 0.0f;
534 }
535 
536 alias RECT D3D12_RECT;
537 
538 struct D3D12_BOX {
539     UINT left;
540     UINT top;
541     UINT front;
542     UINT right;
543     UINT bottom;
544     UINT back;
545 }
546 
547 alias D3D12_COMPARISON_FUNC = uint;
548 enum : D3D12_COMPARISON_FUNC {
549     D3D12_COMPARISON_FUNC_NEVER         = 1,
550     D3D12_COMPARISON_FUNC_LESS          = 2,
551     D3D12_COMPARISON_FUNC_EQUAL         = 3,
552     D3D12_COMPARISON_FUNC_LESS_EQUAL    = 4,
553     D3D12_COMPARISON_FUNC_GREATER       = 5,
554     D3D12_COMPARISON_FUNC_NOT_EQUAL     = 6,
555     D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
556     D3D12_COMPARISON_FUNC_ALWAYS        = 8
557 }
558 
559 alias D3D12_DEPTH_WRITE_MASK = uint;
560 enum : D3D12_DEPTH_WRITE_MASK {
561     D3D12_DEPTH_WRITE_MASK_ZERO = 0,
562     D3D12_DEPTH_WRITE_MASK_ALL  = 1
563 }
564 
565 alias D3D12_STENCIL_OP = uint;
566 enum : D3D12_STENCIL_OP {
567     D3D12_STENCIL_OP_KEEP     = 1,
568     D3D12_STENCIL_OP_ZERO     = 2,
569     D3D12_STENCIL_OP_REPLACE  = 3,
570     D3D12_STENCIL_OP_INCR_SAT = 4,
571     D3D12_STENCIL_OP_DECR_SAT = 5,
572     D3D12_STENCIL_OP_INVERT   = 6,
573     D3D12_STENCIL_OP_INCR     = 7,
574     D3D12_STENCIL_OP_DECR     = 8
575 }
576 
577 struct D3D12_DEPTH_STENCILOP_DESC {
578     D3D12_STENCIL_OP StencilFailOp;
579     D3D12_STENCIL_OP StencilDepthFailOp;
580     D3D12_STENCIL_OP StencilPassOp;
581     D3D12_COMPARISON_FUNC StencilFunc;
582 }
583 
584 struct D3D12_DEPTH_STENCIL_DESC {
585     BOOL DepthEnable;
586     D3D12_DEPTH_WRITE_MASK DepthWriteMask;
587     D3D12_COMPARISON_FUNC DepthFunc;
588     BOOL StencilEnable;
589     UINT8 StencilReadMask;
590     UINT8 StencilWriteMask;
591     D3D12_DEPTH_STENCILOP_DESC FrontFace;
592     D3D12_DEPTH_STENCILOP_DESC BackFace;
593 }
594 
595 alias D3D12_BLEND = uint;
596 enum : D3D12_BLEND {
597     D3D12_BLEND_ZERO             = 1,
598     D3D12_BLEND_ONE              = 2,
599     D3D12_BLEND_SRC_COLOR        = 3,
600     D3D12_BLEND_INV_SRC_COLOR    = 4,
601     D3D12_BLEND_SRC_ALPHA        = 5,
602     D3D12_BLEND_INV_SRC_ALPHA    = 6,
603     D3D12_BLEND_DEST_ALPHA       = 7,
604     D3D12_BLEND_INV_DEST_ALPHA   = 8,
605     D3D12_BLEND_DEST_COLOR       = 9,
606     D3D12_BLEND_INV_DEST_COLOR   = 10,
607     D3D12_BLEND_SRC_ALPHA_SAT    = 11,
608     D3D12_BLEND_BLEND_FACTOR     = 14,
609     D3D12_BLEND_INV_BLEND_FACTOR = 15,
610     D3D12_BLEND_SRC1_COLOR       = 16,
611     D3D12_BLEND_INV_SRC1_COLOR   = 17,
612     D3D12_BLEND_SRC1_ALPHA       = 18,
613     D3D12_BLEND_INV_SRC1_ALPHA   = 19
614 }
615 
616 alias D3D12_BLEND_OP = uint;
617 enum : D3D12_BLEND_OP {
618     D3D12_BLEND_OP_ADD          = 1,
619     D3D12_BLEND_OP_SUBTRACT     = 2,
620     D3D12_BLEND_OP_REV_SUBTRACT = 3,
621     D3D12_BLEND_OP_MIN          = 4,
622     D3D12_BLEND_OP_MAX          = 5
623 }
624 
625 alias D3D12_COLOR_WRITE_ENABLE = uint;
626 enum : D3D12_COLOR_WRITE_ENABLE {
627     D3D12_COLOR_WRITE_ENABLE_RED   = 1,
628     D3D12_COLOR_WRITE_ENABLE_GREEN = 2,
629     D3D12_COLOR_WRITE_ENABLE_BLUE  = 4,
630     D3D12_COLOR_WRITE_ENABLE_ALPHA = 8,
631     D3D12_COLOR_WRITE_ENABLE_ALL   = D3D12_COLOR_WRITE_ENABLE_RED   |
632         D3D12_COLOR_WRITE_ENABLE_GREEN |
633         D3D12_COLOR_WRITE_ENABLE_BLUE  |
634         D3D12_COLOR_WRITE_ENABLE_ALPHA
635 }
636 
637 alias D3D12_LOGIC_OP = uint;
638 enum : D3D12_LOGIC_OP {
639     D3D12_LOGIC_OP_CLEAR         = 0,
640     D3D12_LOGIC_OP_SET           = D3D12_LOGIC_OP_CLEAR         + 1,
641     D3D12_LOGIC_OP_COPY          = D3D12_LOGIC_OP_SET           + 1,
642     D3D12_LOGIC_OP_COPY_INVERTED = D3D12_LOGIC_OP_COPY          + 1,
643     D3D12_LOGIC_OP_NOOP          = D3D12_LOGIC_OP_COPY_INVERTED + 1,
644     D3D12_LOGIC_OP_INVERT        = D3D12_LOGIC_OP_NOOP          + 1,
645     D3D12_LOGIC_OP_AND           = D3D12_LOGIC_OP_INVERT        + 1,
646     D3D12_LOGIC_OP_NAND          = D3D12_LOGIC_OP_AND           + 1,
647     D3D12_LOGIC_OP_OR            = D3D12_LOGIC_OP_NAND          + 1,
648     D3D12_LOGIC_OP_NOR           = D3D12_LOGIC_OP_OR            + 1,
649     D3D12_LOGIC_OP_XOR           = D3D12_LOGIC_OP_NOR           + 1,
650     D3D12_LOGIC_OP_EQUIV         = D3D12_LOGIC_OP_XOR           + 1,
651     D3D12_LOGIC_OP_AND_REVERSE   = D3D12_LOGIC_OP_EQUIV         + 1,
652     D3D12_LOGIC_OP_AND_INVERTED  = D3D12_LOGIC_OP_AND_REVERSE   + 1,
653     D3D12_LOGIC_OP_OR_REVERSE    = D3D12_LOGIC_OP_AND_INVERTED  + 1,
654     D3D12_LOGIC_OP_OR_INVERTED   = D3D12_LOGIC_OP_OR_REVERSE    + 1
655 }
656 
657 struct D3D12_RENDER_TARGET_BLEND_DESC {
658     BOOL           BlendEnable;
659     BOOL           LogicOpEnable;
660     D3D12_BLEND    SrcBlend;
661     D3D12_BLEND    DestBlend;
662     D3D12_BLEND_OP BlendOp;
663     D3D12_BLEND    SrcBlendAlpha;
664     D3D12_BLEND    DestBlendAlpha;
665     D3D12_BLEND_OP BlendOpAlpha;
666     D3D12_LOGIC_OP LogicOp;
667     UINT8          RenderTargetWriteMask;
668 }
669 
670 struct D3D12_BLEND_DESC {
671     BOOL                              AlphaToCoverageEnable;
672     BOOL                              IndependentBlendEnable;
673     D3D12_RENDER_TARGET_BLEND_DESC[8] RenderTarget;
674 }
675 
676 alias D3D12_CONSERVATIVE_RASTERIZATION_MODE = uint;
677 enum : D3D12_CONSERVATIVE_RASTERIZATION_MODE {
678     D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0,
679     D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON  = 1
680 }
681 
682 // defaults from MSDN
683 struct D3D12_RASTERIZER_DESC {
684     D3D12_FILL_MODE                       FillMode = D3D12_FILL_MODE_SOLID;
685     D3D12_CULL_MODE                       CullMode = D3D12_CULL_MODE_BACK;
686     BOOL                                  FrontCounterClockwise = FALSE;
687     INT                                   DepthBias = 0;
688     FLOAT                                 DepthBiasClamp = 0.0f;
689     FLOAT                                 SlopeScaledDepthBias = 0.0f;
690     BOOL                                  DepthClipEnable = TRUE;
691     BOOL                                  MultisampleEnable = FALSE;
692     BOOL                                  AntialiasedLineEnable = FALSE;
693     UINT                                  ForcedSampleCount = 0;
694     D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
695 }
696 
697 mixin(uuid!(ID3D12Object, "c4fec28f-7966-4e95-9f94-f431cb56c3b8"));
698 extern(C++) interface ID3D12Object : IUnknown {
699     HRESULT GetPrivateData(REFGUID guid,
700                            UINT* pDataSize,
701                            void* pData);
702 
703     HRESULT SetPrivateData(REFGUID guid,
704                            UINT DataSize,
705                            const(void)* pData);
706 
707     HRESULT SetPrivateDataInterface(REFGUID guid,
708                                     const IUnknown pData);
709 
710     HRESULT SetName(LPCWSTR Name);
711 }
712 
713 mixin(uuid!(ID3D12DeviceChild, "905db94b-a00c-4140-9df5-2b64ca9ea357"));
714 extern(C++) interface ID3D12DeviceChild : ID3D12Object {
715     HRESULT GetDevice(REFIID riid,
716                       void** ppvDevice);
717 }
718 
719 mixin(uuid!(ID3D12RootSignature, "c54a6b66-72df-4ee8-8be5-a946a1429214"));
720 extern(C++) interface ID3D12RootSignature : ID3D12DeviceChild {}
721 
722 struct D3D12_SHADER_BYTECODE {
723     const(void)* pShaderBytecode;
724     SIZE_T       BytecodeLength;
725 }
726 
727 struct D3D12_STREAM_OUTPUT_DESC {
728     const(D3D12_SO_DECLARATION_ENTRY)* pSODeclaration;
729     UINT                               NumEntries;
730     const(UINT)*                       pBufferStrides;
731     UINT                               NumStrides;
732     UINT                               RasterizedStream;
733 }
734 
735 struct D3D12_INPUT_LAYOUT_DESC {
736     const(D3D12_INPUT_ELEMENT_DESC)* pInputElementDescs;
737     UINT                             NumElements;
738 }
739 
740 alias D3D12_INDEX_BUFFER_STRIP_CUT_VALUE = uint;
741 enum : D3D12_INDEX_BUFFER_STRIP_CUT_VALUE {
742     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED   = 0,
743     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF     = 1,
744     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2
745 }
746 
747 struct D3D12_CACHED_PIPELINE_STATE {
748     const(void)* pCachedBlob;
749     SIZE_T       CachedBlobSizeInBytes;
750 }
751 
752 alias D3D12_PIPELINE_STATE_FLAGS = uint;
753 enum : D3D12_PIPELINE_STATE_FLAGS {
754     D3D12_PIPELINE_STATE_FLAG_NONE       = 0,
755     D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG = 0x1
756 }
757 
758 struct D3D12_GRAPHICS_PIPELINE_STATE_DESC {
759     ID3D12RootSignature                pRootSignature;
760     D3D12_SHADER_BYTECODE              VS;
761     D3D12_SHADER_BYTECODE              PS;
762     D3D12_SHADER_BYTECODE              DS;
763     D3D12_SHADER_BYTECODE              HS;
764     D3D12_SHADER_BYTECODE              GS;
765     D3D12_STREAM_OUTPUT_DESC           StreamOutput;
766     D3D12_BLEND_DESC                   BlendState;
767     UINT                               SampleMask;
768     D3D12_RASTERIZER_DESC              RasterizerState;
769     D3D12_DEPTH_STENCIL_DESC           DepthStencilState;
770     D3D12_INPUT_LAYOUT_DESC            InputLayout;
771     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;
772     D3D12_PRIMITIVE_TOPOLOGY_TYPE      PrimitiveTopologyType;
773     UINT                               NumRenderTargets;
774     DXGI_FORMAT[8]                     RTVFormats;
775     DXGI_FORMAT                        DSVFormat;
776     DXGI_SAMPLE_DESC                   SampleDesc;
777     UINT                               NodeMask;
778     D3D12_CACHED_PIPELINE_STATE        CachedPSO;
779     D3D12_PIPELINE_STATE_FLAGS         Flags;
780 }
781 
782 struct D3D12_COMPUTE_PIPELINE_STATE_DESC {
783     ID3D12RootSignature         pRootSignature;
784     D3D12_SHADER_BYTECODE       CS;
785     UINT                        NodeMask;
786     D3D12_CACHED_PIPELINE_STATE CachedPSO;
787     D3D12_PIPELINE_STATE_FLAGS  Flags;
788 }
789 
790 alias D3D12_FEATURE = uint;
791 enum : D3D12_FEATURE {
792     D3D12_FEATURE_D3D12_OPTIONS               = 0,
793     D3D12_FEATURE_ARCHITECTURE                = D3D12_FEATURE_D3D12_OPTIONS  + 1,
794     D3D12_FEATURE_FEATURE_LEVELS              = D3D12_FEATURE_ARCHITECTURE   + 1,
795     D3D12_FEATURE_FORMAT_SUPPORT              = D3D12_FEATURE_FEATURE_LEVELS + 1,
796     D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS  = D3D12_FEATURE_FORMAT_SUPPORT + 1,
797     D3D12_FEATURE_FORMAT_INFO                 = D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS + 1,
798     D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = D3D12_FEATURE_FORMAT_INFO    + 1
799 }
800 
801 alias D3D12_SHADER_MIN_PRECISION_SUPPORT = uint;
802 enum : D3D12_SHADER_MIN_PRECISION_SUPPORT {
803     D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE   = 0,
804     D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,
805     D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2
806 }
807 
808 alias D3D12_TILED_RESOURCES_TIER = uint;
809 enum : D3D12_TILED_RESOURCES_TIER {
810     D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,
811     D3D12_TILED_RESOURCES_TIER_1             = 1,
812     D3D12_TILED_RESOURCES_TIER_2             = 2,
813     D3D12_TILED_RESOURCES_TIER_3             = 3
814 }
815 
816 alias D3D12_RESOURCE_BINDING_TIER = uint;
817 enum : D3D12_RESOURCE_BINDING_TIER {
818     D3D12_RESOURCE_BINDING_TIER_1 = 1,
819     D3D12_RESOURCE_BINDING_TIER_2 = 2,
820     D3D12_RESOURCE_BINDING_TIER_3 = 3
821 }
822 
823 alias D3D12_CONSERVATIVE_RASTERIZATION_TIER = uint;
824 enum : D3D12_CONSERVATIVE_RASTERIZATION_TIER {
825     D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,
826     D3D12_CONSERVATIVE_RASTERIZATION_TIER_1             = 1,
827     D3D12_CONSERVATIVE_RASTERIZATION_TIER_2             = 2,
828     D3D12_CONSERVATIVE_RASTERIZATION_TIER_3             = 3
829 }
830 
831 alias D3D12_FORMAT_SUPPORT1 = uint;
832 enum : D3D12_FORMAT_SUPPORT1 {
833     D3D12_FORMAT_SUPPORT1_NONE                        = 0,
834     D3D12_FORMAT_SUPPORT1_BUFFER                      = 0x1,
835     D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER            = 0x2,
836     D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER             = 0x4,
837     D3D12_FORMAT_SUPPORT1_SO_BUFFER                   = 0x8,
838     D3D12_FORMAT_SUPPORT1_TEXTURE1D                   = 0x10,
839     D3D12_FORMAT_SUPPORT1_TEXTURE2D                   = 0x20,
840     D3D12_FORMAT_SUPPORT1_TEXTURE3D                   = 0x40,
841     D3D12_FORMAT_SUPPORT1_TEXTURECUBE                 = 0x80,
842     D3D12_FORMAT_SUPPORT1_SHADER_LOAD                 = 0x100,
843     D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE               = 0x200,
844     D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON    = 0x400,
845     D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT     = 0x800,
846     D3D12_FORMAT_SUPPORT1_MIP                         = 0x1000,
847     D3D12_FORMAT_SUPPORT1_RENDER_TARGET               = 0x4000,
848     D3D12_FORMAT_SUPPORT1_BLENDABLE                   = 0x8000,
849     D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL               = 0x10000,
850     D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE         = 0x40000,
851     D3D12_FORMAT_SUPPORT1_DISPLAY                     = 0x80000,
852     D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT      = 0x100000,
853     D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET    = 0x200000,
854     D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD            = 0x400000,
855     D3D12_FORMAT_SUPPORT1_SHADER_GATHER               = 0x800000,
856     D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST            = 0x1000000,
857     D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
858     D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON    = 0x4000000,
859     D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT              = 0x8000000,
860     D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT      = 0x10000000,
861     D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT       = 0x20000000,
862     D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER               = 0x40000000
863 }
864 
865 alias D3D12_FORMAT_SUPPORT2 = uint;
866 enum : D3D12_FORMAT_SUPPORT2 {
867     D3D12_FORMAT_SUPPORT2_NONE                                         = 0,
868     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD                               = 0x1,
869     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS                       = 0x2,
870     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4,
871     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE                          = 0x8,
872     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX                 = 0x10,
873     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX               = 0x20,
874     D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD                               = 0x40,
875     D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE                              = 0x80,
876     D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP                       = 0x100,
877     D3D12_FORMAT_SUPPORT2_TILED                                        = 0x200,
878     D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY                           = 0x4000
879 }
880 
881 alias D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS = uint;
882 enum : D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS {
883     D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE           = 0,
884     D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x1
885 }
886 
887 alias D3D12_CROSS_NODE_SHARING_TIER = uint;
888 enum : D3D12_CROSS_NODE_SHARING_TIER {
889     D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,
890     D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED    = 1,
891     D3D12_CROSS_NODE_SHARING_TIER_1             = 2,
892     D3D12_CROSS_NODE_SHARING_TIER_2             = 3
893 }
894 
895 alias D3D12_RESOURCE_HEAP_TIER = uint;
896 enum : D3D12_RESOURCE_HEAP_TIER {
897     D3D12_RESOURCE_HEAP_TIER_1 = 1,
898     D3D12_RESOURCE_HEAP_TIER_2 = 2
899 }
900 
901 struct D3D12_FEATURE_DATA_D3D12_OPTIONS {
902     BOOL                                  DoublePrecisionFloatShaderOps;
903     BOOL                                  OutputMergerLogicOp;
904     D3D12_SHADER_MIN_PRECISION_SUPPORT    MinPrecisionSupport;
905     D3D12_TILED_RESOURCES_TIER            TiledResourcesTier;
906     D3D12_RESOURCE_BINDING_TIER           ResourceBindingTier;
907     BOOL                                  PSSpecifiedStencilRefSupported;
908     BOOL                                  TypedUAVLoadAdditionalFormats;
909     BOOL                                  ROVsSupported;
910     D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
911     UINT                                  MaxGPUVirtualAddressBitsPerResource;
912     BOOL                                  StandardSwizzle64KBSupported;
913     D3D12_CROSS_NODE_SHARING_TIER         CrossNodeSharingTier;
914     BOOL                                  CrossAdapterRowMajorTextureSupported;
915     BOOL                                  VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
916     D3D12_RESOURCE_HEAP_TIER              ResourceHeapTier;
917 }
918 
919 struct D3D12_FEATURE_DATA_ARCHITECTURE {
920     UINT NodeIndex;
921     BOOL TileBasedRenderer;
922     BOOL UMA;
923     BOOL CacheCoherentUMA;
924 }
925 
926 struct D3D12_FEATURE_DATA_FEATURE_LEVELS {
927     UINT                      NumFeatureLevels;
928     const(D3D_FEATURE_LEVEL)* pFeatureLevelsRequested;
929     D3D_FEATURE_LEVEL         MaxSupportedFeatureLevel;
930 }
931 
932 struct D3D12_FEATURE_DATA_FORMAT_SUPPORT {
933     DXGI_FORMAT           Format;
934     D3D12_FORMAT_SUPPORT1 Support1;
935     D3D12_FORMAT_SUPPORT2 Support2;
936 }
937 
938 struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS {
939     DXGI_FORMAT                           Format;
940     UINT                                  SampleCount;
941     D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags;
942     UINT                                  NumQualityLevels;
943 }
944 
945 struct D3D12_FEATURE_DATA_FORMAT_INFO {
946     DXGI_FORMAT Format;
947     UINT8       PlaneCount;
948 }
949 
950 struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT {
951     UINT MaxGPUVirtualAddressBitsPerResource;
952     UINT MaxGPUVirtualAddressBitsPerProcess;
953 }
954 
955 struct D3D12_RESOURCE_ALLOCATION_INFO {
956 	this(this) {}
957     UINT64 SizeInBytes;
958     UINT64 Alignment;
959 }
960 
961 alias D3D12_HEAP_TYPE = uint;
962 enum : D3D12_HEAP_TYPE {
963     D3D12_HEAP_TYPE_DEFAULT = 1,
964     D3D12_HEAP_TYPE_UPLOAD  = 2,
965     D3D12_HEAP_TYPE_READBACK        = 3,
966     D3D12_HEAP_TYPE_CUSTOM  = 4
967 }
968 
969 alias D3D12_CPU_PAGE_PROPERTY = uint;
970 enum : D3D12_CPU_PAGE_PROPERTY {
971     D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,
972     D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE   = 1,
973     D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE   = 2,
974     D3D12_CPU_PAGE_PROPERTY_WRITE_BACK      = 3
975 }
976 
977 alias D3D12_MEMORY_POOL = uint;
978 enum : D3D12_MEMORY_POOL {
979     D3D12_MEMORY_POOL_UNKNOWN = 0,
980     D3D12_MEMORY_POOL_L0      = 1,
981     D3D12_MEMORY_POOL_L1      = 2
982 }
983 
984 struct D3D12_HEAP_PROPERTIES {
985 	this(this) {}
986     D3D12_HEAP_TYPE         Type;
987     D3D12_CPU_PAGE_PROPERTY CPUPageProperty;
988     D3D12_MEMORY_POOL       MemoryPoolPreference;
989     UINT                    CreationNodeMask;
990     UINT                    VisibleNodeMask;
991 }
992 
993 alias D3D12_HEAP_FLAGS = uint;
994 enum : D3D12_HEAP_FLAGS {
995     D3D12_HEAP_FLAG_NONE                           = 0,
996     D3D12_HEAP_FLAG_SHARED                         = 0x1,
997     D3D12_HEAP_FLAG_DENY_BUFFERS                   = 0x4,
998     D3D12_HEAP_FLAG_ALLOW_DISPLAY                  = 0x8,
999     D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER           = 0x20,
1000     D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES            = 0x40,
1001     D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES        = 0x80,
1002     D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
1003     D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS             = 0xc0,
1004     D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES  = 0x44,
1005     D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES      = 0x84
1006 }
1007 
1008 struct D3D12_HEAP_DESC {
1009 	this(this) {}
1010     UINT64                SizeInBytes;
1011     D3D12_HEAP_PROPERTIES Properties;
1012     UINT64                Alignment;
1013     D3D12_HEAP_FLAGS      Flags;
1014 }
1015 
1016 alias D3D12_RESOURCE_DIMENSION = uint;
1017 enum : D3D12_RESOURCE_DIMENSION {
1018     D3D12_RESOURCE_DIMENSION_UNKNOWN   = 0,
1019     D3D12_RESOURCE_DIMENSION_BUFFER    = 1,
1020     D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,
1021     D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,
1022     D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4
1023 }
1024 
1025 alias D3D12_TEXTURE_LAYOUT = uint;
1026 enum : D3D12_TEXTURE_LAYOUT {
1027     D3D12_TEXTURE_LAYOUT_UNKNOWN                = 0,
1028     D3D12_TEXTURE_LAYOUT_ROW_MAJOR              = 1,
1029     D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
1030     D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE  = 3
1031 }
1032 
1033 alias D3D12_RESOURCE_FLAGS = uint;
1034 enum : D3D12_RESOURCE_FLAGS {
1035     D3D12_RESOURCE_FLAG_NONE                      = 0,
1036     D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET       = 0x1,
1037     D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL       = 0x2,
1038     D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS    = 0x4,
1039     D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE      = 0x8,
1040     D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER       = 0x10,
1041     D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20
1042 }
1043 
1044 struct D3D12_RESOURCE_DESC {
1045 	this(this) {}
1046     D3D12_RESOURCE_DIMENSION Dimension;
1047     UINT64                   Alignment;
1048     UINT64                   Width;
1049     UINT                     Height;
1050     UINT16                   DepthOrArraySize;
1051     UINT16                   MipLevels;
1052     DXGI_FORMAT              Format;
1053     DXGI_SAMPLE_DESC         SampleDesc;
1054     D3D12_TEXTURE_LAYOUT     Layout;
1055     D3D12_RESOURCE_FLAGS     Flags;
1056 }
1057 
1058 struct D3D12_DEPTH_STENCIL_VALUE {
1059     FLOAT Depth = 0.0f;
1060     UINT8 Stencil;
1061 }
1062 
1063 struct D3D12_CLEAR_VALUE {
1064     DXGI_FORMAT Format;
1065     union {
1066         FLOAT[4]                  Color;
1067         D3D12_DEPTH_STENCIL_VALUE DepthStencil;
1068     }
1069 }
1070 
1071 struct D3D12_RANGE {
1072     SIZE_T Begin;
1073     SIZE_T End;
1074 }
1075 
1076 struct D3D12_SUBRESOURCE_INFO {
1077     UINT64 Offset;
1078     UINT   RowPitch;
1079     UINT   DepthPitch;
1080 }
1081 
1082 struct D3D12_TILED_RESOURCE_COORDINATE {
1083     UINT X;
1084     UINT Y;
1085     UINT Z;
1086     UINT Subresource;
1087 }
1088 
1089 struct D3D12_TILE_REGION_SIZE {
1090     UINT   NumTiles;
1091     BOOL   UseBox;
1092     UINT   Width;
1093     UINT16 Height;
1094     UINT16 Depth;
1095 }
1096 
1097 alias D3D12_TILE_RANGE_FLAGS = uint;
1098 enum : D3D12_TILE_RANGE_FLAGS {
1099     D3D12_TILE_RANGE_FLAG_NONE              = 0,
1100     D3D12_TILE_RANGE_FLAG_NULL              = 1,
1101     D3D12_TILE_RANGE_FLAG_SKIP              = 2,
1102     D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 4
1103 }
1104 
1105 struct D3D12_SUBRESOURCE_TILING {
1106     UINT   WidthInTiles;
1107     UINT16 HeightInTiles;
1108     UINT16 DepthInTiles;
1109     UINT   StartTileIndexInOverallResource;
1110 }
1111 
1112 struct D3D12_TILE_SHAPE {
1113     UINT WidthInTexels;
1114     UINT HeightInTexels;
1115     UINT DepthInTexels;
1116 }
1117 
1118 struct D3D12_PACKED_MIP_INFO {
1119     UINT8 NumStandardMips;
1120     UINT8 NumPackedMips;
1121     UINT  NumTilesForPackedMips;
1122     UINT  StartTileIndexInOverallResource;
1123 }
1124 
1125 alias D3D12_TILE_MAPPING_FLAGS = uint;
1126 enum : D3D12_TILE_MAPPING_FLAGS {
1127     D3D12_TILE_MAPPING_FLAG_NONE      = 0,
1128     D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1
1129 }
1130 
1131 alias D3D12_TILE_COPY_FLAGS = uint;
1132 enum : D3D12_TILE_COPY_FLAGS {
1133     D3D12_TILE_COPY_FLAG_NONE                                     = 0,
1134     D3D12_TILE_COPY_FLAG_NO_HAZARD                                = 0x1,
1135     D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
1136     D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4
1137 }
1138 
1139 alias D3D12_RESOURCE_STATES = uint;
1140 enum : D3D12_RESOURCE_STATES {
1141     D3D12_RESOURCE_STATE_COMMON                     = 0,
1142     D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
1143     D3D12_RESOURCE_STATE_INDEX_BUFFER               = 0x2,
1144     D3D12_RESOURCE_STATE_RENDER_TARGET              = 0x4,
1145     D3D12_RESOURCE_STATE_UNORDERED_ACCESS           = 0x8,
1146     D3D12_RESOURCE_STATE_DEPTH_WRITE                = 0x10,
1147     D3D12_RESOURCE_STATE_DEPTH_READ                 = 0x20,
1148     D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE  = 0x40,
1149     D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE      = 0x80,
1150     D3D12_RESOURCE_STATE_STREAM_OUT                 = 0x100,
1151     D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT          = 0x200,
1152     D3D12_RESOURCE_STATE_COPY_DEST                  = 0x400,
1153     D3D12_RESOURCE_STATE_COPY_SOURCE                = 0x800,
1154     D3D12_RESOURCE_STATE_RESOLVE_DEST               = 0x1000,
1155     D3D12_RESOURCE_STATE_RESOLVE_SOURCE             = 0x2000,
1156     D3D12_RESOURCE_STATE_GENERIC_READ               = 0x1 | 0x2 | 0x40 | 0x80 | 0x200 | 0x800,
1157     D3D12_RESOURCE_STATE_PRESENT                    = 0,
1158     D3D12_RESOURCE_STATE_PREDICATION                = 0x200
1159 }
1160 
1161 alias D3D12_RESOURCE_BARRIER_TYPE = uint;
1162 enum : D3D12_RESOURCE_BARRIER_TYPE {
1163     D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0,
1164     D3D12_RESOURCE_BARRIER_TYPE_ALIASING   = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION + 1,
1165     D3D12_RESOURCE_BARRIER_TYPE_UAV        = D3D12_RESOURCE_BARRIER_TYPE_ALIASING   + 1
1166 }
1167 
1168 
1169 struct D3D12_RESOURCE_TRANSITION_BARRIER {
1170     ID3D12Resource        pResource;
1171     UINT                  Subresource;
1172     D3D12_RESOURCE_STATES StateBefore;
1173     D3D12_RESOURCE_STATES StateAfter;
1174 }
1175 
1176 struct D3D12_RESOURCE_ALIASING_BARRIER {
1177     ID3D12Resource pResourceBefore;
1178     ID3D12Resource pResourceAfter;
1179 }
1180 
1181 struct D3D12_RESOURCE_UAV_BARRIER {
1182     ID3D12Resource pResource;
1183 }
1184 
1185 alias D3D12_RESOURCE_BARRIER_FLAGS = uint;
1186 enum : D3D12_RESOURCE_BARRIER_FLAGS {
1187     D3D12_RESOURCE_BARRIER_FLAG_NONE       = 0,
1188     D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,
1189     D3D12_RESOURCE_BARRIER_FLAG_END_ONLY   = 0x2
1190 }
1191 
1192 struct D3D12_RESOURCE_BARRIER {
1193     D3D12_RESOURCE_BARRIER_TYPE  Type;
1194     D3D12_RESOURCE_BARRIER_FLAGS Flags;
1195     union {
1196         D3D12_RESOURCE_TRANSITION_BARRIER Transition;
1197         D3D12_RESOURCE_ALIASING_BARRIER   Aliasing;
1198         D3D12_RESOURCE_UAV_BARRIER        UAV;
1199     }
1200 }
1201 
1202 struct D3D12_SUBRESOURCE_FOOTPRINT {
1203     DXGI_FORMAT Format;
1204     UINT        Width;
1205     UINT        Height;
1206     UINT        Depth;
1207     UINT        RowPitch;
1208 }
1209 
1210 struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT {
1211     UINT64                      Offset;
1212     D3D12_SUBRESOURCE_FOOTPRINT Footprint;
1213 }
1214 
1215 alias D3D12_TEXTURE_COPY_TYPE = uint;
1216 enum : D3D12_TEXTURE_COPY_TYPE {
1217     D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,
1218     D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT  = 1
1219 }
1220 
1221 struct D3D12_TEXTURE_COPY_LOCATION {
1222     ID3D12Resource          pResource;
1223     D3D12_TEXTURE_COPY_TYPE Type;
1224     union {
1225         D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
1226         UINT                               SubresourceIndex;
1227     }
1228 }
1229 
1230 alias D3D12_SHADER_COMPONENT_MAPPING = uint;
1231 enum : D3D12_SHADER_COMPONENT_MAPPING {
1232     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,
1233     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,
1234     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,
1235     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,
1236     D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0           = 4,
1237     D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1           = 5
1238 }
1239 
1240 enum {
1241     D3D12_SHADER_COMPONENT_MAPPING_MASK  = 0x7,
1242     D3D12_SHADER_COMPONENT_MAPPING_SHIFT = 3,
1243     D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES =
1244         1 << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4),
1245     D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING =
1246         D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0, 1, 2, 3)
1247 }
1248 
1249 pure nothrow @nogc @safe {
1250     uint D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(uint Src0, uint Src1,
1251                                                  uint Src2, uint Src3)
1252     {
1253         return ( (Src0 & D3D12_SHADER_COMPONENT_MAPPING_MASK) |
1254                 ((Src1 & D3D12_SHADER_COMPONENT_MAPPING_MASK) <<
1255                  D3D12_SHADER_COMPONENT_MAPPING_SHIFT) |
1256                 ((Src2 & D3D12_SHADER_COMPONENT_MAPPING_MASK) <<
1257                  (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 2)) |
1258                 ((Src3 & D3D12_SHADER_COMPONENT_MAPPING_MASK) <<
1259                  (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 3)) |
1260                 D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES);
1261     }
1262 
1263     uint D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(uint ComponentToExtract,
1264                                                  uint Mapping)
1265     {
1266         return cast(D3D12_SHADER_COMPONENT_MAPPING)
1267             (Mapping >>
1268              (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * ComponentToExtract) &
1269              D3D12_SHADER_COMPONENT_MAPPING_MASK);
1270     }
1271 }
1272 
1273 alias D3D12_BUFFER_SRV_FLAGS = uint;
1274 enum : D3D12_BUFFER_SRV_FLAGS {
1275     D3D12_BUFFER_SRV_FLAG_NONE = 0,
1276     D3D12_BUFFER_SRV_FLAG_RAW  = 0x1
1277 }
1278 
1279 struct D3D12_BUFFER_SRV {
1280     UINT64                 FirstElement;
1281     UINT                   NumElements;
1282     UINT                   StructureByteStride;
1283     D3D12_BUFFER_SRV_FLAGS Flags;
1284 }
1285 
1286 struct D3D12_TEX1D_SRV {
1287     UINT  MostDetailedMip;
1288     UINT  MipLevels;
1289     FLOAT ResourceMinLODClamp = 0.0f;
1290 }
1291 
1292 struct D3D12_TEX1D_ARRAY_SRV {
1293     UINT  MostDetailedMip;
1294     UINT  MipLevels;
1295     UINT  FirstArraySlice;
1296     UINT  ArraySize;
1297     FLOAT ResourceMinLODClamp = 0.0f;
1298 }
1299 
1300 struct D3D12_TEX2D_SRV {
1301     UINT  MostDetailedMip;
1302     UINT  MipLevels;
1303     UINT  PlaneSlice;
1304     FLOAT ResourceMinLODClamp = 0.0f;
1305 }
1306 
1307 struct D3D12_TEX2D_ARRAY_SRV {
1308     UINT  MostDetailedMip;
1309     UINT  MipLevels;
1310     UINT  FirstArraySlice;
1311     UINT  ArraySize;
1312     UINT  PlaneSlice;
1313     FLOAT ResourceMinLODClamp = 0.0f;
1314 }
1315 
1316 struct D3D12_TEX3D_SRV {
1317     UINT  MostDetailedMip;
1318     UINT  MipLevels;
1319     FLOAT ResourceMinLODClamp = 0.0f;
1320 }
1321 
1322 struct D3D12_TEXCUBE_SRV {
1323     UINT  MostDetailedMip;
1324     UINT  MipLevels;
1325     FLOAT ResourceMinLODClamp = 0.0f;
1326 }
1327 
1328 struct D3D12_TEXCUBE_ARRAY_SRV {
1329     UINT  MostDetailedMip;
1330     UINT  MipLevels;
1331     UINT  First2DArrayFace;
1332     UINT  NumCubes;
1333     FLOAT ResourceMinLODClamp = 0.0f;
1334 }
1335 
1336 struct D3D12_TEX2DMS_SRV {
1337     UINT UnusedField_NothingToDefine;
1338 }
1339 
1340 struct D3D12_TEX2DMS_ARRAY_SRV {
1341     UINT FirstArraySlice;
1342     UINT ArraySize;
1343 }
1344 
1345 alias D3D12_SRV_DIMENSION = uint;
1346 enum : D3D12_SRV_DIMENSION {
1347     D3D12_SRV_DIMENSION_UNKNOWN          = 0,
1348     D3D12_SRV_DIMENSION_BUFFER           = 1,
1349     D3D12_SRV_DIMENSION_TEXTURE1D        = 2,
1350     D3D12_SRV_DIMENSION_TEXTURE1DARRAY   = 3,
1351     D3D12_SRV_DIMENSION_TEXTURE2D        = 4,
1352     D3D12_SRV_DIMENSION_TEXTURE2DARRAY   = 5,
1353     D3D12_SRV_DIMENSION_TEXTURE2DMS      = 6,
1354     D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
1355     D3D12_SRV_DIMENSION_TEXTURE3D        = 8,
1356     D3D12_SRV_DIMENSION_TEXTURECUBE      = 9,
1357     D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10
1358 }
1359 
1360 struct D3D12_SHADER_RESOURCE_VIEW_DESC {
1361     DXGI_FORMAT         Format;
1362     D3D12_SRV_DIMENSION ViewDimension;
1363     UINT                Shader4ComponentMapping;
1364     union
1365     {
1366         D3D12_BUFFER_SRV        Buffer;
1367         D3D12_TEX1D_SRV         Texture1D;
1368         D3D12_TEX1D_ARRAY_SRV   Texture1DArray;
1369         D3D12_TEX2D_SRV         Texture2D;
1370         D3D12_TEX2D_ARRAY_SRV   Texture2DArray;
1371         D3D12_TEX2DMS_SRV       Texture2DMS;
1372         D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
1373         D3D12_TEX3D_SRV         Texture3D;
1374         D3D12_TEXCUBE_SRV       TextureCube;
1375         D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
1376     }
1377 }
1378 
1379 struct D3D12_CONSTANT_BUFFER_VIEW_DESC {
1380     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
1381     UINT                      SizeInBytes;
1382 }
1383 
1384 alias D3D12_FILTER = uint;
1385 enum : D3D12_FILTER {
1386     D3D12_FILTER_MIN_MAG_MIP_POINT                          = 0,
1387     D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR                   = 0x1,
1388     D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT             = 0x4,
1389     D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR                   = 0x5,
1390     D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT                   = 0x10,
1391     D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR            = 0x11,
1392     D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT                   = 0x14,
1393     D3D12_FILTER_MIN_MAG_MIP_LINEAR                         = 0x15,
1394     D3D12_FILTER_ANISOTROPIC                                = 0x55,
1395     D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT               = 0x80,
1396     D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR        = 0x81,
1397     D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,
1398     D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR        = 0x85,
1399     D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT        = 0x90,
1400     D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
1401     D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT        = 0x94,
1402     D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR              = 0x95,
1403     D3D12_FILTER_COMPARISON_ANISOTROPIC                     = 0xd5,
1404     D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT                  = 0x100,
1405     D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR           = 0x101,
1406     D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT     = 0x104,
1407     D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR           = 0x105,
1408     D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT           = 0x110,
1409     D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x111,
1410     D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT           = 0x114,
1411     D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR                 = 0x115,
1412     D3D12_FILTER_MINIMUM_ANISOTROPIC                        = 0x155,
1413     D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT                  = 0x180,
1414     D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR           = 0x181,
1415     D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT     = 0x184,
1416     D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR           = 0x185,
1417     D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT           = 0x190,
1418     D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x191,
1419     D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT           = 0x194,
1420     D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR                 = 0x195,
1421     D3D12_FILTER_MAXIMUM_ANISOTROPIC                        = 0x1d5
1422 }
1423 
1424 alias D3D12_FILTER_TYPE = uint;
1425 enum : D3D12_FILTER_TYPE {
1426     D3D12_FILTER_TYPE_POINT  = 0,
1427     D3D12_FILTER_TYPE_LINEAR = 1
1428 }
1429 
1430 alias D3D12_FILTER_REDUCTION_TYPE = uint;
1431 enum : D3D12_FILTER_REDUCTION_TYPE {
1432     D3D12_FILTER_REDUCTION_TYPE_STANDARD   = 0,
1433     D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,
1434     D3D12_FILTER_REDUCTION_TYPE_MINIMUM    = 2,
1435     D3D12_FILTER_REDUCTION_TYPE_MAXIMUM    = 3
1436 }
1437 
1438 enum {
1439     D3D12_FILTER_REDUCTION_TYPE_MASK  = 0x3,
1440     D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7,
1441     D3D12_FILTER_TYPE_MASK            = 0x3,
1442     D3D12_MIN_FILTER_SHIFT            = 4,
1443     D3D12_MAG_FILTER_SHIFT            = 2,
1444     D3D12_MIP_FILTER_SHIFT            = 0,
1445     D3D12_ANISOTROPIC_FILTERING_BIT   = 0x40
1446 }
1447 
1448 pure nothrow @safe @nogc {
1449     D3D12_FILTER D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE min,
1450                                            D3D12_FILTER_TYPE mag,
1451                                            D3D12_FILTER_TYPE mip,
1452                                            D3D12_FILTER_REDUCTION_TYPE reduction)
1453     {
1454         return cast(D3D12_FILTER)
1455             (((min       & D3D12_FILTER_TYPE_MASK) << D3D12_MIN_FILTER_SHIFT ) |
1456              ((mag       & D3D12_FILTER_TYPE_MASK) << D3D12_MAG_FILTER_SHIFT ) |
1457              ((mip       & D3D12_FILTER_TYPE_MASK) << D3D12_MIP_FILTER_SHIFT ) |
1458              ((reduction & D3D12_FILTER_REDUCTION_TYPE_MASK) <<
1459               D3D12_FILTER_REDUCTION_TYPE_SHIFT));
1460     }
1461 
1462     D3D12_FILTER D3D12_ENCODE_ANISOTROPIC_FILTER(D3D12_FILTER_REDUCTION_TYPE reduction) {
1463         return cast(D3D12_FILTER)
1464             (D3D12_ANISOTROPIC_FILTERING_BIT |
1465              D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE_LINEAR,
1466                                        D3D12_FILTER_TYPE_LINEAR,
1467                                        D3D12_FILTER_TYPE_LINEAR,
1468                                        reduction));
1469     }
1470 
1471     D3D12_FILTER_TYPE D3D12_DECODE_MIN_FILTER(D3D12_FILTER D3D12Filter) {
1472         return cast(D3D12_FILTER_TYPE)
1473             ((D3D12Filter >> D3D12_MIN_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK);
1474     }
1475 
1476     D3D12_FILTER_TYPE D3D12_DECODE_MAG_FILTER(D3D12_FILTER D3D12Filter) {
1477         return cast(D3D12_FILTER_TYPE)
1478             ((D3D12Filter >> D3D12_MAG_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK);
1479     }
1480 
1481     D3D12_FILTER_TYPE D3D12_DECODE_MIP_FILTER(D3D12_FILTER D3D12Filter) {
1482         return cast( D3D12_FILTER_TYPE )
1483             ((D3D12Filter >> D3D12_MIP_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK);
1484     }
1485 
1486     D3D12_FILTER_REDUCTION_TYPE D3D12_DECODE_FILTER_REDUCTION(D3D12_FILTER D3D12Filter) {
1487         return cast(D3D12_FILTER_REDUCTION_TYPE)
1488             ((D3D12Filter >> D3D12_FILTER_REDUCTION_TYPE_SHIFT) &
1489              D3D12_FILTER_REDUCTION_TYPE_MASK);
1490     }
1491 
1492     bool D3D12_DECODE_IS_COMPARISON_FILTER(D3D12_FILTER D3D12Filter) {
1493         return D3D12_DECODE_FILTER_REDUCTION(D3D12Filter) ==
1494             D3D12_FILTER_REDUCTION_TYPE_COMPARISON;
1495     }
1496 
1497     bool D3D12_DECODE_IS_ANISOTROPIC_FILTER(D3D12_FILTER D3D12Filter) {
1498         return ((D3D12Filter & D3D12_ANISOTROPIC_FILTERING_BIT) &&
1499                 (D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER(D3D12Filter)) &&
1500                 (D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER(D3D12Filter)) &&
1501                 (D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIP_FILTER(D3D12Filter)));
1502     }
1503 }
1504 
1505 alias D3D12_TEXTURE_ADDRESS_MODE = uint;
1506 enum : D3D12_TEXTURE_ADDRESS_MODE {
1507     D3D12_TEXTURE_ADDRESS_MODE_WRAP         = 1,
1508     D3D12_TEXTURE_ADDRESS_MODE_MIRROR       = 2,
1509     D3D12_TEXTURE_ADDRESS_MODE_CLAMP        = 3,
1510     D3D12_TEXTURE_ADDRESS_MODE_BORDER       = 4,
1511     D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE  = 5
1512 }
1513 
1514 struct D3D12_SAMPLER_DESC {
1515     D3D12_FILTER               Filter;
1516     D3D12_TEXTURE_ADDRESS_MODE AddressU;
1517     D3D12_TEXTURE_ADDRESS_MODE AddressV;
1518     D3D12_TEXTURE_ADDRESS_MODE AddressW;
1519     FLOAT                      MipLODBias = 0.0f;
1520     UINT                       MaxAnisotropy;
1521     D3D12_COMPARISON_FUNC      ComparisonFunc;
1522     FLOAT[4]                   BorderColor = [ 0.0f, 0.0f, 0.0f, 1.0f ];
1523     FLOAT                      MinLOD = 0.0f;
1524     FLOAT                      MaxLOD = 0.0f;
1525 }
1526 
1527 alias D3D12_BUFFER_UAV_FLAGS = uint;
1528 enum : D3D12_BUFFER_UAV_FLAGS {
1529     D3D12_BUFFER_UAV_FLAG_NONE = 0,
1530     D3D12_BUFFER_UAV_FLAG_RAW  = 0x1
1531 }
1532 
1533 struct D3D12_BUFFER_UAV {
1534     UINT64                 FirstElement;
1535     UINT                   NumElements;
1536     UINT                   StructureByteStride;
1537     UINT64                 CounterOffsetInBytes;
1538     D3D12_BUFFER_UAV_FLAGS Flags;
1539 }
1540 
1541 struct D3D12_TEX1D_UAV {
1542     UINT MipSlice;
1543 }
1544 
1545 struct D3D12_TEX1D_ARRAY_UAV {
1546     UINT MipSlice;
1547     UINT FirstArraySlice;
1548     UINT ArraySize;
1549 }
1550 
1551 struct D3D12_TEX2D_UAV {
1552     UINT MipSlice;
1553     UINT PlaneSlice;
1554 }
1555 
1556 struct D3D12_TEX2D_ARRAY_UAV {
1557     UINT MipSlice;
1558     UINT FirstArraySlice;
1559     UINT ArraySize;
1560     UINT PlaneSlice;
1561 }
1562 
1563 struct D3D12_TEX3D_UAV {
1564     UINT MipSlice;
1565     UINT FirstWSlice;
1566     UINT WSize;
1567 }
1568 
1569 alias D3D12_UAV_DIMENSION = uint;
1570 enum : D3D12_UAV_DIMENSION {
1571     D3D12_UAV_DIMENSION_UNKNOWN        = 0,
1572     D3D12_UAV_DIMENSION_BUFFER         = 1,
1573     D3D12_UAV_DIMENSION_TEXTURE1D      = 2,
1574     D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,
1575     D3D12_UAV_DIMENSION_TEXTURE2D      = 4,
1576     D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,
1577     D3D12_UAV_DIMENSION_TEXTURE3D      = 8
1578 }
1579 
1580 struct D3D12_UNORDERED_ACCESS_VIEW_DESC {
1581     DXGI_FORMAT         Format;
1582     D3D12_UAV_DIMENSION ViewDimension;
1583     union {
1584         D3D12_BUFFER_UAV      Buffer;
1585         D3D12_TEX1D_UAV       Texture1D;
1586         D3D12_TEX1D_ARRAY_UAV Texture1DArray;
1587         D3D12_TEX2D_UAV       Texture2D;
1588         D3D12_TEX2D_ARRAY_UAV Texture2DArray;
1589         D3D12_TEX3D_UAV       Texture3D;
1590     }
1591 }
1592 
1593 struct D3D12_BUFFER_RTV {
1594     UINT64 FirstElement;
1595     UINT   NumElements;
1596 }
1597 
1598 struct D3D12_TEX1D_RTV {
1599     UINT MipSlice;
1600 }
1601 
1602 struct D3D12_TEX1D_ARRAY_RTV {
1603     UINT MipSlice;
1604     UINT FirstArraySlice;
1605     UINT ArraySize;
1606 }
1607 
1608 struct D3D12_TEX2D_RTV {
1609     UINT MipSlice;
1610     UINT PlaneSlice;
1611 }
1612 
1613 struct D3D12_TEX2DMS_RTV {
1614     UINT UnusedField_NothingToDefine;
1615 }
1616 
1617 struct D3D12_TEX2D_ARRAY_RTV {
1618     UINT MipSlice;
1619     UINT FirstArraySlice;
1620     UINT ArraySize;
1621     UINT PlaneSlice;
1622 }
1623 
1624 struct D3D12_TEX2DMS_ARRAY_RTV {
1625     UINT FirstArraySlice;
1626     UINT ArraySize;
1627 }
1628 
1629 struct D3D12_TEX3D_RTV {
1630     UINT MipSlice;
1631     UINT FirstWSlice;
1632     UINT WSize;
1633 }
1634 
1635 alias D3D12_RTV_DIMENSION = uint;
1636 enum : D3D12_RTV_DIMENSION {
1637     D3D12_RTV_DIMENSION_UNKNOWN          = 0,
1638     D3D12_RTV_DIMENSION_BUFFER           = 1,
1639     D3D12_RTV_DIMENSION_TEXTURE1D        = 2,
1640     D3D12_RTV_DIMENSION_TEXTURE1DARRAY   = 3,
1641     D3D12_RTV_DIMENSION_TEXTURE2D        = 4,
1642     D3D12_RTV_DIMENSION_TEXTURE2DARRAY   = 5,
1643     D3D12_RTV_DIMENSION_TEXTURE2DMS      = 6,
1644     D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
1645     D3D12_RTV_DIMENSION_TEXTURE3D        = 8
1646 }
1647 
1648 struct D3D12_RENDER_TARGET_VIEW_DESC {
1649     DXGI_FORMAT         Format;
1650     D3D12_RTV_DIMENSION ViewDimension;
1651     union
1652     {
1653         D3D12_BUFFER_RTV        Buffer;
1654         D3D12_TEX1D_RTV         Texture1D;
1655         D3D12_TEX1D_ARRAY_RTV   Texture1DArray;
1656         D3D12_TEX2D_RTV         Texture2D;
1657         D3D12_TEX2D_ARRAY_RTV   Texture2DArray;
1658         D3D12_TEX2DMS_RTV       Texture2DMS;
1659         D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
1660         D3D12_TEX3D_RTV         Texture3D;
1661     }
1662 }
1663 
1664 struct D3D12_TEX1D_DSV {
1665     UINT MipSlice;
1666 }
1667 
1668 struct D3D12_TEX1D_ARRAY_DSV {
1669     UINT MipSlice;
1670     UINT FirstArraySlice;
1671     UINT ArraySize;
1672 }
1673 
1674 struct D3D12_TEX2D_DSV {
1675     UINT MipSlice;
1676 }
1677 
1678 struct D3D12_TEX2D_ARRAY_DSV {
1679     UINT MipSlice;
1680     UINT FirstArraySlice;
1681     UINT ArraySize;
1682 }
1683 
1684 struct D3D12_TEX2DMS_DSV {
1685     UINT UnusedField_NothingToDefine;
1686 }
1687 
1688 struct D3D12_TEX2DMS_ARRAY_DSV {
1689     UINT FirstArraySlice;
1690     UINT ArraySize;
1691 }
1692 
1693 alias D3D12_DSV_FLAGS = uint;
1694 enum : D3D12_DSV_FLAGS {
1695     D3D12_DSV_FLAG_NONE              = 0,
1696     D3D12_DSV_FLAG_READ_ONLY_DEPTH   = 0x1,
1697     D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2
1698 }
1699 
1700 alias D3D12_DSV_DIMENSION = uint;
1701 enum : D3D12_DSV_DIMENSION {
1702     D3D12_DSV_DIMENSION_UNKNOWN          = 0,
1703     D3D12_DSV_DIMENSION_TEXTURE1D        = 1,
1704     D3D12_DSV_DIMENSION_TEXTURE1DARRAY   = 2,
1705     D3D12_DSV_DIMENSION_TEXTURE2D        = 3,
1706     D3D12_DSV_DIMENSION_TEXTURE2DARRAY   = 4,
1707     D3D12_DSV_DIMENSION_TEXTURE2DMS      = 5,
1708     D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6
1709 }
1710 
1711 struct D3D12_DEPTH_STENCIL_VIEW_DESC {
1712     DXGI_FORMAT         Format;
1713     D3D12_DSV_DIMENSION ViewDimension;
1714     D3D12_DSV_FLAGS     Flags;
1715     union
1716     {
1717         D3D12_TEX1D_DSV         Texture1D;
1718         D3D12_TEX1D_ARRAY_DSV   Texture1DArray;
1719         D3D12_TEX2D_DSV         Texture2D;
1720         D3D12_TEX2D_ARRAY_DSV   Texture2DArray;
1721         D3D12_TEX2DMS_DSV       Texture2DMS;
1722         D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
1723     }
1724 }
1725 
1726 alias D3D12_CLEAR_FLAGS = uint;
1727 enum : D3D12_CLEAR_FLAGS {
1728     D3D12_CLEAR_FLAG_DEPTH   = 0x1,
1729     D3D12_CLEAR_FLAG_STENCIL = 0x2
1730 }
1731 
1732 alias D3D12_FENCE_FLAGS = uint;
1733 enum : D3D12_FENCE_FLAGS {
1734     D3D12_FENCE_FLAG_NONE                 = 0,
1735     D3D12_FENCE_FLAG_SHARED               = 0x1,
1736     D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2
1737 }
1738 
1739 alias D3D12_DESCRIPTOR_HEAP_TYPE = uint;
1740 enum : D3D12_DESCRIPTOR_HEAP_TYPE {
1741     D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV = 0,
1742     D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER     = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV + 1,
1743     D3D12_DESCRIPTOR_HEAP_TYPE_RTV         = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER     + 1,
1744     D3D12_DESCRIPTOR_HEAP_TYPE_DSV         = D3D12_DESCRIPTOR_HEAP_TYPE_RTV         + 1,
1745     D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES   = D3D12_DESCRIPTOR_HEAP_TYPE_DSV         + 1
1746 }
1747 
1748 alias D3D12_DESCRIPTOR_HEAP_FLAGS = uint;
1749 enum : D3D12_DESCRIPTOR_HEAP_FLAGS {
1750     D3D12_DESCRIPTOR_HEAP_FLAG_NONE           = 0,
1751     D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1
1752 }
1753 
1754 struct D3D12_DESCRIPTOR_HEAP_DESC {
1755 	this(this) {}
1756     D3D12_DESCRIPTOR_HEAP_TYPE  Type;
1757     UINT                        NumDescriptors;
1758     D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
1759     UINT                        NodeMask;
1760 }
1761 
1762 alias D3D12_DESCRIPTOR_RANGE_TYPE = uint;
1763 enum : D3D12_DESCRIPTOR_RANGE_TYPE {
1764     D3D12_DESCRIPTOR_RANGE_TYPE_SRV     = 0,
1765     D3D12_DESCRIPTOR_RANGE_TYPE_UAV     = D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1,
1766     D3D12_DESCRIPTOR_RANGE_TYPE_CBV     = D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1,
1767     D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1
1768 }
1769 
1770 struct D3D12_DESCRIPTOR_RANGE {
1771     D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
1772     UINT                        NumDescriptors;
1773     UINT                        BaseShaderRegister;
1774     UINT                        RegisterSpace;
1775     UINT                        OffsetInDescriptorsFromTableStart;
1776 }
1777 
1778 struct D3D12_ROOT_DESCRIPTOR_TABLE {
1779     UINT                           NumDescriptorRanges;
1780     const(D3D12_DESCRIPTOR_RANGE)* pDescriptorRanges;
1781 }
1782 
1783 struct D3D12_ROOT_CONSTANTS {
1784     UINT ShaderRegister;
1785     UINT RegisterSpace;
1786     UINT Num32BitValues;
1787 }
1788 
1789 struct D3D12_ROOT_DESCRIPTOR {
1790     UINT ShaderRegister;
1791     UINT RegisterSpace;
1792 }
1793 
1794 alias D3D12_SHADER_VISIBILITY = uint;
1795 enum : D3D12_SHADER_VISIBILITY {
1796     D3D12_SHADER_VISIBILITY_ALL      = 0,
1797     D3D12_SHADER_VISIBILITY_VERTEX   = 1,
1798     D3D12_SHADER_VISIBILITY_HULL     = 2,
1799     D3D12_SHADER_VISIBILITY_DOMAIN   = 3,
1800     D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
1801     D3D12_SHADER_VISIBILITY_PIXEL    = 5
1802 }
1803 
1804 alias D3D12_ROOT_PARAMETER_TYPE = uint;
1805 enum : D3D12_ROOT_PARAMETER_TYPE {
1806     D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0,
1807     D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS  = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE + 1,
1808     D3D12_ROOT_PARAMETER_TYPE_CBV              = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS  + 1,
1809     D3D12_ROOT_PARAMETER_TYPE_SRV              = D3D12_ROOT_PARAMETER_TYPE_CBV              + 1,
1810     D3D12_ROOT_PARAMETER_TYPE_UAV              = D3D12_ROOT_PARAMETER_TYPE_SRV              + 1
1811 }
1812 
1813 struct D3D12_ROOT_PARAMETER {
1814     D3D12_ROOT_PARAMETER_TYPE ParameterType;
1815     union {
1816         D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
1817         D3D12_ROOT_CONSTANTS        Constants;
1818         D3D12_ROOT_DESCRIPTOR       Descriptor;
1819     }
1820     D3D12_SHADER_VISIBILITY ShaderVisibility;
1821 }
1822 
1823 alias D3D12_ROOT_SIGNATURE_FLAGS = uint;
1824 enum : D3D12_ROOT_SIGNATURE_FLAGS {
1825     D3D12_ROOT_SIGNATURE_FLAG_NONE                               = 0,
1826     D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
1827     D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS     = 0x2,
1828     D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS       = 0x4,
1829     D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS     = 0x8,
1830     D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS   = 0x10,
1831     D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS      = 0x20,
1832     D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT                = 0x40
1833 }
1834 
1835 alias D3D12_STATIC_BORDER_COLOR = uint;
1836 enum : D3D12_STATIC_BORDER_COLOR {
1837     D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
1838     D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK      = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK + 1,
1839     D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE      = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK      + 1
1840 }
1841 
1842 struct D3D12_STATIC_SAMPLER_DESC {
1843     D3D12_FILTER               Filter;
1844     D3D12_TEXTURE_ADDRESS_MODE AddressU;
1845     D3D12_TEXTURE_ADDRESS_MODE AddressV;
1846     D3D12_TEXTURE_ADDRESS_MODE AddressW;
1847     FLOAT                      MipLODBias = 0.0f;
1848     UINT                       MaxAnisotropy;
1849     D3D12_COMPARISON_FUNC      ComparisonFunc;
1850     D3D12_STATIC_BORDER_COLOR  BorderColor;
1851     FLOAT                      MinLOD = 0.0f;
1852     FLOAT                      MaxLOD = 0.0f;
1853     UINT                       ShaderRegister;
1854     UINT                       RegisterSpace;
1855     D3D12_SHADER_VISIBILITY    ShaderVisibility;
1856 }
1857 
1858 struct D3D12_ROOT_SIGNATURE_DESC {
1859     UINT                              NumParameters;
1860     const(D3D12_ROOT_PARAMETER)*      pParameters;
1861     UINT                              NumStaticSamplers;
1862     const(D3D12_STATIC_SAMPLER_DESC)* pStaticSamplers;
1863     D3D12_ROOT_SIGNATURE_FLAGS        Flags;
1864 }
1865 
1866 alias D3D_ROOT_SIGNATURE_VERSION = uint;
1867 enum : D3D_ROOT_SIGNATURE_VERSION {
1868     D3D_ROOT_SIGNATURE_VERSION_1 = 0x1
1869 }
1870 
1871 mixin(uuid!(ID3D12RootSignatureDeserializer, "34AB647B-3CC8-46AC-841B-C0965645C046"));
1872 extern(C++) interface ID3D12RootSignatureDeserializer : IUnknown {
1873     const(D3D12_ROOT_SIGNATURE_DESC)* GetRootSignatureDesc();
1874 }
1875 
1876 
1877 
1878 extern(Windows) nothrow
1879 HRESULT D3D12SerializeRootSignature(const(D3D12_ROOT_SIGNATURE_DESC)* pRootSignature,
1880                                     D3D_ROOT_SIGNATURE_VERSION Version,
1881                                     ID3DBlob* ppBlob,
1882                                     ID3DBlob* ppErrorBlob);
1883 
1884 alias PFN_D3D12_SERIALIZE_ROOT_SIGNATURE = extern(Windows) nothrow HRESULT function(
1885                      const(D3D12_ROOT_SIGNATURE_DESC)* pRootSignature,
1886                      D3D_ROOT_SIGNATURE_VERSION Version,
1887                      ID3DBlob* ppBlob,
1888                      ID3DBlob* ppErrorBlob);
1889 
1890 
1891 
1892 extern(Windows) nothrow
1893 HRESULT D3D12CreateRootSignatureDeserializer(LPCVOID pSrcData,
1894                                              SIZE_T SrcDataSizeInBytes,
1895                                              REFIID pRootSignatureDeserializerInterface,
1896                                              void** ppRootSignatureDeserializer);
1897 
1898 alias PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER = extern(Windows) nothrow HRESULT function(
1899                                                                       LPCVOID pSrcData,
1900                                                                       SIZE_T SrcDataSizeInBytes,
1901                                                                       REFIID pRootSignatureDeserializerInterface,
1902                                                                       void** ppRootSignatureDeserializer);
1903 
1904 
1905 struct D3D12_CPU_DESCRIPTOR_HANDLE {
1906 	this(this) {}
1907     SIZE_T ptr;
1908 }
1909 
1910 struct D3D12_GPU_DESCRIPTOR_HANDLE {
1911 	this(this) {}
1912     UINT64 ptr;
1913 }
1914 
1915 // If rects are supplied in D3D12_DISCARD_REGION, below, the resource
1916 // must have 2D subresources with all specified subresources the same dimension.
1917 struct D3D12_DISCARD_REGION {
1918     UINT               NumRects;
1919     const(D3D12_RECT)* pRects;
1920     UINT               FirstSubresource;
1921     UINT               NumSubresources;
1922 }
1923 
1924 alias D3D12_QUERY_HEAP_TYPE = uint;
1925 enum : D3D12_QUERY_HEAP_TYPE {
1926     D3D12_QUERY_HEAP_TYPE_OCCLUSION           = 0,
1927     D3D12_QUERY_HEAP_TYPE_TIMESTAMP           = 1,
1928     D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,
1929     D3D12_QUERY_HEAP_TYPE_SO_STATISTICS       = 3
1930 }
1931 
1932 struct D3D12_QUERY_HEAP_DESC {
1933     D3D12_QUERY_HEAP_TYPE Type;
1934     UINT                  Count;
1935     UINT                  NodeMask;
1936 }
1937 
1938 alias D3D12_QUERY_TYPE = uint;
1939 enum : D3D12_QUERY_TYPE {
1940     D3D12_QUERY_TYPE_OCCLUSION             = 0,
1941     D3D12_QUERY_TYPE_BINARY_OCCLUSION      = 1,
1942     D3D12_QUERY_TYPE_TIMESTAMP             = 2,
1943     D3D12_QUERY_TYPE_PIPELINE_STATISTICS   = 3,
1944     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,
1945     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,
1946     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,
1947     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7
1948 }
1949 
1950 alias D3D12_PREDICATION_OP = uint;
1951 enum : D3D12_PREDICATION_OP {
1952     D3D12_PREDICATION_OP_EQUAL_ZERO     = 0,
1953     D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1
1954 }
1955 
1956 struct D3D12_QUERY_DATA_PIPELINE_STATISTICS {
1957     UINT64 IAVertices;
1958     UINT64 IAPrimitives;
1959     UINT64 VSInvocations;
1960     UINT64 GSInvocations;
1961     UINT64 GSPrimitives;
1962     UINT64 CInvocations;
1963     UINT64 CPrimitives;
1964     UINT64 PSInvocations;
1965     UINT64 HSInvocations;
1966     UINT64 DSInvocations;
1967     UINT64 CSInvocations;
1968 }
1969 
1970 struct D3D12_QUERY_DATA_SO_STATISTICS {
1971     UINT64 NumPrimitivesWritten;
1972     UINT64 PrimitivesStorageNeeded;
1973 }
1974 
1975 struct D3D12_STREAM_OUTPUT_BUFFER_VIEW {
1976     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
1977     UINT64                    SizeInBytes;
1978     D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
1979 }
1980 
1981 struct D3D12_DRAW_ARGUMENTS {
1982     UINT VertexCountPerInstance;
1983     UINT InstanceCount;
1984     UINT StartVertexLocation;
1985     UINT StartInstanceLocation;
1986 }
1987 
1988 struct D3D12_DRAW_INDEXED_ARGUMENTS {
1989     UINT IndexCountPerInstance;
1990     UINT InstanceCount;
1991     UINT StartIndexLocation;
1992     INT  BaseVertexLocation;
1993     UINT StartInstanceLocation;
1994 }
1995 
1996 struct D3D12_DISPATCH_ARGUMENTS {
1997     UINT ThreadGroupCountX;
1998     UINT ThreadGroupCountY;
1999     UINT ThreadGroupCountZ;
2000 }
2001 
2002 struct D3D12_VERTEX_BUFFER_VIEW {
2003     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2004     UINT                      SizeInBytes;
2005     UINT                      StrideInBytes;
2006 }
2007 
2008 struct D3D12_INDEX_BUFFER_VIEW {
2009     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2010     UINT                      SizeInBytes;
2011     DXGI_FORMAT               Format;
2012 }
2013 
2014 alias D3D12_INDIRECT_ARGUMENT_TYPE = uint;
2015 enum : D3D12_INDIRECT_ARGUMENT_TYPE {
2016     D3D12_INDIRECT_ARGUMENT_TYPE_DRAW                  = 0,
2017     D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED          = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW                 + 1,
2018     D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH              = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED         + 1,
2019     D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW    = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH             + 1,
2020     D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW     = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW   + 1,
2021     D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT              = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW    + 1,
2022     D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW  = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT             + 1,
2023     D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW  = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW + 1,
2024     D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW + 1
2025 }
2026 
2027 struct D3D12_INDIRECT_ARGUMENT_DESC {
2028     D3D12_INDIRECT_ARGUMENT_TYPE Type;
2029     union {
2030         struct {
2031             UINT Slot;
2032         }
2033         static struct _Constant {
2034             UINT RootParameterIndex;
2035             UINT DestOffsetIn32BitValues;
2036             UINT Num32BitValuesToSet;
2037         }
2038         static struct _ConstantBufferView {
2039             UINT RootParameterIndex;
2040         }
2041         static struct _ShaderResourceView {
2042             UINT RootParameterIndex;
2043         }
2044         static struct _UnorderedAccessView {
2045             UINT RootParameterIndex;
2046         }
2047 
2048         _Constant Constant;
2049         _ConstantBufferView ConstantBufferView;
2050         _ShaderResourceView ShaderResourceView;
2051         _UnorderedAccessView UnorderedAccessView;
2052     }
2053 }
2054 
2055 struct D3D12_COMMAND_SIGNATURE_DESC {
2056     UINT                                 ByteStride;
2057     UINT                                 NumArgumentDescs;
2058     const(D3D12_INDIRECT_ARGUMENT_DESC)* pArgumentDescs;
2059     UINT                                 NodeMask;
2060 }
2061 
2062 mixin(uuid!(ID3D12Pageable, "63ee58fb-1268-4835-86da-f008ce62f0d6"));
2063 extern(C++) interface ID3D12Pageable : ID3D12DeviceChild {}
2064 
2065 mixin(uuid!(ID3D12Heap, "6b3b2502-6e51-45b3-90ee-9884265e8df3"));
2066 extern(C++) interface ID3D12Heap : ID3D12Pageable {
2067 
2068 	version(CORRECT_ABI)
2069 	{
2070     D3D12_HEAP_DESC GetDesc();
2071 	}
2072 	else
2073 	{
2074 	void GetDesc(D3D12_HEAP_DESC* outDesc);
2075 	}
2076 
2077 	version(CORRECT_ABI){}
2078 	else
2079 	{
2080 	final D3D12_HEAP_DESC GetDesc()
2081 	{
2082 		D3D12_HEAP_DESC temp;
2083 		GetDesc(&temp);
2084 		return temp;
2085 	}
2086 	}
2087 
2088 
2089 }
2090 
2091 mixin(uuid!(ID3D12Resource, "696442be-a72e-4059-bc79-5b5c98040fad"));
2092 extern(C++) interface ID3D12Resource : ID3D12Pageable {
2093     HRESULT Map(UINT Subresource,
2094                 const(D3D12_RANGE)*pReadRange,
2095                 void** ppData);
2096 
2097     void Unmap(UINT Subresource,
2098                const(D3D12_RANGE)* pWrittenRange);
2099 
2100 	version(CORRECT_ABI)
2101 	{
2102     D3D12_RESOURCE_DESC GetDesc();
2103 	}
2104 	else
2105 	{
2106 	void GetDesc(D3D12_RESOURCE_DESC* outDesc);
2107 	}
2108 
2109     D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress();
2110 
2111     HRESULT WriteToSubresource(UINT DstSubresource,
2112                                const(D3D12_BOX)* pDstBox,
2113                                const(void)* pSrcData,
2114                                UINT SrcRowPitch,
2115                                UINT SrcDepthPitch);
2116 
2117     HRESULT ReadFromSubresource(void* pDstData,
2118                                 UINT DstRowPitch,
2119                                 UINT DstDepthPitch,
2120                                 UINT SrcSubresource,
2121                                 const(D3D12_BOX)* pSrcBox);
2122 
2123     HRESULT GetHeapProperties(D3D12_HEAP_PROPERTIES* pHeapProperties,
2124                               D3D12_HEAP_FLAGS* pHeapFlags);
2125 
2126 
2127 
2128 	version(CORRECT_ABI){}
2129 	else
2130 	{
2131 	final D3D12_RESOURCE_DESC GetDesc()
2132 	{
2133 		D3D12_RESOURCE_DESC temp;
2134 		GetDesc(&temp);
2135 		return temp;
2136 	}
2137 	}
2138 }
2139 
2140 mixin(uuid!(ID3D12CommandAllocator, "6102dee4-af59-4b09-b999-b44d73f09b24"));
2141 extern(C++) interface ID3D12CommandAllocator : ID3D12Pageable {
2142     HRESULT Reset();
2143 }
2144 
2145 mixin(uuid!(ID3D12Fence, "0a753dcf-c4d8-4b91-adf6-be5a60d95a76"));
2146 extern(C++) interface ID3D12Fence : ID3D12Pageable {
2147     UINT64 GetCompletedValue();
2148 
2149     HRESULT SetEventOnCompletion(UINT64 Value, HANDLE hEvent);
2150 
2151     HRESULT Signal(UINT64 Value);
2152 }
2153 
2154 mixin(uuid!(ID3D12PipelineState, "765a30f3-f624-4c6f-a828-ace948622445"));
2155 extern(C++) interface ID3D12PipelineState : ID3D12Pageable {
2156     HRESULT GetCachedBlob(ID3DBlob*ppBlob);
2157 }
2158 
2159 mixin(uuid!(ID3D12DescriptorHeap, "8efb471d-616c-4f49-90f7-127bb763fa51"));
2160 extern(C++) interface ID3D12DescriptorHeap : ID3D12Pageable {
2161 
2162 	version(CORRECT_ABI)
2163 	{
2164     D3D12_DESCRIPTOR_HEAP_DESC GetDesc();
2165 
2166     D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();
2167 
2168     D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();
2169 	}
2170 	else
2171 	{
2172 	void GetDesc(D3D12_DESCRIPTOR_HEAP_DESC* outDesc);
2173 
2174 	void GetCPUDescriptorHandleForHeapStart(D3D12_CPU_DESCRIPTOR_HANDLE* outHandle);
2175 
2176 	void GetGPUDescriptorHandleForHeapStart(D3D12_GPU_DESCRIPTOR_HANDLE* outHandle);
2177 	}
2178 
2179 	// ==============================================================================
2180 	// Helpers for incorrect ABI below
2181 
2182 	version(CORRECT_ABI){}
2183 	else
2184 	{
2185 	final D3D12_DESCRIPTOR_HEAP_DESC GetDesc()
2186 	{
2187 		D3D12_DESCRIPTOR_HEAP_DESC temp;
2188 		GetDesc(&temp);
2189 		return temp;
2190 	}
2191 
2192 	final D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart()
2193 	{
2194 		D3D12_CPU_DESCRIPTOR_HANDLE temp;
2195 		GetCPUDescriptorHandleForHeapStart(&temp);
2196 		return temp;
2197 	}
2198 
2199 	final D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart()
2200 	{
2201 		D3D12_GPU_DESCRIPTOR_HANDLE temp;
2202 		GetGPUDescriptorHandleForHeapStart(&temp);
2203 		return temp;
2204 	}
2205 	} // version(CORRECT_ABI) else
2206 }
2207 
2208 mixin(uuid!(ID3D12QueryHeap, "0d9658ae-ed45-469e-a61d-970ec583cab4"));
2209 extern(C++) interface ID3D12QueryHeap : ID3D12Pageable {}
2210 
2211 mixin(uuid!(ID3D12CommandSignature, "c36a797c-ec80-4f0a-8985-a7b2475082d1"));
2212 extern(C++) interface ID3D12CommandSignature : ID3D12Pageable {}
2213 
2214 mixin(uuid!(ID3D12CommandList, "7116d91c-e7e4-47ce-b8c6-ec8168f437e5"));
2215 extern(C++) interface ID3D12CommandList : ID3D12DeviceChild {
2216 
2217     D3D12_COMMAND_LIST_TYPE GetType();
2218 }
2219 
2220 mixin(uuid!(ID3D12GraphicsCommandList, "5b160d0f-ac1b-4185-8ba8-b3ae42a5a455"));
2221 extern(C++) interface ID3D12GraphicsCommandList : ID3D12CommandList {
2222     HRESULT Close();
2223 
2224     HRESULT Reset(ID3D12CommandAllocator pAllocator,
2225                   ID3D12PipelineState pInitialState);
2226 
2227     void ClearState(ID3D12PipelineState pPipelineState);
2228 
2229     void DrawInstanced(
2230         UINT VertexCountPerInstance,
2231         UINT InstanceCount,
2232         UINT StartVertexLocation,
2233         UINT StartInstanceLocation);
2234 
2235     void DrawIndexedInstanced(
2236         UINT IndexCountPerInstance,
2237         UINT InstanceCount,
2238         UINT StartIndexLocation,
2239         INT BaseVertexLocation,
2240         UINT StartInstanceLocation);
2241 
2242     void Dispatch(
2243         UINT ThreadGroupCountX,
2244         UINT ThreadGroupCountY,
2245         UINT ThreadGroupCountZ);
2246 
2247     void CopyBufferRegion(
2248         ID3D12Resource pDstBuffer,
2249         UINT64 DstOffset,
2250         ID3D12Resource pSrcBuffer,
2251         UINT64 SrcOffset,
2252         UINT64 NumBytes);
2253 
2254     void CopyTextureRegion(
2255         const(D3D12_TEXTURE_COPY_LOCATION)* pDst,
2256         UINT DstX,
2257         UINT DstY,
2258         UINT DstZ,
2259         const(D3D12_TEXTURE_COPY_LOCATION)* pSrc,
2260         const(D3D12_BOX)* pSrcBox);
2261 
2262     void CopyResource(
2263         ID3D12Resource pDstResource,
2264         ID3D12Resource pSrcResource);
2265 
2266     void CopyTiles(
2267         ID3D12Resource pTiledResource,
2268         const(D3D12_TILED_RESOURCE_COORDINATE)* pTileRegionStartCoordinate,
2269         const(D3D12_TILE_REGION_SIZE)* pTileRegionSize,
2270         ID3D12Resource pBuffer,
2271         UINT64 BufferStartOffsetInBytes,
2272         D3D12_TILE_COPY_FLAGS Flags);
2273 
2274     void ResolveSubresource(
2275         ID3D12Resource pDstResource,
2276         UINT DstSubresource,
2277         ID3D12Resource pSrcResource,
2278         UINT SrcSubresource,
2279         DXGI_FORMAT Format);
2280 
2281     void IASetPrimitiveTopology(
2282         D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
2283 
2284     void RSSetViewports(
2285         UINT NumViewports,
2286         const(D3D12_VIEWPORT) *pViewports);
2287 
2288     void RSSetScissorRects(
2289         UINT NumRects,
2290         const(D3D12_RECT)* pRects);
2291 
2292     void OMSetBlendFactor(
2293         const(FLOAT)[4] BlendFactor);
2294 
2295     void OMSetStencilRef(
2296         UINT StencilRef);
2297 
2298     void SetPipelineState(
2299         ID3D12PipelineState pPipelineState);
2300 
2301     void ResourceBarrier(
2302         UINT NumBarriers,
2303         const(D3D12_RESOURCE_BARRIER)* pBarriers);
2304 
2305     void ExecuteBundle(
2306         ID3D12GraphicsCommandList pCommandList);
2307 
2308     void SetDescriptorHeaps(
2309         UINT NumDescriptorHeaps,
2310         ID3D12DescriptorHeap *ppDescriptorHeaps);
2311 
2312     void SetComputeRootSignature(
2313         ID3D12RootSignature pRootSignature);
2314 
2315     void SetGraphicsRootSignature(
2316         ID3D12RootSignature pRootSignature);
2317 
2318     void SetComputeRootDescriptorTable(
2319         UINT RootParameterIndex,
2320         D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
2321 
2322     void SetGraphicsRootDescriptorTable(
2323         UINT RootParameterIndex,
2324         D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
2325 
2326     void SetComputeRoot32BitConstant(
2327         UINT RootParameterIndex,
2328         UINT SrcData,
2329         UINT DestOffsetIn32BitValues);
2330 
2331     void SetGraphicsRoot32BitConstant(
2332         UINT RootParameterIndex,
2333         UINT SrcData,
2334         UINT DestOffsetIn32BitValues);
2335 
2336     void SetComputeRoot32BitConstants(
2337         UINT RootParameterIndex,
2338         UINT Num32BitValuesToSet,
2339         const(void)* pSrcData,
2340         UINT DestOffsetIn32BitValues);
2341 
2342     void SetGraphicsRoot32BitConstants(
2343         UINT RootParameterIndex,
2344         UINT Num32BitValuesToSet,
2345         const(void) *pSrcData,
2346         UINT DestOffsetIn32BitValues);
2347 
2348     void SetComputeRootConstantBufferView(
2349         UINT RootParameterIndex,
2350         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2351 
2352     void SetGraphicsRootConstantBufferView(
2353         UINT RootParameterIndex,
2354         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2355 
2356     void SetComputeRootShaderResourceView(
2357         UINT RootParameterIndex,
2358         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2359 
2360     void SetGraphicsRootShaderResourceView(
2361         UINT RootParameterIndex,
2362         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2363 
2364     void SetComputeRootUnorderedAccessView(
2365         UINT RootParameterIndex,
2366         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2367 
2368     void SetGraphicsRootUnorderedAccessView(
2369         UINT RootParameterIndex,
2370         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2371 
2372     void IASetIndexBuffer(
2373         const(D3D12_INDEX_BUFFER_VIEW)* pView);
2374 
2375     void IASetVertexBuffers(
2376         UINT StartSlot,
2377         UINT NumViews,
2378         const(D3D12_VERTEX_BUFFER_VIEW)* pViews);
2379 
2380     void SOSetTargets(
2381         UINT StartSlot,
2382         UINT NumViews,
2383         const(D3D12_STREAM_OUTPUT_BUFFER_VIEW)* pViews);
2384 
2385     void OMSetRenderTargets(
2386         UINT NumRenderTargetDescriptors,
2387         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pRenderTargetDescriptors,
2388         BOOL RTsSingleHandleToDescriptorRange,
2389         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pDepthStencilDescriptor);
2390 
2391     void ClearDepthStencilView(
2392         D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
2393         D3D12_CLEAR_FLAGS ClearFlags,
2394         FLOAT Depth,
2395         UINT8 Stencil,
2396         UINT NumRects,
2397         const(D3D12_RECT)* pRects);
2398 
2399     void ClearRenderTargetView(
2400         D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
2401         const(FLOAT)* ColorRGBA,
2402         UINT NumRects,
2403         const(D3D12_RECT)* pRects);
2404 
2405     void ClearUnorderedAccessViewUint(
2406         D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
2407         D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
2408         ID3D12Resource pResource,
2409         const(UINT)* Values,
2410         UINT NumRects,
2411         const(D3D12_RECT)* pRects);
2412 
2413     void ClearUnorderedAccessViewFloat(
2414         D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
2415         D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
2416         ID3D12Resource pResource,
2417         const(FLOAT)* Values,
2418         UINT NumRects,
2419         const(D3D12_RECT)* pRects);
2420 
2421     void DiscardResource(
2422         ID3D12Resource pResource,
2423         const(D3D12_DISCARD_REGION)* pRegion);
2424 
2425     void BeginQuery(
2426         ID3D12QueryHeap pQueryHeap,
2427         D3D12_QUERY_TYPE Type,
2428         UINT Index);
2429 
2430     void EndQuery(
2431         ID3D12QueryHeap pQueryHeap,
2432         D3D12_QUERY_TYPE Type,
2433         UINT Index);
2434 
2435     void ResolveQueryData(
2436         ID3D12QueryHeap pQueryHeap,
2437         D3D12_QUERY_TYPE Type,
2438         UINT StartIndex,
2439         UINT NumQueries,
2440         ID3D12Resource pDestinationBuffer,
2441         UINT64 AlignedDestinationBufferOffset);
2442 
2443     void SetPredication(
2444         ID3D12Resource pBuffer,
2445         UINT64 AlignedBufferOffset,
2446         D3D12_PREDICATION_OP Operation);
2447 
2448     void SetMarker(
2449         UINT Metadata,
2450         const(void)* pData,
2451         UINT Size);
2452 
2453     void BeginEvent(
2454         UINT Metadata,
2455         const(void)* pData,
2456         UINT Size);
2457 
2458     void EndEvent();
2459 
2460     void ExecuteIndirect(
2461         ID3D12CommandSignature pCommandSignature,
2462         UINT MaxCommandCount,
2463         ID3D12Resource pArgumentBuffer,
2464         UINT64 ArgumentBufferOffset,
2465         ID3D12Resource pCountBuffer,
2466         UINT64 CountBufferOffset);
2467 }
2468 
2469 mixin(uuid!(ID3D12CommandQueue, "0ec870a6-5d7e-4c22-8cfc-5baae07616ed"));
2470 extern(C++) interface ID3D12CommandQueue : ID3D12Pageable {
2471     void UpdateTileMappings(
2472         ID3D12Resource pResource,
2473         UINT NumResourceRegions,
2474         const(D3D12_TILED_RESOURCE_COORDINATE)* pResourceRegionStartCoordinates,
2475         const(D3D12_TILE_REGION_SIZE)* pResourceRegionSizes,
2476         ID3D12Heap pHeap,
2477         UINT NumRanges,
2478         const(D3D12_TILE_RANGE_FLAGS)* pRangeFlags,
2479         const(UINT)* pHeapRangeStartOffsets,
2480         const(UINT)* pRangeTileCounts,
2481         D3D12_TILE_MAPPING_FLAGS Flags);
2482 
2483     void CopyTileMappings(
2484         ID3D12Resource pDstResource,
2485         const(D3D12_TILED_RESOURCE_COORDINATE)* pDstRegionStartCoordinate,
2486         ID3D12Resource pSrcResource,
2487         const(D3D12_TILED_RESOURCE_COORDINATE)* pSrcRegionStartCoordinate,
2488         const(D3D12_TILE_REGION_SIZE)* pRegionSize,
2489         D3D12_TILE_MAPPING_FLAGS Flags);
2490 
2491     void ExecuteCommandLists(
2492         UINT NumCommandLists,
2493         const(ID3D12CommandList)* ppCommandLists);
2494 
2495     void SetMarker(
2496         UINT Metadata,
2497         const(void)* pData,
2498         UINT Size);
2499 
2500     void BeginEvent(
2501         UINT Metadata,
2502         const(void)* pData,
2503         UINT Size);
2504 
2505     void EndEvent();
2506 
2507     HRESULT Signal(
2508         ID3D12Fence pFence,
2509         UINT64 Value);
2510 
2511     HRESULT Wait(
2512         ID3D12Fence pFence,
2513         UINT64 Value);
2514 
2515     HRESULT GetTimestampFrequency(
2516         UINT64* pFrequency);
2517 
2518     HRESULT GetClockCalibration(
2519         UINT64* pGpuTimestamp,
2520         UINT64* pCpuTimestamp);
2521 
2522 	version(CORRECT_ABI)
2523 	{
2524     D3D12_COMMAND_QUEUE_DESC GetDesc();
2525 	}
2526 	else
2527 	{
2528 	void GetDesc(D3D12_COMMAND_QUEUE_DESC* outDesc);
2529 	}
2530 
2531 	version(CORRECT_ABI){}
2532 	else
2533 	{
2534 	final D3D12_COMMAND_QUEUE_DESC GetDesc()
2535 	{
2536 		D3D12_COMMAND_QUEUE_DESC temp;
2537 		GetDesc(&temp);
2538 		return temp;
2539 	}
2540 	}
2541 
2542 }
2543 
2544 mixin(uuid!(ID3D12Device, "189819f1-1db6-4b57-be54-1821339b85f7"));
2545 extern(C++) interface ID3D12Device : ID3D12Object {
2546     UINT GetNodeCount();
2547 
2548     HRESULT CreateCommandQueue(
2549         const(D3D12_COMMAND_QUEUE_DESC)* pDesc,
2550         REFIID riid,
2551         ID3D12CommandQueue* ppCommandQueue);
2552 
2553     HRESULT CreateCommandAllocator(
2554         D3D12_COMMAND_LIST_TYPE type,
2555         REFIID riid,
2556         ID3D12CommandAllocator* ppCommandAllocator);
2557 
2558     HRESULT CreateGraphicsPipelineState(
2559         const(D3D12_GRAPHICS_PIPELINE_STATE_DESC)* pDesc,
2560         REFIID riid,
2561         ID3D12PipelineState* ppPipelineState);
2562 
2563     HRESULT CreateComputePipelineState(
2564         const(D3D12_COMPUTE_PIPELINE_STATE_DESC)* pDesc,
2565         REFIID riid,
2566         ID3D12PipelineState* ppPipelineState);
2567 
2568     HRESULT CreateCommandList(
2569         UINT nodeMask,
2570         D3D12_COMMAND_LIST_TYPE type,
2571         ID3D12CommandAllocator pCommandAllocator,
2572         ID3D12PipelineState pInitialState,
2573         REFIID riid,
2574         ID3D12CommandList* ppCommandList);
2575 
2576     HRESULT CheckFeatureSupport(
2577         D3D12_FEATURE Feature,
2578         void* pFeatureSupportData,
2579         UINT FeatureSupportDataSize);
2580 
2581     HRESULT CreateDescriptorHeap(
2582         const(D3D12_DESCRIPTOR_HEAP_DESC)* pDescriptorHeapDesc,
2583         REFIID riid,
2584         ID3D12DescriptorHeap* ppvHeap);
2585 
2586     UINT GetDescriptorHandleIncrementSize(
2587         D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
2588 
2589     HRESULT CreateRootSignature(
2590         UINT nodeMask,
2591         const(void)* pBlobWithRootSignature,
2592         SIZE_T blobLengthInBytes,
2593         REFIID riid,
2594         ID3D12RootSignature* ppvRootSignature);
2595 
2596     void CreateConstantBufferView(
2597         const(D3D12_CONSTANT_BUFFER_VIEW_DESC)* pDesc,
2598         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2599 
2600     void CreateShaderResourceView(
2601         ID3D12Resource pResource,
2602         const(D3D12_SHADER_RESOURCE_VIEW_DESC)* pDesc,
2603         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2604 
2605     void CreateUnorderedAccessView(
2606         ID3D12Resource pResource,
2607         ID3D12Resource pCounterResource,
2608         const(D3D12_UNORDERED_ACCESS_VIEW_DESC)* pDesc,
2609         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2610 
2611     void CreateRenderTargetView(
2612         ID3D12Resource pResource,
2613         const(D3D12_RENDER_TARGET_VIEW_DESC)* pDesc,
2614         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2615 
2616     void CreateDepthStencilView(
2617         ID3D12Resource pResource,
2618         const(D3D12_DEPTH_STENCIL_VIEW_DESC)* pDesc,
2619         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2620 
2621     void CreateSampler(
2622         const(D3D12_SAMPLER_DESC)* pDesc,
2623         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2624 
2625     void CopyDescriptors(
2626         UINT NumDestDescriptorRanges,
2627         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pDestDescriptorRangeStarts,
2628         const(UINT)* pDestDescriptorRangeSizes,
2629         UINT NumSrcDescriptorRanges,
2630         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pSrcDescriptorRangeStarts,
2631         const(UINT)* pSrcDescriptorRangeSizes,
2632         D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
2633 
2634     void CopyDescriptorsSimple(
2635         UINT NumDescriptors,
2636         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
2637         D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
2638         D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
2639 
2640 	version(CORRECT_ABI)
2641 	{
2642     D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
2643         UINT visibleMask,
2644         UINT numResourceDescs,
2645         const(D3D12_RESOURCE_DESC)* pResourceDescs);
2646 
2647     D3D12_HEAP_PROPERTIES GetCustomHeapProperties(
2648         UINT nodeMask,
2649         D3D12_HEAP_TYPE heapType);
2650 	}
2651 	else
2652 	{
2653 		void GetResourceAllocationInfo(D3D12_RESOURCE_ALLOCATION_INFO* outDesc,
2654 									   UINT visibleMask,
2655 									   UINT numResourceDescs,
2656 									   const(D3D12_RESOURCE_DESC)* pResourceDescs);
2657 
2658 		void GetCustomHeapProperties(D3D12_HEAP_PROPERTIES* outDesc,
2659 									 UINT nodeMask,
2660 									 D3D12_HEAP_TYPE heapType);
2661 	}
2662 
2663 
2664     HRESULT CreateCommittedResource(
2665         const(D3D12_HEAP_PROPERTIES)* pHeapProperties,
2666         D3D12_HEAP_FLAGS HeapFlags,
2667         const(D3D12_RESOURCE_DESC)* pResourceDesc,
2668         D3D12_RESOURCE_STATES InitialResourceState,
2669         const(D3D12_CLEAR_VALUE)* pOptimizedClearValue,
2670         REFIID riidResource,
2671         ID3D12Resource* ppvResource);
2672 
2673     HRESULT CreateHeap(
2674         const(D3D12_HEAP_DESC)* pDesc,
2675         REFIID riid,
2676         ID3D12Heap* ppvHeap);
2677 
2678     HRESULT CreatePlacedResource(
2679         ID3D12Heap pHeap,
2680         UINT64 HeapOffset,
2681         const(D3D12_RESOURCE_DESC)* pDesc,
2682         D3D12_RESOURCE_STATES InitialState,
2683         const(D3D12_CLEAR_VALUE)* pOptimizedClearValue,
2684         REFIID riid,
2685         ID3D12Resource* ppvResource);
2686 
2687     HRESULT CreateReservedResource(
2688         const(D3D12_RESOURCE_DESC)* pDesc,
2689         D3D12_RESOURCE_STATES InitialState,
2690         const(D3D12_CLEAR_VALUE)* pOptimizedClearValue,
2691         REFIID riid,
2692         ID3D12Resource* ppvResource);
2693 
2694     HRESULT CreateSharedHandle(
2695         ID3D12DeviceChild pObject,
2696         const(SECURITY_ATTRIBUTES)* pAttributes,
2697         DWORD Access,
2698         LPCWSTR Name,
2699         HANDLE* pHandle);
2700 
2701     HRESULT OpenSharedHandle(
2702         HANDLE NTHandle,
2703         REFIID riid,
2704         void** ppvObj);
2705 
2706     HRESULT OpenSharedHandleByName(
2707         LPCWSTR Name,
2708         DWORD Access,
2709         HANDLE* pNTHandle);
2710 
2711     HRESULT MakeResident(
2712         UINT NumObjects,
2713         const(ID3D12Pageable)* ppObjects);
2714 
2715     HRESULT Evict(
2716         UINT NumObjects,
2717         const(ID3D12Pageable)* ppObjects);
2718 
2719     HRESULT CreateFence(
2720         UINT64 InitialValue,
2721         D3D12_FENCE_FLAGS Flags,
2722         REFIID riid,
2723         ID3D12Fence* ppFence);
2724 
2725     HRESULT GetDeviceRemovedReason();
2726 
2727     void GetCopyableFootprints(
2728         const(D3D12_RESOURCE_DESC)* pResourceDesc,
2729         UINT FirstSubresource,
2730         UINT NumSubresources,
2731         UINT64 BaseOffset,
2732         D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
2733         UINT* pNumRows,
2734         UINT64* pRowSizeInBytes,
2735         UINT64* pTotalBytes);
2736 
2737     HRESULT CreateQueryHeap(
2738         const(D3D12_QUERY_HEAP_DESC)* pDesc,
2739         REFIID riid,
2740         ID3D12QueryHeap* ppvHeap);
2741 
2742     HRESULT SetStablePowerState(
2743         BOOL Enable);
2744 
2745     HRESULT CreateCommandSignature(
2746         const(D3D12_COMMAND_SIGNATURE_DESC)* pDesc,
2747         ID3D12RootSignature pRootSignature,
2748         REFIID riid,
2749         ID3D12CommandSignature* ppvCommandSignature);
2750 
2751     void GetResourceTiling(
2752         ID3D12Resource pTiledResource,
2753         UINT* pNumTilesForEntireResource,
2754         D3D12_PACKED_MIP_INFO* pPackedMipDesc,
2755         D3D12_TILE_SHAPE* pStandardTileShapeForNonPackedMips,
2756         UINT* pNumSubresourceTilings,
2757         UINT FirstSubresourceTilingToGet,
2758         D3D12_SUBRESOURCE_TILING* pSubresourceTilingsForNonPackedMips);
2759 
2760     LUID GetAdapterLuid();
2761 
2762 
2763 	version(CORRECT_ABI){}
2764 	else
2765 	{
2766 		final D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
2767 																 UINT visibleMask,
2768 																 UINT numResourceDescs,
2769 																 const(D3D12_RESOURCE_DESC)* pResourceDescs)
2770 		{
2771 			D3D12_RESOURCE_ALLOCATION_INFO temp;
2772 			GetResourceAllocationInfo(&temp, visibleMask, numResourceDescs, pResourceDescs);
2773 			return temp;
2774 		}
2775 
2776 		final D3D12_HEAP_PROPERTIES GetCustomHeapProperties(
2777 													  UINT nodeMask,
2778 													  D3D12_HEAP_TYPE heapType)
2779 		{
2780 			D3D12_HEAP_PROPERTIES temp;
2781 			GetCustomHeapProperties(nodeMask, heapType);
2782 			return temp;
2783 		}
2784 	}
2785 }
2786 
2787 struct D3D12_SUBRESOURCE_DATA {
2788     const(void)* pData;
2789     LONG_PTR     RowPitch;
2790     LONG_PTR     SlicePitch;
2791 }
2792 
2793 struct D3D12_MEMCPY_DEST {
2794     void*  pData;
2795     SIZE_T RowPitch;
2796     SIZE_T SlicePitch;
2797 }
2798 
2799 ///////////////////////////////////////////////////////////////////////////
2800 // D3D12CreateDevice
2801 // ------------------
2802 //
2803 // pAdapter
2804 //      If NULL, D3D12CreateDevice will choose the primary adapter.
2805 //      If non-NULL, D3D12CreateDevice will use the provided adapter.
2806 // MinimumFeatureLevel
2807 //      The minimum feature level required for successful device creation.
2808 // riid
2809 //      The interface IID of the device to be returned. Expected: ID3D12Device.
2810 // ppDevice
2811 //      Pointer to returned interface. May be NULL.
2812 //
2813 // Return Values
2814 //  Any of those documented for
2815 //          CreateDXGIFactory1
2816 //          IDXGIFactory::EnumAdapters
2817 //          D3D12CreateDevice
2818 //
2819 ///////////////////////////////////////////////////////////////////////////
2820 
2821 
2822 extern(Windows) nothrow HRESULT D3D12CreateDevice(
2823                          IUnknown          pAdapter,
2824                          D3D_FEATURE_LEVEL MinimumFeatureLevel,
2825                          REFIID            riid, // Expected: ID3D12Device
2826                          ID3D12Device     *ppDevice);
2827 
2828 extern(Windows) nothrow HRESULT D3D12GetDebugInterface(
2829                          REFIID riid,
2830                          void** ppvDebug);
2831 
2832 
2833 alias PFN_D3D12_CREATE_DEVICE = extern(Windows) nothrow HRESULT function(
2834                          IUnknown          pAdapter,
2835                          D3D_FEATURE_LEVEL MinimumFeatureLevel,
2836                          REFIID            riid, // Expected: ID3D12Device
2837                          ID3D12Device     *ppDevice);
2838 
2839 alias PFN_D3D12_GET_DEBUG_INTERFACE = extern(Windows) nothrow HRESULT function(
2840                          REFIID riid,
2841                          void** ppvDebug);
2842