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