aboutsummaryrefslogtreecommitdiff
path: root/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12.idl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12.idl')
-rw-r--r--contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12.idl7016
1 files changed, 7016 insertions, 0 deletions
diff --git a/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12.idl b/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12.idl
new file mode 100644
index 0000000..a3f0125
--- /dev/null
+++ b/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12.idl
@@ -0,0 +1,7016 @@
1/*-------------------------------------------------------------------------------------
2 *
3 * Copyright (c) Microsoft Corporation
4 * Licensed under the MIT license
5 *
6 *-------------------------------------------------------------------------------------*/
7import "oaidl.idl";
8import "ocidl.idl";
9
10import "dxgicommon.idl";
11import "dxgiformat.idl";
12
13import "d3dcommon.idl";
14
15cpp_quote("#include <winapifamily.h>")
16
17#pragma region App Family
18cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)")
19
20// NOTE: The following constants are generated from the D3D12 hardware spec. Do not edit these values directly.
21cpp_quote("#ifndef _D3D12_CONSTANTS")
22cpp_quote("#define _D3D12_CONSTANTS")
23const UINT D3D12_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff;
24const UINT D3D12_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff;
25const UINT D3D12_8BIT_INDEX_STRIP_CUT_VALUE = 0xff;
26const UINT D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff;
27const UINT D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9;
28const UINT D3D12_CLIP_OR_CULL_DISTANCE_COUNT = 8;
29const UINT D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2;
30const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14;
31const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4;
32const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32;
33const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15;
34const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16;
35const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
36const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15;
37const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
38const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
39const UINT D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64;
40const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
41const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1;
42const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
43const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
44const UINT D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32;
45const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1;
46const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128;
47const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1;
48const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1;
49const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128;
50const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1;
51const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16;
52const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1;
53const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1;
54const UINT D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT = 16;
55const UINT D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32;
56const UINT D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4;
57const UINT D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32;
58const UINT D3D12_COMMONSHADER_TEMP_REGISTER_COUNT = 4096;
59const UINT D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3;
60const UINT D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3;
61const UINT D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10;
62const INT D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10;
63const INT D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8;
64const UINT D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7;
65const UINT D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256;
66const UINT D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256;
67const UINT D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP = 64;
68const UINT D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240;
69const UINT D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP = 68;
70const UINT D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224;
71const UINT D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP = 72;
72const UINT D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208;
73const UINT D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP = 76;
74const UINT D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192;
75const UINT D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP = 84;
76const UINT D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176;
77const UINT D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP = 92;
78const UINT D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160;
79const UINT D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP = 100;
80const UINT D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144;
81const UINT D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP = 112;
82const UINT D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128;
83const UINT D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP = 128;
84const UINT D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112;
85const UINT D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP = 144;
86const UINT D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96;
87const UINT D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP = 168;
88const UINT D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80;
89const UINT D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP = 204;
90const UINT D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64;
91const UINT D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP = 256;
92const UINT D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48;
93const UINT D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP = 340;
94const UINT D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32;
95const UINT D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP = 512;
96const UINT D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16;
97const UINT D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP = 768;
98const UINT D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION = 1;
99const UINT D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT = 256;
100const UINT D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP = 768;
101const UINT D3D12_CS_4_X_THREAD_GROUP_MAX_X = 768;
102const UINT D3D12_CS_4_X_THREAD_GROUP_MAX_Y = 768;
103const UINT D3D12_CS_4_X_UAV_REGISTER_COUNT = 1;
104const UINT D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION = 65535;
105const UINT D3D12_CS_TGSM_REGISTER_COUNT = 8192;
106const UINT D3D12_CS_TGSM_REGISTER_READS_PER_INST = 1;
107const UINT D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS = 1;
108const UINT D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS = 1;
109const UINT D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS = 3;
110const UINT D3D12_CS_THREADGROUPID_REGISTER_COUNT = 1;
111const UINT D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS = 1;
112const UINT D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT = 1;
113const UINT D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS = 3;
114const UINT D3D12_CS_THREADIDINGROUP_REGISTER_COUNT = 1;
115const UINT D3D12_CS_THREADID_REGISTER_COMPONENTS = 3;
116const UINT D3D12_CS_THREADID_REGISTER_COUNT = 1;
117const UINT D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP = 1024;
118const UINT D3D12_CS_THREAD_GROUP_MAX_X = 1024;
119const UINT D3D12_CS_THREAD_GROUP_MAX_Y = 1024;
120const UINT D3D12_CS_THREAD_GROUP_MAX_Z = 64;
121const UINT D3D12_CS_THREAD_GROUP_MIN_X = 1;
122const UINT D3D12_CS_THREAD_GROUP_MIN_Y = 1;
123const UINT D3D12_CS_THREAD_GROUP_MIN_Z = 1;
124const UINT D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL = 16384;
125cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA ( 1.0f )")
126cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_BLUE ( 1.0f )")
127cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_GREEN ( 1.0f )")
128cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_RED ( 1.0f )")
129cpp_quote("#define D3D12_DEFAULT_BORDER_COLOR_COMPONENT ( 0.0f )")
130const UINT D3D12_DEFAULT_DEPTH_BIAS = 0;
131cpp_quote("#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP ( 0.0f )")
132const UINT D3D12_DEFAULT_MAX_ANISOTROPY = 16;
133cpp_quote("#define D3D12_DEFAULT_MIP_LOD_BIAS ( 0.0f )")
134const UINT D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 4194304;
135const UINT D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;
136const UINT D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536;
137const UINT D3D12_DEFAULT_SAMPLE_MASK = 0xffffffff;
138const UINT D3D12_DEFAULT_SCISSOR_ENDX = 0;
139const UINT D3D12_DEFAULT_SCISSOR_ENDY = 0;
140const UINT D3D12_DEFAULT_SCISSOR_STARTX = 0;
141const UINT D3D12_DEFAULT_SCISSOR_STARTY = 0;
142cpp_quote("#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS ( 0.0f )")
143const UINT D3D12_DEFAULT_STENCIL_READ_MASK = 0xff;
144const UINT D3D12_DEFAULT_STENCIL_REFERENCE = 0;
145const UINT D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff;
146const UINT D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;
147const UINT D3D12_DEFAULT_VIEWPORT_HEIGHT = 0;
148cpp_quote("#define D3D12_DEFAULT_VIEWPORT_MAX_DEPTH ( 0.0f )")
149cpp_quote("#define D3D12_DEFAULT_VIEWPORT_MIN_DEPTH ( 0.0f )")
150const UINT D3D12_DEFAULT_VIEWPORT_TOPLEFTX = 0;
151const UINT D3D12_DEFAULT_VIEWPORT_TOPLEFTY = 0;
152const UINT D3D12_DEFAULT_VIEWPORT_WIDTH = 0;
153const UINT D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff;
154const UINT D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END = 0xfffffff7;
155const UINT D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0;
156const UINT D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968;
157const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS = 4;
158const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32;
159const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT = 32;
160const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST = 2;
161const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS = 1;
162const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS = 3;
163const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT = 32;
164const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT = 1;
165const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST = 2;
166const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS = 1;
167const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4;
168const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32;
169const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT = 32;
170const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2;
171const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1;
172const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1;
173const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
174const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1;
175const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2;
176const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1;
177const UINT D3D12_DS_OUTPUT_REGISTER_COMPONENTS = 4;
178const UINT D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
179const UINT D3D12_DS_OUTPUT_REGISTER_COUNT = 32;
180cpp_quote("#define D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP ( 0.6 )")
181cpp_quote("#define D3D12_FLOAT32_MAX ( 3.402823466e+38f )")
182cpp_quote("#define D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP ( 0.6f )")
183cpp_quote("#define D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR ( 2.4f )")
184cpp_quote("#define D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR ( 1.0f )")
185cpp_quote("#define D3D12_FLOAT_TO_SRGB_OFFSET ( 0.055f )")
186cpp_quote("#define D3D12_FLOAT_TO_SRGB_SCALE_1 ( 12.92f )")
187cpp_quote("#define D3D12_FLOAT_TO_SRGB_SCALE_2 ( 1.055f )")
188cpp_quote("#define D3D12_FLOAT_TO_SRGB_THRESHOLD ( 0.0031308f )")
189cpp_quote("#define D3D12_FTOI_INSTRUCTION_MAX_INPUT ( 2147483647.999f )")
190cpp_quote("#define D3D12_FTOI_INSTRUCTION_MIN_INPUT ( -2147483648.999f )")
191cpp_quote("#define D3D12_FTOU_INSTRUCTION_MAX_INPUT ( 4294967295.999f )")
192cpp_quote("#define D3D12_FTOU_INSTRUCTION_MIN_INPUT ( 0.0f )")
193const UINT D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST = 2;
194const UINT D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS = 1;
195const UINT D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS = 1;
196const UINT D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
197const UINT D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT = 1;
198const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1;
199const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32;
200const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1;
201const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2;
202const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1;
203const UINT D3D12_GS_INPUT_REGISTER_COMPONENTS = 4;
204const UINT D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
205const UINT D3D12_GS_INPUT_REGISTER_COUNT = 32;
206const UINT D3D12_GS_INPUT_REGISTER_READS_PER_INST = 2;
207const UINT D3D12_GS_INPUT_REGISTER_READ_PORTS = 1;
208const UINT D3D12_GS_INPUT_REGISTER_VERTICES = 32;
209const UINT D3D12_GS_MAX_INSTANCE_COUNT = 32;
210const UINT D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES = 1024;
211const UINT D3D12_GS_OUTPUT_ELEMENTS = 32;
212const UINT D3D12_GS_OUTPUT_REGISTER_COMPONENTS = 4;
213const UINT D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
214const UINT D3D12_GS_OUTPUT_REGISTER_COUNT = 32;
215const UINT D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT = 32;
216const UINT D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT = 32;
217const UINT D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS = 4;
218const UINT D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32;
219const UINT D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST = 2;
220const UINT D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS = 1;
221const UINT D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xFFFFFFFF;
222const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS = 1;
223const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
224const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT = 1;
225const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST = 2;
226const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS = 1;
227const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS = 1;
228const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
229const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT = 1;
230const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST = 2;
231const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS = 1;
232const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1;
233const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
234const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1;
235const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2;
236const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1;
237const UINT D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xFFFFFFFF;
238cpp_quote("#define D3D12_HS_MAXTESSFACTOR_LOWER_BOUND ( 1.0f )")
239cpp_quote("#define D3D12_HS_MAXTESSFACTOR_UPPER_BOUND ( 64.0f )")
240const UINT D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968;
241const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS = 1;
242const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT = 32;
243const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT = 1;
244const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST = 2;
245const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS = 1;
246const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4;
247const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32;
248const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT = 32;
249const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2;
250const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1;
251const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS = 128;
252const UINT D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0;
253const UINT D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0;
254const UINT D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0;
255const UINT D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1;
256const UINT D3D12_IA_INSTANCE_ID_BIT_COUNT = 32;
257const UINT D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32;
258const UINT D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT = 32;
259const UINT D3D12_IA_PRIMITIVE_ID_BIT_COUNT = 32;
260const UINT D3D12_IA_VERTEX_ID_BIT_COUNT = 32;
261const UINT D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;
262const UINT D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128;
263const UINT D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32;
264const UINT D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff;
265const UINT D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff;
266const UINT D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff;
267const UINT D3D12_KEEP_UNORDERED_ACCESS_VIEWS = 0xffffffff;
268cpp_quote("#define D3D12_LINEAR_GAMMA ( 1.0f )")
269const UINT D3D12_MAJOR_VERSION = 12;
270cpp_quote("#define D3D12_MAX_BORDER_COLOR_COMPONENT ( 1.0f )")
271cpp_quote("#define D3D12_MAX_DEPTH ( 1.0f )")
272const UINT D3D12_MAX_LIVE_STATIC_SAMPLERS = 2032;
273const UINT D3D12_MAX_MAXANISOTROPY = 16;
274const UINT D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
275cpp_quote("#define D3D12_MAX_POSITION_VALUE ( 3.402823466e+34f )")
276const UINT D3D12_MAX_ROOT_COST = 64;
277const UINT D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1 = 1000000;
278const UINT D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2 = 1000000;
279const UINT D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE = 2048;
280const UINT D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17;
281const UINT D3D12_MAX_VIEW_INSTANCE_COUNT = 4;
282const UINT D3D12_MINOR_VERSION = 0;
283cpp_quote("#define D3D12_MIN_BORDER_COLOR_COMPONENT ( 0.0f )")
284cpp_quote("#define D3D12_MIN_DEPTH ( 0.0f )")
285const UINT D3D12_MIN_MAXANISOTROPY = 0;
286cpp_quote("#define D3D12_MIP_LOD_BIAS_MAX ( 15.99f )")
287cpp_quote("#define D3D12_MIP_LOD_BIAS_MIN ( -16.0f )")
288const UINT D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT = 8;
289const UINT D3D12_MIP_LOD_RANGE_BIT_COUNT = 8;
290const UINT D3D12_MS_DISPATCH_MAX_THREAD_GROUPS_PER_GRID = 4194303;
291cpp_quote("#define D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH ( 1.4f )")
292const UINT D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0;
293const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff;
294const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8;
295const UINT D3D12_PACKED_TILE = 0xffffffff;
296const UINT D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15;
297const UINT D3D12_PREVIEW_SDK_VERSION = 717;
298const UINT D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16;
299const UINT D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1;
300const UINT D3D12_PS_CS_UAV_REGISTER_COUNT = 8;
301const UINT D3D12_PS_CS_UAV_REGISTER_READS_PER_INST = 1;
302const UINT D3D12_PS_CS_UAV_REGISTER_READ_PORTS = 1;
303const UINT D3D12_PS_FRONTFACING_DEFAULT_VALUE = 0xFFFFFFFF;
304const UINT D3D12_PS_FRONTFACING_FALSE_VALUE = 0x00000000;
305const UINT D3D12_PS_FRONTFACING_TRUE_VALUE = 0xFFFFFFFF;
306const UINT D3D12_PS_INPUT_REGISTER_COMPONENTS = 4;
307const UINT D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
308const UINT D3D12_PS_INPUT_REGISTER_COUNT = 32;
309const UINT D3D12_PS_INPUT_REGISTER_READS_PER_INST = 2;
310const UINT D3D12_PS_INPUT_REGISTER_READ_PORTS = 1;
311cpp_quote("#define D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.0f )")
312const UINT D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1;
313const UINT D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32;
314const UINT D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1;
315const UINT D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1;
316const UINT D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32;
317const UINT D3D12_PS_OUTPUT_MASK_REGISTER_COUNT = 1;
318const UINT D3D12_PS_OUTPUT_REGISTER_COMPONENTS = 4;
319const UINT D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
320const UINT D3D12_PS_OUTPUT_REGISTER_COUNT = 8;
321cpp_quote("#define D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.5f )")
322const UINT D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT = 16;
323const UINT D3D12_RAYTRACING_AABB_BYTE_ALIGNMENT = 8;
324const UINT D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT = 256;
325const UINT D3D12_RAYTRACING_INSTANCE_DESCS_BYTE_ALIGNMENT = 16;
326const UINT D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES = 32;
327const UINT D3D12_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH = 31;
328const UINT D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE = 16777216;
329const UINT D3D12_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE = 16777216;
330const UINT D3D12_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE = 536870912;
331const UINT D3D12_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS = 1073741824;
332const UINT D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE = 4096;
333const UINT D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_BYTE_ALIGNMENT = 128;
334const UINT D3D12_RAYTRACING_OPACITY_MICROMAP_OC1_MAX_SUBDIVISION_LEVEL = 12;
335const UINT D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT = 32;
336const UINT D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT = 64;
337const UINT D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT = 16;
338const UINT D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE = 4096;
339const UINT D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27;
340const UINT D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
341const UINT D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096;
342const UINT D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32;
343const UINT D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32;
344const UINT D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384;
345const UINT D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024;
346const UINT D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
347const UINT D3D12_REQ_MAXANISOTROPY = 16;
348const UINT D3D12_REQ_MIP_LEVELS = 15;
349const UINT D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048;
350const UINT D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096;
351const UINT D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 16384;
352const UINT D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128;
353cpp_quote("#define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM ( 0.25f )")
354const UINT D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048;
355const UINT D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20;
356const UINT D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE = 4096;
357const UINT D3D12_REQ_SUBRESOURCES = 30720;
358const UINT D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048;
359const UINT D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384;
360const UINT D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048;
361const UINT D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384;
362const UINT D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048;
363const UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384;
364const UINT D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0;
365const UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff;
366const UINT D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT = 2;
367const UINT D3D12_SDK_VERSION = 618;
368const UINT D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES = 32;
369const UINT D3D12_SHADER_MAJOR_VERSION = 5;
370const UINT D3D12_SHADER_MAX_INSTANCES = 65535;
371const UINT D3D12_SHADER_MAX_INTERFACES = 253;
372const UINT D3D12_SHADER_MAX_INTERFACE_CALL_SITES = 4096;
373const UINT D3D12_SHADER_MAX_TYPES = 65535;
374const UINT D3D12_SHADER_MINOR_VERSION = 1;
375const UINT D3D12_SHIFT_INSTRUCTION_PAD_VALUE = 0;
376const UINT D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5;
377const UINT D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
378const UINT D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 65536;
379const UINT D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT = 4096;
380const UINT D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048;
381const UINT D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 512;
382const UINT D3D12_SO_BUFFER_SLOT_COUNT = 4;
383const UINT D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff;
384const UINT D3D12_SO_NO_RASTERIZED_STREAM = 0xffffffff;
385const UINT D3D12_SO_OUTPUT_COMPONENT_COUNT = 128;
386const UINT D3D12_SO_STREAM_COUNT = 4;
387const UINT D3D12_SPEC_DATE_DAY = 14;
388const UINT D3D12_SPEC_DATE_MONTH = 11;
389const UINT D3D12_SPEC_DATE_YEAR = 2014;
390cpp_quote("#define D3D12_SPEC_VERSION ( 1.16 )")
391cpp_quote("#define D3D12_SRGB_GAMMA ( 2.2f )")
392cpp_quote("#define D3D12_SRGB_TO_FLOAT_DENOMINATOR_1 ( 12.92f )")
393cpp_quote("#define D3D12_SRGB_TO_FLOAT_DENOMINATOR_2 ( 1.055f )")
394cpp_quote("#define D3D12_SRGB_TO_FLOAT_EXPONENT ( 2.4f )")
395cpp_quote("#define D3D12_SRGB_TO_FLOAT_OFFSET ( 0.055f )")
396cpp_quote("#define D3D12_SRGB_TO_FLOAT_THRESHOLD ( 0.04045f )")
397cpp_quote("#define D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP ( 0.5f )")
398const UINT D3D12_STANDARD_COMPONENT_BIT_COUNT = 32;
399const UINT D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64;
400const UINT D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4;
401const UINT D3D12_STANDARD_PIXEL_COMPONENT_COUNT = 128;
402const UINT D3D12_STANDARD_PIXEL_ELEMENT_COUNT = 32;
403const UINT D3D12_STANDARD_VECTOR_SIZE = 4;
404const UINT D3D12_STANDARD_VERTEX_ELEMENT_COUNT = 32;
405const UINT D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64;
406const UINT D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8;
407const UINT D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT = 8;
408const UINT D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff;
409const UINT D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0;
410const UINT D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR = 64;
411const UINT D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR = 64;
412const UINT D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR = 63;
413const UINT D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR = 64;
414const UINT D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR = 2;
415const UINT D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR = 1;
416const UINT D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1;
417const UINT D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16;
418const UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256;
419const UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512;
420const UINT D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNMENT = 4096;
421const UINT D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNMENT = 8;
422const UINT D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 65536;
423const UINT D3D12_TRACKED_WORKLOAD_MAX_INSTANCES = 32;
424const UINT D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096;
425const UINT D3D12_UAV_SLOT_COUNT = 64;
426const UINT D3D12_UNBOUND_MEMORY_ACCESS_RESULT = 0;
427const UINT D3D12_VIDEO_DECODE_MAX_ARGUMENTS = 10;
428const UINT D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS = 4;
429const UINT D3D12_VIDEO_DECODE_MIN_BITSTREAM_OFFSET_ALIGNMENT = 256;
430const UINT D3D12_VIDEO_DECODE_MIN_HISTOGRAM_OFFSET_ALIGNMENT = 256;
431const UINT D3D12_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN = 0xffffffff;
432const UINT D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX = 0xFF;
433const UINT D3D12_VIDEO_ENCODER_AV1_MAX_TILE_COLS = 64;
434const UINT D3D12_VIDEO_ENCODER_AV1_MAX_TILE_ROWS = 64;
435const UINT D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN = 9;
436const UINT D3D12_VIDEO_ENCODER_AV1_SUPERRES_NUM = 8;
437const UINT D3D12_VIDEO_PROCESS_MAX_FILTERS = 32;
438const UINT D3D12_VIDEO_PROCESS_STEREO_VIEWS = 2;
439const UINT D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15;
440const UINT D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;
441const UINT D3D12_VIEWPORT_BOUNDS_MAX = 32767;
442const INT D3D12_VIEWPORT_BOUNDS_MIN = -32768;
443const UINT D3D12_VS_INPUT_REGISTER_COMPONENTS = 4;
444const UINT D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
445const UINT D3D12_VS_INPUT_REGISTER_COUNT = 32;
446const UINT D3D12_VS_INPUT_REGISTER_READS_PER_INST = 2;
447const UINT D3D12_VS_INPUT_REGISTER_READ_PORTS = 1;
448const UINT D3D12_VS_OUTPUT_REGISTER_COMPONENTS = 4;
449const UINT D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
450const UINT D3D12_VS_OUTPUT_REGISTER_COUNT = 32;
451const UINT D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10;
452const UINT D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25;
453const UINT D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25;
454const UINT D3D12_WORK_GRAPHS_BACKING_MEMORY_ALIGNMENT_IN_BYTES = 8;
455const UINT D3D12_WORK_GRAPHS_DISPATCH_MAX_THREAD_GROUPS_PER_GRID = 16777215;
456const UINT D3D12_WORK_GRAPHS_MAX_NODE_DEPTH = 32;
457cpp_quote("#endif")
458
459
460// Forward declarations
461interface ID3D12CommandQueue;
462
463
464typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
465
466typedef enum D3D12_COMMAND_LIST_TYPE
467{
468 D3D12_COMMAND_LIST_TYPE_DIRECT = 0,
469 D3D12_COMMAND_LIST_TYPE_BUNDLE = 1,
470 D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
471 D3D12_COMMAND_LIST_TYPE_COPY = 3,
472 D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE = 4,
473 D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS = 5,
474 D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE = 6,
475
476 D3D12_COMMAND_LIST_TYPE_NONE = -1,
477
478} D3D12_COMMAND_LIST_TYPE;
479
480typedef enum D3D12_COMMAND_QUEUE_FLAGS
481{
482 D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0,
483 D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1,
484 D3D12_COMMAND_QUEUE_FLAG_ALLOW_DYNAMIC_PRIORITY = 0x2,
485} D3D12_COMMAND_QUEUE_FLAGS;
486cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS )" )
487
488typedef enum D3D12_COMMAND_QUEUE_PRIORITY
489{
490 D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,
491 D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100,
492 D3D12_COMMAND_QUEUE_PRIORITY_GLOBAL_REALTIME = 10000
493} D3D12_COMMAND_QUEUE_PRIORITY;
494
495typedef struct D3D12_COMMAND_QUEUE_DESC
496{
497 D3D12_COMMAND_LIST_TYPE Type;
498 INT Priority;
499 D3D12_COMMAND_QUEUE_FLAGS Flags;
500 UINT NodeMask;
501} D3D12_COMMAND_QUEUE_DESC;
502
503typedef enum D3D12_PRIMITIVE_TOPOLOGY_TYPE
504{
505 D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
506 D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1,
507 D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2,
508 D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3,
509 D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4
510} D3D12_PRIMITIVE_TOPOLOGY_TYPE;
511
512typedef enum D3D12_INPUT_CLASSIFICATION
513{
514 D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0,
515 D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1
516} D3D12_INPUT_CLASSIFICATION;
517
518typedef struct D3D12_INPUT_ELEMENT_DESC
519{
520 LPCSTR SemanticName;
521 UINT SemanticIndex;
522 DXGI_FORMAT Format;
523 UINT InputSlot;
524 UINT AlignedByteOffset;
525 D3D12_INPUT_CLASSIFICATION InputSlotClass;
526 UINT InstanceDataStepRate;
527} D3D12_INPUT_ELEMENT_DESC;
528
529// Keep FILL_MODE values in sync with earlier DX versions (HW consumes values directly).
530typedef enum D3D12_FILL_MODE
531{
532 // 1 was POINT in D3D, unused in D3D12
533 D3D12_FILL_MODE_WIREFRAME = 2,
534 D3D12_FILL_MODE_SOLID = 3
535} D3D12_FILL_MODE;
536
537typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
538
539typedef D3D_PRIMITIVE D3D12_PRIMITIVE;
540
541// Keep CULL_MODE values in sync with earlier DX versions (HW consumes values directly).
542typedef enum D3D12_CULL_MODE
543{
544 D3D12_CULL_MODE_NONE = 1,
545 D3D12_CULL_MODE_FRONT = 2,
546 D3D12_CULL_MODE_BACK = 3
547} D3D12_CULL_MODE;
548
549typedef struct D3D12_SO_DECLARATION_ENTRY
550{
551 UINT Stream;
552 LPCSTR SemanticName;
553 UINT SemanticIndex;
554 BYTE StartComponent;
555 BYTE ComponentCount;
556 BYTE OutputSlot;
557} D3D12_SO_DECLARATION_ENTRY;
558
559typedef struct D3D12_VIEWPORT
560{
561 FLOAT TopLeftX;
562 FLOAT TopLeftY;
563 FLOAT Width;
564 FLOAT Height;
565 FLOAT MinDepth;
566 FLOAT MaxDepth;
567} D3D12_VIEWPORT;
568
569
570typedef RECT D3D12_RECT;
571
572
573typedef struct D3D12_BOX
574{
575 UINT left;
576 UINT top;
577 UINT front;
578 UINT right;
579 UINT bottom;
580 UINT back;
581} D3D12_BOX;
582
583//--------------------------------------------------------------------------------------------------------
584// The system LUID struct isn't defined in wtypes, so we repeat it here just
585// for the MIDL compiler.
586cpp_quote("#ifdef __midl")
587cpp_quote("#ifndef LUID_DEFINED")
588cpp_quote("#define LUID_DEFINED 1")
589typedef struct __LUID {
590 DWORD LowPart;
591 LONG HighPart;
592} LUID, * PLUID;
593cpp_quote("#endif")
594cpp_quote("#endif")
595
596
597////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
598//
599// Depth-Stencil State
600//
601////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
602
603// Keep COMPARISON_FUNC values in sync with earlier DX versions (HW consumes values directly).
604typedef enum D3D12_COMPARISON_FUNC
605{
606 D3D12_COMPARISON_FUNC_NONE = 0,
607 D3D12_COMPARISON_FUNC_NEVER = 1,
608 D3D12_COMPARISON_FUNC_LESS = 2,
609 D3D12_COMPARISON_FUNC_EQUAL = 3,
610 D3D12_COMPARISON_FUNC_LESS_EQUAL = 4,
611 D3D12_COMPARISON_FUNC_GREATER = 5,
612 D3D12_COMPARISON_FUNC_NOT_EQUAL = 6,
613 D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
614 D3D12_COMPARISON_FUNC_ALWAYS = 8
615} D3D12_COMPARISON_FUNC;
616
617typedef enum D3D12_DEPTH_WRITE_MASK
618{
619 D3D12_DEPTH_WRITE_MASK_ZERO = 0,
620 D3D12_DEPTH_WRITE_MASK_ALL = 1
621} D3D12_DEPTH_WRITE_MASK;
622
623// Keep STENCILOP values in sync with earlier DX versions (HW consumes values directly).
624typedef enum D3D12_STENCIL_OP
625{
626 D3D12_STENCIL_OP_KEEP = 1,
627 D3D12_STENCIL_OP_ZERO = 2,
628 D3D12_STENCIL_OP_REPLACE = 3,
629 D3D12_STENCIL_OP_INCR_SAT = 4,
630 D3D12_STENCIL_OP_DECR_SAT = 5,
631 D3D12_STENCIL_OP_INVERT = 6,
632 D3D12_STENCIL_OP_INCR = 7,
633 D3D12_STENCIL_OP_DECR = 8
634} D3D12_STENCIL_OP;
635
636typedef struct D3D12_DEPTH_STENCILOP_DESC
637{
638 D3D12_STENCIL_OP StencilFailOp;
639 D3D12_STENCIL_OP StencilDepthFailOp;
640 D3D12_STENCIL_OP StencilPassOp;
641 D3D12_COMPARISON_FUNC StencilFunc;
642} D3D12_DEPTH_STENCILOP_DESC;
643
644typedef struct D3D12_DEPTH_STENCIL_DESC
645{
646 BOOL DepthEnable;
647 D3D12_DEPTH_WRITE_MASK DepthWriteMask;
648 D3D12_COMPARISON_FUNC DepthFunc;
649 BOOL StencilEnable;
650 UINT8 StencilReadMask;
651 UINT8 StencilWriteMask;
652 D3D12_DEPTH_STENCILOP_DESC FrontFace;
653 D3D12_DEPTH_STENCILOP_DESC BackFace;
654} D3D12_DEPTH_STENCIL_DESC;
655
656typedef struct D3D12_DEPTH_STENCIL_DESC1
657{
658 BOOL DepthEnable;
659 D3D12_DEPTH_WRITE_MASK DepthWriteMask;
660 D3D12_COMPARISON_FUNC DepthFunc;
661 BOOL StencilEnable;
662 UINT8 StencilReadMask;
663 UINT8 StencilWriteMask;
664 D3D12_DEPTH_STENCILOP_DESC FrontFace;
665 D3D12_DEPTH_STENCILOP_DESC BackFace;
666 BOOL DepthBoundsTestEnable;
667} D3D12_DEPTH_STENCIL_DESC1;
668
669// Front/back face independent stencil masks
670typedef struct D3D12_DEPTH_STENCILOP_DESC1
671{
672 D3D12_STENCIL_OP StencilFailOp;
673 D3D12_STENCIL_OP StencilDepthFailOp;
674 D3D12_STENCIL_OP StencilPassOp;
675 D3D12_COMPARISON_FUNC StencilFunc;
676 UINT8 StencilReadMask;
677 UINT8 StencilWriteMask;
678} D3D12_DEPTH_STENCILOP_DESC1;
679
680typedef struct D3D12_DEPTH_STENCIL_DESC2
681{
682 BOOL DepthEnable;
683 D3D12_DEPTH_WRITE_MASK DepthWriteMask;
684 D3D12_COMPARISON_FUNC DepthFunc;
685 BOOL StencilEnable;
686 D3D12_DEPTH_STENCILOP_DESC1 FrontFace;
687 D3D12_DEPTH_STENCILOP_DESC1 BackFace;
688 BOOL DepthBoundsTestEnable;
689} D3D12_DEPTH_STENCIL_DESC2;
690
691
692////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
693//
694// Blend State
695//
696////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
697
698// Keep BLEND values in sync with earlier DX versions (HW consumes values directly).
699typedef enum D3D12_BLEND
700{
701 D3D12_BLEND_ZERO = 1,
702 D3D12_BLEND_ONE = 2,
703 D3D12_BLEND_SRC_COLOR = 3, // PS output oN.rgb (N is current RT being blended)
704 D3D12_BLEND_INV_SRC_COLOR = 4, // 1.0f - PS output oN.rgb
705 D3D12_BLEND_SRC_ALPHA = 5, // PS output oN.a
706 D3D12_BLEND_INV_SRC_ALPHA = 6, // 1.0f - PS output oN.a
707 D3D12_BLEND_DEST_ALPHA = 7, // RT(N).a (N is current RT being blended)
708 D3D12_BLEND_INV_DEST_ALPHA = 8, // 1.0f - RT(N).a
709 D3D12_BLEND_DEST_COLOR = 9, // RT(N).rgb
710 D3D12_BLEND_INV_DEST_COLOR = 10,// 1.0f - RT(N).rgb
711 D3D12_BLEND_SRC_ALPHA_SAT = 11,// (f,f,f,1), f = min(1 - RT(N).a, oN.a)
712 // 12 reserved (was BOTHSRCALPHA)
713 // 13 reserved (was BOTHSRCALPHA)
714 D3D12_BLEND_BLEND_FACTOR = 14,
715 D3D12_BLEND_INV_BLEND_FACTOR = 15,
716 D3D12_BLEND_SRC1_COLOR = 16, // PS output o1.rgb
717 D3D12_BLEND_INV_SRC1_COLOR = 17, // 1.0f - PS output o1.rgb
718 D3D12_BLEND_SRC1_ALPHA = 18, // PS output o1.a
719 D3D12_BLEND_INV_SRC1_ALPHA = 19, // 1.0f - PS output o1.a
720 D3D12_BLEND_ALPHA_FACTOR = 20,
721 D3D12_BLEND_INV_ALPHA_FACTOR = 21
722} D3D12_BLEND;
723
724// Keep BLENDOP values in sync with earlier DX versions (HW consumes values directly).
725typedef enum D3D12_BLEND_OP
726{
727 D3D12_BLEND_OP_ADD = 1,
728 D3D12_BLEND_OP_SUBTRACT = 2,
729 D3D12_BLEND_OP_REV_SUBTRACT = 3,
730 D3D12_BLEND_OP_MIN = 4, // min semantics are like min shader instruction
731 D3D12_BLEND_OP_MAX = 5, // max semantics are like max shader instruction
732} D3D12_BLEND_OP;
733
734typedef enum D3D12_COLOR_WRITE_ENABLE
735{
736 D3D12_COLOR_WRITE_ENABLE_RED = 1,
737 D3D12_COLOR_WRITE_ENABLE_GREEN = 2,
738 D3D12_COLOR_WRITE_ENABLE_BLUE = 4,
739 D3D12_COLOR_WRITE_ENABLE_ALPHA = 8,
740 D3D12_COLOR_WRITE_ENABLE_ALL = (D3D12_COLOR_WRITE_ENABLE_RED|D3D12_COLOR_WRITE_ENABLE_GREEN|
741 D3D12_COLOR_WRITE_ENABLE_BLUE|D3D12_COLOR_WRITE_ENABLE_ALPHA),
742} D3D12_COLOR_WRITE_ENABLE;
743
744typedef enum D3D12_LOGIC_OP
745{
746 // Operation:
747 // (s == PS output, d = RTV contents)
748 D3D12_LOGIC_OP_CLEAR = 0, // 0
749 D3D12_LOGIC_OP_SET, // 1
750 D3D12_LOGIC_OP_COPY, // s
751 D3D12_LOGIC_OP_COPY_INVERTED, // ~s
752 D3D12_LOGIC_OP_NOOP, // d
753 D3D12_LOGIC_OP_INVERT, // ~d
754 D3D12_LOGIC_OP_AND, // s & d
755 D3D12_LOGIC_OP_NAND, // ~(s & d)
756 D3D12_LOGIC_OP_OR, // s | d
757 D3D12_LOGIC_OP_NOR, // ~(s | d)
758 D3D12_LOGIC_OP_XOR, // s ^ d
759 D3D12_LOGIC_OP_EQUIV, // ~(s ^ d)
760 D3D12_LOGIC_OP_AND_REVERSE, // s & ~d
761 D3D12_LOGIC_OP_AND_INVERTED, // ~s & d
762 D3D12_LOGIC_OP_OR_REVERSE, // s | ~d
763 D3D12_LOGIC_OP_OR_INVERTED, // ~s | d
764} D3D12_LOGIC_OP;
765
766typedef struct D3D12_RENDER_TARGET_BLEND_DESC
767{
768 BOOL BlendEnable;
769 BOOL LogicOpEnable; // LogicOpEnable and BlendEnable can't both be true
770 D3D12_BLEND SrcBlend;
771 D3D12_BLEND DestBlend;
772 D3D12_BLEND_OP BlendOp;
773 D3D12_BLEND SrcBlendAlpha;
774 D3D12_BLEND DestBlendAlpha;
775 D3D12_BLEND_OP BlendOpAlpha;
776 D3D12_LOGIC_OP LogicOp; // applies to RGBA
777 UINT8 RenderTargetWriteMask; // D3D12_COLOR_WRITE_ENABLE
778} D3D12_RENDER_TARGET_BLEND_DESC;
779
780typedef struct D3D12_BLEND_DESC
781{
782 BOOL AlphaToCoverageEnable; // relevant to multisample antialiasing only
783 BOOL IndependentBlendEnable; // if FALSE, then replicate the first entry in RenderTarget array to other entries
784 D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT];
785} D3D12_BLEND_DESC;
786
787cpp_quote( "/* Note, the array size for RenderTarget[] above is D3D12_SIMULTANEOUS_RENDERTARGET_COUNT. ")
788cpp_quote( " IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */" )
789
790
791////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
792//
793// Rasterizer State
794//
795////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
796
797typedef enum D3D12_CONSERVATIVE_RASTERIZATION_MODE
798{
799 D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0, // Default
800 D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1,
801} D3D12_CONSERVATIVE_RASTERIZATION_MODE;
802
803typedef struct D3D12_RASTERIZER_DESC
804{
805 D3D12_FILL_MODE FillMode;
806 D3D12_CULL_MODE CullMode;
807 BOOL FrontCounterClockwise;
808 INT DepthBias;
809 FLOAT DepthBiasClamp;
810 FLOAT SlopeScaledDepthBias;
811 BOOL DepthClipEnable;
812 BOOL MultisampleEnable;
813 BOOL AntialiasedLineEnable;
814 UINT ForcedSampleCount;
815 D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
816} D3D12_RASTERIZER_DESC;
817
818typedef struct D3D12_RASTERIZER_DESC1
819{
820 D3D12_FILL_MODE FillMode;
821 D3D12_CULL_MODE CullMode;
822 BOOL FrontCounterClockwise;
823 FLOAT DepthBias;
824 FLOAT DepthBiasClamp;
825 FLOAT SlopeScaledDepthBias;
826 BOOL DepthClipEnable;
827 BOOL MultisampleEnable;
828 BOOL AntialiasedLineEnable;
829 UINT ForcedSampleCount;
830 D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
831} D3D12_RASTERIZER_DESC1;
832
833typedef enum D3D12_LINE_RASTERIZATION_MODE
834{
835 D3D12_LINE_RASTERIZATION_MODE_ALIASED,
836 D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED,
837 D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE,
838 D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_NARROW,
839} D3D12_LINE_RASTERIZATION_MODE;
840
841typedef struct D3D12_RASTERIZER_DESC2
842{
843 D3D12_FILL_MODE FillMode;
844 D3D12_CULL_MODE CullMode;
845 BOOL FrontCounterClockwise;
846 FLOAT DepthBias;
847 FLOAT DepthBiasClamp;
848 FLOAT SlopeScaledDepthBias;
849 BOOL DepthClipEnable;
850 D3D12_LINE_RASTERIZATION_MODE LineRasterizationMode;
851 UINT ForcedSampleCount;
852 D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
853} D3D12_RASTERIZER_DESC2;
854
855////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
856//
857// Pipeline State v1
858//
859////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
860
861[ uuid( c54a6b66-72df-4ee8-8be5-a946a1429214 ), object, local, pointer_default( unique ) ]
862interface ID3D12RootSignature
863 : ID3D12DeviceChild
864{
865}
866
867typedef struct D3D12_SHADER_BYTECODE
868{
869 [annotation("_Field_size_bytes_full_(BytecodeLength)")] const void* pShaderBytecode;
870 SIZE_T BytecodeLength;
871} D3D12_SHADER_BYTECODE;
872
873typedef struct D3D12_STREAM_OUTPUT_DESC
874{
875 [annotation("_Field_size_full_(NumEntries)")] const D3D12_SO_DECLARATION_ENTRY* pSODeclaration;
876 UINT NumEntries;
877 [annotation("_Field_size_full_(NumStrides)")] const UINT* pBufferStrides;
878 UINT NumStrides;
879 UINT RasterizedStream;
880} D3D12_STREAM_OUTPUT_DESC;
881
882typedef struct D3D12_INPUT_LAYOUT_DESC
883{
884 [annotation("_Field_size_full_(NumElements)")] const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs;
885 UINT NumElements;
886} D3D12_INPUT_LAYOUT_DESC;
887
888typedef enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE
889{
890 D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0,
891 D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1,
892 D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2
893} D3D12_INDEX_BUFFER_STRIP_CUT_VALUE;
894
895typedef enum D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS
896{
897 D3D12_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff,
898 D3D12_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe
899} D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS;
900
901typedef struct D3D12_CACHED_PIPELINE_STATE
902{
903 [annotation("_Field_size_bytes_full_(CachedBlobSizeInBytes)")] const void* pCachedBlob;
904 SIZE_T CachedBlobSizeInBytes;
905} D3D12_CACHED_PIPELINE_STATE;
906
907typedef enum D3D12_PIPELINE_STATE_FLAGS
908{
909 D3D12_PIPELINE_STATE_FLAG_NONE = 0x0,
910 D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG = 0x1,
911 D3D12_PIPELINE_STATE_FLAG_DYNAMIC_DEPTH_BIAS = 0x4,
912 D3D12_PIPELINE_STATE_FLAG_DYNAMIC_INDEX_BUFFER_STRIP_CUT = 0x8,
913
914} D3D12_PIPELINE_STATE_FLAGS;
915cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_PIPELINE_STATE_FLAGS )" )
916
917typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC
918{
919 ID3D12RootSignature* pRootSignature;
920 D3D12_SHADER_BYTECODE VS;
921 D3D12_SHADER_BYTECODE PS;
922 D3D12_SHADER_BYTECODE DS;
923 D3D12_SHADER_BYTECODE HS;
924 D3D12_SHADER_BYTECODE GS;
925 D3D12_STREAM_OUTPUT_DESC StreamOutput;
926 D3D12_BLEND_DESC BlendState;
927 UINT SampleMask;
928 D3D12_RASTERIZER_DESC RasterizerState;
929 D3D12_DEPTH_STENCIL_DESC DepthStencilState;
930 D3D12_INPUT_LAYOUT_DESC InputLayout;
931 D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;
932 D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;
933 UINT NumRenderTargets;
934 DXGI_FORMAT RTVFormats[ D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ];
935 DXGI_FORMAT DSVFormat;
936 DXGI_SAMPLE_DESC SampleDesc;
937 UINT NodeMask;
938 D3D12_CACHED_PIPELINE_STATE CachedPSO;
939 D3D12_PIPELINE_STATE_FLAGS Flags;
940} D3D12_GRAPHICS_PIPELINE_STATE_DESC;
941
942typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC
943{
944 ID3D12RootSignature* pRootSignature;
945 D3D12_SHADER_BYTECODE CS;
946 UINT NodeMask;
947 D3D12_CACHED_PIPELINE_STATE CachedPSO;
948 D3D12_PIPELINE_STATE_FLAGS Flags;
949} D3D12_COMPUTE_PIPELINE_STATE_DESC;
950
951////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
952//
953// Serialized Root Signature
954//
955////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
956typedef enum D3D_ROOT_SIGNATURE_VERSION
957{
958 D3D_ROOT_SIGNATURE_VERSION_1 = 0x1,
959 D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1,
960 D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2,
961 D3D_ROOT_SIGNATURE_VERSION_1_2 = 0x3,
962} D3D_ROOT_SIGNATURE_VERSION;
963
964typedef struct D3D12_SERIALIZED_ROOT_SIGNATURE_DESC
965{
966 [annotation("_Field_size_bytes_full_(SerializedBlobSizeInBytes)")] const void* pSerializedBlob;
967 SIZE_T SerializedBlobSizeInBytes;
968} D3D12_SERIALIZED_ROOT_SIGNATURE_DESC;
969
970typedef struct D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE
971{
972 D3D12_SERIALIZED_ROOT_SIGNATURE_DESC Desc;
973} D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE;
974
975typedef struct D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE
976{
977 D3D12_SERIALIZED_ROOT_SIGNATURE_DESC Desc;
978} D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE;
979
980////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
981//
982// Pipeline State v2
983//
984////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
985
986struct D3D12_RT_FORMAT_ARRAY
987{
988 DXGI_FORMAT RTFormats[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT];
989 UINT NumRenderTargets;
990};
991
992typedef struct D3D12_PIPELINE_STATE_STREAM_DESC
993{
994 [annotation("_In_")] SIZE_T SizeInBytes;
995 [annotation("_In_reads_(_Inexpressible_(\"Dependent on size of subobjects\"))")] void* pPipelineStateSubobjectStream;
996} D3D12_PIPELINE_STATE_STREAM_DESC;
997
998typedef enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE
999{
1000 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE, // ID3D12RootSignature*
1001 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS, // D3D12_SHADER_BYTECODE
1002 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS, // D3D12_SHADER_BYTECODE
1003 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS, // D3D12_SHADER_BYTECODE
1004 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS, // D3D12_SHADER_BYTECODE
1005 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS, // D3D12_SHADER_BYTECODE
1006 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS, // D3D12_SHADER_BYTECODE
1007 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT, // D3D12_STREAM_OUTPUT_DESC
1008 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, // D3D12_BLEND_DESC
1009 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, // UINT
1010 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, // D3D12_RASTERIZER_DESC
1011 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, // D3D12_DEPTH_STENCIL_DESC
1012 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT, // D3D12_INPUT_LAYOUT_DESC
1013 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE, // D3D12_INDEX_BUFFER_STRIP_CUT_VALUE
1014 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY, // D3D12_PRIMITIVE_TOPOLOGY_TYPE
1015 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS, // D3D12_RT_FORMAT_ARRAY
1016 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT, // DXGI_FORMAT
1017 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, // DXGI_SAMPLE_DESC
1018 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK, // UINT
1019 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO, // D3D12_CACHED_PIPELINE_STATE
1020 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS, // D3D12_PIPELINE_STATE_FLAGS
1021 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, // D3D12_DEPTH_STENCIL_DESC1
1022 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, // D3D12_VIEW_INSTANCING_DESC
1023 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS = 24, // D3D12_SHADER_BYTECODE
1024 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS = 25, // D3D12_SHADER_BYTECODE
1025 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 26, // D3D12_DEPTH_STENCIL_DESC2
1026 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1 = 27, // D3D12_RASTERIZER_DESC1
1027 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2 = 28, // D3D12_RASTERIZER_DESC2
1028 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE = 29, // D3D12_SERIALIZED_ROOT_SIGNATURE_DESC
1029 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID,
1030} D3D12_PIPELINE_STATE_SUBOBJECT_TYPE;
1031
1032////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1033//
1034// D3D12 Caps
1035//
1036////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1037
1038typedef enum D3D12_FEATURE
1039{
1040 D3D12_FEATURE_D3D12_OPTIONS = 0,
1041 D3D12_FEATURE_ARCHITECTURE = 1, // Deprecated by D3D12_FEATURE_ARCHITECTURE1
1042 D3D12_FEATURE_FEATURE_LEVELS = 2,
1043 D3D12_FEATURE_FORMAT_SUPPORT = 3,
1044 D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS = 4,
1045 D3D12_FEATURE_FORMAT_INFO = 5,
1046 D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 6,
1047 D3D12_FEATURE_SHADER_MODEL = 7,
1048 D3D12_FEATURE_D3D12_OPTIONS1 = 8,
1049 D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_SUPPORT = 10,
1050 D3D12_FEATURE_ROOT_SIGNATURE = 12,
1051 D3D12_FEATURE_ARCHITECTURE1 = 16,
1052 D3D12_FEATURE_D3D12_OPTIONS2 = 18,
1053 D3D12_FEATURE_SHADER_CACHE = 19,
1054 D3D12_FEATURE_COMMAND_QUEUE_PRIORITY = 20,
1055 D3D12_FEATURE_D3D12_OPTIONS3 = 21,
1056 D3D12_FEATURE_EXISTING_HEAPS = 22,
1057 D3D12_FEATURE_D3D12_OPTIONS4 = 23,
1058 D3D12_FEATURE_SERIALIZATION = 24,
1059 D3D12_FEATURE_CROSS_NODE = 25,
1060 D3D12_FEATURE_D3D12_OPTIONS5 = 27,
1061 D3D12_FEATURE_DISPLAYABLE = 28,
1062 D3D12_FEATURE_D3D12_OPTIONS6 = 30,
1063 D3D12_FEATURE_QUERY_META_COMMAND = 31,
1064 D3D12_FEATURE_D3D12_OPTIONS7 = 32,
1065 D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT = 33,
1066 D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES = 34,
1067 D3D12_FEATURE_D3D12_OPTIONS8 = 36,
1068 D3D12_FEATURE_D3D12_OPTIONS9 = 37,
1069 D3D12_FEATURE_D3D12_OPTIONS10 = 39,
1070 D3D12_FEATURE_D3D12_OPTIONS11 = 40,
1071 D3D12_FEATURE_D3D12_OPTIONS12 = 41,
1072 D3D12_FEATURE_D3D12_OPTIONS13 = 42,
1073 D3D12_FEATURE_D3D12_OPTIONS14 = 43,
1074 D3D12_FEATURE_D3D12_OPTIONS15 = 44,
1075 D3D12_FEATURE_D3D12_OPTIONS16 = 45,
1076 D3D12_FEATURE_D3D12_OPTIONS17 = 46,
1077 D3D12_FEATURE_D3D12_OPTIONS18 = 47,
1078 D3D12_FEATURE_D3D12_OPTIONS19 = 48,
1079 D3D12_FEATURE_D3D12_OPTIONS20 = 49,
1080 D3D12_FEATURE_PREDICATION = 50,
1081 D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO = 51,
1082 D3D12_FEATURE_HARDWARE_COPY = 52,
1083 D3D12_FEATURE_D3D12_OPTIONS21 = 53,
1084 D3D12_FEATURE_D3D12_TIGHT_ALIGNMENT = 54,
1085 D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE = 56,
1086 D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED = 57,
1087 D3D12_FEATURE_SHADER_CACHE_ABI_SUPPORT = 61,
1088
1089} D3D12_FEATURE;
1090
1091typedef enum D3D12_SHADER_MIN_PRECISION_SUPPORT
1092{
1093 D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0x0,
1094 D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,
1095 D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2
1096} D3D12_SHADER_MIN_PRECISION_SUPPORT;
1097cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_MIN_PRECISION_SUPPORT )" )
1098
1099typedef enum D3D12_TILED_RESOURCES_TIER
1100{
1101 D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,
1102 D3D12_TILED_RESOURCES_TIER_1 = 1,
1103 D3D12_TILED_RESOURCES_TIER_2 = 2,
1104 D3D12_TILED_RESOURCES_TIER_3 = 3,
1105 D3D12_TILED_RESOURCES_TIER_4 = 4,
1106} D3D12_TILED_RESOURCES_TIER;
1107
1108typedef enum D3D12_RESOURCE_BINDING_TIER
1109{
1110 D3D12_RESOURCE_BINDING_TIER_1 = 1,
1111 D3D12_RESOURCE_BINDING_TIER_2 = 2,
1112 D3D12_RESOURCE_BINDING_TIER_3 = 3,
1113} D3D12_RESOURCE_BINDING_TIER;
1114
1115typedef enum D3D12_CONSERVATIVE_RASTERIZATION_TIER {
1116 D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,
1117 D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,
1118 D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,
1119 D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3,
1120} D3D12_CONSERVATIVE_RASTERIZATION_TIER;
1121
1122
1123typedef enum D3D12_FORMAT_SUPPORT1
1124{
1125 D3D12_FORMAT_SUPPORT1_NONE = 0,
1126 D3D12_FORMAT_SUPPORT1_BUFFER = 0x00000001,
1127 D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x00000002,
1128 D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x00000004,
1129 D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x00000008,
1130 D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x00000010,
1131 D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x00000020,
1132 D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x00000040,
1133 D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x00000080,
1134 D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x00000100,
1135 D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x00000200,
1136 D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x00000400,
1137 D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x00000800,
1138 D3D12_FORMAT_SUPPORT1_MIP = 0x00001000,
1139 D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x00004000,
1140 D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x00008000,
1141 D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x00010000,
1142 D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x00040000,
1143 D3D12_FORMAT_SUPPORT1_DISPLAY = 0x00080000,
1144 D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x00100000,
1145 D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x00200000,
1146 D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x00400000,
1147 D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x00800000,
1148 D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x01000000,
1149 D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000,
1150 D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x04000000,
1151 D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x08000000,
1152 D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000,
1153 D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000,
1154 D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000,
1155} D3D12_FORMAT_SUPPORT1;
1156cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 )" )
1157
1158typedef enum D3D12_FORMAT_SUPPORT2
1159{
1160 D3D12_FORMAT_SUPPORT2_NONE = 0,
1161 D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x00000001,
1162 D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x00000002,
1163 D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x00000004,
1164 D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x00000008,
1165 D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x00000010,
1166 D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x00000020,
1167 D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x00000040,
1168 D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x00000080,
1169 D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x00000100,
1170 D3D12_FORMAT_SUPPORT2_TILED = 0x00000200,
1171 D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x00004000,
1172 D3D12_FORMAT_SUPPORT2_SAMPLER_FEEDBACK = 0x00008000,
1173 D3D12_FORMAT_SUPPORT2_DISPLAYABLE = 0x00010000,
1174} D3D12_FORMAT_SUPPORT2;
1175cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 )" )
1176
1177typedef enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS
1178{
1179 D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE = 0,
1180 D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x00000001,
1181} D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS;
1182cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS )" )
1183
1184typedef enum D3D12_CROSS_NODE_SHARING_TIER
1185{
1186 D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,
1187 D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1,
1188 D3D12_CROSS_NODE_SHARING_TIER_1 = 2,
1189 D3D12_CROSS_NODE_SHARING_TIER_2 = 3,
1190 D3D12_CROSS_NODE_SHARING_TIER_3 = 4,
1191} D3D12_CROSS_NODE_SHARING_TIER;
1192
1193typedef enum D3D12_RESOURCE_HEAP_TIER
1194{
1195 D3D12_RESOURCE_HEAP_TIER_1 = 1,
1196 D3D12_RESOURCE_HEAP_TIER_2 = 2,
1197} D3D12_RESOURCE_HEAP_TIER;
1198
1199typedef enum D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER
1200{
1201 D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED = 0,
1202 D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 = 1,
1203 D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2 = 2,
1204} D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER;
1205
1206typedef enum D3D12_VIEW_INSTANCING_TIER
1207{
1208 D3D12_VIEW_INSTANCING_TIER_NOT_SUPPORTED = 0,
1209 D3D12_VIEW_INSTANCING_TIER_1 = 1,
1210 D3D12_VIEW_INSTANCING_TIER_2 = 2,
1211 D3D12_VIEW_INSTANCING_TIER_3 = 3,
1212} D3D12_VIEW_INSTANCING_TIER;
1213
1214
1215typedef enum D3D12_WORK_GRAPHS_TIER {
1216 D3D12_WORK_GRAPHS_TIER_NOT_SUPPORTED = 0,
1217 D3D12_WORK_GRAPHS_TIER_1_0 = 10,
1218} D3D12_WORK_GRAPHS_TIER;
1219
1220
1221// D3D12_FEATURE_D3D12_OPTIONS
1222typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS
1223{
1224 [annotation("_Out_")] BOOL DoublePrecisionFloatShaderOps;
1225 [annotation("_Out_")] BOOL OutputMergerLogicOp;
1226 [annotation("_Out_")] D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;
1227 [annotation("_Out_")] D3D12_TILED_RESOURCES_TIER TiledResourcesTier;
1228 [annotation("_Out_")] D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;
1229 [annotation("_Out_")] BOOL PSSpecifiedStencilRefSupported;
1230 [annotation("_Out_")] BOOL TypedUAVLoadAdditionalFormats;
1231 [annotation("_Out_")] BOOL ROVsSupported;
1232 [annotation("_Out_")] D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
1233 [annotation("_Out_")] UINT MaxGPUVirtualAddressBitsPerResource;
1234 [annotation("_Out_")] BOOL StandardSwizzle64KBSupported;
1235 [annotation("_Out_")] D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;
1236 [annotation("_Out_")] BOOL CrossAdapterRowMajorTextureSupported;
1237 [annotation("_Out_")] BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
1238 [annotation("_Out_")] D3D12_RESOURCE_HEAP_TIER ResourceHeapTier;
1239} D3D12_FEATURE_DATA_D3D12_OPTIONS;
1240
1241// D3D12_FEATURE_D3D12_OPTIONS1
1242typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS1
1243{
1244 [annotation("_Out_")] BOOL WaveOps;
1245 [annotation("_Out_")] UINT WaveLaneCountMin;
1246 [annotation("_Out_")] UINT WaveLaneCountMax;
1247 [annotation("_Out_")] UINT TotalLaneCount;
1248 [annotation("_Out_")] BOOL ExpandedComputeResourceStates;
1249 [annotation("_Out_")] BOOL Int64ShaderOps;
1250} D3D12_FEATURE_DATA_D3D12_OPTIONS1;
1251
1252// D3D12_FEATURE_D3D12_OPTIONS2
1253typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS2
1254{
1255 [annotation("_Out_")] BOOL DepthBoundsTestSupported;
1256 [annotation("_Out_")] D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier;
1257} D3D12_FEATURE_DATA_D3D12_OPTIONS2;
1258
1259// D3D12_FEATURE_ROOT_SIGNATURE
1260typedef struct D3D12_FEATURE_DATA_ROOT_SIGNATURE
1261{
1262 [annotation("_Inout_")] D3D_ROOT_SIGNATURE_VERSION HighestVersion;
1263} D3D12_FEATURE_DATA_ROOT_SIGNATURE;
1264
1265// D3D12_FEATURE_ARCHITECTURE
1266typedef struct D3D12_FEATURE_DATA_ARCHITECTURE // Deprecated by D3D12_FEATURE_DATA_ARCHITECTURE1
1267{
1268 [annotation("_In_")] UINT NodeIndex;
1269 [annotation("_Out_")] BOOL TileBasedRenderer;
1270 [annotation("_Out_")] BOOL UMA; // Needed for applications to understand WRITE_COMBINE
1271 [annotation("_Out_")] BOOL CacheCoherentUMA; // Only TRUE when UMA is also TRUE
1272} D3D12_FEATURE_DATA_ARCHITECTURE;
1273
1274// D3D12_FEATURE_ARCHITECTURE1
1275typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1
1276{
1277 [annotation("_In_")] UINT NodeIndex;
1278 [annotation("_Out_")] BOOL TileBasedRenderer;
1279 [annotation("_Out_")] BOOL UMA; // Needed for applications to understand WRITE_COMBINE
1280 [annotation("_Out_")] BOOL CacheCoherentUMA; // Only TRUE when UMA is also TRUE
1281 [annotation("_Out_")] BOOL IsolatedMMU; // GPU accesses don't honor the same MMU functionality as the CPU
1282} D3D12_FEATURE_DATA_ARCHITECTURE1;
1283
1284// D3D12_FEATURE_FEATURE_LEVELS
1285typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS
1286{
1287 [annotation("_In_")] UINT NumFeatureLevels;
1288 [annotation("_In_reads_(NumFeatureLevels)")] const D3D_FEATURE_LEVEL* pFeatureLevelsRequested;
1289 [annotation("_Out_")] D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;
1290} D3D12_FEATURE_DATA_FEATURE_LEVELS;
1291
1292// D3D_SHADER_MODEL
1293typedef enum D3D_SHADER_MODEL
1294{
1295 D3D_SHADER_MODEL_NONE = 0x0, // e.g MCDM Generic devices
1296 D3D_SHADER_MODEL_5_1 = 0x51,
1297 D3D_SHADER_MODEL_6_0 = 0x60,
1298 D3D_SHADER_MODEL_6_1 = 0x61,
1299 D3D_SHADER_MODEL_6_2 = 0x62,
1300 D3D_SHADER_MODEL_6_3 = 0x63,
1301 D3D_SHADER_MODEL_6_4 = 0x64,
1302 D3D_SHADER_MODEL_6_5 = 0x65,
1303 D3D_SHADER_MODEL_6_6 = 0x66,
1304 D3D_SHADER_MODEL_6_7 = 0x67,
1305 D3D_SHADER_MODEL_6_8 = 0x68,
1306 D3D_SHADER_MODEL_6_9 = 0x69,
1307 D3D_HIGHEST_SHADER_MODEL = D3D_SHADER_MODEL_6_9
1308} D3D_SHADER_MODEL;
1309
1310typedef struct D3D12_FEATURE_DATA_SHADER_MODEL
1311{
1312 [annotation("_Inout_")] D3D_SHADER_MODEL HighestShaderModel;
1313} D3D12_FEATURE_DATA_SHADER_MODEL;
1314
1315// D3D12_FEATURE_FORMAT_SUPPORT
1316typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT
1317{
1318 [annotation("_In_")] DXGI_FORMAT Format;
1319 [annotation("_Out_")] D3D12_FORMAT_SUPPORT1 Support1;
1320 [annotation("_Out_")] D3D12_FORMAT_SUPPORT2 Support2;
1321} D3D12_FEATURE_DATA_FORMAT_SUPPORT;
1322
1323// D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS
1324typedef struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS
1325{
1326 [annotation("_In_")] DXGI_FORMAT Format;
1327 [annotation("_In_")] UINT SampleCount;
1328 [annotation("_In_")] D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags;
1329 [annotation("_Out_")] UINT NumQualityLevels;
1330} D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS;
1331
1332// D3D12_FEATURE_FORMAT_INFO
1333typedef struct D3D12_FEATURE_DATA_FORMAT_INFO
1334{
1335 DXGI_FORMAT Format;
1336 UINT8 PlaneCount;
1337} D3D12_FEATURE_DATA_FORMAT_INFO;
1338
1339// D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT
1340typedef struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT
1341{
1342 UINT MaxGPUVirtualAddressBitsPerResource;
1343 UINT MaxGPUVirtualAddressBitsPerProcess;
1344} D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT;
1345
1346
1347typedef enum D3D12_SHADER_CACHE_SUPPORT_FLAGS
1348{
1349 D3D12_SHADER_CACHE_SUPPORT_NONE = 0x0,
1350 D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO = 0x1, // Always supported
1351 D3D12_SHADER_CACHE_SUPPORT_LIBRARY = 0x2,
1352 D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x4,
1353 D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x8,
1354 D3D12_SHADER_CACHE_SUPPORT_DRIVER_MANAGED_CACHE = 0x10,
1355 D3D12_SHADER_CACHE_SUPPORT_SHADER_CONTROL_CLEAR = 0x20,
1356 D3D12_SHADER_CACHE_SUPPORT_SHADER_SESSION_DELETE = 0x40
1357} D3D12_SHADER_CACHE_SUPPORT_FLAGS;
1358cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_SUPPORT_FLAGS )" )
1359
1360// D3D12_FEATURE_SHADER_CACHE
1361typedef struct D3D12_FEATURE_DATA_SHADER_CACHE
1362{
1363 [annotation("_Out_")] D3D12_SHADER_CACHE_SUPPORT_FLAGS SupportFlags;
1364} D3D12_FEATURE_DATA_SHADER_CACHE;
1365
1366// D3D12_FEATURE_COMMAND_QUEUE_PRIORITY
1367typedef struct D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY
1368{
1369 [annotation("_In_")] D3D12_COMMAND_LIST_TYPE CommandListType;
1370 [annotation("_In_")] UINT Priority;
1371 [annotation("_Out_")] BOOL PriorityForTypeIsSupported;
1372} D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY;
1373
1374typedef enum D3D12_COMMAND_LIST_SUPPORT_FLAGS
1375{
1376 D3D12_COMMAND_LIST_SUPPORT_FLAG_NONE = 0x00000000,
1377 D3D12_COMMAND_LIST_SUPPORT_FLAG_DIRECT = 1 << D3D12_COMMAND_LIST_TYPE_DIRECT,
1378 D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE = 1 << D3D12_COMMAND_LIST_TYPE_BUNDLE,
1379 D3D12_COMMAND_LIST_SUPPORT_FLAG_COMPUTE = 1 << D3D12_COMMAND_LIST_TYPE_COMPUTE,
1380 D3D12_COMMAND_LIST_SUPPORT_FLAG_COPY = 1 << D3D12_COMMAND_LIST_TYPE_COPY,
1381 D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_DECODE = 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE,
1382 D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_PROCESS = 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS,
1383 D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_ENCODE = 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE,
1384
1385} D3D12_COMMAND_LIST_SUPPORT_FLAGS;
1386cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS )")
1387
1388// D3D12_FEATURE_D3D12_OPTIONS3
1389typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS3
1390{
1391 [annotation("_Out_")] BOOL CopyQueueTimestampQueriesSupported;
1392 [annotation("_Out_")] BOOL CastingFullyTypedFormatSupported;
1393 [annotation("_Out_")] D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags;
1394 [annotation("_Out_")] D3D12_VIEW_INSTANCING_TIER ViewInstancingTier;
1395 [annotation("_Out_")] BOOL BarycentricsSupported;
1396} D3D12_FEATURE_DATA_D3D12_OPTIONS3;
1397
1398// D3D12_FEATURE_EXISTING_HEAPS
1399typedef struct D3D12_FEATURE_DATA_EXISTING_HEAPS
1400{
1401 [annotation("_Out_")] BOOL Supported;
1402} D3D12_FEATURE_DATA_EXISTING_HEAPS;
1403
1404typedef enum D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER
1405{
1406 D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_0,
1407 D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_1,
1408 D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_2,
1409} D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER;
1410
1411typedef struct D3D12_FEATURE_DATA_DISPLAYABLE
1412{
1413 [annotation("_Out_")] BOOL DisplayableTexture;
1414 [annotation("_Out_")] D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier;
1415} D3D12_FEATURE_DATA_DISPLAYABLE;
1416
1417// D3D12_FEATURE_D3D12_OPTIONS4
1418typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS4
1419{
1420 [annotation("_Out_")] BOOL MSAA64KBAlignedTextureSupported;
1421 [annotation("_Out_")] D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier;
1422 [annotation("_Out_")] BOOL Native16BitShaderOpsSupported;
1423} D3D12_FEATURE_DATA_D3D12_OPTIONS4;
1424
1425typedef enum D3D12_HEAP_SERIALIZATION_TIER
1426{
1427 D3D12_HEAP_SERIALIZATION_TIER_0 = 0,
1428 D3D12_HEAP_SERIALIZATION_TIER_10 = 10,
1429} D3D12_HEAP_SERIALIZATION_TIER;
1430
1431// D3D12_FEATURE_SERIALIZATION
1432typedef struct D3D12_FEATURE_DATA_SERIALIZATION
1433{
1434 [annotation("_In_")] UINT NodeIndex;
1435 [annotation("_Out_")] D3D12_HEAP_SERIALIZATION_TIER HeapSerializationTier;
1436} D3D12_FEATURE_DATA_SERIALIZATION;
1437
1438// D3D12_FEATURE_CROSS_NODE
1439typedef struct D3D12_FEATURE_DATA_CROSS_NODE
1440{
1441 D3D12_CROSS_NODE_SHARING_TIER SharingTier;
1442 BOOL AtomicShaderInstructions;
1443} D3D12_FEATURE_DATA_CROSS_NODE;
1444
1445
1446typedef enum D3D12_RENDER_PASS_TIER
1447{
1448 D3D12_RENDER_PASS_TIER_0 = 0,
1449 D3D12_RENDER_PASS_TIER_1 = 1,
1450 D3D12_RENDER_PASS_TIER_2 = 2,
1451
1452
1453} D3D12_RENDER_PASS_TIER;
1454
1455typedef enum D3D12_RAYTRACING_TIER
1456{
1457 D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0,
1458 D3D12_RAYTRACING_TIER_1_0 = 10,
1459 D3D12_RAYTRACING_TIER_1_1 = 11,
1460 D3D12_RAYTRACING_TIER_1_2 = 12,
1461} D3D12_RAYTRACING_TIER;
1462
1463// D3D12_FEATURE_D3D12_OPTIONS5
1464typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5
1465{
1466 [annotation("_Out_")] BOOL SRVOnlyTiledResourceTier3;
1467 [annotation("_Out_")] D3D12_RENDER_PASS_TIER RenderPassesTier;
1468 [annotation("_Out_")] D3D12_RAYTRACING_TIER RaytracingTier;
1469} D3D12_FEATURE_DATA_D3D12_OPTIONS5;
1470
1471typedef enum D3D12_VARIABLE_SHADING_RATE_TIER
1472{
1473 D3D12_VARIABLE_SHADING_RATE_TIER_NOT_SUPPORTED = 0,
1474 D3D12_VARIABLE_SHADING_RATE_TIER_1 = 1,
1475 D3D12_VARIABLE_SHADING_RATE_TIER_2 = 2,
1476} D3D12_VARIABLE_SHADING_RATE_TIER;
1477
1478// D3D12_FEATURE_D3D12_OPTIONS6
1479typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS6
1480{
1481 [annotation("_Out_")] BOOL AdditionalShadingRatesSupported;
1482 [annotation("_Out_")] BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing;
1483 [annotation("_Out_")] D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier;
1484 [annotation("_Out_")] UINT ShadingRateImageTileSize;
1485 [annotation("_Out_")] BOOL BackgroundProcessingSupported;
1486} D3D12_FEATURE_DATA_D3D12_OPTIONS6;
1487
1488typedef enum D3D12_MESH_SHADER_TIER
1489{
1490 D3D12_MESH_SHADER_TIER_NOT_SUPPORTED = 0,
1491 D3D12_MESH_SHADER_TIER_1 = 10,
1492} D3D12_MESH_SHADER_TIER;
1493
1494typedef enum D3D12_SAMPLER_FEEDBACK_TIER
1495{
1496 D3D12_SAMPLER_FEEDBACK_TIER_NOT_SUPPORTED = 0,
1497 D3D12_SAMPLER_FEEDBACK_TIER_0_9 = 90,
1498 D3D12_SAMPLER_FEEDBACK_TIER_1_0 = 100
1499} D3D12_SAMPLER_FEEDBACK_TIER;
1500
1501// D3D12_FEATURE_D3D12_OPTIONS7
1502typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS7
1503{
1504 [annotation("_Out_")] D3D12_MESH_SHADER_TIER MeshShaderTier;
1505 [annotation("_Out_")] D3D12_SAMPLER_FEEDBACK_TIER SamplerFeedbackTier;
1506
1507} D3D12_FEATURE_DATA_D3D12_OPTIONS7;
1508
1509typedef struct D3D12_FEATURE_DATA_QUERY_META_COMMAND
1510{
1511 [annotation("_In_")] GUID CommandId;
1512 [annotation("_In_")] UINT NodeMask;
1513 [annotation("_Field_size_bytes_full_opt_( QueryInputDataSizeInBytes )")] const void* pQueryInputData;
1514 [annotation("_In_")] SIZE_T QueryInputDataSizeInBytes;
1515 [annotation("_Field_size_bytes_full_( QueryOutputDataSizeInBytes )")] void* pQueryOutputData;
1516 [annotation("_In_")] SIZE_T QueryOutputDataSizeInBytes;
1517} D3D12_FEATURE_DATA_QUERY_META_COMMAND;
1518
1519// D3D12_FEATURE_D3D12_OPTIONS8
1520typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS8
1521{
1522 [annotation("_Out_")] BOOL UnalignedBlockTexturesSupported;
1523} D3D12_FEATURE_DATA_D3D12_OPTIONS8;
1524
1525typedef enum D3D12_WAVE_MMA_TIER {
1526 D3D12_WAVE_MMA_TIER_NOT_SUPPORTED = 0,
1527 D3D12_WAVE_MMA_TIER_1_0 = 10,
1528} D3D12_WAVE_MMA_TIER;
1529
1530// D3D12_FEATURE_D3D12_OPTIONS9
1531typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS9
1532{
1533 [annotation("_Out_")] BOOL MeshShaderPipelineStatsSupported;
1534 [annotation("_Out_")] BOOL MeshShaderSupportsFullRangeRenderTargetArrayIndex;
1535 [annotation("_Out_")] BOOL AtomicInt64OnTypedResourceSupported;
1536 [annotation("_Out_")] BOOL AtomicInt64OnGroupSharedSupported;
1537 [annotation("_Out_")] BOOL DerivativesInMeshAndAmplificationShadersSupported;
1538 [annotation("_Out_")] D3D12_WAVE_MMA_TIER WaveMMATier;
1539} D3D12_FEATURE_DATA_D3D12_OPTIONS9;
1540
1541// D3D12_FEATURE_D3D12_OPTIONS10
1542typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS10
1543{
1544 [annotation("_Out_")] BOOL VariableRateShadingSumCombinerSupported;
1545 [annotation("_Out_")] BOOL MeshShaderPerPrimitiveShadingRateSupported;
1546} D3D12_FEATURE_DATA_D3D12_OPTIONS10;
1547
1548// D3D12_FEATURE_D3D12_OPTIONS11
1549typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS11
1550{
1551 [annotation("_Out_")] BOOL AtomicInt64OnDescriptorHeapResourceSupported;
1552} D3D12_FEATURE_DATA_D3D12_OPTIONS11;
1553
1554typedef enum D3D12_TRI_STATE {
1555 D3D12_TRI_STATE_UNKNOWN = -1,
1556 D3D12_TRI_STATE_FALSE = 0,
1557 D3D12_TRI_STATE_TRUE = 1,
1558} D3D12_TRI_STATE;
1559
1560// D3D12_FEATURE_D3D12_OPTIONS12
1561typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS12
1562{
1563 [annotation("_Out_")] D3D12_TRI_STATE MSPrimitivesPipelineStatisticIncludesCulledPrimitives;
1564 [annotation("_Out_")] BOOL EnhancedBarriersSupported;
1565 [annotation("_Out_")] BOOL RelaxedFormatCastingSupported;
1566} D3D12_FEATURE_DATA_D3D12_OPTIONS12;
1567
1568// D3D12_FEATURE_D3D12_OPTIONS13
1569typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS13
1570{
1571 [annotation("_Out_")] BOOL UnrestrictedBufferTextureCopyPitchSupported;
1572 [annotation("_Out_")] BOOL UnrestrictedVertexElementAlignmentSupported;
1573 [annotation("_Out_")] BOOL InvertedViewportHeightFlipsYSupported;
1574 [annotation("_Out_")] BOOL InvertedViewportDepthFlipsZSupported;
1575 [annotation("_Out_")] BOOL TextureCopyBetweenDimensionsSupported;
1576 [annotation("_Out_")] BOOL AlphaBlendFactorSupported;
1577} D3D12_FEATURE_DATA_D3D12_OPTIONS13;
1578
1579// D3D12_FEATURE_D3D12_OPTIONS14
1580typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS14
1581{
1582 [annotation("_Out_")] BOOL AdvancedTextureOpsSupported;
1583 [annotation("_Out_")] BOOL WriteableMSAATexturesSupported;
1584 [annotation("_Out_")] BOOL IndependentFrontAndBackStencilRefMaskSupported;
1585} D3D12_FEATURE_DATA_D3D12_OPTIONS14;
1586
1587// D3D12_FEATURE_D3D12_OPTIONS15
1588typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS15
1589{
1590 [annotation("_Out_")] BOOL TriangleFanSupported;
1591 [annotation("_Out_")] BOOL DynamicIndexBufferStripCutSupported;
1592} D3D12_FEATURE_DATA_D3D12_OPTIONS15;
1593
1594// D3D12_FEATURE_D3D12_OPTIONS16
1595typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS16
1596{
1597 [annotation("_Out_")] BOOL DynamicDepthBiasSupported;
1598 [annotation("_Out_")] BOOL GPUUploadHeapSupported;
1599} D3D12_FEATURE_DATA_D3D12_OPTIONS16;
1600
1601// D3D12_FEATURE_D3D12_OPTIONS17
1602typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS17
1603{
1604 [annotation("_Out_")] BOOL NonNormalizedCoordinateSamplersSupported;
1605 [annotation("_Out_")] BOOL ManualWriteTrackingResourceSupported;
1606} D3D12_FEATURE_DATA_D3D12_OPTIONS17;
1607
1608// D3D12_FEATURE_D3D12_OPTIONS18
1609typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS18
1610{
1611 [annotation("_Out_")] BOOL RenderPassesValid;
1612} D3D12_FEATURE_DATA_D3D12_OPTIONS18;
1613
1614// D3D12_FEATURE_D3D12_OPTIONS19
1615typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS19
1616{
1617 BOOL MismatchingOutputDimensionsSupported;
1618 UINT SupportedSampleCountsWithNoOutputs;
1619 BOOL PointSamplingAddressesNeverRoundUp;
1620 BOOL RasterizerDesc2Supported;
1621 BOOL NarrowQuadrilateralLinesSupported;
1622 BOOL AnisoFilterWithPointMipSupported;
1623 UINT MaxSamplerDescriptorHeapSize;
1624 UINT MaxSamplerDescriptorHeapSizeWithStaticSamplers;
1625 UINT MaxViewDescriptorHeapSize;
1626 [annotation("_Out_")] BOOL ComputeOnlyCustomHeapSupported;
1627} D3D12_FEATURE_DATA_D3D12_OPTIONS19;
1628
1629
1630typedef enum D3D12_RECREATE_AT_TIER
1631{
1632 D3D12_RECREATE_AT_TIER_NOT_SUPPORTED = 0,
1633
1634 // * Supports retrieving resource and heap allocation information
1635 // with ID3D12PageableTools::GetAllocationInfo
1636 // * Supports setting resource and heap virtual addresses with
1637 // ID3D12DeviceTools::SetNextAllocation
1638 D3D12_RECREATE_AT_TIER_1 = 1,
1639
1640} D3D12_RECREATE_AT_TIER;
1641
1642
1643// D3D12_FEATURE_D3D12_OPTIONS20
1644typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS20
1645{
1646 [annotation("_Out_")] BOOL ComputeOnlyWriteWatchSupported;
1647 D3D12_RECREATE_AT_TIER RecreateAtTier;
1648} D3D12_FEATURE_DATA_D3D12_OPTIONS20;
1649
1650typedef enum D3D12_EXECUTE_INDIRECT_TIER
1651{
1652 D3D12_EXECUTE_INDIRECT_TIER_1_0 = 10,
1653 D3D12_EXECUTE_INDIRECT_TIER_1_1 = 11,
1654} D3D12_EXECUTE_INDIRECT_TIER;
1655
1656typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS21
1657{
1658 [annotation("_Out_")] D3D12_WORK_GRAPHS_TIER WorkGraphsTier;
1659 [annotation("_Out_")] D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier;
1660 [annotation("_Out_")] BOOL SampleCmpGradientAndBiasSupported;
1661 [annotation("_Out_")] BOOL ExtendedCommandInfoSupported;
1662} D3D12_FEATURE_DATA_D3D12_OPTIONS21;
1663
1664
1665typedef enum D3D12_TIGHT_ALIGNMENT_TIER
1666{
1667 D3D12_TIGHT_ALIGNMENT_TIER_NOT_SUPPORTED,
1668 D3D12_TIGHT_ALIGNMENT_TIER_1 // Tight alignment of buffers supported
1669} D3D12_TIGHT_ALIGNMENT_TIER;
1670
1671typedef struct D3D12_FEATURE_DATA_TIGHT_ALIGNMENT
1672{
1673 [annotation("_Out_")] D3D12_TIGHT_ALIGNMENT_TIER SupportTier;
1674} D3D12_FEATURE_DATA_TIGHT_ALIGNMENT;
1675
1676
1677typedef struct D3D12_FEATURE_DATA_PREDICATION
1678{
1679 [annotation("_Out_")] BOOL Supported;
1680} D3D12_FEATURE_DATA_PREDICATION;
1681
1682typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY
1683{
1684 [annotation("_Out_")] BOOL Supported;
1685} D3D12_FEATURE_DATA_HARDWARE_COPY;
1686
1687typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE
1688{
1689 [annotation("_Out_")] BOOL Supported;
1690} D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE;
1691
1692typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED
1693{
1694 [annotation("_Out_")] BOOL Supported;
1695} D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED;
1696
1697typedef struct D3D12_RESOURCE_ALLOCATION_INFO
1698{
1699 UINT64 SizeInBytes;
1700 UINT64 Alignment;
1701} D3D12_RESOURCE_ALLOCATION_INFO;
1702
1703typedef struct D3D12_RESOURCE_ALLOCATION_INFO1
1704{
1705 UINT64 Offset;
1706 UINT64 Alignment;
1707 UINT64 SizeInBytes;
1708} D3D12_RESOURCE_ALLOCATION_INFO1;
1709
1710typedef enum D3D12_HEAP_TYPE
1711{
1712 D3D12_HEAP_TYPE_DEFAULT = 1,
1713 D3D12_HEAP_TYPE_UPLOAD = 2,
1714 D3D12_HEAP_TYPE_READBACK = 3,
1715 D3D12_HEAP_TYPE_CUSTOM = 4,
1716 D3D12_HEAP_TYPE_GPU_UPLOAD = 5,
1717} D3D12_HEAP_TYPE;
1718
1719typedef enum D3D12_CPU_PAGE_PROPERTY
1720{
1721 D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,
1722 D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE = 1,
1723 D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2,
1724 D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3,
1725} D3D12_CPU_PAGE_PROPERTY;
1726
1727typedef enum D3D12_MEMORY_POOL
1728{
1729 D3D12_MEMORY_POOL_UNKNOWN = 0,
1730 D3D12_MEMORY_POOL_L0 = 1, // Maximum bandwidth for CPU
1731 D3D12_MEMORY_POOL_L1 = 2, // More bandwidth for GPU, less for CPU
1732} D3D12_MEMORY_POOL;
1733
1734typedef struct D3D12_HEAP_PROPERTIES
1735{
1736 D3D12_HEAP_TYPE Type;
1737 D3D12_CPU_PAGE_PROPERTY CPUPageProperty;
1738 D3D12_MEMORY_POOL MemoryPoolPreference;
1739 UINT CreationNodeMask;
1740 UINT VisibleNodeMask;
1741} D3D12_HEAP_PROPERTIES;
1742
1743typedef enum D3D12_HEAP_FLAGS
1744{
1745 D3D12_HEAP_FLAG_NONE = 0x0,
1746 D3D12_HEAP_FLAG_SHARED = 0x1,
1747 D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
1748 D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
1749 D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
1750 D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
1751 D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
1752 D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100,
1753 D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200,
1754 D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400,
1755 D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800,
1756 D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000,
1757 D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING = 0x2000,
1758
1759 // These are convenience aliases to manage resource heap tier restrictions. They cannot be bitwise OR'ed together cleanly.
1760 D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x0,
1761 D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xC0,
1762 D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
1763 D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84,
1764
1765
1766} D3D12_HEAP_FLAGS;
1767cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_FLAGS )" )
1768
1769typedef struct D3D12_HEAP_DESC
1770{
1771 UINT64 SizeInBytes;
1772 D3D12_HEAP_PROPERTIES Properties;
1773 UINT64 Alignment;
1774 D3D12_HEAP_FLAGS Flags;
1775} D3D12_HEAP_DESC;
1776
1777typedef enum D3D12_RESOURCE_DIMENSION
1778{
1779 D3D12_RESOURCE_DIMENSION_UNKNOWN = 0,
1780 D3D12_RESOURCE_DIMENSION_BUFFER = 1,
1781 D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,
1782 D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,
1783 D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4,
1784} D3D12_RESOURCE_DIMENSION;
1785
1786typedef struct D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO
1787{
1788 [annotation("_In_")] DXGI_FORMAT Format;
1789 [annotation("_In_")] D3D12_RESOURCE_DIMENSION Dimension;
1790 [annotation("_In_")] D3D12_HEAP_PROPERTIES DestHeapProperties;
1791 [annotation("_Out_")] BOOL Supported;
1792} D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO;
1793
1794typedef enum D3D12_TEXTURE_LAYOUT
1795{
1796 D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
1797 D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1, // Must be used with buffers. Can be used with cross-adapter shared textures.
1798 D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
1799 D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3,
1800} D3D12_TEXTURE_LAYOUT;
1801
1802typedef enum D3D12_RESOURCE_FLAGS
1803{
1804 D3D12_RESOURCE_FLAG_NONE = 0x0,
1805 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1,
1806 D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2,
1807 D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4,
1808 D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8,
1809 D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10,
1810 D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20,
1811 D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY = 0x40,
1812 D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY = 0x80,
1813 D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE = 0x100,
1814 D3D12_RESOURCE_FLAG_USE_TIGHT_ALIGNMENT = 0x400,
1815
1816} D3D12_RESOURCE_FLAGS;
1817cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS )" )
1818
1819typedef struct D3D12_MIP_REGION
1820{
1821 UINT Width;
1822 UINT Height;
1823 UINT Depth;
1824} D3D12_MIP_REGION;
1825
1826typedef struct D3D12_RESOURCE_DESC
1827{
1828 D3D12_RESOURCE_DIMENSION Dimension;
1829 UINT64 Alignment;
1830 UINT64 Width;
1831 UINT Height;
1832 UINT16 DepthOrArraySize;
1833 UINT16 MipLevels;
1834 DXGI_FORMAT Format;
1835 DXGI_SAMPLE_DESC SampleDesc;
1836 D3D12_TEXTURE_LAYOUT Layout;
1837 D3D12_RESOURCE_FLAGS Flags;
1838} D3D12_RESOURCE_DESC;
1839
1840typedef struct D3D12_RESOURCE_DESC1
1841{
1842 D3D12_RESOURCE_DIMENSION Dimension;
1843 UINT64 Alignment;
1844 UINT64 Width;
1845 UINT Height;
1846 UINT16 DepthOrArraySize;
1847 UINT16 MipLevels;
1848 DXGI_FORMAT Format;
1849 DXGI_SAMPLE_DESC SampleDesc;
1850 D3D12_TEXTURE_LAYOUT Layout;
1851 D3D12_RESOURCE_FLAGS Flags;
1852 D3D12_MIP_REGION SamplerFeedbackMipRegion;
1853} D3D12_RESOURCE_DESC1;
1854
1855
1856
1857typedef struct D3D12_DEPTH_STENCIL_VALUE
1858{
1859 FLOAT Depth;
1860 UINT8 Stencil;
1861} D3D12_DEPTH_STENCIL_VALUE;
1862
1863typedef struct D3D12_CLEAR_VALUE
1864{
1865 DXGI_FORMAT Format;
1866 union
1867 {
1868 FLOAT Color[4];
1869 D3D12_DEPTH_STENCIL_VALUE DepthStencil;
1870 };
1871} D3D12_CLEAR_VALUE;
1872
1873typedef struct D3D12_RANGE
1874{
1875 SIZE_T Begin;
1876 SIZE_T End; // One past end, so (End - Begin) = Size
1877} D3D12_RANGE;
1878
1879typedef struct D3D12_RANGE_UINT64
1880{
1881 UINT64 Begin;
1882 UINT64 End; // One past end, so (End - Begin) = Size
1883} D3D12_RANGE_UINT64;
1884
1885typedef struct D3D12_SUBRESOURCE_RANGE_UINT64
1886{
1887 UINT Subresource;
1888 D3D12_RANGE_UINT64 Range;
1889} D3D12_SUBRESOURCE_RANGE_UINT64;
1890
1891typedef struct D3D12_SUBRESOURCE_INFO
1892{
1893 UINT64 Offset;
1894 UINT RowPitch;
1895 UINT DepthPitch;
1896} D3D12_SUBRESOURCE_INFO;
1897
1898typedef struct D3D12_TILED_RESOURCE_COORDINATE
1899{
1900 UINT X;
1901 UINT Y;
1902 UINT Z;
1903 UINT Subresource;
1904} D3D12_TILED_RESOURCE_COORDINATE;
1905
1906typedef struct D3D12_TILE_REGION_SIZE
1907{
1908 UINT NumTiles;
1909 BOOL UseBox;
1910 UINT Width;
1911 UINT16 Height;
1912 UINT16 Depth;
1913} D3D12_TILE_REGION_SIZE;
1914
1915typedef enum D3D12_TILE_RANGE_FLAGS
1916{
1917 D3D12_TILE_RANGE_FLAG_NONE = 0,
1918 D3D12_TILE_RANGE_FLAG_NULL = 1,
1919 D3D12_TILE_RANGE_FLAG_SKIP = 2,
1920 D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 4,
1921
1922} D3D12_TILE_RANGE_FLAGS;
1923
1924typedef struct D3D12_SUBRESOURCE_TILING
1925{
1926 UINT WidthInTiles;
1927 UINT16 HeightInTiles;
1928 UINT16 DepthInTiles;
1929 UINT StartTileIndexInOverallResource;
1930} D3D12_SUBRESOURCE_TILING;
1931
1932typedef struct D3D12_TILE_SHAPE
1933{
1934 UINT WidthInTexels;
1935 UINT HeightInTexels;
1936 UINT DepthInTexels;
1937} D3D12_TILE_SHAPE;
1938
1939typedef struct D3D12_PACKED_MIP_INFO
1940{
1941 UINT8 NumStandardMips;
1942 UINT8 NumPackedMips;
1943 UINT NumTilesForPackedMips;
1944 UINT StartTileIndexInOverallResource;
1945} D3D12_PACKED_MIP_INFO;
1946
1947typedef enum D3D12_TILE_MAPPING_FLAGS
1948{
1949 D3D12_TILE_MAPPING_FLAG_NONE = 0x0,
1950 D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1,
1951} D3D12_TILE_MAPPING_FLAGS;
1952cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS )" )
1953
1954typedef enum D3D12_TILE_COPY_FLAGS
1955{
1956 D3D12_TILE_COPY_FLAG_NONE = 0x0,
1957 D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1,
1958 D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
1959 D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4,
1960} D3D12_TILE_COPY_FLAGS;
1961cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS )")
1962
1963// Resource Barrier
1964typedef enum D3D12_RESOURCE_STATES
1965{
1966 D3D12_RESOURCE_STATE_COMMON = 0,
1967
1968 D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x00001,
1969 D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x00002,
1970 D3D12_RESOURCE_STATE_RENDER_TARGET = 0x00004,
1971 D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x00008,
1972 D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x00010,
1973 D3D12_RESOURCE_STATE_DEPTH_READ = 0x00020,
1974 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x00040,
1975 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x00080,
1976 D3D12_RESOURCE_STATE_STREAM_OUT = 0x00100,
1977 D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x00200,
1978 D3D12_RESOURCE_STATE_COPY_DEST = 0x00400,
1979 D3D12_RESOURCE_STATE_COPY_SOURCE = 0x00800,
1980 D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x01000,
1981 D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x02000,
1982 D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 0x400000,
1983 D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 0x1000000,
1984
1985 D3D12_RESOURCE_STATE_RESERVED_INTERNAL_8000 = 0x8000,
1986 D3D12_RESOURCE_STATE_RESERVED_INTERNAL_4000 = 0x4000,
1987 D3D12_RESOURCE_STATE_RESERVED_INTERNAL_100000 = 0x100000,
1988 D3D12_RESOURCE_STATE_RESERVED_INTERNAL_40000000 = 0x40000000,
1989 D3D12_RESOURCE_STATE_RESERVED_INTERNAL_80000000 = 0x80000000,
1990
1991 D3D12_RESOURCE_STATE_GENERIC_READ =
1992 /*D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER*/ 0x0001 |
1993 /*D3D12_RESOURCE_STATE_INDEX_BUFFER*/ 0x0002 |
1994 /*D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE*/ 0x0040 |
1995 /*D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE*/ 0x0080 |
1996 /*D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT*/ 0x0200 |
1997 /*D3D12_RESOURCE_STATE_COPY_SOURCE*/ 0x0800,
1998
1999 D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE =
2000 /*D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE*/ 0x40 |
2001 /*D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE*/ 0x80,
2002
2003 D3D12_RESOURCE_STATE_PRESENT = 0,
2004 D3D12_RESOURCE_STATE_PREDICATION = /*D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT*/ 0x0200,
2005
2006 D3D12_RESOURCE_STATE_VIDEO_DECODE_READ = 0x00010000,
2007 D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE = 0x00020000,
2008 D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ = 0x00040000,
2009 D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE = 0x00080000,
2010 D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ = 0x00200000,
2011 D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 0x00800000,
2012
2013} D3D12_RESOURCE_STATES;
2014cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_STATES )" )
2015
2016typedef enum D3D12_RESOURCE_BARRIER_TYPE
2017{
2018 D3D12_RESOURCE_BARRIER_TYPE_TRANSITION,
2019 D3D12_RESOURCE_BARRIER_TYPE_ALIASING,
2020 D3D12_RESOURCE_BARRIER_TYPE_UAV,
2021} D3D12_RESOURCE_BARRIER_TYPE;
2022
2023interface ID3D12Resource;
2024
2025typedef struct D3D12_RESOURCE_TRANSITION_BARRIER
2026{
2027 ID3D12Resource* pResource;
2028 UINT Subresource;
2029 D3D12_RESOURCE_STATES StateBefore;
2030 D3D12_RESOURCE_STATES StateAfter;
2031} D3D12_RESOURCE_TRANSITION_BARRIER;
2032
2033typedef struct D3D12_RESOURCE_ALIASING_BARRIER
2034{
2035 ID3D12Resource* pResourceBefore;
2036 ID3D12Resource* pResourceAfter;
2037} D3D12_RESOURCE_ALIASING_BARRIER;
2038
2039typedef struct D3D12_RESOURCE_UAV_BARRIER
2040{
2041 ID3D12Resource* pResource;
2042} D3D12_RESOURCE_UAV_BARRIER;
2043
2044typedef enum D3D12_RESOURCE_BARRIER_FLAGS
2045{
2046 D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0,
2047 D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,
2048 D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2,
2049} D3D12_RESOURCE_BARRIER_FLAGS;
2050cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_BARRIER_FLAGS )" )
2051
2052typedef struct D3D12_RESOURCE_BARRIER
2053{
2054 D3D12_RESOURCE_BARRIER_TYPE Type;
2055 D3D12_RESOURCE_BARRIER_FLAGS Flags;
2056
2057 union
2058 {
2059 D3D12_RESOURCE_TRANSITION_BARRIER Transition;
2060 D3D12_RESOURCE_ALIASING_BARRIER Aliasing;
2061 D3D12_RESOURCE_UAV_BARRIER UAV;
2062 };
2063} D3D12_RESOURCE_BARRIER;
2064
2065typedef struct D3D12_SUBRESOURCE_FOOTPRINT
2066{
2067 DXGI_FORMAT Format;
2068 UINT Width;
2069 UINT Height;
2070 UINT Depth;
2071 UINT RowPitch; // Must be a multiple of D3D12_TEXTURE_DATA_PITCH_ALIGNMENT
2072} D3D12_SUBRESOURCE_FOOTPRINT;
2073
2074typedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT
2075{
2076 UINT64 Offset; // Must be a multiple of D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT
2077 D3D12_SUBRESOURCE_FOOTPRINT Footprint;
2078} D3D12_PLACED_SUBRESOURCE_FOOTPRINT;
2079
2080typedef enum D3D12_TEXTURE_COPY_TYPE
2081{
2082 D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,
2083 D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1,
2084} D3D12_TEXTURE_COPY_TYPE;
2085
2086typedef struct D3D12_TEXTURE_COPY_LOCATION
2087{
2088 ID3D12Resource* pResource;
2089 D3D12_TEXTURE_COPY_TYPE Type;
2090 union
2091 {
2092 D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
2093 UINT SubresourceIndex;
2094 };
2095} D3D12_TEXTURE_COPY_LOCATION;
2096
2097typedef enum D3D12_RESOLVE_MODE
2098{
2099 D3D12_RESOLVE_MODE_DECOMPRESS = 0,
2100 D3D12_RESOLVE_MODE_MIN = 1,
2101 D3D12_RESOLVE_MODE_MAX = 2,
2102 D3D12_RESOLVE_MODE_AVERAGE = 3,
2103 D3D12_RESOLVE_MODE_ENCODE_SAMPLER_FEEDBACK = 4,
2104 D3D12_RESOLVE_MODE_DECODE_SAMPLER_FEEDBACK = 5
2105} D3D12_RESOLVE_MODE;
2106
2107typedef struct D3D12_SAMPLE_POSITION
2108{
2109 INT8 X;
2110 INT8 Y;
2111} D3D12_SAMPLE_POSITION;
2112
2113typedef struct D3D12_VIEW_INSTANCE_LOCATION
2114{
2115 UINT ViewportArrayIndex;
2116 UINT RenderTargetArrayIndex;
2117} D3D12_VIEW_INSTANCE_LOCATION;
2118
2119typedef enum D3D12_VIEW_INSTANCING_FLAGS
2120{
2121 D3D12_VIEW_INSTANCING_FLAG_NONE = 0x0,
2122 D3D12_VIEW_INSTANCING_FLAG_ENABLE_VIEW_INSTANCE_MASKING = 0x1,
2123} D3D12_VIEW_INSTANCING_FLAGS;
2124cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIEW_INSTANCING_FLAGS )")
2125
2126typedef struct D3D12_VIEW_INSTANCING_DESC
2127{
2128 UINT ViewInstanceCount;
2129 [annotation("_Field_size_full_(ViewInstanceCount)")] const D3D12_VIEW_INSTANCE_LOCATION* pViewInstanceLocations;
2130 D3D12_VIEW_INSTANCING_FLAGS Flags;
2131} D3D12_VIEW_INSTANCING_DESC;
2132
2133// D3D12 view descriptions
2134typedef enum D3D12_SHADER_COMPONENT_MAPPING
2135{
2136 D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,
2137 D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,
2138 D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,
2139 D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,
2140 D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4,
2141 D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5,
2142} D3D12_SHADER_COMPONENT_MAPPING;
2143
2144cpp_quote( "#define D3D12_SHADER_COMPONENT_MAPPING_MASK 0x7 ")
2145cpp_quote( "#define D3D12_SHADER_COMPONENT_MAPPING_SHIFT 3 ")
2146cpp_quote( "#define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*4)) ")
2147cpp_quote( "#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \\")
2148cpp_quote( " (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<D3D12_SHADER_COMPONENT_MAPPING_SHIFT)| \\")
2149cpp_quote( " (((Src2)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*2))| \\")
2150cpp_quote( " (((Src3)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*3))| \\")
2151cpp_quote( " D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES))")
2152cpp_quote( "#define D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(ComponentToExtract,Mapping) ((D3D12_SHADER_COMPONENT_MAPPING)(Mapping >> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK))")
2153cpp_quote( "#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3) ")
2154typedef enum D3D12_BUFFER_SRV_FLAGS
2155{
2156 D3D12_BUFFER_SRV_FLAG_NONE = 0,
2157 D3D12_BUFFER_SRV_FLAG_RAW = 0x00000001, // allow device multi-component reads with DWORD addressing
2158} D3D12_BUFFER_SRV_FLAGS;
2159cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS )" )
2160
2161typedef struct D3D12_BUFFER_SRV
2162{
2163 UINT64 FirstElement;
2164 UINT NumElements;
2165 UINT StructureByteStride; // if nonzero, format must be DXGI_FORMAT_UNKNOWN
2166 D3D12_BUFFER_SRV_FLAGS Flags;
2167} D3D12_BUFFER_SRV;
2168
2169typedef struct D3D12_TEX1D_SRV
2170{
2171 UINT MostDetailedMip;
2172 UINT MipLevels;
2173 FLOAT ResourceMinLODClamp;
2174} D3D12_TEX1D_SRV;
2175
2176typedef struct D3D12_TEX1D_ARRAY_SRV
2177{
2178 UINT MostDetailedMip;
2179 UINT MipLevels;
2180 UINT FirstArraySlice;
2181 UINT ArraySize;
2182 FLOAT ResourceMinLODClamp;
2183} D3D12_TEX1D_ARRAY_SRV;
2184
2185typedef struct D3D12_TEX2D_SRV
2186{
2187 UINT MostDetailedMip;
2188 UINT MipLevels;
2189 UINT PlaneSlice;
2190 FLOAT ResourceMinLODClamp;
2191} D3D12_TEX2D_SRV;
2192
2193typedef struct D3D12_TEX2D_ARRAY_SRV
2194{
2195 UINT MostDetailedMip;
2196 UINT MipLevels;
2197 UINT FirstArraySlice;
2198 UINT ArraySize;
2199 UINT PlaneSlice;
2200 FLOAT ResourceMinLODClamp;
2201} D3D12_TEX2D_ARRAY_SRV;
2202
2203typedef struct D3D12_TEX3D_SRV
2204{
2205 UINT MostDetailedMip;
2206 UINT MipLevels;
2207 FLOAT ResourceMinLODClamp;
2208} D3D12_TEX3D_SRV;
2209
2210typedef struct D3D12_TEXCUBE_SRV
2211{
2212 UINT MostDetailedMip;
2213 UINT MipLevels;
2214 FLOAT ResourceMinLODClamp;
2215} D3D12_TEXCUBE_SRV;
2216
2217typedef struct D3D12_TEXCUBE_ARRAY_SRV
2218{
2219 UINT MostDetailedMip;
2220 UINT MipLevels;
2221 UINT First2DArrayFace;
2222 UINT NumCubes;
2223 FLOAT ResourceMinLODClamp;
2224} D3D12_TEXCUBE_ARRAY_SRV;
2225
2226typedef struct D3D12_TEX2DMS_SRV
2227{
2228 // don't need to define anything specific for this view dimension
2229 UINT UnusedField_NothingToDefine;
2230} D3D12_TEX2DMS_SRV;
2231
2232typedef struct D3D12_TEX2DMS_ARRAY_SRV
2233{
2234 UINT FirstArraySlice;
2235 UINT ArraySize;
2236} D3D12_TEX2DMS_ARRAY_SRV;
2237
2238typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV
2239{
2240 D3D12_GPU_VIRTUAL_ADDRESS Location;
2241} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV;
2242
2243typedef enum D3D12_SRV_DIMENSION {
2244 D3D12_SRV_DIMENSION_UNKNOWN = 0,
2245 D3D12_SRV_DIMENSION_BUFFER = 1,
2246 D3D12_SRV_DIMENSION_TEXTURE1D = 2,
2247 D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3,
2248 D3D12_SRV_DIMENSION_TEXTURE2D = 4,
2249 D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5,
2250 D3D12_SRV_DIMENSION_TEXTURE2DMS = 6,
2251 D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
2252 D3D12_SRV_DIMENSION_TEXTURE3D = 8,
2253 D3D12_SRV_DIMENSION_TEXTURECUBE = 9,
2254 D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10,
2255 D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE = 11,
2256} D3D12_SRV_DIMENSION;
2257
2258typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC
2259{
2260 DXGI_FORMAT Format;
2261 D3D12_SRV_DIMENSION ViewDimension;
2262 UINT Shader4ComponentMapping;
2263
2264 union
2265 {
2266 D3D12_BUFFER_SRV Buffer;
2267 D3D12_TEX1D_SRV Texture1D;
2268 D3D12_TEX1D_ARRAY_SRV Texture1DArray;
2269 D3D12_TEX2D_SRV Texture2D;
2270 D3D12_TEX2D_ARRAY_SRV Texture2DArray;
2271 D3D12_TEX2DMS_SRV Texture2DMS;
2272 D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
2273 D3D12_TEX3D_SRV Texture3D;
2274 D3D12_TEXCUBE_SRV TextureCube;
2275 D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
2276 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV RaytracingAccelerationStructure;
2277 };
2278} D3D12_SHADER_RESOURCE_VIEW_DESC;
2279
2280typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC
2281{
2282 D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2283 UINT SizeInBytes;
2284} D3D12_CONSTANT_BUFFER_VIEW_DESC;
2285
2286////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2287//
2288// Sampler
2289//
2290////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2291typedef enum D3D12_FILTER
2292{
2293 // Bits used in defining enumeration of valid filters:
2294 // bits [1:0] - mip: 0 == point, 1 == linear, 2,3 unused
2295 // bits [3:2] - mag: 0 == point, 1 == linear, 2,3 unused
2296 // bits [5:4] - min: 0 == point, 1 == linear, 2,3 unused
2297 // bit [6] - aniso
2298 // bits [8:7] - reduction type:
2299 // 0 == standard filtering
2300 // 1 == comparison
2301 // 2 == min
2302 // 3 == max
2303 // bit [31] - mono 1-bit (narrow-purpose filter) [no longer supported in D3D12]
2304
2305 D3D12_FILTER_MIN_MAG_MIP_POINT = 0x00000000,
2306 D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x00000001,
2307 D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000004,
2308 D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x00000005,
2309 D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x00000010,
2310 D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000011,
2311 D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x00000014,
2312 D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x00000015,
2313 D3D12_FILTER_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x00000054,
2314 D3D12_FILTER_ANISOTROPIC = 0x00000055,
2315 D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x00000080,
2316 D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x00000081,
2317 D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000084,
2318 D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x00000085,
2319 D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x00000090,
2320 D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000091,
2321 D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x00000094,
2322 D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x00000095,
2323 D3D12_FILTER_COMPARISON_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x000000d4,
2324 D3D12_FILTER_COMPARISON_ANISOTROPIC = 0x000000d5,
2325 D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x00000100,
2326 D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x00000101,
2327 D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000104,
2328 D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x00000105,
2329 D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x00000110,
2330 D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000111,
2331 D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x00000114,
2332 D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x00000115,
2333 D3D12_FILTER_MINIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x00000154,
2334 D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x00000155,
2335 D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x00000180,
2336 D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x00000181,
2337 D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000184,
2338 D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x00000185,
2339 D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x00000190,
2340 D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000191,
2341 D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x00000194,
2342 D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x00000195,
2343 D3D12_FILTER_MAXIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x000001d4,
2344 D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x000001d5
2345} D3D12_FILTER;
2346
2347typedef enum D3D12_FILTER_TYPE
2348{
2349 D3D12_FILTER_TYPE_POINT = 0,
2350 D3D12_FILTER_TYPE_LINEAR = 1,
2351} D3D12_FILTER_TYPE;
2352
2353typedef enum D3D12_FILTER_REDUCTION_TYPE
2354{
2355 D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0,
2356 D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,
2357 D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2,
2358 D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3,
2359} D3D12_FILTER_REDUCTION_TYPE;
2360
2361const UINT D3D12_FILTER_REDUCTION_TYPE_MASK = 0x00000003;
2362const UINT D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7;
2363
2364const UINT D3D12_FILTER_TYPE_MASK = 0x00000003;
2365const UINT D3D12_MIN_FILTER_SHIFT = 4;
2366const UINT D3D12_MAG_FILTER_SHIFT = 2;
2367const UINT D3D12_MIP_FILTER_SHIFT = 0;
2368
2369const UINT D3D12_ANISOTROPIC_FILTERING_BIT = 0x00000040;
2370
2371// encode enum entry for most filters except anisotropic filtering
2372cpp_quote( "#define D3D12_ENCODE_BASIC_FILTER( min, mag, mip, reduction ) \\" )
2373cpp_quote( " ( ( D3D12_FILTER ) ( \\" )
2374cpp_quote( " ( ( ( min ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIN_FILTER_SHIFT ) | \\" )
2375cpp_quote( " ( ( ( mag ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MAG_FILTER_SHIFT ) | \\" )
2376cpp_quote( " ( ( ( mip ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIP_FILTER_SHIFT ) | \\" )
2377cpp_quote( " ( ( ( reduction ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) << D3D12_FILTER_REDUCTION_TYPE_SHIFT ) ) ) " )
2378
2379// encode enum entry for anisotropic filtering (with or without comparison filtering)
2380cpp_quote( "#define D3D12_ENCODE_ANISOTROPIC_FILTER( reduction ) \\" )
2381cpp_quote( " ( ( D3D12_FILTER ) ( \\" )
2382cpp_quote( " D3D12_ANISOTROPIC_FILTERING_BIT | \\" )
2383cpp_quote( " D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR, \\" )
2384cpp_quote( " D3D12_FILTER_TYPE_LINEAR, \\" )
2385cpp_quote( " D3D12_FILTER_TYPE_LINEAR, \\" )
2386cpp_quote( " reduction ) ) ) " )
2387cpp_quote( "#define D3D12_ENCODE_MIN_MAG_ANISOTROPIC_MIP_POINT_FILTER( reduction ) \\" )
2388cpp_quote( " ( ( D3D12_FILTER ) ( \\" )
2389cpp_quote( " D3D12_ANISOTROPIC_FILTERING_BIT | \\" )
2390cpp_quote( " D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR, \\" )
2391cpp_quote( " D3D12_FILTER_TYPE_LINEAR, \\" )
2392cpp_quote( " D3D12_FILTER_TYPE_POINT, \\" )
2393cpp_quote( " reduction ) ) ) " )
2394
2395cpp_quote( "#define D3D12_DECODE_MIN_FILTER( D3D12Filter ) \\" )
2396cpp_quote( " ( ( D3D12_FILTER_TYPE ) \\" )
2397cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_MIN_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) " )
2398
2399cpp_quote( "#define D3D12_DECODE_MAG_FILTER( D3D12Filter ) \\" )
2400cpp_quote( " ( ( D3D12_FILTER_TYPE ) \\" )
2401cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_MAG_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) " )
2402
2403cpp_quote( "#define D3D12_DECODE_MIP_FILTER( D3D12Filter ) \\" )
2404cpp_quote( " ( ( D3D12_FILTER_TYPE ) \\" )
2405cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_MIP_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) " )
2406
2407cpp_quote( "#define D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) \\" )
2408cpp_quote( " ( ( D3D12_FILTER_REDUCTION_TYPE ) \\" )
2409cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) ) " )
2410
2411cpp_quote( "#define D3D12_DECODE_IS_COMPARISON_FILTER( D3D12Filter ) \\" )
2412cpp_quote( " ( D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON ) " )
2413
2414cpp_quote( "#define D3D12_DECODE_IS_ANISOTROPIC_FILTER( D3D12Filter ) \\" )
2415cpp_quote( " ( ( ( D3D12Filter ) & D3D12_ANISOTROPIC_FILTERING_BIT ) && \\" )
2416cpp_quote( " ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER( D3D12Filter ) ) && \\" )
2417cpp_quote( " ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER( D3D12Filter ) ) ) " )
2418
2419typedef enum D3D12_TEXTURE_ADDRESS_MODE
2420{
2421 D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1,
2422 D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2,
2423 D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3,
2424 D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4,
2425 D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5
2426} D3D12_TEXTURE_ADDRESS_MODE;
2427
2428
2429
2430typedef struct D3D12_SAMPLER_DESC
2431{
2432 D3D12_FILTER Filter;
2433 D3D12_TEXTURE_ADDRESS_MODE AddressU;
2434 D3D12_TEXTURE_ADDRESS_MODE AddressV;
2435 D3D12_TEXTURE_ADDRESS_MODE AddressW;
2436 FLOAT MipLODBias;
2437 UINT MaxAnisotropy;
2438 D3D12_COMPARISON_FUNC ComparisonFunc;
2439 FLOAT BorderColor[4]; // RGBA
2440 FLOAT MinLOD;
2441 FLOAT MaxLOD;
2442} D3D12_SAMPLER_DESC;
2443
2444
2445typedef enum D3D12_SAMPLER_FLAGS
2446{
2447 D3D12_SAMPLER_FLAG_NONE = 0x0,
2448 D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR = 0x01,
2449 D3D12_SAMPLER_FLAG_NON_NORMALIZED_COORDINATES = 0x02,
2450} D3D12_SAMPLER_FLAGS;
2451cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SAMPLER_FLAGS )")
2452
2453typedef struct D3D12_SAMPLER_DESC2
2454{
2455 D3D12_FILTER Filter;
2456 D3D12_TEXTURE_ADDRESS_MODE AddressU;
2457 D3D12_TEXTURE_ADDRESS_MODE AddressV;
2458 D3D12_TEXTURE_ADDRESS_MODE AddressW;
2459 FLOAT MipLODBias;
2460 UINT MaxAnisotropy;
2461 D3D12_COMPARISON_FUNC ComparisonFunc;
2462 union
2463 {
2464 FLOAT FloatBorderColor[4]; // RGBA
2465 UINT UintBorderColor[4];
2466 };
2467 FLOAT MinLOD;
2468 FLOAT MaxLOD;
2469 D3D12_SAMPLER_FLAGS Flags;
2470} D3D12_SAMPLER_DESC2;
2471
2472
2473
2474typedef enum D3D12_BUFFER_UAV_FLAGS
2475{
2476 D3D12_BUFFER_UAV_FLAG_NONE = 0,
2477 D3D12_BUFFER_UAV_FLAG_RAW = 0x00000001,
2478} D3D12_BUFFER_UAV_FLAGS;
2479cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAGS )" )
2480
2481typedef struct D3D12_BUFFER_UAV
2482{
2483 UINT64 FirstElement;
2484 UINT NumElements;
2485 UINT StructureByteStride; // if nonzero, format must be DXGI_FORMAT_UNKNOWN
2486 UINT64 CounterOffsetInBytes;
2487 D3D12_BUFFER_UAV_FLAGS Flags;
2488} D3D12_BUFFER_UAV;
2489
2490typedef struct D3D12_TEX1D_UAV
2491{
2492 UINT MipSlice;
2493} D3D12_TEX1D_UAV;
2494
2495typedef struct D3D12_TEX1D_ARRAY_UAV
2496{
2497 UINT MipSlice;
2498 UINT FirstArraySlice;
2499 UINT ArraySize;
2500} D3D12_TEX1D_ARRAY_UAV;
2501
2502typedef struct D3D12_TEX2D_UAV
2503{
2504 UINT MipSlice;
2505 UINT PlaneSlice;
2506} D3D12_TEX2D_UAV;
2507
2508typedef struct D3D12_TEX2D_ARRAY_UAV
2509{
2510 UINT MipSlice;
2511 UINT FirstArraySlice;
2512 UINT ArraySize;
2513 UINT PlaneSlice;
2514} D3D12_TEX2D_ARRAY_UAV;
2515
2516typedef struct D3D12_TEX2DMS_UAV
2517{
2518 // don't need to define anything specific for this view dimension
2519 UINT UnusedField_NothingToDefine;
2520} D3D12_TEX2DMS_UAV;
2521
2522typedef struct D3D12_TEX2DMS_ARRAY_UAV
2523{
2524 UINT FirstArraySlice;
2525 UINT ArraySize;
2526} D3D12_TEX2DMS_ARRAY_UAV;
2527
2528typedef struct D3D12_TEX3D_UAV
2529{
2530 UINT MipSlice;
2531 UINT FirstWSlice;
2532 UINT WSize;
2533} D3D12_TEX3D_UAV;
2534
2535typedef enum D3D12_UAV_DIMENSION
2536{
2537 D3D12_UAV_DIMENSION_UNKNOWN = 0,
2538 D3D12_UAV_DIMENSION_BUFFER = 1,
2539 D3D12_UAV_DIMENSION_TEXTURE1D = 2,
2540 D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,
2541 D3D12_UAV_DIMENSION_TEXTURE2D = 4,
2542 D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,
2543 D3D12_UAV_DIMENSION_TEXTURE2DMS = 6,
2544 D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY = 7,
2545 D3D12_UAV_DIMENSION_TEXTURE3D = 8,
2546} D3D12_UAV_DIMENSION;
2547
2548typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC
2549{
2550 DXGI_FORMAT Format;
2551 D3D12_UAV_DIMENSION ViewDimension;
2552
2553 union
2554 {
2555 D3D12_BUFFER_UAV Buffer;
2556 D3D12_TEX1D_UAV Texture1D;
2557 D3D12_TEX1D_ARRAY_UAV Texture1DArray;
2558 D3D12_TEX2D_UAV Texture2D;
2559 D3D12_TEX2D_ARRAY_UAV Texture2DArray;
2560 D3D12_TEX2DMS_UAV Texture2DMS;
2561 D3D12_TEX2DMS_ARRAY_UAV Texture2DMSArray;
2562 D3D12_TEX3D_UAV Texture3D;
2563 };
2564} D3D12_UNORDERED_ACCESS_VIEW_DESC;
2565
2566typedef struct D3D12_BUFFER_RTV
2567{
2568 UINT64 FirstElement;
2569 UINT NumElements;
2570} D3D12_BUFFER_RTV;
2571
2572typedef struct D3D12_TEX1D_RTV
2573{
2574 UINT MipSlice;
2575} D3D12_TEX1D_RTV;
2576
2577typedef struct D3D12_TEX1D_ARRAY_RTV
2578{
2579 UINT MipSlice;
2580 UINT FirstArraySlice;
2581 UINT ArraySize;
2582} D3D12_TEX1D_ARRAY_RTV;
2583
2584typedef struct D3D12_TEX2D_RTV
2585{
2586 UINT MipSlice;
2587 UINT PlaneSlice;
2588} D3D12_TEX2D_RTV;
2589
2590typedef struct D3D12_TEX2DMS_RTV
2591{
2592 UINT UnusedField_NothingToDefine;
2593} D3D12_TEX2DMS_RTV;
2594
2595typedef struct D3D12_TEX2D_ARRAY_RTV
2596{
2597 UINT MipSlice;
2598 UINT FirstArraySlice;
2599 UINT ArraySize;
2600 UINT PlaneSlice;
2601} D3D12_TEX2D_ARRAY_RTV;
2602
2603typedef struct D3D12_TEX2DMS_ARRAY_RTV
2604{
2605 UINT FirstArraySlice;
2606 UINT ArraySize;
2607} D3D12_TEX2DMS_ARRAY_RTV;
2608
2609typedef struct D3D12_TEX3D_RTV
2610{
2611 UINT MipSlice;
2612 UINT FirstWSlice;
2613 UINT WSize;
2614} D3D12_TEX3D_RTV;
2615
2616typedef enum D3D12_RTV_DIMENSION
2617{
2618 D3D12_RTV_DIMENSION_UNKNOWN = 0,
2619 D3D12_RTV_DIMENSION_BUFFER = 1,
2620 D3D12_RTV_DIMENSION_TEXTURE1D = 2,
2621 D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3,
2622 D3D12_RTV_DIMENSION_TEXTURE2D = 4,
2623 D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5,
2624 D3D12_RTV_DIMENSION_TEXTURE2DMS = 6,
2625 D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
2626 D3D12_RTV_DIMENSION_TEXTURE3D = 8,
2627} D3D12_RTV_DIMENSION;
2628
2629typedef struct D3D12_RENDER_TARGET_VIEW_DESC
2630{
2631 DXGI_FORMAT Format;
2632 D3D12_RTV_DIMENSION ViewDimension;
2633
2634 union
2635 {
2636 D3D12_BUFFER_RTV Buffer;
2637 D3D12_TEX1D_RTV Texture1D;
2638 D3D12_TEX1D_ARRAY_RTV Texture1DArray;
2639 D3D12_TEX2D_RTV Texture2D;
2640 D3D12_TEX2D_ARRAY_RTV Texture2DArray;
2641 D3D12_TEX2DMS_RTV Texture2DMS;
2642 D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
2643 D3D12_TEX3D_RTV Texture3D;
2644 };
2645} D3D12_RENDER_TARGET_VIEW_DESC;
2646
2647typedef struct D3D12_TEX1D_DSV
2648{
2649 UINT MipSlice;
2650} D3D12_TEX1D_DSV;
2651
2652typedef struct D3D12_TEX1D_ARRAY_DSV
2653{
2654 UINT MipSlice;
2655 UINT FirstArraySlice;
2656 UINT ArraySize;
2657} D3D12_TEX1D_ARRAY_DSV;
2658
2659typedef struct D3D12_TEX2D_DSV
2660{
2661 UINT MipSlice;
2662} D3D12_TEX2D_DSV;
2663
2664typedef struct D3D12_TEX2D_ARRAY_DSV
2665{
2666 UINT MipSlice;
2667 UINT FirstArraySlice;
2668 UINT ArraySize;
2669} D3D12_TEX2D_ARRAY_DSV;
2670
2671typedef struct D3D12_TEX2DMS_DSV
2672{
2673 UINT UnusedField_NothingToDefine;
2674} D3D12_TEX2DMS_DSV;
2675
2676typedef struct D3D12_TEX2DMS_ARRAY_DSV
2677{
2678 UINT FirstArraySlice;
2679 UINT ArraySize;
2680} D3D12_TEX2DMS_ARRAY_DSV;
2681
2682typedef enum D3D12_DSV_FLAGS
2683{
2684 D3D12_DSV_FLAG_NONE = 0x0,
2685 D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1,
2686 D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2,
2687} D3D12_DSV_FLAGS;
2688cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAGS )" )
2689
2690typedef enum D3D12_DSV_DIMENSION
2691{
2692 D3D12_DSV_DIMENSION_UNKNOWN = 0,
2693 D3D12_DSV_DIMENSION_TEXTURE1D = 1,
2694 D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2,
2695 D3D12_DSV_DIMENSION_TEXTURE2D = 3,
2696 D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4,
2697 D3D12_DSV_DIMENSION_TEXTURE2DMS = 5,
2698 D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6,
2699} D3D12_DSV_DIMENSION;
2700
2701typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC
2702{
2703 DXGI_FORMAT Format;
2704 D3D12_DSV_DIMENSION ViewDimension;
2705 D3D12_DSV_FLAGS Flags;
2706
2707 union
2708 {
2709 D3D12_TEX1D_DSV Texture1D;
2710 D3D12_TEX1D_ARRAY_DSV Texture1DArray;
2711 D3D12_TEX2D_DSV Texture2D;
2712 D3D12_TEX2D_ARRAY_DSV Texture2DArray;
2713 D3D12_TEX2DMS_DSV Texture2DMS;
2714 D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
2715 };
2716} D3D12_DEPTH_STENCIL_VIEW_DESC;
2717
2718typedef enum D3D12_CLEAR_FLAGS
2719{
2720 // Intentionally no flag for NONE
2721 D3D12_CLEAR_FLAG_DEPTH = 0x01,
2722 D3D12_CLEAR_FLAG_STENCIL = 0x02,
2723} D3D12_CLEAR_FLAGS;
2724cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAGS )" )
2725
2726typedef enum D3D12_FENCE_FLAGS
2727{
2728 D3D12_FENCE_FLAG_NONE = 0x0,
2729 D3D12_FENCE_FLAG_SHARED = 0x1,
2730 D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2,
2731 D3D12_FENCE_FLAG_NON_MONITORED = 0x4,
2732} D3D12_FENCE_FLAGS;
2733cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS )" )
2734
2735typedef enum D3D12_DESCRIPTOR_HEAP_TYPE
2736{
2737 D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,
2738 D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER,
2739 D3D12_DESCRIPTOR_HEAP_TYPE_RTV,
2740 D3D12_DESCRIPTOR_HEAP_TYPE_DSV,
2741 D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES
2742} D3D12_DESCRIPTOR_HEAP_TYPE;
2743
2744typedef enum D3D12_DESCRIPTOR_HEAP_FLAGS
2745{
2746 D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0,
2747 D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1,
2748} D3D12_DESCRIPTOR_HEAP_FLAGS;
2749cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_HEAP_FLAGS )" )
2750
2751typedef struct D3D12_DESCRIPTOR_HEAP_DESC
2752{
2753 D3D12_DESCRIPTOR_HEAP_TYPE Type;
2754 UINT NumDescriptors;
2755 D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
2756 UINT NodeMask;
2757} D3D12_DESCRIPTOR_HEAP_DESC;
2758
2759typedef enum D3D12_DESCRIPTOR_RANGE_TYPE
2760{
2761 D3D12_DESCRIPTOR_RANGE_TYPE_SRV,
2762 D3D12_DESCRIPTOR_RANGE_TYPE_UAV,
2763 D3D12_DESCRIPTOR_RANGE_TYPE_CBV,
2764 D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER
2765} D3D12_DESCRIPTOR_RANGE_TYPE;
2766
2767typedef struct D3D12_DESCRIPTOR_RANGE
2768{
2769 D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
2770 UINT NumDescriptors;
2771 UINT BaseShaderRegister;
2772 UINT RegisterSpace;
2773 UINT OffsetInDescriptorsFromTableStart;
2774} D3D12_DESCRIPTOR_RANGE;
2775
2776
2777typedef struct D3D12_ROOT_DESCRIPTOR_TABLE
2778{
2779 UINT NumDescriptorRanges;
2780 [annotation("_Field_size_full_(NumDescriptorRanges)")] const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges;
2781} D3D12_ROOT_DESCRIPTOR_TABLE;
2782
2783
2784typedef struct D3D12_ROOT_CONSTANTS
2785{
2786 UINT ShaderRegister;
2787 UINT RegisterSpace;
2788 UINT Num32BitValues;
2789} D3D12_ROOT_CONSTANTS;
2790
2791typedef struct D3D12_ROOT_DESCRIPTOR
2792{
2793 UINT ShaderRegister;
2794 UINT RegisterSpace;
2795} D3D12_ROOT_DESCRIPTOR;
2796
2797typedef enum D3D12_SHADER_VISIBILITY
2798{
2799 D3D12_SHADER_VISIBILITY_ALL = 0,
2800 D3D12_SHADER_VISIBILITY_VERTEX = 1,
2801 D3D12_SHADER_VISIBILITY_HULL = 2,
2802 D3D12_SHADER_VISIBILITY_DOMAIN = 3,
2803 D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
2804 D3D12_SHADER_VISIBILITY_PIXEL = 5,
2805 D3D12_SHADER_VISIBILITY_AMPLIFICATION = 6,
2806 D3D12_SHADER_VISIBILITY_MESH = 7,
2807} D3D12_SHADER_VISIBILITY;
2808
2809typedef enum D3D12_ROOT_PARAMETER_TYPE
2810{
2811 D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE,
2812 D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS,
2813 D3D12_ROOT_PARAMETER_TYPE_CBV,
2814 D3D12_ROOT_PARAMETER_TYPE_SRV,
2815 D3D12_ROOT_PARAMETER_TYPE_UAV
2816} D3D12_ROOT_PARAMETER_TYPE;
2817
2818typedef struct D3D12_ROOT_PARAMETER
2819{
2820 D3D12_ROOT_PARAMETER_TYPE ParameterType;
2821 union
2822 {
2823 D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
2824 D3D12_ROOT_CONSTANTS Constants;
2825 D3D12_ROOT_DESCRIPTOR Descriptor;
2826 };
2827 D3D12_SHADER_VISIBILITY ShaderVisibility;
2828} D3D12_ROOT_PARAMETER;
2829
2830typedef enum D3D12_ROOT_SIGNATURE_FLAGS
2831{
2832 D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x0,
2833 D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
2834 D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2,
2835 D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x4,
2836 D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8,
2837 D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
2838 D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
2839 D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40,
2840 D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE = 0x80,
2841 D3D12_ROOT_SIGNATURE_FLAG_DENY_AMPLIFICATION_SHADER_ROOT_ACCESS = 0x100,
2842 D3D12_ROOT_SIGNATURE_FLAG_DENY_MESH_SHADER_ROOT_ACCESS = 0x200,
2843 D3D12_ROOT_SIGNATURE_FLAG_CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED = 0x400,
2844 D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED = 0x800,
2845} D3D12_ROOT_SIGNATURE_FLAGS;
2846cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS )" )
2847
2848
2849typedef enum D3D12_STATIC_BORDER_COLOR
2850{
2851 D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK, // 0.0f,0.0f,0.0f,0.0f
2852 D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK, // 0.0f,0.0f,0.0f,1.0f
2853 D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, // 1.0f,1.0f,1.0f,1.0f
2854 D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT, // 0,0,0,1
2855 D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT, // 1,1,1,1
2856
2857} D3D12_STATIC_BORDER_COLOR;
2858
2859typedef struct D3D12_STATIC_SAMPLER_DESC
2860{
2861 D3D12_FILTER Filter;
2862 D3D12_TEXTURE_ADDRESS_MODE AddressU;
2863 D3D12_TEXTURE_ADDRESS_MODE AddressV;
2864 D3D12_TEXTURE_ADDRESS_MODE AddressW;
2865 FLOAT MipLODBias;
2866 UINT MaxAnisotropy;
2867 D3D12_COMPARISON_FUNC ComparisonFunc;
2868 D3D12_STATIC_BORDER_COLOR BorderColor;
2869 FLOAT MinLOD;
2870 FLOAT MaxLOD;
2871 UINT ShaderRegister;
2872 UINT RegisterSpace;
2873 D3D12_SHADER_VISIBILITY ShaderVisibility;
2874} D3D12_STATIC_SAMPLER_DESC;
2875
2876typedef struct D3D12_STATIC_SAMPLER_DESC1
2877{
2878 D3D12_FILTER Filter;
2879 D3D12_TEXTURE_ADDRESS_MODE AddressU;
2880 D3D12_TEXTURE_ADDRESS_MODE AddressV;
2881 D3D12_TEXTURE_ADDRESS_MODE AddressW;
2882 FLOAT MipLODBias;
2883 UINT MaxAnisotropy;
2884 D3D12_COMPARISON_FUNC ComparisonFunc;
2885 D3D12_STATIC_BORDER_COLOR BorderColor;
2886 FLOAT MinLOD;
2887 FLOAT MaxLOD;
2888 UINT ShaderRegister;
2889 UINT RegisterSpace;
2890 D3D12_SHADER_VISIBILITY ShaderVisibility;
2891 D3D12_SAMPLER_FLAGS Flags;
2892} D3D12_STATIC_SAMPLER_DESC1;
2893
2894typedef struct D3D12_ROOT_SIGNATURE_DESC
2895{
2896 UINT NumParameters;
2897 [annotation("_Field_size_full_(NumParameters)")] const D3D12_ROOT_PARAMETER* pParameters;
2898 UINT NumStaticSamplers;
2899 [annotation("_Field_size_full_(NumStaticSamplers)")] const D3D12_STATIC_SAMPLER_DESC* pStaticSamplers;
2900 D3D12_ROOT_SIGNATURE_FLAGS Flags;
2901} D3D12_ROOT_SIGNATURE_DESC;
2902
2903typedef enum D3D12_DESCRIPTOR_RANGE_FLAGS
2904{
2905 D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0x0,
2906 D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1,
2907 D3D12_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2,
2908 D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
2909 D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8,
2910 D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x10000,
2911} D3D12_DESCRIPTOR_RANGE_FLAGS;
2912cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_RANGE_FLAGS )")
2913
2914typedef struct D3D12_DESCRIPTOR_RANGE1
2915{
2916 D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
2917 UINT NumDescriptors;
2918 UINT BaseShaderRegister;
2919 UINT RegisterSpace;
2920 D3D12_DESCRIPTOR_RANGE_FLAGS Flags;
2921 UINT OffsetInDescriptorsFromTableStart;
2922} D3D12_DESCRIPTOR_RANGE1;
2923
2924typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1
2925{
2926 UINT NumDescriptorRanges;
2927 [annotation("_Field_size_full_(NumDescriptorRanges)")] const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges;
2928} D3D12_ROOT_DESCRIPTOR_TABLE1;
2929
2930typedef enum D3D12_ROOT_DESCRIPTOR_FLAGS
2931{
2932 D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0x0,
2933 D3D12_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2,
2934 D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
2935 D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8,
2936} D3D12_ROOT_DESCRIPTOR_FLAGS;
2937cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS )")
2938
2939typedef struct D3D12_ROOT_DESCRIPTOR1
2940{
2941 UINT ShaderRegister;
2942 UINT RegisterSpace;
2943 D3D12_ROOT_DESCRIPTOR_FLAGS Flags;
2944} D3D12_ROOT_DESCRIPTOR1;
2945
2946typedef struct D3D12_ROOT_PARAMETER1
2947{
2948 D3D12_ROOT_PARAMETER_TYPE ParameterType;
2949 union
2950 {
2951 D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable;
2952 D3D12_ROOT_CONSTANTS Constants;
2953 D3D12_ROOT_DESCRIPTOR1 Descriptor;
2954 };
2955 D3D12_SHADER_VISIBILITY ShaderVisibility;
2956} D3D12_ROOT_PARAMETER1;
2957
2958typedef struct D3D12_ROOT_SIGNATURE_DESC1
2959{
2960 UINT NumParameters;
2961 [annotation("_Field_size_full_(NumParameters)")] const D3D12_ROOT_PARAMETER1* pParameters;
2962 UINT NumStaticSamplers;
2963 [annotation("_Field_size_full_(NumStaticSamplers)")] const D3D12_STATIC_SAMPLER_DESC* pStaticSamplers;
2964 D3D12_ROOT_SIGNATURE_FLAGS Flags;
2965} D3D12_ROOT_SIGNATURE_DESC1;
2966
2967typedef struct D3D12_ROOT_SIGNATURE_DESC2
2968{
2969 UINT NumParameters;
2970 [annotation("_Field_size_full_(NumParameters)")] const D3D12_ROOT_PARAMETER1* pParameters;
2971 UINT NumStaticSamplers;
2972 [annotation("_Field_size_full_(NumStaticSamplers)")] const D3D12_STATIC_SAMPLER_DESC1* pStaticSamplers;
2973 D3D12_ROOT_SIGNATURE_FLAGS Flags;
2974} D3D12_ROOT_SIGNATURE_DESC2;
2975
2976
2977typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC
2978{
2979 D3D_ROOT_SIGNATURE_VERSION Version;
2980 union
2981 {
2982 D3D12_ROOT_SIGNATURE_DESC Desc_1_0;
2983 D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1;
2984 D3D12_ROOT_SIGNATURE_DESC2 Desc_1_2;
2985 };
2986} D3D12_VERSIONED_ROOT_SIGNATURE_DESC;
2987
2988[ uuid( 34AB647B-3CC8-46AC-841B-C0965645C046 ), object, local, pointer_default( unique ) ]
2989interface ID3D12RootSignatureDeserializer
2990 : IUnknown
2991{
2992 const D3D12_ROOT_SIGNATURE_DESC * GetRootSignatureDesc();
2993};
2994
2995[ uuid( 7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0 ), object, local, pointer_default( unique ) ]
2996interface ID3D12VersionedRootSignatureDeserializer
2997 : IUnknown
2998{
2999 HRESULT GetRootSignatureDescAtVersion(D3D_ROOT_SIGNATURE_VERSION convertToVersion, [annotation("_Out_")] const D3D12_VERSIONED_ROOT_SIGNATURE_DESC** ppDesc);
3000 const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* GetUnconvertedRootSignatureDesc();
3001};
3002
3003cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(")
3004cpp_quote( " _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature," )
3005cpp_quote( " _In_ D3D_ROOT_SIGNATURE_VERSION Version," )
3006cpp_quote( " _Out_ ID3DBlob** ppBlob," )
3007cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" )
3008cpp_quote( "" )
3009cpp_quote( "HRESULT WINAPI D3D12SerializeRootSignature(")
3010cpp_quote( " _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature," )
3011cpp_quote( " _In_ D3D_ROOT_SIGNATURE_VERSION Version," )
3012cpp_quote( " _Out_ ID3DBlob** ppBlob," )
3013cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" )
3014cpp_quote( "" )
3015cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)(")
3016cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," )
3017cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," )
3018cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," )
3019cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" )
3020cpp_quote( "" )
3021cpp_quote( "HRESULT WINAPI D3D12CreateRootSignatureDeserializer(")
3022cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," )
3023cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," )
3024cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," )
3025cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" )
3026cpp_quote( "" )
3027cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)(" )
3028cpp_quote( " _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature," )
3029cpp_quote( " _Out_ ID3DBlob** ppBlob," )
3030cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" )
3031cpp_quote( "" )
3032cpp_quote( "HRESULT WINAPI D3D12SerializeVersionedRootSignature(" )
3033cpp_quote( " _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature," )
3034cpp_quote( " _Out_ ID3DBlob** ppBlob," )
3035cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" )
3036cpp_quote( "" )
3037cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER)(" )
3038cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," )
3039cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," )
3040cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," )
3041cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" )
3042cpp_quote( "" )
3043cpp_quote( "HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(")
3044cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," )
3045cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," )
3046cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," )
3047cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" )
3048cpp_quote( "" )
3049cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER_FROM_SUBOBJECT_IN_LIBRARY)(")
3050cpp_quote(" _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,")
3051cpp_quote(" _In_ SIZE_T SrcDataSizeInBytes,")
3052cpp_quote(" _In_ LPCWSTR RootSignatureSubobjectName,")
3053cpp_quote(" _In_ REFIID pRootSignatureDeserializerInterface,")
3054cpp_quote(" _Out_ void** ppRootSignatureDeserializer);")
3055cpp_quote("")
3056cpp_quote("HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(")
3057cpp_quote(" _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,")
3058cpp_quote(" _In_ SIZE_T SrcDataSizeInBytes,")
3059cpp_quote(" _In_opt_ LPCWSTR RootSignatureSubobjectName,")
3060cpp_quote(" _In_ REFIID pRootSignatureDeserializerInterface,")
3061cpp_quote(" _Out_ void** ppRootSignatureDeserializer);")
3062cpp_quote("")
3063
3064typedef struct D3D12_CPU_DESCRIPTOR_HANDLE
3065{
3066 SIZE_T ptr;
3067} D3D12_CPU_DESCRIPTOR_HANDLE;
3068
3069
3070typedef struct D3D12_GPU_DESCRIPTOR_HANDLE
3071{
3072 UINT64 ptr;
3073} D3D12_GPU_DESCRIPTOR_HANDLE;
3074
3075cpp_quote( "// If rects are supplied in D3D12_DISCARD_REGION, below, the resource " )
3076cpp_quote( "// must have 2D subresources with all specified subresources the same dimension." )
3077typedef struct D3D12_DISCARD_REGION
3078{
3079 UINT NumRects;
3080 [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects;
3081 UINT FirstSubresource;
3082 UINT NumSubresources;
3083} D3D12_DISCARD_REGION;
3084
3085typedef enum D3D12_QUERY_HEAP_TYPE
3086{
3087 D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0,
3088 D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1,
3089 D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,
3090 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3,
3091 D3D12_QUERY_HEAP_TYPE_VIDEO_DECODE_STATISTICS = 4,
3092 D3D12_QUERY_HEAP_TYPE_COPY_QUEUE_TIMESTAMP = 5,
3093 D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS1 = 7,
3094
3095} D3D12_QUERY_HEAP_TYPE;
3096
3097typedef struct D3D12_QUERY_HEAP_DESC
3098{
3099 D3D12_QUERY_HEAP_TYPE Type;
3100 UINT Count;
3101 UINT NodeMask;
3102} D3D12_QUERY_HEAP_DESC;
3103
3104typedef enum D3D12_QUERY_TYPE
3105{
3106 D3D12_QUERY_TYPE_OCCLUSION = 0,
3107 D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1,
3108 D3D12_QUERY_TYPE_TIMESTAMP = 2,
3109 D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3,
3110 D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,
3111 D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,
3112 D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,
3113 D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7,
3114 D3D12_QUERY_TYPE_VIDEO_DECODE_STATISTICS = 8,
3115 D3D12_QUERY_TYPE_PIPELINE_STATISTICS1 = 10,
3116
3117} D3D12_QUERY_TYPE;
3118
3119typedef enum D3D12_PREDICATION_OP
3120{
3121 D3D12_PREDICATION_OP_EQUAL_ZERO = 0,
3122 D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1,
3123} D3D12_PREDICATION_OP;
3124
3125typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS
3126{
3127 UINT64 IAVertices;
3128 UINT64 IAPrimitives;
3129 UINT64 VSInvocations;
3130 UINT64 GSInvocations;
3131 UINT64 GSPrimitives;
3132 UINT64 CInvocations;
3133 UINT64 CPrimitives;
3134 UINT64 PSInvocations;
3135 UINT64 HSInvocations;
3136 UINT64 DSInvocations;
3137 UINT64 CSInvocations;
3138} D3D12_QUERY_DATA_PIPELINE_STATISTICS;
3139
3140typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS1
3141{
3142 UINT64 IAVertices;
3143 UINT64 IAPrimitives;
3144 UINT64 VSInvocations;
3145 UINT64 GSInvocations;
3146 UINT64 GSPrimitives;
3147 UINT64 CInvocations;
3148 UINT64 CPrimitives;
3149 UINT64 PSInvocations;
3150 UINT64 HSInvocations;
3151 UINT64 DSInvocations;
3152 UINT64 CSInvocations;
3153 UINT64 ASInvocations;
3154 UINT64 MSInvocations;
3155 UINT64 MSPrimitives;
3156} D3D12_QUERY_DATA_PIPELINE_STATISTICS1;
3157
3158typedef struct D3D12_QUERY_DATA_SO_STATISTICS
3159{
3160 UINT64 NumPrimitivesWritten;
3161 UINT64 PrimitivesStorageNeeded;
3162} D3D12_QUERY_DATA_SO_STATISTICS;
3163
3164typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW
3165{
3166 D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
3167 UINT64 SizeInBytes;
3168 D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
3169} D3D12_STREAM_OUTPUT_BUFFER_VIEW;
3170
3171typedef struct D3D12_DRAW_ARGUMENTS
3172{
3173 UINT VertexCountPerInstance;
3174 UINT InstanceCount;
3175 UINT StartVertexLocation;
3176 UINT StartInstanceLocation;
3177} D3D12_DRAW_ARGUMENTS;
3178
3179typedef struct D3D12_DRAW_INDEXED_ARGUMENTS
3180{
3181 UINT IndexCountPerInstance;
3182 UINT InstanceCount;
3183 UINT StartIndexLocation;
3184 INT BaseVertexLocation;
3185 UINT StartInstanceLocation;
3186} D3D12_DRAW_INDEXED_ARGUMENTS;
3187
3188typedef struct D3D12_DISPATCH_ARGUMENTS
3189{
3190 UINT ThreadGroupCountX;
3191 UINT ThreadGroupCountY;
3192 UINT ThreadGroupCountZ;
3193} D3D12_DISPATCH_ARGUMENTS;
3194
3195typedef struct D3D12_VERTEX_BUFFER_VIEW
3196{
3197 D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
3198 UINT SizeInBytes;
3199 UINT StrideInBytes;
3200} D3D12_VERTEX_BUFFER_VIEW;
3201
3202typedef struct D3D12_INDEX_BUFFER_VIEW
3203{
3204 D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
3205 UINT SizeInBytes;
3206 DXGI_FORMAT Format;
3207} D3D12_INDEX_BUFFER_VIEW;
3208
3209typedef enum D3D12_INDIRECT_ARGUMENT_TYPE
3210{
3211 D3D12_INDIRECT_ARGUMENT_TYPE_DRAW,
3212 D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED,
3213 D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH,
3214 D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW,
3215 D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW,
3216 D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT,
3217 D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW,
3218 D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW,
3219 D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW,
3220 D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS,
3221 D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH,
3222 D3D12_INDIRECT_ARGUMENT_TYPE_INCREMENTING_CONSTANT,
3223} D3D12_INDIRECT_ARGUMENT_TYPE;
3224
3225typedef struct D3D12_INDIRECT_ARGUMENT_DESC
3226{
3227 D3D12_INDIRECT_ARGUMENT_TYPE Type;
3228
3229 union
3230 {
3231 struct
3232 {
3233 UINT Slot;
3234 } VertexBuffer;
3235
3236 struct
3237 {
3238 UINT RootParameterIndex;
3239 UINT DestOffsetIn32BitValues;
3240 UINT Num32BitValuesToSet;
3241 } Constant;
3242
3243 struct
3244 {
3245 UINT RootParameterIndex;
3246 } ConstantBufferView;
3247
3248 struct
3249 {
3250 UINT RootParameterIndex;
3251 } ShaderResourceView;
3252
3253 struct
3254 {
3255 UINT RootParameterIndex;
3256 } UnorderedAccessView;
3257
3258 // Tier 1.1 support
3259 struct
3260 {
3261 UINT RootParameterIndex;
3262 UINT DestOffsetIn32BitValues;
3263 } IncrementingConstant;
3264 };
3265} D3D12_INDIRECT_ARGUMENT_DESC;
3266
3267typedef struct D3D12_COMMAND_SIGNATURE_DESC
3268{
3269 // The number of bytes between each drawing structure
3270 UINT ByteStride;
3271 UINT NumArgumentDescs;
3272 [annotation("_Field_size_full_(NumArgumentDescs)")] const D3D12_INDIRECT_ARGUMENT_DESC* pArgumentDescs;
3273 UINT NodeMask;
3274} D3D12_COMMAND_SIGNATURE_DESC;
3275
3276interface ID3D12Device;
3277
3278[ uuid( c4fec28f-7966-4e95-9f94-f431cb56c3b8 ), object, local, pointer_default( unique ) ]
3279interface ID3D12Object
3280 : IUnknown
3281{
3282 HRESULT GetPrivateData(
3283 [annotation("_In_")] REFGUID guid,
3284 [annotation("_Inout_")] UINT* pDataSize,
3285 [annotation("_Out_writes_bytes_opt_( *pDataSize )")] void* pData );
3286 HRESULT SetPrivateData(
3287 [annotation("_In_")] REFGUID guid,
3288 [annotation("_In_")] UINT DataSize,
3289 [annotation("_In_reads_bytes_opt_( DataSize )")] const void* pData );
3290 HRESULT SetPrivateDataInterface(
3291 [annotation("_In_")] REFGUID guid,
3292 [annotation("_In_opt_")] const IUnknown* pData );
3293 HRESULT SetName(
3294 [annotation("_In_z_")] LPCWSTR Name );
3295}
3296
3297[ uuid( 905db94b-a00c-4140-9df5-2b64ca9ea357 ), object, local, pointer_default( unique ) ]
3298interface ID3D12DeviceChild
3299 : ID3D12Object
3300{
3301 HRESULT GetDevice(
3302 [in] REFIID riid,
3303 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvDevice
3304 );
3305}
3306
3307[ uuid( 63ee58fb-1268-4835-86da-f008ce62f0d6 ), object, local, pointer_default( unique ) ]
3308interface ID3D12Pageable
3309 : ID3D12DeviceChild
3310{
3311}
3312
3313[ uuid( 6b3b2502-6e51-45b3-90ee-9884265e8df3 ), object, local, pointer_default( unique ) ]
3314interface ID3D12Heap
3315 : ID3D12Pageable
3316{
3317 D3D12_HEAP_DESC GetDesc();
3318}
3319
3320[ uuid( 696442be-a72e-4059-bc79-5b5c98040fad ), object, local, pointer_default( unique ) ]
3321interface ID3D12Resource
3322 : ID3D12Pageable
3323{
3324 HRESULT Map(
3325 UINT Subresource,
3326 [annotation("_In_opt_")] const D3D12_RANGE* pReadRange,
3327 [annotation("_Outptr_opt_result_bytebuffer_(_Inexpressible_(\"Dependent on resource\"))")] void** ppData);
3328
3329 void Unmap(UINT Subresource, [annotation("_In_opt_")] const D3D12_RANGE* pWrittenRange );
3330
3331 D3D12_RESOURCE_DESC GetDesc();
3332
3333 D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress();
3334
3335 HRESULT WriteToSubresource(
3336 UINT DstSubresource,
3337 [annotation("_In_opt_")] const D3D12_BOX* pDstBox,
3338 [annotation("_In_")] const void* pSrcData,
3339 UINT SrcRowPitch,
3340 UINT SrcDepthPitch );
3341
3342 HRESULT ReadFromSubresource(
3343 [annotation("_Out_")] void* pDstData,
3344 UINT DstRowPitch,
3345 UINT DstDepthPitch,
3346 UINT SrcSubresource,
3347 [annotation("_In_opt_")] const D3D12_BOX* pSrcBox );
3348
3349 HRESULT GetHeapProperties(
3350 [annotation("_Out_opt_")] D3D12_HEAP_PROPERTIES* pHeapProperties,
3351 [annotation("_Out_opt_")] D3D12_HEAP_FLAGS* pHeapFlags
3352 );
3353}
3354
3355[ uuid( 6102dee4-af59-4b09-b999-b44d73f09b24 ), object, local, pointer_default( unique ) ]
3356interface ID3D12CommandAllocator
3357 : ID3D12Pageable
3358{
3359 HRESULT Reset();
3360}
3361
3362[ uuid( 0a753dcf-c4d8-4b91-adf6-be5a60d95a76 ), object, local, pointer_default( unique ) ]
3363interface ID3D12Fence
3364 : ID3D12Pageable
3365{
3366 UINT64 GetCompletedValue();
3367 HRESULT SetEventOnCompletion(UINT64 Value, HANDLE hEvent);
3368 HRESULT Signal(UINT64 Value);
3369};
3370
3371[ uuid( 433685fe-e22b-4ca0-a8db-b5b4f4dd0e4a ), object, local, pointer_default( unique ) ]
3372interface ID3D12Fence1
3373 : ID3D12Fence
3374{
3375 D3D12_FENCE_FLAGS GetCreationFlags();
3376};
3377
3378
3379[ uuid( 765a30f3-f624-4c6f-a828-ace948622445 ), object, local, pointer_default( unique ) ]
3380interface ID3D12PipelineState
3381 : ID3D12Pageable
3382{
3383 HRESULT GetCachedBlob([annotation("_COM_Outptr_")] ID3DBlob** ppBlob);
3384}
3385
3386[uuid(5646804c-9638-48f7-9182-b3ee5a6b60fb), object, local, pointer_default(unique)]
3387interface ID3D12PipelineState1
3388 : ID3D12PipelineState
3389{
3390 HRESULT GetRootSignature(
3391 [in] REFIID riid, // Expected ID3D12RootSignature
3392 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature);
3393}
3394
3395[ uuid( 8efb471d-616c-4f49-90f7-127bb763fa51 ), object, local, pointer_default( unique ) ]
3396interface ID3D12DescriptorHeap
3397 : ID3D12Pageable
3398{
3399 D3D12_DESCRIPTOR_HEAP_DESC GetDesc();
3400
3401 D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();
3402 D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();
3403}
3404
3405[ uuid( 0d9658ae-ed45-469e-a61d-970ec583cab4 ), object, local, pointer_default( unique ) ]
3406interface ID3D12QueryHeap
3407 : ID3D12Pageable
3408{
3409};
3410
3411[ uuid( c36a797c-ec80-4f0a-8985-a7b2475082d1 ), object, local, pointer_default( unique ) ]
3412interface ID3D12CommandSignature
3413 : ID3D12Pageable
3414{
3415};
3416
3417[ uuid( 7116d91c-e7e4-47ce-b8c6-ec8168f437e5 ), object, local, pointer_default( unique ) ]
3418interface ID3D12CommandList
3419 : ID3D12DeviceChild
3420{
3421 D3D12_COMMAND_LIST_TYPE GetType();
3422}
3423
3424// Superseded by ID3D12GraphicsCommandList1
3425[ uuid( 5b160d0f-ac1b-4185-8ba8-b3ae42a5a455 ), object, local, pointer_default( unique ) ]
3426interface ID3D12GraphicsCommandList
3427 : ID3D12CommandList
3428{
3429 HRESULT Close();
3430
3431 HRESULT Reset(
3432 [annotation("_In_")] ID3D12CommandAllocator* pAllocator,
3433 [annotation("_In_opt_")] ID3D12PipelineState* pInitialState
3434 );
3435
3436 void ClearState(
3437 [annotation("_In_opt_")] ID3D12PipelineState* pPipelineState
3438 );
3439
3440 void DrawInstanced(
3441 [annotation("_In_")] UINT VertexCountPerInstance,
3442 [annotation("_In_")] UINT InstanceCount,
3443 [annotation("_In_")] UINT StartVertexLocation,
3444 [annotation("_In_")] UINT StartInstanceLocation
3445 );
3446
3447 void DrawIndexedInstanced(
3448 [annotation("_In_")] UINT IndexCountPerInstance,
3449 [annotation("_In_")] UINT InstanceCount,
3450 [annotation("_In_")] UINT StartIndexLocation,
3451 [annotation("_In_")] INT BaseVertexLocation,
3452 [annotation("_In_")] UINT StartInstanceLocation
3453 );
3454
3455 void Dispatch(
3456 [annotation("_In_")] UINT ThreadGroupCountX,
3457 [annotation("_In_")] UINT ThreadGroupCountY,
3458 [annotation("_In_")] UINT ThreadGroupCountZ
3459 );
3460
3461 void CopyBufferRegion(
3462 [annotation("_In_")] ID3D12Resource* pDstBuffer,
3463 UINT64 DstOffset,
3464 [annotation("_In_")] ID3D12Resource* pSrcBuffer,
3465 UINT64 SrcOffset,
3466 UINT64 NumBytes
3467 );
3468
3469 void CopyTextureRegion(
3470 [annotation("_In_")] const D3D12_TEXTURE_COPY_LOCATION* pDst,
3471 UINT DstX, UINT DstY, UINT DstZ,
3472 [annotation("_In_")] const D3D12_TEXTURE_COPY_LOCATION* pSrc,
3473 [annotation("_In_opt_")] const D3D12_BOX* pSrcBox
3474 );
3475
3476 void CopyResource(
3477 [annotation("_In_")] ID3D12Resource* pDstResource,
3478 [annotation("_In_")] ID3D12Resource* pSrcResource
3479 );
3480
3481 void CopyTiles(
3482 [annotation("_In_")] ID3D12Resource* pTiledResource,
3483 [annotation("_In_")] const D3D12_TILED_RESOURCE_COORDINATE* pTileRegionStartCoordinate,
3484 [annotation("_In_")] const D3D12_TILE_REGION_SIZE* pTileRegionSize,
3485 [annotation("_In_")] ID3D12Resource* pBuffer,
3486 UINT64 BufferStartOffsetInBytes,
3487 D3D12_TILE_COPY_FLAGS Flags
3488 );
3489
3490 void ResolveSubresource(
3491 [annotation("_In_")] ID3D12Resource* pDstResource,
3492 [annotation("_In_")] UINT DstSubresource,
3493 [annotation("_In_")] ID3D12Resource* pSrcResource,
3494 [annotation("_In_")] UINT SrcSubresource,
3495 [annotation("_In_")] DXGI_FORMAT Format
3496 );
3497
3498 void IASetPrimitiveTopology(
3499 [annotation("_In_")] D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology
3500 );
3501
3502 void RSSetViewports(
3503 [annotation("_In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)")] UINT NumViewports,
3504 [annotation("_In_reads_( NumViewports)")] const D3D12_VIEWPORT* pViewports
3505 );
3506
3507 void RSSetScissorRects(
3508 [annotation("_In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)")] UINT NumRects,
3509 [annotation("_In_reads_( NumRects)")] const D3D12_RECT* pRects
3510 );
3511
3512 void OMSetBlendFactor(
3513 [annotation("_In_reads_opt_(4)")] const FLOAT BlendFactor[ 4 ]
3514 );
3515
3516 void OMSetStencilRef(
3517 [annotation("_In_")] UINT StencilRef
3518 );
3519
3520 void SetPipelineState(
3521 [annotation("_In_")] ID3D12PipelineState* pPipelineState
3522 );
3523
3524 void ResourceBarrier(
3525 [annotation("_In_")] UINT NumBarriers,
3526 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
3527 );
3528
3529 void ExecuteBundle(
3530 [annotation("_In_")] ID3D12GraphicsCommandList* pCommandList
3531 );
3532
3533 void SetDescriptorHeaps(
3534 [annotation("_In_")] UINT NumDescriptorHeaps,
3535 [annotation("_In_reads_(NumDescriptorHeaps)")] ID3D12DescriptorHeap* const* ppDescriptorHeaps
3536 );
3537
3538 void SetComputeRootSignature(
3539 [annotation("_In_opt_")] ID3D12RootSignature* pRootSignature
3540 );
3541
3542 void SetGraphicsRootSignature(
3543 [annotation("_In_opt_")] ID3D12RootSignature* pRootSignature
3544 );
3545
3546 void SetComputeRootDescriptorTable(
3547 [annotation("_In_")] UINT RootParameterIndex,
3548 [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor
3549 );
3550
3551 void SetGraphicsRootDescriptorTable(
3552 [annotation("_In_")] UINT RootParameterIndex,
3553 [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor
3554 );
3555
3556 // Single constant
3557 void SetComputeRoot32BitConstant(
3558 [annotation("_In_")] UINT RootParameterIndex,
3559 [annotation("_In_")] UINT SrcData,
3560 [annotation("_In_")] UINT DestOffsetIn32BitValues
3561 );
3562
3563 void SetGraphicsRoot32BitConstant(
3564 [annotation("_In_")] UINT RootParameterIndex,
3565 [annotation("_In_")] UINT SrcData,
3566 [annotation("_In_")] UINT DestOffsetIn32BitValues
3567 );
3568
3569 // Group of constants
3570 void SetComputeRoot32BitConstants(
3571 [annotation("_In_")] UINT RootParameterIndex,
3572 [annotation("_In_")] UINT Num32BitValuesToSet,
3573 [annotation("_In_reads_(Num32BitValuesToSet*sizeof(UINT))")] const void* pSrcData,
3574 [annotation("_In_")] UINT DestOffsetIn32BitValues
3575 );
3576
3577 void SetGraphicsRoot32BitConstants(
3578 [annotation("_In_")] UINT RootParameterIndex,
3579 [annotation("_In_")] UINT Num32BitValuesToSet,
3580 [annotation("_In_reads_(Num32BitValuesToSet*sizeof(UINT))")] const void* pSrcData,
3581 [annotation("_In_")] UINT DestOffsetIn32BitValues
3582 );
3583
3584 // CBV
3585 void SetComputeRootConstantBufferView(
3586 [annotation("_In_")] UINT RootParameterIndex,
3587 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation
3588 );
3589
3590 void SetGraphicsRootConstantBufferView(
3591 [annotation("_In_")] UINT RootParameterIndex,
3592 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation
3593 );
3594
3595 // SRV
3596 void SetComputeRootShaderResourceView(
3597 [annotation("_In_")] UINT RootParameterIndex,
3598 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation
3599 );
3600
3601 void SetGraphicsRootShaderResourceView(
3602 [annotation("_In_")] UINT RootParameterIndex,
3603 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation
3604 );
3605
3606 // UAV
3607 void SetComputeRootUnorderedAccessView(
3608 [annotation("_In_")] UINT RootParameterIndex,
3609 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation
3610 );
3611
3612 void SetGraphicsRootUnorderedAccessView(
3613 [annotation("_In_")] UINT RootParameterIndex,
3614 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation
3615 );
3616
3617 void IASetIndexBuffer(
3618 [annotation("_In_opt_")] const D3D12_INDEX_BUFFER_VIEW* pView
3619 );
3620
3621 void IASetVertexBuffers(
3622 [annotation("_In_")] UINT StartSlot,
3623 [annotation("_In_")] UINT NumViews,
3624 [annotation("_In_reads_opt_(NumViews)")] const D3D12_VERTEX_BUFFER_VIEW* pViews
3625 );
3626
3627 void SOSetTargets(
3628 [annotation("_In_")] UINT StartSlot,
3629 [annotation("_In_")] UINT NumViews,
3630 [annotation("_In_reads_opt_(NumViews)")] const D3D12_STREAM_OUTPUT_BUFFER_VIEW* pViews
3631 );
3632
3633 void OMSetRenderTargets(
3634 [annotation("_In_")] UINT NumRenderTargetDescriptors,
3635 [annotation("_In_opt_")] const D3D12_CPU_DESCRIPTOR_HANDLE* pRenderTargetDescriptors,
3636 [annotation("_In_")] BOOL RTsSingleHandleToDescriptorRange,
3637 [annotation("_In_opt_")] const D3D12_CPU_DESCRIPTOR_HANDLE* pDepthStencilDescriptor
3638 );
3639
3640 void ClearDepthStencilView(
3641 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
3642 [annotation("_In_")] D3D12_CLEAR_FLAGS ClearFlags,
3643 [annotation("_In_")] FLOAT Depth,
3644 [annotation("_In_")] UINT8 Stencil,
3645 [annotation("_In_")] UINT NumRects,
3646 [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects
3647 );
3648
3649 void ClearRenderTargetView(
3650 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
3651 [annotation("_In_")] const FLOAT ColorRGBA[4],
3652 [annotation("_In_")] UINT NumRects,
3653 [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects
3654 );
3655
3656 void ClearUnorderedAccessViewUint(
3657 [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
3658 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
3659 [annotation("_In_")] ID3D12Resource* pResource,
3660 [annotation("_In_")] const UINT Values[4],
3661 [annotation("_In_")] UINT NumRects,
3662 [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects
3663 );
3664
3665 void ClearUnorderedAccessViewFloat(
3666 [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
3667 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
3668 [annotation("_In_")] ID3D12Resource* pResource,
3669 [annotation("_In_")] const FLOAT Values[4],
3670 [annotation("_In_")] UINT NumRects,
3671 [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects
3672 );
3673
3674 void DiscardResource(
3675 [annotation("_In_")] ID3D12Resource* pResource,
3676 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
3677 );
3678
3679 void BeginQuery(
3680 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
3681 [annotation("_In_")] D3D12_QUERY_TYPE Type,
3682 [annotation("_In_")] UINT Index
3683 );
3684
3685 void EndQuery(
3686 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
3687 [annotation("_In_")] D3D12_QUERY_TYPE Type,
3688 [annotation("_In_")] UINT Index
3689 );
3690
3691 void ResolveQueryData(
3692 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
3693 [annotation("_In_")] D3D12_QUERY_TYPE Type,
3694 [annotation("_In_")] UINT StartIndex,
3695 [annotation("_In_")] UINT NumQueries,
3696 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
3697 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
3698 );
3699
3700 void SetPredication(
3701 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
3702 [annotation("_In_")] UINT64 AlignedBufferOffset,
3703 [annotation("_In_")] D3D12_PREDICATION_OP Operation
3704 );
3705
3706 void SetMarker(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size);
3707 void BeginEvent(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size);
3708 void EndEvent();
3709
3710 void ExecuteIndirect(
3711 [annotation("_In_")] ID3D12CommandSignature* pCommandSignature,
3712 [annotation("_In_")] UINT MaxCommandCount,
3713 [annotation("_In_")] ID3D12Resource* pArgumentBuffer,
3714 [annotation("_In_")] UINT64 ArgumentBufferOffset,
3715 [annotation("_In_opt_")] ID3D12Resource* pCountBuffer,
3716 [annotation("_In_")] UINT64 CountBufferOffset
3717 );
3718}
3719
3720[ uuid( 553103fb-1fe7-4557-bb38-946d7d0e7ca7 ), object, local, pointer_default( unique ) ]
3721interface ID3D12GraphicsCommandList1
3722 : ID3D12GraphicsCommandList
3723{
3724 void AtomicCopyBufferUINT(
3725 [annotation("_In_")] ID3D12Resource* pDstBuffer,
3726 UINT64 DstOffset,
3727 [annotation("_In_")] ID3D12Resource* pSrcBuffer,
3728 UINT64 SrcOffset,
3729 UINT Dependencies, // 0 Dependencies means only the dst buffer offset is synchronized
3730 [annotation("_In_reads_(Dependencies)")] ID3D12Resource*const* ppDependentResources,
3731 [annotation("_In_reads_(Dependencies)")] const D3D12_SUBRESOURCE_RANGE_UINT64* pDependentSubresourceRanges
3732 );
3733
3734 // UINT64 is only valid on UMA architectures
3735 void AtomicCopyBufferUINT64(
3736 [annotation("_In_")] ID3D12Resource* pDstBuffer,
3737 UINT64 DstOffset,
3738 [annotation("_In_")] ID3D12Resource* pSrcBuffer,
3739 UINT64 SrcOffset,
3740 UINT Dependencies, // 0 Dependencies means only the dst buffer offset is synchronized
3741 [annotation("_In_reads_(Dependencies)")] ID3D12Resource*const* ppDependentResources,
3742 [annotation("_In_reads_(Dependencies)")] const D3D12_SUBRESOURCE_RANGE_UINT64* pDependentSubresourceRanges
3743 );
3744
3745 void OMSetDepthBounds(
3746 [annotation("_In_")] FLOAT Min,
3747 [annotation("_In_")] FLOAT Max
3748 );
3749
3750 void SetSamplePositions(
3751 [annotation("_In_")] UINT NumSamplesPerPixel,
3752 [annotation("_In_")] UINT NumPixels,
3753 [annotation("_In_reads_(NumSamplesPerPixel*NumPixels)")] D3D12_SAMPLE_POSITION* pSamplePositions
3754 );
3755
3756 void ResolveSubresourceRegion(
3757 [annotation("_In_")] ID3D12Resource* pDstResource,
3758 [annotation("_In_")] UINT DstSubresource,
3759 [annotation("_In_")] UINT DstX,
3760 [annotation("_In_")] UINT DstY,
3761 [annotation("_In_")] ID3D12Resource* pSrcResource,
3762 [annotation("_In_")] UINT SrcSubresource,
3763 [annotation("_In_opt_")] D3D12_RECT* pSrcRect,
3764 [annotation("_In_")] DXGI_FORMAT Format,
3765 [annotation("_In_")] D3D12_RESOLVE_MODE ResolveMode
3766 );
3767
3768 void SetViewInstanceMask(
3769 [annotation("_In_")] UINT Mask
3770 );
3771
3772}
3773
3774typedef struct D3D12_WRITEBUFFERIMMEDIATE_PARAMETER
3775{
3776 D3D12_GPU_VIRTUAL_ADDRESS Dest;
3777 UINT32 Value;
3778} D3D12_WRITEBUFFERIMMEDIATE_PARAMETER;
3779
3780typedef enum D3D12_WRITEBUFFERIMMEDIATE_MODE
3781{
3782 D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT = 0x0,
3783 D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN = 0x1,
3784 D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT = 0x2,
3785
3786} D3D12_WRITEBUFFERIMMEDIATE_MODE;
3787
3788[uuid(38C3E585-FF17-412C-9150-4FC6F9D72A28), object, local, pointer_default(unique)]
3789interface ID3D12GraphicsCommandList2 : ID3D12GraphicsCommandList1
3790{
3791 void WriteBufferImmediate(
3792 UINT Count,
3793 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
3794 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
3795 );
3796}
3797
3798[ uuid( 0ec870a6-5d7e-4c22-8cfc-5baae07616ed ), object, local, pointer_default( unique ) ]
3799interface ID3D12CommandQueue
3800 : ID3D12Pageable
3801{
3802 void UpdateTileMappings(
3803 [annotation("_In_")] ID3D12Resource* pResource,
3804 UINT NumResourceRegions,
3805 [annotation("_In_reads_opt_(NumResourceRegions)")] const D3D12_TILED_RESOURCE_COORDINATE* pResourceRegionStartCoordinates,
3806 [annotation("_In_reads_opt_(NumResourceRegions)")] const D3D12_TILE_REGION_SIZE* pResourceRegionSizes,
3807 [annotation("_In_opt_")] ID3D12Heap* pHeap,
3808 UINT NumRanges,
3809 [annotation("_In_reads_opt_(NumRanges)")] const D3D12_TILE_RANGE_FLAGS* pRangeFlags,
3810 [annotation("_In_reads_opt_(NumRanges)")] const UINT* pHeapRangeStartOffsets,
3811 [annotation("_In_reads_opt_(NumRanges)")] const UINT* pRangeTileCounts,
3812 D3D12_TILE_MAPPING_FLAGS Flags );
3813
3814 void CopyTileMappings(
3815 [annotation("_In_")] ID3D12Resource* pDstResource,
3816 [annotation("_In_")] const D3D12_TILED_RESOURCE_COORDINATE* pDstRegionStartCoordinate,
3817 [annotation("_In_")] ID3D12Resource* pSrcResource,
3818 [annotation("_In_")] const D3D12_TILED_RESOURCE_COORDINATE* pSrcRegionStartCoordinate,
3819 [annotation("_In_")] const D3D12_TILE_REGION_SIZE* pRegionSize,
3820 D3D12_TILE_MAPPING_FLAGS Flags );
3821
3822 void ExecuteCommandLists(
3823 [annotation("_In_")] UINT NumCommandLists,
3824 [annotation("_In_reads_(NumCommandLists)")] ID3D12CommandList * const * ppCommandLists
3825 );
3826
3827 void SetMarker(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size);
3828 void BeginEvent(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size);
3829 void EndEvent();
3830
3831 HRESULT Signal(ID3D12Fence* pFence, UINT64 Value);
3832 HRESULT Wait(ID3D12Fence* pFence, UINT64 Value);
3833
3834 HRESULT GetTimestampFrequency(
3835 [annotation("_Out_")] UINT64* pFrequency
3836 );
3837
3838 HRESULT GetClockCalibration(
3839 [annotation("_Out_")] UINT64* pGpuTimestamp,
3840 [annotation("_Out_")] UINT64* pCpuTimestamp
3841 );
3842
3843 D3D12_COMMAND_QUEUE_DESC GetDesc();
3844}
3845
3846//
3847// Dynamic priority command queue features start
3848//
3849
3850typedef struct D3D12_FEATURE_DATA_HARDWARE_SCHEDULING_QUEUE_GROUPINGS
3851{
3852 [annotation("_Out_")] UINT ComputeQueuesPer3DQueue; // 0 means scheduling groups do not group multiple queues.
3853} D3D12_FEATURE_DATA_HARDWARE_SCHEDULING_QUEUE_GROUPINGS;
3854
3855typedef enum D3D12_COMMAND_QUEUE_PROCESS_PRIORITY
3856{
3857 D3D12_COMMAND_QUEUE_PROCESS_PRIORITY_NORMAL = 0,
3858 D3D12_COMMAND_QUEUE_PROCESS_PRIORITY_HIGH = 1,
3859} D3D12_COMMAND_QUEUE_PROCESS_PRIORITY;
3860
3861typedef enum D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY
3862{
3863 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_IDLE = 0,
3864 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_DEFAULT = 1,
3865 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_NORMAL_0 = 2,
3866
3867 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_0 = 18,
3868 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_1 = 19,
3869 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_2 = 20,
3870 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_3 = 21,
3871 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_4 = 22,
3872 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_5 = 23,
3873 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_6 = 24,
3874 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_7 = 25,
3875 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_8 = 26,
3876 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_9 = 27,
3877 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_10 = 28,
3878 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_11 = 29,
3879 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_12 = 30,
3880 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_13 = 31,
3881
3882 D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_HARD_REALTIME = 32,
3883} D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY;
3884
3885[uuid(3a3c3165-0ee7-4b8e-a0af-6356b4c3bbb9), object, local, pointer_default(unique)]
3886interface ID3D12CommandQueue1
3887 : ID3D12CommandQueue
3888{
3889 HRESULT SetProcessPriority(D3D12_COMMAND_QUEUE_PROCESS_PRIORITY Priority);
3890 HRESULT GetProcessPriority(D3D12_COMMAND_QUEUE_PROCESS_PRIORITY* pOutValue);
3891
3892 HRESULT SetGlobalPriority(D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY Priority);
3893 HRESULT GetGlobalPriority(D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY* pOutValue);
3894}
3895
3896//
3897// Dynamic priority command queue features end
3898//
3899
3900
3901[ uuid( 189819f1-1db6-4b57-be54-1821339b85f7 ), object, local, pointer_default( unique ) ]
3902interface ID3D12Device
3903 : ID3D12Object
3904{
3905 UINT GetNodeCount();
3906
3907 HRESULT CreateCommandQueue(
3908 [annotation("_In_")] const D3D12_COMMAND_QUEUE_DESC* pDesc,
3909 [in] REFIID riid, // Expected: ID3D12CommandQueue
3910 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandQueue
3911 );
3912
3913 HRESULT CreateCommandAllocator(
3914 [annotation("_In_")] D3D12_COMMAND_LIST_TYPE type,
3915 [in] REFIID riid, // Expected: ID3D12CommandAllocator
3916 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandAllocator
3917 );
3918
3919 HRESULT CreateGraphicsPipelineState(
3920 [annotation("_In_")] const D3D12_GRAPHICS_PIPELINE_STATE_DESC* pDesc,
3921 [in] REFIID riid, // Expected: ID3D12PipelineState
3922 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState
3923 );
3924
3925 HRESULT CreateComputePipelineState(
3926 [annotation("_In_")] const D3D12_COMPUTE_PIPELINE_STATE_DESC* pDesc,
3927 [in] REFIID riid, // Expected: ID3D12PipelineState
3928 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState
3929 );
3930
3931 HRESULT CreateCommandList(
3932 [annotation("_In_")] UINT nodeMask,
3933 [annotation("_In_")] D3D12_COMMAND_LIST_TYPE type,
3934 [annotation("_In_")] ID3D12CommandAllocator* pCommandAllocator,
3935 [annotation("_In_opt_")] ID3D12PipelineState* pInitialState,
3936 [in] REFIID riid, // Expected: ID3D12CommandList
3937 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandList
3938 );
3939
3940 HRESULT CheckFeatureSupport(
3941 D3D12_FEATURE Feature,
3942 [annotation("_Inout_updates_bytes_(FeatureSupportDataSize)")] void* pFeatureSupportData,
3943 UINT FeatureSupportDataSize
3944 );
3945
3946 HRESULT CreateDescriptorHeap(
3947 [annotation("_In_")] const D3D12_DESCRIPTOR_HEAP_DESC* pDescriptorHeapDesc,
3948 [in] REFIID riid, // Expected ID3D12DescriptorHeap
3949 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap);
3950
3951 UINT GetDescriptorHandleIncrementSize(
3952 [annotation("_In_")] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
3953
3954 HRESULT CreateRootSignature(
3955 [annotation("_In_")] UINT nodeMask,
3956 [annotation("_In_reads_(blobLengthInBytes)")] const void* pBlobWithRootSignature,
3957 [annotation("_In_")] SIZE_T blobLengthInBytes,
3958 [in] REFIID riid, // Expected ID3D12RootSignature
3959 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature);
3960
3961 void CreateConstantBufferView(
3962 [annotation("_In_opt_")] const D3D12_CONSTANT_BUFFER_VIEW_DESC* pDesc,
3963 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
3964
3965 void CreateShaderResourceView(
3966 [annotation("_In_opt_")] ID3D12Resource* pResource,
3967 [annotation("_In_opt_")] const D3D12_SHADER_RESOURCE_VIEW_DESC* pDesc,
3968 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
3969
3970 void CreateUnorderedAccessView(
3971 [annotation("_In_opt_")] ID3D12Resource* pResource,
3972 [annotation("_In_opt_")] ID3D12Resource* pCounterResource,
3973 [annotation("_In_opt_")] const D3D12_UNORDERED_ACCESS_VIEW_DESC* pDesc,
3974 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
3975
3976 void CreateRenderTargetView(
3977 [annotation("_In_opt_")] ID3D12Resource* pResource,
3978 [annotation("_In_opt_")] const D3D12_RENDER_TARGET_VIEW_DESC* pDesc,
3979 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
3980
3981 void CreateDepthStencilView(
3982 [annotation("_In_opt_")] ID3D12Resource* pResource,
3983 [annotation("_In_opt_")] const D3D12_DEPTH_STENCIL_VIEW_DESC* pDesc,
3984 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
3985
3986 void CreateSampler(
3987 [annotation("_In_")] const D3D12_SAMPLER_DESC* pDesc,
3988 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
3989
3990 void CopyDescriptors(
3991 [annotation("_In_")] UINT NumDestDescriptorRanges,
3992 [annotation("_In_reads_(NumDestDescriptorRanges)")] const D3D12_CPU_DESCRIPTOR_HANDLE* pDestDescriptorRangeStarts,
3993 [annotation("_In_reads_opt_(NumDestDescriptorRanges)")] const UINT* pDestDescriptorRangeSizes, // NULL means all ranges 1
3994 [annotation("_In_")] UINT NumSrcDescriptorRanges,
3995 [annotation("_In_reads_(NumSrcDescriptorRanges)")] const D3D12_CPU_DESCRIPTOR_HANDLE* pSrcDescriptorRangeStarts,
3996 [annotation("_In_reads_opt_(NumSrcDescriptorRanges)")] const UINT* pSrcDescriptorRangeSizes, // NULL means all ranges 1
3997 [annotation("_In_")] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
3998
3999 void CopyDescriptorsSimple(
4000 [annotation("_In_")] UINT NumDescriptors,
4001 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
4002 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
4003 [annotation("_In_")] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
4004
4005 D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
4006 [annotation("_In_")] UINT visibleMask,
4007 [annotation("_In_")] UINT numResourceDescs,
4008 [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC* pResourceDescs );
4009
4010 D3D12_HEAP_PROPERTIES GetCustomHeapProperties(
4011 [annotation("_In_")] UINT nodeMask,
4012 D3D12_HEAP_TYPE heapType
4013 );
4014
4015 HRESULT CreateCommittedResource(
4016 [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties,
4017 D3D12_HEAP_FLAGS HeapFlags,
4018 [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc,
4019 D3D12_RESOURCE_STATES InitialResourceState,
4020 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
4021 [in] REFIID riidResource, // Expected: ID3D12Resource*
4022 [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource );
4023
4024 HRESULT CreateHeap(
4025 [annotation("_In_")] const D3D12_HEAP_DESC* pDesc,
4026 [in] REFIID riid, // Expected: ID3D12Heap*
4027 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvHeap );
4028
4029 HRESULT CreatePlacedResource(
4030 [annotation("_In_")] ID3D12Heap* pHeap,
4031 UINT64 HeapOffset,
4032 [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc,
4033 D3D12_RESOURCE_STATES InitialState,
4034 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
4035 [in] REFIID riid, // Expected: ID3D12Resource*
4036 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource );
4037
4038 HRESULT CreateReservedResource(
4039 [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc,
4040 D3D12_RESOURCE_STATES InitialState,
4041 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
4042 [in] REFIID riid, // Expected: ID3D12Resource*
4043 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource );
4044
4045 HRESULT CreateSharedHandle(
4046 [annotation("_In_")] ID3D12DeviceChild* pObject,
4047 [annotation("_In_opt_")] const SECURITY_ATTRIBUTES* pAttributes,
4048 DWORD Access,
4049 [annotation("_In_opt_")] LPCWSTR Name,
4050 [annotation("_Out_")] HANDLE* pHandle );
4051
4052 HRESULT OpenSharedHandle(
4053 [annotation("_In_")] HANDLE NTHandle,
4054 [in] REFIID riid, // Expected: ID3D12Resource*, ID3D12Heap*, or ID3D12Fence
4055 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvObj );
4056
4057 HRESULT OpenSharedHandleByName(
4058 [annotation("_In_")] LPCWSTR Name,
4059 DWORD Access,
4060 [out, annotation("_Out_")] HANDLE* pNTHandle );
4061
4062 HRESULT MakeResident(
4063 UINT NumObjects,
4064 [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects );
4065
4066 HRESULT Evict(
4067 UINT NumObjects,
4068 [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects );
4069
4070 HRESULT CreateFence(
4071 UINT64 InitialValue,
4072 D3D12_FENCE_FLAGS Flags,
4073 [in] REFIID riid, // Expected: ID3D12Fence
4074 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppFence);
4075
4076 HRESULT GetDeviceRemovedReason();
4077
4078 void GetCopyableFootprints(
4079 [annotation("_In_")] const D3D12_RESOURCE_DESC* pResourceDesc,
4080 [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES)")] UINT FirstSubresource,
4081 [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)")] UINT NumSubresources,
4082 UINT64 BaseOffset,
4083 [annotation("_Out_writes_opt_(NumSubresources)")] D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
4084 [annotation("_Out_writes_opt_(NumSubresources)")] UINT* pNumRows,
4085 [annotation("_Out_writes_opt_(NumSubresources)")] UINT64* pRowSizeInBytes,
4086 [annotation("_Out_opt_")] UINT64* pTotalBytes );
4087
4088 HRESULT CreateQueryHeap(
4089 [annotation("_In_")] const D3D12_QUERY_HEAP_DESC* pDesc,
4090 [in] REFIID riid, // Expected: ID3D12QueryHeap
4091 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvHeap
4092 );
4093
4094 HRESULT SetStablePowerState(BOOL Enable);
4095
4096 HRESULT CreateCommandSignature(
4097 [annotation("_In_")] const D3D12_COMMAND_SIGNATURE_DESC* pDesc,
4098 [annotation("_In_opt_")] ID3D12RootSignature* pRootSignature,
4099 [in] REFIID riid, // Expected: ID3D12CommandSignature
4100 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvCommandSignature
4101 );
4102
4103 void GetResourceTiling(
4104 [annotation("_In_")] ID3D12Resource* pTiledResource,
4105 [annotation("_Out_opt_")] UINT* pNumTilesForEntireResource,
4106 [annotation("_Out_opt_")] D3D12_PACKED_MIP_INFO* pPackedMipDesc,
4107 [annotation("_Out_opt_")] D3D12_TILE_SHAPE* pStandardTileShapeForNonPackedMips,
4108 [annotation("_Inout_opt_")] UINT* pNumSubresourceTilings,
4109 [annotation("_In_")] UINT FirstSubresourceTilingToGet,
4110 [annotation("_Out_writes_(*pNumSubresourceTilings)")] D3D12_SUBRESOURCE_TILING* pSubresourceTilingsForNonPackedMips
4111 );
4112
4113 LUID GetAdapterLuid();
4114}
4115
4116// D3D12 Revision 1
4117[ uuid( c64226a8-9201-46af-b4cc-53fb9ff7414f ), object, local, pointer_default( unique ) ]
4118interface ID3D12PipelineLibrary
4119 : ID3D12DeviceChild
4120{
4121 HRESULT StorePipeline(
4122 [annotation("_In_opt_")] LPCWSTR pName,
4123 [annotation("_In_")] ID3D12PipelineState *pPipeline
4124 );
4125
4126 HRESULT LoadGraphicsPipeline(
4127 [annotation("_In_")] LPCWSTR pName,
4128 [annotation("_In_")] const D3D12_GRAPHICS_PIPELINE_STATE_DESC* pDesc,
4129 [in] REFIID riid, // Expected: ID3D12PipelineState
4130 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState
4131 );
4132
4133 HRESULT LoadComputePipeline(
4134 [annotation("_In_")] LPCWSTR pName,
4135 [annotation("_In_")] const D3D12_COMPUTE_PIPELINE_STATE_DESC* pDesc,
4136 [in] REFIID riid, // Expected: ID3D12PipelineState
4137 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState
4138 );
4139
4140 SIZE_T GetSerializedSize();
4141
4142 HRESULT Serialize(
4143 [annotation("_Out_writes_(DataSizeInBytes)")] void* pData,
4144 SIZE_T DataSizeInBytes
4145 );
4146}
4147
4148// Pipeline State v2
4149[ uuid( 80eabf42-2568-4e5e-bd82-c37f86961dc3 ), object, local, pointer_default( unique ) ]
4150interface ID3D12PipelineLibrary1
4151 : ID3D12PipelineLibrary
4152{
4153 HRESULT LoadPipeline(
4154 [annotation("_In_")] LPCWSTR pName,
4155 [annotation("_In_")] const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc,
4156 [in] REFIID riid, // Expected: ID3D12PipelineState
4157 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState
4158 );
4159}
4160
4161typedef enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS
4162{
4163 D3D12_MULTIPLE_FENCE_WAIT_FLAG_NONE = 0x0,
4164 D3D12_MULTIPLE_FENCE_WAIT_FLAG_ANY = 0x1,
4165
4166 D3D12_MULTIPLE_FENCE_WAIT_FLAG_ALL = 0x0, // Alias, default behavior is ALL
4167} D3D12_MULTIPLE_FENCE_WAIT_FLAGS;
4168cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTIPLE_FENCE_WAIT_FLAGS )" )
4169
4170// Applications may use the whole value range of UINT for a priority.
4171// These names are merely semantic suggestions.
4172typedef enum D3D12_RESIDENCY_PRIORITY
4173{
4174 D3D12_RESIDENCY_PRIORITY_MINIMUM = 0x28000000,
4175 D3D12_RESIDENCY_PRIORITY_LOW = 0x50000000,
4176 D3D12_RESIDENCY_PRIORITY_NORMAL = 0x78000000,
4177 D3D12_RESIDENCY_PRIORITY_HIGH = 0xa0010000,
4178 D3D12_RESIDENCY_PRIORITY_MAXIMUM = 0xc8000000,
4179} D3D12_RESIDENCY_PRIORITY;
4180
4181[uuid(77acce80-638e-4e65-8895-c1f23386863e), object, local, pointer_default(unique)]
4182interface ID3D12Device1
4183 : ID3D12Device
4184{
4185 HRESULT CreatePipelineLibrary(
4186 [annotation("_In_reads_(BlobLength)")] const void *pLibraryBlob,
4187 SIZE_T BlobLength,
4188 [in] REFIID riid, // Expected: ID3D12PipelineLibrary
4189 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineLibrary
4190 );
4191
4192 HRESULT SetEventOnMultipleFenceCompletion(
4193 [annotation("_In_reads_(NumFences)")] ID3D12Fence* const* ppFences,
4194 [annotation("_In_reads_(NumFences)")] const UINT64* pFenceValues,
4195 UINT NumFences,
4196 D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
4197 HANDLE hEvent
4198 );
4199
4200 HRESULT SetResidencyPriority(
4201 UINT NumObjects,
4202 [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects,
4203 [annotation("_In_reads_(NumObjects)")] const D3D12_RESIDENCY_PRIORITY* pPriorities );
4204}
4205
4206[uuid(30baa41e-b15b-475c-a0bb-1af5c5b64328), object, local, pointer_default(unique)]
4207interface ID3D12Device2
4208 : ID3D12Device1
4209{
4210 HRESULT CreatePipelineState(
4211 [in] const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc,
4212 [in] REFIID riid, // Can be any pipeline state interface, provided the pipeline subobjects match
4213 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState
4214 );
4215}
4216
4217typedef enum D3D12_RESIDENCY_FLAGS
4218{
4219 D3D12_RESIDENCY_FLAG_NONE = 0x0,
4220 D3D12_RESIDENCY_FLAG_DENY_OVERBUDGET = 0x1,
4221} D3D12_RESIDENCY_FLAGS;
4222cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESIDENCY_FLAGS )" )
4223
4224[uuid(81dadc15-2bad-4392-93c5-101345c4aa98), object, local, pointer_default(unique)]
4225interface ID3D12Device3
4226 : ID3D12Device2
4227{
4228 HRESULT OpenExistingHeapFromAddress(
4229 [annotation("_In_")] const void* pAddress,
4230 [in] REFIID riid, // Expected: ID3D12Heap
4231 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap
4232 );
4233 HRESULT OpenExistingHeapFromFileMapping(
4234 [annotation("_In_")] HANDLE hFileMapping,
4235 [in] REFIID riid, // Expected: ID3D12Heap
4236 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap
4237 );
4238 HRESULT EnqueueMakeResident(
4239 D3D12_RESIDENCY_FLAGS Flags,
4240 UINT NumObjects,
4241 [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects,
4242 [annotation("_In_")] ID3D12Fence* pFenceToSignal,
4243 UINT64 FenceValueToSignal
4244 );
4245}
4246
4247typedef enum D3D12_COMMAND_LIST_FLAGS
4248{
4249 D3D12_COMMAND_LIST_FLAG_NONE = 0x0,
4250} D3D12_COMMAND_LIST_FLAGS;
4251cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_FLAGS )")
4252
4253
4254typedef enum D3D12_COMMAND_POOL_FLAGS
4255{
4256 D3D12_COMMAND_POOL_FLAG_NONE = 0x0,
4257
4258} D3D12_COMMAND_POOL_FLAGS;
4259cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_POOL_FLAGS )")
4260
4261typedef enum D3D12_COMMAND_RECORDER_FLAGS
4262{
4263 D3D12_COMMAND_RECORDER_FLAG_NONE = 0x0,
4264
4265} D3D12_COMMAND_RECORDER_FLAGS;
4266cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_RECORDER_FLAGS )")
4267
4268typedef enum D3D12_PROTECTED_SESSION_STATUS
4269{
4270 D3D12_PROTECTED_SESSION_STATUS_OK = 0,
4271 D3D12_PROTECTED_SESSION_STATUS_INVALID = 1,
4272} D3D12_PROTECTED_SESSION_STATUS;
4273
4274[uuid(A1533D18-0AC1-4084-85B9-89A96116806B), object, local, pointer_default(unique)]
4275interface ID3D12ProtectedSession
4276 : ID3D12DeviceChild
4277{
4278 HRESULT GetStatusFence(
4279 [in] REFIID riid,
4280 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppFence);
4281
4282 D3D12_PROTECTED_SESSION_STATUS GetSessionStatus();
4283}
4284
4285typedef enum D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS
4286{
4287 D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE = 0x0,
4288 D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_SUPPORTED = 0x1,
4289
4290} D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS;
4291cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS )")
4292
4293typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT
4294{
4295 UINT NodeIndex; // input
4296 D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS Support; // output
4297} D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT;
4298
4299typedef enum D3D12_PROTECTED_RESOURCE_SESSION_FLAGS
4300{
4301 D3D12_PROTECTED_RESOURCE_SESSION_FLAG_NONE = 0x0,
4302
4303} D3D12_PROTECTED_RESOURCE_SESSION_FLAGS;
4304cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_FLAGS )")
4305
4306typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC
4307{
4308 UINT NodeMask;
4309 D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags;
4310} D3D12_PROTECTED_RESOURCE_SESSION_DESC;
4311
4312[uuid(6CD696F4-F289-40CC-8091-5A6C0A099C3D), object, local, pointer_default(unique)]
4313interface ID3D12ProtectedResourceSession
4314 : ID3D12ProtectedSession
4315{
4316 D3D12_PROTECTED_RESOURCE_SESSION_DESC GetDesc();
4317}
4318
4319[uuid(e865df17-a9ee-46f9-a463-3098315aa2e5), object, local, pointer_default(unique)]
4320interface ID3D12Device4
4321 : ID3D12Device3
4322{
4323 HRESULT CreateCommandList1(
4324 [annotation("_In_")] UINT nodeMask,
4325 [annotation("_In_")] D3D12_COMMAND_LIST_TYPE type,
4326 [annotation("_In_")] D3D12_COMMAND_LIST_FLAGS flags,
4327 [in] REFIID riid, // Expected: ID3D12CommandList
4328 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandList
4329 );
4330
4331 HRESULT CreateProtectedResourceSession(
4332 [annotation("_In_")] const D3D12_PROTECTED_RESOURCE_SESSION_DESC* pDesc,
4333 [annotation("_In_")] REFIID riid, // Expected: ID3D12ProtectedResourceSession,
4334 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppSession
4335 );
4336
4337 HRESULT CreateCommittedResource1(
4338 [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties,
4339 D3D12_HEAP_FLAGS HeapFlags,
4340 [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc,
4341 D3D12_RESOURCE_STATES InitialResourceState,
4342 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
4343 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession,
4344 [in] REFIID riidResource, // Expected: ID3D12Resource1*
4345 [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource
4346 );
4347
4348 HRESULT CreateHeap1(
4349 [annotation("_In_")] const D3D12_HEAP_DESC* pDesc,
4350 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession,
4351 [in] REFIID riid, // Expected: ID3D12Heap1*
4352 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvHeap
4353 );
4354
4355 HRESULT CreateReservedResource1(
4356 [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc,
4357 D3D12_RESOURCE_STATES InitialState,
4358 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
4359 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession,
4360 [in] REFIID riid, // Expected: ID3D12Resource1*
4361 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource
4362 );
4363
4364 D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo1(
4365 UINT visibleMask,
4366 UINT numResourceDescs,
4367 [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC* pResourceDescs,
4368 [annotation("_Out_writes_opt_(numResourceDescs)")] D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1
4369 );
4370}
4371
4372typedef enum D3D12_LIFETIME_STATE
4373{
4374 D3D12_LIFETIME_STATE_IN_USE,
4375 D3D12_LIFETIME_STATE_NOT_IN_USE,
4376} D3D12_LIFETIME_STATE;
4377
4378interface ID3D12LifetimeTracker;
4379
4380[uuid(e667af9f-cd56-4f46-83ce-032e595d70a8), object, local, pointer_default(unique)]
4381interface ID3D12LifetimeOwner : IUnknown
4382{
4383 void LifetimeStateUpdated(D3D12_LIFETIME_STATE NewState);
4384}
4385
4386[uuid(f1df64b6-57fd-49cd-8807-c0eb88b45c8f), object, local, pointer_default(unique)]
4387interface ID3D12SwapChainAssistant
4388 : IUnknown
4389{
4390 LUID GetLUID();
4391 HRESULT GetSwapChainObject(REFIID riid, [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppv);
4392 HRESULT GetCurrentResourceAndCommandQueue(REFIID riidResource, [out, iid_is(riidResource), annotation("_COM_Outptr_")] void** ppvResource,
4393 REFIID riidQueue, [out, iid_is(riidQueue), annotation("_COM_Outptr_")] void** ppvQueue);
4394 HRESULT InsertImplicitSync();
4395}
4396
4397[uuid(3fd03d36-4eb1-424a-a582-494ecb8ba813), object, local, pointer_default(unique)]
4398interface ID3D12LifetimeTracker
4399 : ID3D12DeviceChild
4400{
4401 HRESULT DestroyOwnedObject([annotation("_In_")] ID3D12DeviceChild* pObject);
4402}
4403
4404typedef enum D3D12_META_COMMAND_PARAMETER_TYPE
4405{
4406 D3D12_META_COMMAND_PARAMETER_TYPE_FLOAT = 0,
4407 D3D12_META_COMMAND_PARAMETER_TYPE_UINT64 = 1,
4408 D3D12_META_COMMAND_PARAMETER_TYPE_GPU_VIRTUAL_ADDRESS = 2,
4409 D3D12_META_COMMAND_PARAMETER_TYPE_CPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 3,
4410 D3D12_META_COMMAND_PARAMETER_TYPE_GPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 4,
4411} D3D12_META_COMMAND_PARAMETER_TYPE;
4412
4413typedef enum D3D12_META_COMMAND_PARAMETER_FLAGS
4414{
4415 D3D12_META_COMMAND_PARAMETER_FLAG_INPUT = 0x00000001,
4416 D3D12_META_COMMAND_PARAMETER_FLAG_OUTPUT = 0x00000002
4417} D3D12_META_COMMAND_PARAMETER_FLAGS;
4418cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_META_COMMAND_PARAMETER_FLAGS )")
4419
4420typedef enum D3D12_META_COMMAND_PARAMETER_STAGE
4421{
4422 D3D12_META_COMMAND_PARAMETER_STAGE_CREATION = 0,
4423 D3D12_META_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1,
4424 D3D12_META_COMMAND_PARAMETER_STAGE_EXECUTION = 2,
4425} D3D12_META_COMMAND_PARAMETER_STAGE;
4426
4427typedef struct D3D12_META_COMMAND_PARAMETER_DESC
4428{
4429 LPCWSTR Name;
4430 D3D12_META_COMMAND_PARAMETER_TYPE Type;
4431 D3D12_META_COMMAND_PARAMETER_FLAGS Flags;
4432 D3D12_RESOURCE_STATES RequiredResourceState;
4433 UINT StructureOffset;
4434} D3D12_META_COMMAND_PARAMETER_DESC;
4435
4436typedef enum D3D12_GRAPHICS_STATES
4437{
4438 D3D12_GRAPHICS_STATE_NONE = 0,
4439 D3D12_GRAPHICS_STATE_IA_VERTEX_BUFFERS = (1 << 0),
4440 D3D12_GRAPHICS_STATE_IA_INDEX_BUFFER = (1 << 1),
4441 D3D12_GRAPHICS_STATE_IA_PRIMITIVE_TOPOLOGY = (1 << 2),
4442 D3D12_GRAPHICS_STATE_DESCRIPTOR_HEAP = (1 << 3),
4443 D3D12_GRAPHICS_STATE_GRAPHICS_ROOT_SIGNATURE = (1 << 4),
4444 D3D12_GRAPHICS_STATE_COMPUTE_ROOT_SIGNATURE = (1 << 5),
4445 D3D12_GRAPHICS_STATE_RS_VIEWPORTS = (1 << 6),
4446 D3D12_GRAPHICS_STATE_RS_SCISSOR_RECTS = (1 << 7),
4447 D3D12_GRAPHICS_STATE_PREDICATION = (1 << 8),
4448 D3D12_GRAPHICS_STATE_OM_RENDER_TARGETS = (1 << 9),
4449 D3D12_GRAPHICS_STATE_OM_STENCIL_REF = (1 << 10),
4450 D3D12_GRAPHICS_STATE_OM_BLEND_FACTOR = (1 << 11),
4451 D3D12_GRAPHICS_STATE_PIPELINE_STATE = (1 << 12),
4452 D3D12_GRAPHICS_STATE_SO_TARGETS = (1 << 13),
4453 D3D12_GRAPHICS_STATE_OM_DEPTH_BOUNDS = (1 << 14),
4454 D3D12_GRAPHICS_STATE_SAMPLE_POSITIONS = (1 << 15),
4455 D3D12_GRAPHICS_STATE_VIEW_INSTANCE_MASK = (1 << 16),
4456
4457} D3D12_GRAPHICS_STATES;
4458cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_GRAPHICS_STATES )")
4459
4460typedef struct D3D12_META_COMMAND_DESC
4461{
4462 GUID Id;
4463 LPCWSTR Name;
4464 D3D12_GRAPHICS_STATES InitializationDirtyState;
4465 D3D12_GRAPHICS_STATES ExecutionDirtyState;
4466} D3D12_META_COMMAND_DESC;
4467
4468[uuid(47016943-fca8-4594-93ea-af258b55346d), object, local, pointer_default(unique)]
4469interface ID3D12StateObject
4470 : ID3D12Pageable
4471{
4472}
4473
4474[uuid(de5fa827-9bf9-4f26-89ff-d7f56fde3860), object, local, pointer_default(unique)]
4475interface ID3D12StateObjectProperties
4476 : IUnknown
4477{
4478 void* GetShaderIdentifier([annotation("_In_")] LPCWSTR pExportName);
4479 UINT64 GetShaderStackSize([annotation("_In_")] LPCWSTR pExportName);
4480 UINT64 GetPipelineStackSize();
4481 void SetPipelineStackSize(UINT64 PipelineStackSizeInBytes);
4482}
4483
4484typedef struct D3D12_PROGRAM_IDENTIFIER
4485{
4486 UINT64 OpaqueData[4];
4487} D3D12_PROGRAM_IDENTIFIER;
4488
4489[uuid(460caac7-1d24-446a-a184-ca67db494138), object, local, pointer_default(unique)]
4490interface ID3D12StateObjectProperties1
4491 : ID3D12StateObjectProperties
4492{
4493 D3D12_PROGRAM_IDENTIFIER GetProgramIdentifier(LPCWSTR pProgramName);
4494}
4495
4496[uuid(d5e82917-f0f1-44cf-ae5e-ce222dd0b884), object, local, pointer_default(unique)]
4497interface ID3D12StateObjectProperties2
4498 : ID3D12StateObjectProperties1
4499{
4500 HRESULT GetGlobalRootSignatureForProgram(
4501 [in] LPCWSTR pProgramName,
4502 [in] REFIID riid, // Expected ID3D12RootSignature
4503 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature);
4504
4505 HRESULT GetGlobalRootSignatureForShader(
4506 [in] LPCWSTR pExportName,
4507 [in] REFIID riid, // Expected ID3D12RootSignature
4508 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature);
4509}
4510
4511typedef struct D3D12_NODE_ID
4512{
4513 LPCWSTR Name;
4514 UINT ArrayIndex;
4515} D3D12_NODE_ID;
4516
4517typedef struct D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS
4518{
4519 UINT64 MinSizeInBytes;
4520 UINT64 MaxSizeInBytes;
4521 UINT SizeGranularityInBytes;
4522} D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS;
4523
4524[uuid(065acf71-f863-4b89-82f4-02e4d5886757), object, local, pointer_default(unique)]
4525interface ID3D12WorkGraphProperties : IUnknown
4526{
4527 UINT GetNumWorkGraphs();
4528 LPCWSTR GetProgramName(UINT WorkGraphIndex);
4529 UINT GetWorkGraphIndex(LPCWSTR pProgramName);
4530
4531 UINT GetNumNodes(UINT WorkGraphIndex);
4532 D3D12_NODE_ID GetNodeID(UINT WorkGraphIndex, UINT NodeIndex);
4533 UINT GetNodeIndex(UINT WorkGraphIndex, D3D12_NODE_ID NodeID);
4534 UINT GetNodeLocalRootArgumentsTableIndex(UINT WorkGraphIndex, UINT NodeIndex);
4535
4536 UINT GetNumEntrypoints(UINT WorkGraphIndex);
4537 D3D12_NODE_ID GetEntrypointID(UINT WorkGraphIndex, UINT EntrypointIndex);
4538 UINT GetEntrypointIndex(UINT WorkGraphIndex, D3D12_NODE_ID NodeID);
4539 UINT GetEntrypointRecordSizeInBytes(UINT WorkGraphIndex, UINT EntrypointIndex);
4540
4541 void GetWorkGraphMemoryRequirements(
4542 UINT WorkGraphIndex,
4543 [annotation("_Out_")] D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS* pWorkGraphMemoryRequirements);
4544
4545 UINT GetEntrypointRecordAlignmentInBytes(UINT WorkGraphIndex, UINT EntrypointIndex);
4546}
4547
4548
4549typedef enum D3D12_STATE_SUBOBJECT_TYPE
4550{
4551 D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG = 0, // D3D12_STATE_OBJECT_CONFIG
4552 D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE = 1, // D3D12_GLOBAL_ROOT_SIGNATURE
4553 D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE = 2, // D3D12_LOCAL_ROOT_SIGNATURE
4554 D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK = 3, // D3D12_NODE_MASK
4555 // 4 unused
4556 D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY = 5, // D3D12_DXIL_LIBRARY_DESC
4557 D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION = 6, // D3D12_EXISTING_COLLECTION_DESC
4558 D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 7, // D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION
4559 D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 8, // D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION
4560 D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG = 9, // D3D12_RAYTRACING_SHADER_CONFIG
4561 D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG = 10, // D3D12_RAYTRACING_PIPELINE_CONFIG
4562 D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP = 11, // D3D12_HIT_GROUP_DESC
4563 D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1 = 12, // D3D12_RAYTRACING_PIPELINE_CONFIG1
4564 D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH = 13, // D3D12_WORK_GRAPH_DESC
4565 D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT = 14, // D3D12_STREAM_OUTPUT_DESC
4566 D3D12_STATE_SUBOBJECT_TYPE_BLEND = 15, // D3D12_BLEND_DESC
4567 D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK = 16, // UINT
4568 D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER = 17, // D3D12_RASTERIZER_DESC2
4569 D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL = 18, // D3D12_DEPTH_STENCIL_DESC
4570 D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT = 19, // D3D12_INPUT_LAYOUT_DESC
4571 D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE = 20, // D3D12_INDEX_BUFFER_STRIP_CUT_VALUE
4572 D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY = 21, // D3D12_PRIMITIVE_TOPOLOGY_TYPE
4573 D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS = 22, // D3D12_RT_FORMAT_ARRAY
4574 D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT = 23, // DXGI_FORMAT
4575 D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC = 24, // DXGI_SAMPLE_DESC
4576 // 25 is unused
4577 D3D12_STATE_SUBOBJECT_TYPE_FLAGS = 26, // D3D12_PIPELINE_STATE_FLAGS
4578 D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 = 27, // D3D12_DEPTH_STENCIL_DESC1
4579 D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING = 28, // D3D12_VIEW_INSTANCING_DESC
4580 D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM = 29, // D3D12_GENERIC_PROGRAM_DESC
4581 D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 30, // D3D12_DEPTH_STENCIL_DESC2
4582 D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_SERIALIZED_ROOT_SIGNATURE = 31, // D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_DESC
4583 D3D12_STATE_SUBOBJECT_TYPE_LOCAL_SERIALIZED_ROOT_SIGNATURE = 32, // D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE_DESC
4584 D3D12_STATE_SUBOBJECT_TYPE_COMPILER_EXISITING_COLLECTION = 33, // D3D12_COMPILER_EXISTING_COLLECTION_DESC
4585 D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION_BY_KEY = 36, // D3D12_EXISTING_COLLECTION_BY_KEY_DESC
4586 D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID,
4587} D3D12_STATE_SUBOBJECT_TYPE;
4588
4589typedef struct D3D12_STATE_SUBOBJECT
4590{
4591 D3D12_STATE_SUBOBJECT_TYPE Type;
4592 const void* pDesc;
4593} D3D12_STATE_SUBOBJECT;
4594
4595typedef enum D3D12_STATE_OBJECT_FLAGS
4596{
4597 D3D12_STATE_OBJECT_FLAG_NONE = 0x0,
4598 D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS = 0x1,
4599 D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS = 0x2,
4600 D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS = 0x4,
4601
4602} D3D12_STATE_OBJECT_FLAGS;
4603cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_FLAGS )")
4604
4605typedef struct D3D12_STATE_OBJECT_CONFIG
4606{
4607 D3D12_STATE_OBJECT_FLAGS Flags;
4608} D3D12_STATE_OBJECT_CONFIG;
4609
4610typedef struct D3D12_GLOBAL_ROOT_SIGNATURE
4611{
4612 ID3D12RootSignature* pGlobalRootSignature;
4613} D3D12_GLOBAL_ROOT_SIGNATURE;
4614
4615typedef struct D3D12_LOCAL_ROOT_SIGNATURE
4616{
4617 ID3D12RootSignature* pLocalRootSignature;
4618} D3D12_LOCAL_ROOT_SIGNATURE;
4619
4620typedef struct D3D12_NODE_MASK
4621{
4622 UINT NodeMask;
4623} D3D12_NODE_MASK;
4624
4625typedef struct D3D12_SAMPLE_MASK
4626{
4627 UINT SampleMask;
4628} D3D12_SAMPLE_MASK;
4629
4630typedef struct D3D12_IB_STRIP_CUT_VALUE
4631{
4632 D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IndexBufferStripCutValue;
4633} D3D12_IB_STRIP_CUT_VALUE;
4634
4635typedef struct D3D12_PRIMITIVE_TOPOLOGY_DESC
4636{
4637 D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopology;
4638} D3D12_PRIMITIVE_TOPOLOGY_DESC;
4639
4640typedef struct D3D12_DEPTH_STENCIL_FORMAT
4641{
4642 DXGI_FORMAT DepthStencilFormat;
4643} D3D12_DEPTH_STENCIL_FORMAT;
4644
4645typedef enum D3D12_EXPORT_FLAGS
4646{
4647 D3D12_EXPORT_FLAG_NONE = 0x0,
4648} D3D12_EXPORT_FLAGS;
4649cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_EXPORT_FLAGS )")
4650
4651typedef struct D3D12_EXPORT_DESC
4652{
4653 LPCWSTR Name;
4654 [annotation("_In_opt_")] LPCWSTR ExportToRename;
4655 D3D12_EXPORT_FLAGS Flags;
4656} D3D12_EXPORT_DESC;
4657
4658typedef struct D3D12_DXIL_LIBRARY_DESC
4659{
4660 D3D12_SHADER_BYTECODE DXILLibrary;
4661 UINT NumExports; // Optional, if 0 all exports in the library/collection will be surfaced
4662 [annotation("_In_reads_(NumExports)")] const D3D12_EXPORT_DESC* pExports;
4663} D3D12_DXIL_LIBRARY_DESC;
4664
4665
4666typedef struct D3D12_EXISTING_COLLECTION_DESC
4667{
4668 ID3D12StateObject* pExistingCollection;
4669 UINT NumExports; // Optional, if 0 all exports in the library/collection will be surfaced
4670 [annotation("_In_reads_(NumExports)")] const D3D12_EXPORT_DESC* pExports;
4671} D3D12_EXISTING_COLLECTION_DESC;
4672
4673typedef struct D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION
4674{
4675 const D3D12_STATE_SUBOBJECT* pSubobjectToAssociate;
4676 UINT NumExports;
4677 [annotation("_In_reads_(NumExports)")] LPCWSTR* pExports;
4678} D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION;
4679
4680typedef struct D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION
4681{
4682 LPCWSTR SubobjectToAssociate;
4683 UINT NumExports;
4684 [annotation("_In_reads_(NumExports)")] LPCWSTR* pExports;
4685} D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION;
4686
4687typedef enum D3D12_HIT_GROUP_TYPE
4688{
4689 D3D12_HIT_GROUP_TYPE_TRIANGLES = 0x0,
4690 D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE = 0x1,
4691} D3D12_HIT_GROUP_TYPE;
4692
4693typedef struct D3D12_HIT_GROUP_DESC
4694{
4695 LPCWSTR HitGroupExport;
4696 D3D12_HIT_GROUP_TYPE Type;
4697 [annotation("_In_opt_")] LPCWSTR AnyHitShaderImport;
4698 [annotation("_In_opt_")] LPCWSTR ClosestHitShaderImport;
4699 [annotation("_In_opt_")] LPCWSTR IntersectionShaderImport;
4700} D3D12_HIT_GROUP_DESC;
4701
4702typedef struct D3D12_RAYTRACING_SHADER_CONFIG
4703{
4704 UINT MaxPayloadSizeInBytes;
4705 UINT MaxAttributeSizeInBytes;
4706} D3D12_RAYTRACING_SHADER_CONFIG;
4707
4708typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG
4709{
4710 UINT MaxTraceRecursionDepth;
4711} D3D12_RAYTRACING_PIPELINE_CONFIG;
4712
4713typedef enum D3D12_RAYTRACING_PIPELINE_FLAGS
4714{
4715 D3D12_RAYTRACING_PIPELINE_FLAG_NONE = 0x0,
4716 D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES = 0x100,
4717 D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200,
4718 D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS = 0x400,
4719} D3D12_RAYTRACING_PIPELINE_FLAGS;
4720cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS )")
4721
4722typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1
4723{
4724 UINT MaxTraceRecursionDepth;
4725 D3D12_RAYTRACING_PIPELINE_FLAGS Flags;
4726} D3D12_RAYTRACING_PIPELINE_CONFIG1;
4727
4728typedef struct D3D12_NODE_OUTPUT_OVERRIDES
4729{
4730 UINT OutputIndex;
4731 [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName;
4732 [annotation("_In_opt_")] const BOOL* pAllowSparseNodes;
4733 [annotation("_In_opt_")] const UINT* pMaxRecords;
4734 [annotation("_In_opt_")] const UINT* pMaxRecordsSharedWithOutputIndex;
4735} D3D12_NODE_OUTPUT_OVERRIDES;
4736
4737typedef struct D3D12_BROADCASTING_LAUNCH_OVERRIDES
4738{
4739 [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex;
4740 [annotation("_In_opt_")] const BOOL* pProgramEntry;
4741 [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName;
4742 [annotation("_In_opt_ ")] const D3D12_NODE_ID* pShareInputOf;
4743 [annotation("_In_reads_opt_(3)")] const UINT* pDispatchGrid;
4744 [annotation("_In_reads_opt_(3)")] const UINT* pMaxDispatchGrid;
4745 UINT NumOutputOverrides;
4746 [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides;
4747} D3D12_BROADCASTING_LAUNCH_OVERRIDES;
4748
4749typedef struct D3D12_COALESCING_LAUNCH_OVERRIDES
4750{
4751 [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex;
4752 [annotation("_In_opt_")] const BOOL* pProgramEntry;
4753 [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName;
4754 [annotation("_In_opt_")] const D3D12_NODE_ID* pShareInputOf;
4755 UINT NumOutputOverrides;
4756 [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides;
4757} D3D12_COALESCING_LAUNCH_OVERRIDES;
4758
4759typedef struct D3D12_THREAD_LAUNCH_OVERRIDES
4760{
4761 [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex;
4762 [annotation("_In_opt_")] const BOOL* pProgramEntry;
4763 [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName;
4764 [annotation("_In_opt_")] const D3D12_NODE_ID* pShareInputOf;
4765 UINT NumOutputOverrides;
4766 [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides;
4767} D3D12_THREAD_LAUNCH_OVERRIDES;
4768
4769typedef struct D3D12_COMMON_COMPUTE_NODE_OVERRIDES
4770{
4771 [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex;
4772 [annotation("_In_opt_")] const BOOL* pProgramEntry;
4773 [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName;
4774 [annotation("_In_opt_")] const D3D12_NODE_ID* pShareInputOf;
4775 UINT NumOutputOverrides;
4776 [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides;
4777} D3D12_COMMON_COMPUTE_NODE_OVERRIDES;
4778
4779typedef enum D3D12_NODE_OVERRIDES_TYPE
4780{
4781 D3D12_NODE_OVERRIDES_TYPE_NONE = 0,
4782 D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH = 1,
4783 D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH = 2,
4784 D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH = 3,
4785 D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE = 4,
4786} D3D12_NODE_OVERRIDES_TYPE;
4787
4788typedef struct D3D12_SHADER_NODE
4789{
4790 LPCWSTR Shader;
4791 D3D12_NODE_OVERRIDES_TYPE OverridesType;
4792 union
4793 {
4794 const D3D12_BROADCASTING_LAUNCH_OVERRIDES* pBroadcastingLaunchOverrides;
4795 const D3D12_COALESCING_LAUNCH_OVERRIDES* pCoalescingLaunchOverrides;
4796 const D3D12_THREAD_LAUNCH_OVERRIDES* pThreadLaunchOverrides;
4797 const D3D12_COMMON_COMPUTE_NODE_OVERRIDES* pCommonComputeNodeOverrides;
4798 };
4799} D3D12_SHADER_NODE;
4800
4801
4802typedef enum D3D12_NODE_TYPE
4803{
4804 D3D12_NODE_TYPE_SHADER = 0x0,
4805} D3D12_NODE_TYPE;
4806
4807typedef struct D3D12_NODE
4808{
4809 D3D12_NODE_TYPE NodeType;
4810 union
4811 {
4812 D3D12_SHADER_NODE Shader; // D3D12_NODE_TYPE_SHADER
4813 };
4814} D3D12_NODE;
4815
4816typedef enum D3D12_WORK_GRAPH_FLAGS
4817{
4818 D3D12_WORK_GRAPH_FLAG_NONE = 0x0,
4819 D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES = 0x1,
4820} D3D12_WORK_GRAPH_FLAGS;
4821cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_WORK_GRAPH_FLAGS )")
4822
4823typedef struct D3D12_WORK_GRAPH_DESC
4824{
4825 LPCWSTR ProgramName;
4826 D3D12_WORK_GRAPH_FLAGS Flags;
4827 UINT NumEntrypoints;
4828 [annotation("_In_reads_opt_(NumEntrypoints)")] const D3D12_NODE_ID* pEntrypoints;
4829 UINT NumExplicitlyDefinedNodes;
4830 [annotation("_In_reads_opt_(NumExplicitlyDefinedNodes)")] const D3D12_NODE* pExplicitlyDefinedNodes;
4831} D3D12_WORK_GRAPH_DESC;
4832
4833typedef struct D3D12_GENERIC_PROGRAM_DESC
4834{
4835 LPCWSTR ProgramName;
4836 UINT NumExports;
4837 [annotation("_In_reads_(NumExports)")] LPCWSTR* pExports;
4838 UINT NumSubobjects;
4839 [annotation("_In_reads_opt_(NumSubobjects)")] const D3D12_STATE_SUBOBJECT* const* ppSubobjects;
4840} D3D12_GENERIC_PROGRAM_DESC;
4841
4842typedef enum D3D12_STATE_OBJECT_TYPE
4843{
4844 D3D12_STATE_OBJECT_TYPE_COLLECTION = 0,
4845 D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE = 3,
4846 D3D12_STATE_OBJECT_TYPE_EXECUTABLE = 4
4847} D3D12_STATE_OBJECT_TYPE;
4848
4849typedef struct D3D12_STATE_OBJECT_DESC
4850{
4851 D3D12_STATE_OBJECT_TYPE Type;
4852 UINT NumSubobjects;
4853 [annotation("_In_reads_(NumSubobjects)")] const D3D12_STATE_SUBOBJECT* pSubobjects;
4854} D3D12_STATE_OBJECT_DESC;
4855
4856typedef enum D3D12_RAYTRACING_GEOMETRY_FLAGS
4857{
4858 D3D12_RAYTRACING_GEOMETRY_FLAG_NONE = 0x0,
4859 D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE = 0x1,
4860 D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 0x2,
4861} D3D12_RAYTRACING_GEOMETRY_FLAGS;
4862cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_GEOMETRY_FLAGS )")
4863
4864typedef enum D3D12_RAYTRACING_GEOMETRY_TYPE
4865{
4866 D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES,
4867 D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS,
4868 D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES
4869} D3D12_RAYTRACING_GEOMETRY_TYPE;
4870
4871typedef enum D3D12_RAYTRACING_INSTANCE_FLAGS
4872{
4873 D3D12_RAYTRACING_INSTANCE_FLAG_NONE = 0x0,
4874 D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1,
4875 D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2,
4876 D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4,
4877 D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8,
4878 D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE = 0x10,
4879 D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS = 0x20
4880} D3D12_RAYTRACING_INSTANCE_FLAGS;
4881cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS )")
4882
4883typedef struct D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE
4884{
4885 D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
4886 UINT64 StrideInBytes;
4887} D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE;
4888
4889typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE
4890{
4891 D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
4892 UINT64 SizeInBytes;
4893} D3D12_GPU_VIRTUAL_ADDRESS_RANGE;
4894
4895typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE
4896{
4897 D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
4898 UINT64 SizeInBytes;
4899 UINT64 StrideInBytes;
4900} D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE;
4901
4902typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC
4903{
4904 D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
4905 DXGI_FORMAT IndexFormat;
4906 DXGI_FORMAT VertexFormat;
4907 UINT IndexCount;
4908 UINT VertexCount;
4909 D3D12_GPU_VIRTUAL_ADDRESS IndexBuffer;
4910 D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer;
4911} D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC;
4912
4913typedef struct D3D12_RAYTRACING_AABB
4914{
4915 FLOAT MinX;
4916 FLOAT MinY;
4917 FLOAT MinZ;
4918 FLOAT MaxX;
4919 FLOAT MaxY;
4920 FLOAT MaxZ;
4921} D3D12_RAYTRACING_AABB;
4922
4923typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC
4924{
4925 UINT64 AABBCount;
4926 D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs;
4927} D3D12_RAYTRACING_GEOMETRY_AABBS_DESC;
4928
4929typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX
4930{
4931 D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT = -1,
4932 D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE = -2,
4933 D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT = -3,
4934 D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE = -4,
4935} D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX;
4936
4937typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE
4938{
4939 D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT = 0,
4940 D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE = 1,
4941 D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT = 2,
4942 D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE = 3,
4943} D3D12_RAYTRACING_OPACITY_MICROMAP_STATE;
4944
4945typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT
4946{
4947 D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE = 0x1,
4948 D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE = 0x2,
4949} D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT;
4950
4951cpp_quote("typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC")
4952cpp_quote("{")
4953cpp_quote(" UINT ByteOffset;")
4954cpp_quote(" UINT SubdivisionLevel : 16;")
4955cpp_quote(" D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16;")
4956cpp_quote("} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC;")
4957
4958typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC
4959{
4960 D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer;
4961 DXGI_FORMAT OpacityMicromapIndexFormat;
4962 UINT OpacityMicromapBaseLocation;
4963 D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray;
4964} D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC;
4965
4966typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC
4967{
4968 const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC* pTriangles;
4969 const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* pOmmLinkage;
4970} D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC;
4971
4972typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
4973{
4974 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE = 0x00,
4975 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_UPDATE = 0x01,
4976 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_COMPACTION = 0x02,
4977 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE = 0x04,
4978 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x08,
4979 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10,
4980 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20,
4981 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE = 0x40,
4982 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS = 0x80,
4983
4984} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS;
4985cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS )")
4986
4987typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE
4988{
4989 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_CLONE = 0x0,
4990 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_COMPACT = 0x1,
4991 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_VISUALIZATION_DECODE_FOR_TOOLS = 0x2,
4992 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_SERIALIZE = 0x3,
4993 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_DESERIALIZE = 0x4,
4994} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE;
4995
4996typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE
4997{
4998 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0x0,
4999 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1,
5000 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY = 0x2,
5001} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE;
5002
5003typedef enum D3D12_ELEMENTS_LAYOUT
5004{
5005 D3D12_ELEMENTS_LAYOUT_ARRAY = 0x0,
5006 D3D12_ELEMENTS_LAYOUT_ARRAY_OF_POINTERS = 0x1
5007} D3D12_ELEMENTS_LAYOUT;
5008
5009typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE
5010{
5011 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE = 0x0,
5012 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1,
5013 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION = 0x2,
5014 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE = 0x3,
5015} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE;
5016
5017typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC
5018{
5019 D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
5020 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE InfoType;
5021} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC;
5022
5023typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC
5024{
5025 UINT64 CompactedSizeInBytes;
5026} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC;
5027
5028typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
5029{
5030 UINT64 DecodedSizeInBytes;
5031} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;
5032
5033typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER
5034{
5035 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
5036 UINT NumDescs;
5037} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER;
5038cpp_quote("// Regarding D3D12_BUILD_RAY_TRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER above,")
5039cpp_quote("// depending on Type field, NumDescs above is followed by either:")
5040cpp_quote("// D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs]")
5041cpp_quote("// or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs].")
5042cpp_quote("// or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case).")
5043cpp_quote("//")
5044cpp_quote("// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer")
5045cpp_quote("//")
5046cpp_quote("// There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU.")
5047cpp_quote("")
5048
5049typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC
5050{
5051 UINT64 SerializedSizeInBytes;
5052 union
5053 {
5054 UINT64 NumBottomLevelAccelerationStructurePointers;
5055 UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs;
5056 };
5057} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC;
5058
5059typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
5060{
5061 GUID DriverOpaqueGUID;
5062 BYTE DriverOpaqueVersioningData[16];
5063} D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER;
5064
5065typedef enum D3D12_SERIALIZED_DATA_TYPE
5066{
5067 D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0x0,
5068 D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE = 0x1,
5069} D3D12_SERIALIZED_DATA_TYPE;
5070
5071typedef enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS
5072{
5073 D3D12_DRIVER_MATCHING_IDENTIFIER_COMPATIBLE_WITH_DEVICE = 0x0,
5074 D3D12_DRIVER_MATCHING_IDENTIFIER_UNSUPPORTED_TYPE = 0x1,
5075 D3D12_DRIVER_MATCHING_IDENTIFIER_UNRECOGNIZED = 0x2,
5076 D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_VERSION = 0x3,
5077 D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_TYPE = 0x4,
5078} D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS;
5079
5080typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER
5081{
5082 D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
5083 UINT64 SerializedSizeInBytesIncludingHeader;
5084 UINT64 DeserializedSizeInBytes;
5085 UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader;
5086} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER;
5087
5088typedef enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE
5089{
5090 D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE = 0,
5091 D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS = 0,
5092 D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS = 0xffffffff
5093} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE;
5094
5095typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1
5096{
5097 D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
5098 UINT64 SerializedSizeInBytesIncludingHeader;
5099 UINT64 DeserializedSizeInBytes;
5100 union
5101 {
5102 UINT NumBottomLevelAccelerationStructurePointersAfterHeader;
5103 UINT NumBlocks;
5104 };
5105 D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType;
5106} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1;
5107
5108typedef enum D3D12_SERIALIZED_BLOCK_TYPE
5109{
5110 D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS = 0x0,
5111} D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE;
5112
5113typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK
5114{
5115 D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type;
5116 UINT64 NumBlockPointersAfterHeader;
5117} D3D12_RAYTRACING_SERIALIZED_BLOCK;
5118
5119typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC
5120{
5121 UINT64 CurrentSizeInBytes;
5122} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC;
5123
5124typedef struct D3D12_RAYTRACING_INSTANCE_DESC
5125{
5126 FLOAT Transform[3][4];
5127 UINT InstanceID : 24;
5128 UINT InstanceMask : 8;
5129 UINT InstanceContributionToHitGroupIndex : 24;
5130 UINT Flags : 8;
5131 D3D12_GPU_VIRTUAL_ADDRESS AccelerationStructure;
5132} D3D12_RAYTRACING_INSTANCE_DESC;
5133
5134typedef struct D3D12_RAYTRACING_GEOMETRY_DESC
5135{
5136 D3D12_RAYTRACING_GEOMETRY_TYPE Type;
5137 D3D12_RAYTRACING_GEOMETRY_FLAGS Flags;
5138 union
5139 {
5140 D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles;
5141 D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs;
5142 D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC OmmTriangles;
5143 };
5144} D3D12_RAYTRACING_GEOMETRY_DESC;
5145
5146typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY
5147{
5148 UINT Count;
5149 UINT SubdivisionLevel;
5150 D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format;
5151} D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY;
5152
5153typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC
5154{
5155 UINT NumOmmHistogramEntries;
5156 const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* pOmmHistogram;
5157 D3D12_GPU_VIRTUAL_ADDRESS InputBuffer;
5158 D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs;
5159} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC;
5160
5161typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
5162{
5163 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
5164 D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS Flags;
5165 UINT NumDescs;
5166 D3D12_ELEMENTS_LAYOUT DescsLayout;
5167 union
5168 {
5169 D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs;
5170 const D3D12_RAYTRACING_GEOMETRY_DESC* pGeometryDescs;
5171 const D3D12_RAYTRACING_GEOMETRY_DESC*const* ppGeometryDescs;
5172 const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* pOpacityMicromapArrayDesc;
5173 };
5174} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS;
5175
5176typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC
5177{
5178 D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData;
5179 D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS Inputs;
5180 [annotation("_In_opt_")] D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData;
5181 D3D12_GPU_VIRTUAL_ADDRESS ScratchAccelerationStructureData;
5182} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC;
5183
5184typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO
5185{
5186 UINT64 ResultDataMaxSizeInBytes;
5187 UINT64 ScratchDataSizeInBytes;
5188 UINT64 UpdateScratchDataSizeInBytes;
5189} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO;
5190
5191typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE
5192{
5193 D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE = 0x0,
5194 D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1,
5195} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE;
5196
5197typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC
5198{
5199 D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
5200 D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType;
5201} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC;
5202
5203typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC
5204{
5205 UINT64 CurrentSizeInBytes;
5206} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC;
5207
5208typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
5209{
5210 UINT64 DecodedSizeInBytes;
5211} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;
5212
5213typedef enum D3D12_RAY_FLAGS
5214{
5215 D3D12_RAY_FLAG_NONE = 0x00,
5216 D3D12_RAY_FLAG_FORCE_OPAQUE = 0x01,
5217 D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 0x02,
5218 D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 0x04,
5219 D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 0x08,
5220 D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 0x10,
5221 D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 0x20,
5222 D3D12_RAY_FLAG_CULL_OPAQUE = 0x40,
5223 D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80,
5224 D3D12_RAY_FLAG_SKIP_TRIANGLES = 0x100,
5225 D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200,
5226 D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 0x400,
5227} D3D12_RAY_FLAGS;
5228cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS )" )
5229
5230typedef enum D3D12_HIT_KIND
5231{
5232 D3D12_HIT_KIND_TRIANGLE_FRONT_FACE = 0xfe,
5233 D3D12_HIT_KIND_TRIANGLE_BACK_FACE = 0xff,
5234} D3D12_HIT_KIND;
5235
5236[uuid(8b4f173b-2fea-4b80-8f58-4307191ab95d), object, local, pointer_default(unique)]
5237interface ID3D12Device5
5238 : ID3D12Device4
5239{
5240 HRESULT CreateLifetimeTracker(
5241 [annotation("_In_")] ID3D12LifetimeOwner* pOwner,
5242 [in] REFIID riid, // Expected: ID3D12LifetimeTracker*
5243 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvTracker
5244 );
5245
5246 void RemoveDevice();
5247
5248 HRESULT EnumerateMetaCommands(
5249 [annotation("_Inout_")] UINT* pNumMetaCommands,
5250 [annotation("_Out_writes_opt_(*pNumMetaCommands)")] D3D12_META_COMMAND_DESC* pDescs
5251 );
5252
5253 HRESULT EnumerateMetaCommandParameters(
5254 [annotation("_In_")] REFGUID CommandId,
5255 [annotation("_In_")] D3D12_META_COMMAND_PARAMETER_STAGE Stage,
5256 [annotation("_Out_opt_")] UINT* pTotalStructureSizeInBytes,
5257 [annotation("_Inout_")] UINT* pParameterCount,
5258 [annotation("_Out_writes_opt_(*pParameterCount)")] D3D12_META_COMMAND_PARAMETER_DESC* pParameterDescs
5259 );
5260
5261 HRESULT CreateMetaCommand(
5262 [annotation("_In_")] REFGUID CommandId,
5263 [annotation("_In_")] UINT NodeMask,
5264 [annotation("_In_reads_bytes_opt_(CreationParametersDataSizeInBytes)")] const void * pCreationParametersData,
5265 [annotation("_In_")] SIZE_T CreationParametersDataSizeInBytes,
5266 [in] REFIID riid,
5267 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppMetaCommand
5268 );
5269
5270 HRESULT CreateStateObject(
5271 [in] const D3D12_STATE_OBJECT_DESC* pDesc,
5272 [in] REFIID riid, // ID3D12StateObject
5273 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppStateObject
5274 );
5275
5276 void GetRaytracingAccelerationStructurePrebuildInfo(
5277 [annotation("_In_")] const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS* pDesc,
5278 [annotation("_Out_")] D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo
5279 );
5280
5281 D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS CheckDriverMatchingIdentifier(
5282 [annotation("_In_")] D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
5283 [annotation("_In_")] const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* pIdentifierToCheck);
5284}
5285
5286#include "D3D12MarkerApiEnums.idl"
5287
5288typedef struct D3D12_AUTO_BREADCRUMB_NODE
5289{
5290 const char *pCommandListDebugNameA;
5291 const wchar_t *pCommandListDebugNameW;
5292 const char *pCommandQueueDebugNameA;
5293 const wchar_t *pCommandQueueDebugNameW;
5294 ID3D12GraphicsCommandList *pCommandList;
5295 ID3D12CommandQueue *pCommandQueue;
5296 UINT32 BreadcrumbCount;
5297 const UINT32 *pLastBreadcrumbValue;
5298 const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory;
5299 const struct D3D12_AUTO_BREADCRUMB_NODE *pNext; // pointer to next node
5300} D3D12_AUTO_BREADCRUMB_NODE;
5301
5302typedef struct D3D12_DRED_BREADCRUMB_CONTEXT
5303{
5304 UINT BreadcrumbIndex;
5305 const wchar_t *pContextString;
5306} D3D12_DRED_BREADCRUMB_CONTEXT;
5307
5308// !!! Must be castable to D3D12_AUTO_BREADCRUMB_NODE
5309typedef struct D3D12_AUTO_BREADCRUMB_NODE1
5310{
5311 const char *pCommandListDebugNameA;
5312 const wchar_t *pCommandListDebugNameW;
5313 const char *pCommandQueueDebugNameA;
5314 const wchar_t *pCommandQueueDebugNameW;
5315 ID3D12GraphicsCommandList *pCommandList;
5316 ID3D12CommandQueue *pCommandQueue;
5317 UINT BreadcrumbCount;
5318 const UINT *pLastBreadcrumbValue;
5319 const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory;
5320 const struct D3D12_AUTO_BREADCRUMB_NODE1 *pNext; // pointer to next node
5321 UINT BreadcrumbContextsCount;
5322 D3D12_DRED_BREADCRUMB_CONTEXT *pBreadcrumbContexts;
5323} D3D12_AUTO_BREADCRUMB_NODE1;
5324
5325// D3D12_DRED_VERSION
5326typedef enum D3D12_DRED_VERSION
5327{
5328 D3D12_DRED_VERSION_1_0 = 0x1,
5329 D3D12_DRED_VERSION_1_1 = 0x2,
5330 D3D12_DRED_VERSION_1_2 = 0x3,
5331 D3D12_DRED_VERSION_1_3 = 0x4,
5332} D3D12_DRED_VERSION;
5333
5334typedef enum D3D12_DRED_FLAGS
5335{
5336 D3D12_DRED_FLAG_NONE = 0,
5337 D3D12_DRED_FLAG_FORCE_ENABLE = 1,
5338 D3D12_DRED_FLAG_DISABLE_AUTOBREADCRUMBS = 2,
5339} D3D12_DRED_FLAGS;
5340cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS )")
5341
5342typedef enum D3D12_DRED_ENABLEMENT
5343{
5344 D3D12_DRED_ENABLEMENT_SYSTEM_CONTROLLED = 0,
5345 D3D12_DRED_ENABLEMENT_FORCED_OFF = 1,
5346 D3D12_DRED_ENABLEMENT_FORCED_ON = 2,
5347} D3D12_DRED_ENABLEMENT;
5348
5349typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA
5350{
5351 [annotation("_In_")] D3D12_DRED_FLAGS Flags; // Dred flags
5352 [annotation("_Out_")] D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; // Pointer to head of a linked list of auto-breadcrumb data
5353} D3D12_DEVICE_REMOVED_EXTENDED_DATA;
5354
5355typedef enum D3D12_DRED_ALLOCATION_TYPE
5356{
5357 // Enum starts at 19 and skips 26 to maintain compatibility with older D3D12 drivers
5358 D3D12_DRED_ALLOCATION_TYPE_COMMAND_QUEUE = 19,
5359 D3D12_DRED_ALLOCATION_TYPE_COMMAND_ALLOCATOR = 20,
5360 D3D12_DRED_ALLOCATION_TYPE_PIPELINE_STATE = 21,
5361 D3D12_DRED_ALLOCATION_TYPE_COMMAND_LIST = 22,
5362 D3D12_DRED_ALLOCATION_TYPE_FENCE = 23,
5363 D3D12_DRED_ALLOCATION_TYPE_DESCRIPTOR_HEAP = 24,
5364 D3D12_DRED_ALLOCATION_TYPE_HEAP = 25,
5365 D3D12_DRED_ALLOCATION_TYPE_QUERY_HEAP = 27,
5366 D3D12_DRED_ALLOCATION_TYPE_COMMAND_SIGNATURE = 28,
5367 D3D12_DRED_ALLOCATION_TYPE_PIPELINE_LIBRARY = 29,
5368 D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER = 30,
5369 D3D12_DRED_ALLOCATION_TYPE_VIDEO_PROCESSOR = 32,
5370 D3D12_DRED_ALLOCATION_TYPE_RESOURCE = 34,
5371 D3D12_DRED_ALLOCATION_TYPE_PASS = 35,
5372 D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSION = 36,
5373 D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSIONPOLICY = 37,
5374 D3D12_DRED_ALLOCATION_TYPE_PROTECTEDRESOURCESESSION = 38,
5375 D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER_HEAP = 39,
5376 D3D12_DRED_ALLOCATION_TYPE_COMMAND_POOL = 40,
5377 D3D12_DRED_ALLOCATION_TYPE_COMMAND_RECORDER = 41,
5378 D3D12_DRED_ALLOCATION_TYPE_STATE_OBJECT = 42,
5379 D3D12_DRED_ALLOCATION_TYPE_METACOMMAND = 43,
5380 D3D12_DRED_ALLOCATION_TYPE_SCHEDULINGGROUP = 44,
5381 D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_ESTIMATOR = 45,
5382 D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_VECTOR_HEAP = 46,
5383 D3D12_DRED_ALLOCATION_TYPE_VIDEO_EXTENSION_COMMAND = 47,
5384 D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER = 48,
5385 D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER_HEAP = 49,
5386
5387
5388 D3D12_DRED_ALLOCATION_TYPE_INVALID = 0xFFFFFFFF
5389} D3D12_DRED_ALLOCATION_TYPE;
5390
5391typedef struct D3D12_DRED_ALLOCATION_NODE
5392{
5393 const char *ObjectNameA;
5394 const wchar_t *ObjectNameW;
5395 D3D12_DRED_ALLOCATION_TYPE AllocationType;
5396 const struct D3D12_DRED_ALLOCATION_NODE *pNext;
5397} D3D12_DRED_ALLOCATION_NODE;
5398
5399typedef struct D3D12_DRED_ALLOCATION_NODE1
5400{
5401 const char *ObjectNameA;
5402 const wchar_t *ObjectNameW;
5403 D3D12_DRED_ALLOCATION_TYPE AllocationType;
5404 const struct D3D12_DRED_ALLOCATION_NODE1 *pNext;
5405 const IUnknown *pObject;
5406} D3D12_DRED_ALLOCATION_NODE1;
5407
5408typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT
5409{
5410 [annotation("_Out_")] const D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; // Pointer to head of a null-terminated linked list of auto-breadcrumb data
5411} D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT;
5412
5413typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1
5414{
5415 [annotation("_Out_")] const D3D12_AUTO_BREADCRUMB_NODE1 *pHeadAutoBreadcrumbNode; // Pointer to head of a null-terminated linked list of auto-breadcrumb data
5416} D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1;
5417
5418typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT
5419{
5420 D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; //If the device removal was due to GPU Fault, this contains the VA of the faulting op
5421 [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE *pHeadExistingAllocationNode;
5422 [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE *pHeadRecentFreedAllocationNode;
5423} D3D12_DRED_PAGE_FAULT_OUTPUT;
5424
5425typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT1
5426{
5427 D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; //If the device removal was due to GPU Fault, this contains the VA of the faulting op
5428 [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode;
5429 [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode;
5430} D3D12_DRED_PAGE_FAULT_OUTPUT1;
5431
5432typedef enum D3D12_DRED_PAGE_FAULT_FLAGS
5433{
5434 D3D12_DRED_PAGE_FAULT_FLAGS_NONE = 0,
5435} D3D12_DRED_PAGE_FAULT_FLAGS;
5436cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_PAGE_FAULT_FLAGS )")
5437
5438typedef enum D3D12_DRED_DEVICE_STATE
5439{
5440 D3D12_DRED_DEVICE_STATE_UNKNOWN = 0, // Only known if DRED event occurred
5441 D3D12_DRED_DEVICE_STATE_HUNG = 3,
5442 D3D12_DRED_DEVICE_STATE_FAULT = 6,
5443 D3D12_DRED_DEVICE_STATE_PAGEFAULT = 7,
5444} D3D12_DRED_DEVICE_STATE;
5445
5446typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT2
5447{
5448 D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; //If the device removal was due to GPU Fault, this contains the VA of the faulting op
5449 [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode;
5450 [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode;
5451 D3D12_DRED_PAGE_FAULT_FLAGS PageFaultFlags;
5452
5453} D3D12_DRED_PAGE_FAULT_OUTPUT2;
5454
5455typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA1
5456{
5457 HRESULT DeviceRemovedReason;
5458 D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT AutoBreadcrumbsOutput;
5459 D3D12_DRED_PAGE_FAULT_OUTPUT PageFaultOutput;
5460} D3D12_DEVICE_REMOVED_EXTENDED_DATA1;
5461
5462typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA2
5463{
5464 HRESULT DeviceRemovedReason;
5465 D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput;
5466 D3D12_DRED_PAGE_FAULT_OUTPUT1 PageFaultOutput;
5467} D3D12_DEVICE_REMOVED_EXTENDED_DATA2;
5468
5469typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA3
5470{
5471 HRESULT DeviceRemovedReason;
5472 D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput;
5473 D3D12_DRED_PAGE_FAULT_OUTPUT2 PageFaultOutput;
5474 D3D12_DRED_DEVICE_STATE DeviceState;
5475} D3D12_DEVICE_REMOVED_EXTENDED_DATA3;
5476
5477typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA
5478{
5479 D3D12_DRED_VERSION Version; // Version of the DRED data
5480 union
5481 {
5482 D3D12_DEVICE_REMOVED_EXTENDED_DATA Dred_1_0;
5483 D3D12_DEVICE_REMOVED_EXTENDED_DATA1 Dred_1_1;
5484 D3D12_DEVICE_REMOVED_EXTENDED_DATA2 Dred_1_2;
5485 D3D12_DEVICE_REMOVED_EXTENDED_DATA3 Dred_1_3;
5486 };
5487} D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA;
5488
5489[uuid(82BC481C-6B9B-4030-AEDB-7EE3D1DF1E63), object, local, pointer_default(unique)]
5490interface ID3D12DeviceRemovedExtendedDataSettings
5491 : IUnknown
5492{
5493 void SetAutoBreadcrumbsEnablement(D3D12_DRED_ENABLEMENT Enablement);
5494 void SetPageFaultEnablement(D3D12_DRED_ENABLEMENT Enablement);
5495 void SetWatsonDumpEnablement(D3D12_DRED_ENABLEMENT Enablement);
5496};
5497
5498[uuid(DBD5AE51-3317-4F0A-ADF9-1D7CEDCAAE0B), object, local, pointer_default(unique)]
5499interface ID3D12DeviceRemovedExtendedDataSettings1
5500 : ID3D12DeviceRemovedExtendedDataSettings
5501{
5502 void SetBreadcrumbContextEnablement(D3D12_DRED_ENABLEMENT Enablement);
5503};
5504
5505[uuid(61552388-01ab-4008-a436-83db189566ea), object, local, pointer_default(unique)]
5506interface ID3D12DeviceRemovedExtendedDataSettings2
5507 : ID3D12DeviceRemovedExtendedDataSettings1
5508{
5509 void UseMarkersOnlyAutoBreadcrumbs(BOOL MarkersOnly);
5510};
5511
5512
5513[uuid(98931D33-5AE8-4791-AA3C-1A73A2934E71), object, local, pointer_default(unique)]
5514interface ID3D12DeviceRemovedExtendedData
5515 : IUnknown
5516{
5517 HRESULT GetAutoBreadcrumbsOutput([annotation("_Out_")] D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput);
5518 HRESULT GetPageFaultAllocationOutput([annotation("_Out_")] D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput);
5519};
5520
5521[uuid(9727A022-CF1D-4DDA-9EBA-EFFA653FC506), object, local, pointer_default(unique)]
5522interface ID3D12DeviceRemovedExtendedData1
5523 : ID3D12DeviceRemovedExtendedData
5524{
5525 HRESULT GetAutoBreadcrumbsOutput1([annotation("_Out_")] D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput);
5526 HRESULT GetPageFaultAllocationOutput1([annotation("_Out_")] D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput);
5527};
5528
5529[uuid(67FC5816-E4CA-4915-BF18-42541272DA54), object, local, pointer_default(unique)]
5530interface ID3D12DeviceRemovedExtendedData2
5531 : ID3D12DeviceRemovedExtendedData1
5532{
5533 HRESULT GetPageFaultAllocationOutput2([annotation("_Out_")] D3D12_DRED_PAGE_FAULT_OUTPUT2 *pOutput);
5534 D3D12_DRED_DEVICE_STATE GetDeviceState();
5535};
5536
5537typedef enum D3D12_BACKGROUND_PROCESSING_MODE
5538{
5539 D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED,
5540 D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS,
5541 D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK,
5542 D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_PROFILING_BY_SYSTEM,
5543} D3D12_BACKGROUND_PROCESSING_MODE;
5544
5545typedef enum D3D12_MEASUREMENTS_ACTION
5546{
5547 D3D12_MEASUREMENTS_ACTION_KEEP_ALL,
5548 D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS,
5549 D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY,
5550 D3D12_MEASUREMENTS_ACTION_DISCARD_PREVIOUS,
5551} D3D12_MEASUREMENTS_ACTION;
5552
5553[uuid(c70b221b-40e4-4a17-89af-025a0727a6dc), object, local, pointer_default(unique)]
5554interface ID3D12Device6 : ID3D12Device5
5555{
5556 HRESULT SetBackgroundProcessingMode(
5557 D3D12_BACKGROUND_PROCESSING_MODE Mode,
5558 D3D12_MEASUREMENTS_ACTION MeasurementsAction,
5559 [annotation("_In_opt_")] HANDLE hEventToSignalUponCompletion,
5560 [annotation("_Out_opt_")] BOOL* pbFurtherMeasurementsDesired);
5561};
5562
5563cpp_quote("DEFINE_GUID(D3D12_PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED, 0x62B0084E, 0xC70E, 0x4DAA, 0xA1, 0x09, 0x30, 0xFF, 0x8D, 0x5A, 0x04, 0x82); ")
5564
5565// D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT
5566typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT
5567{
5568 UINT NodeIndex; // input
5569 UINT Count; // output
5570} D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT;
5571
5572// D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES
5573typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES
5574{
5575 UINT NodeIndex; // input
5576 UINT Count; // input
5577 GUID* pTypes; // output
5578} D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES;
5579
5580typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC1
5581{
5582 UINT NodeMask;
5583 D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags;
5584 GUID ProtectionType;
5585} D3D12_PROTECTED_RESOURCE_SESSION_DESC1;
5586
5587[uuid(D6F12DD6-76FB-406E-8961-4296EEFC0409), object, local, pointer_default(unique)]
5588interface ID3D12ProtectedResourceSession1
5589 : ID3D12ProtectedResourceSession
5590{
5591 D3D12_PROTECTED_RESOURCE_SESSION_DESC1 GetDesc1();
5592};
5593
5594[uuid(5c014b53-68a1-4b9b-8bd1-dd6046b9358b), object, local, pointer_default(unique)]
5595interface ID3D12Device7 : ID3D12Device6
5596{
5597 HRESULT AddToStateObject(
5598 [in] const D3D12_STATE_OBJECT_DESC* pAddition,
5599 [in] ID3D12StateObject* pStateObjectToGrowFrom,
5600 [in] REFIID riid, // ID3D12StateObject
5601 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppNewStateObject
5602 );
5603
5604 HRESULT CreateProtectedResourceSession1(
5605 [annotation("_In_")] const D3D12_PROTECTED_RESOURCE_SESSION_DESC1* pDesc,
5606 [annotation("_In_")] REFIID riid, // Expected: ID3D12ProtectedResourceSession1,
5607 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppSession
5608 );
5609};
5610
5611[uuid(9218E6BB-F944-4F7E-A75C-B1B2C7B701F3), object, local, pointer_default(unique)]
5612interface ID3D12Device8 : ID3D12Device7
5613{
5614 D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo2(
5615 UINT visibleMask,
5616 UINT numResourceDescs,
5617 [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC1* pResourceDescs,
5618 [annotation("_Out_writes_opt_(numResourceDescs)")] D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1);
5619
5620 HRESULT CreateCommittedResource2(
5621 [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties,
5622 D3D12_HEAP_FLAGS HeapFlags,
5623 [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc,
5624 D3D12_RESOURCE_STATES InitialResourceState,
5625 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
5626 [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedSession,
5627 [in] REFIID riidResource, // Expected: ID3D12Resource1*
5628 [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource);
5629
5630 HRESULT CreatePlacedResource1(
5631 [annotation("_In_")] ID3D12Heap* pHeap,
5632 UINT64 HeapOffset,
5633 [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc,
5634 D3D12_RESOURCE_STATES InitialState,
5635 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
5636 [in] REFIID riid, // Expected: ID3D12Resource*
5637 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource);
5638
5639 void CreateSamplerFeedbackUnorderedAccessView(
5640 [annotation("_In_opt_")] ID3D12Resource* pTargetedResource,
5641 [annotation("_In_opt_")] ID3D12Resource* pFeedbackResource,
5642 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
5643
5644 void GetCopyableFootprints1(
5645 [annotation("_In_")] const D3D12_RESOURCE_DESC1* pResourceDesc,
5646 [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES)")] UINT FirstSubresource,
5647 [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)")] UINT NumSubresources,
5648 UINT64 BaseOffset,
5649 [annotation("_Out_writes_opt_(NumSubresources)")] D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
5650 [annotation("_Out_writes_opt_(NumSubresources)")] UINT* pNumRows,
5651 [annotation("_Out_writes_opt_(NumSubresources)")] UINT64* pRowSizeInBytes,
5652 [annotation("_Out_opt_")] UINT64* pTotalBytes);
5653};
5654
5655
5656[uuid(9D5E227A-4430-4161-88B3-3ECA6BB16E19), object, local, pointer_default(unique)]
5657interface ID3D12Resource1
5658 : ID3D12Resource
5659{
5660 HRESULT GetProtectedResourceSession(
5661 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
5662 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
5663}
5664
5665[uuid(BE36EC3B-EA85-4AEB-A45A-E9D76404A495), object, local, pointer_default(unique)]
5666interface ID3D12Resource2
5667 : ID3D12Resource1
5668{
5669 D3D12_RESOURCE_DESC1 GetDesc1();
5670}
5671
5672
5673
5674[uuid(572F7389-2168-49E3-9693-D6DF5871BF6D), object, local, pointer_default(unique)]
5675interface ID3D12Heap1
5676 : ID3D12Heap
5677{
5678 HRESULT GetProtectedResourceSession(
5679 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
5680 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
5681}
5682
5683
5684[uuid(6FDA83A7-B84C-4E38-9AC8-C7BD22016B3D), object, local, pointer_default(unique)]
5685interface ID3D12GraphicsCommandList3 : ID3D12GraphicsCommandList2
5686{
5687 void SetProtectedResourceSession(
5688 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
5689 );
5690}
5691
5692// Beginning Access
5693typedef enum D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE
5694{
5695 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD,
5696 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE,
5697 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR,
5698 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS,
5699 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER,
5700 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV,
5701 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_UAV
5702} D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE;
5703
5704typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS
5705{
5706 D3D12_CLEAR_VALUE ClearValue;
5707} D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS;
5708
5709typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS
5710{
5711 UINT AdditionalWidth;
5712 UINT AdditionalHeight;
5713} D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS;
5714
5715typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS
5716{
5717 D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE Type;
5718
5719 union
5720 {
5721 D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS Clear;
5722 D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal;
5723 };
5724} D3D12_RENDER_PASS_BEGINNING_ACCESS;
5725
5726// Ending Access
5727typedef enum D3D12_RENDER_PASS_ENDING_ACCESS_TYPE
5728{
5729 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD,
5730 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE,
5731 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE,
5732 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS,
5733 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER,
5734 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV,
5735 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_UAV
5736} D3D12_RENDER_PASS_ENDING_ACCESS_TYPE;
5737
5738typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS
5739{
5740 UINT SrcSubresource;
5741 UINT DstSubresource;
5742
5743 UINT DstX;
5744 UINT DstY;
5745 D3D12_RECT SrcRect; // (0, 0, 0, 0) == resolve entire resource.
5746
5747} D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS;
5748
5749typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS
5750{
5751 ID3D12Resource* pSrcResource;
5752 ID3D12Resource* pDstResource;
5753
5754 // Can be a subset of RT's array slices, but can't target subresources that were't part of RTV/DSV.
5755 UINT SubresourceCount;
5756 [annotation("_Field_size_full_(SubresourceCount)")] const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS *pSubresourceParameters;
5757
5758 DXGI_FORMAT Format;
5759 D3D12_RESOLVE_MODE ResolveMode;
5760
5761 BOOL PreserveResolveSource;
5762
5763} D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS;
5764
5765typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS
5766{
5767 UINT AdditionalWidth;
5768 UINT AdditionalHeight;
5769} D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS;
5770
5771typedef struct D3D12_RENDER_PASS_ENDING_ACCESS
5772{
5773 D3D12_RENDER_PASS_ENDING_ACCESS_TYPE Type;
5774
5775 union
5776 {
5777 D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS Resolve;
5778 D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal;
5779 };
5780} D3D12_RENDER_PASS_ENDING_ACCESS;
5781
5782// Render Target Desc
5783typedef struct D3D12_RENDER_PASS_RENDER_TARGET_DESC
5784{
5785 D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor;
5786
5787 D3D12_RENDER_PASS_BEGINNING_ACCESS BeginningAccess;
5788 D3D12_RENDER_PASS_ENDING_ACCESS EndingAccess;
5789
5790} D3D12_RENDER_PASS_RENDER_TARGET_DESC;
5791
5792// Depth-Stencil Desc
5793typedef struct D3D12_RENDER_PASS_DEPTH_STENCIL_DESC
5794{
5795 D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor;
5796
5797 D3D12_RENDER_PASS_BEGINNING_ACCESS DepthBeginningAccess;
5798 D3D12_RENDER_PASS_BEGINNING_ACCESS StencilBeginningAccess;
5799
5800 D3D12_RENDER_PASS_ENDING_ACCESS DepthEndingAccess;
5801 D3D12_RENDER_PASS_ENDING_ACCESS StencilEndingAccess;
5802
5803} D3D12_RENDER_PASS_DEPTH_STENCIL_DESC;
5804
5805typedef enum D3D12_RENDER_PASS_FLAGS
5806{
5807 D3D12_RENDER_PASS_FLAG_NONE = 0x0,
5808 D3D12_RENDER_PASS_FLAG_ALLOW_UAV_WRITES = 0x1,
5809 D3D12_RENDER_PASS_FLAG_SUSPENDING_PASS = 0x2,
5810 D3D12_RENDER_PASS_FLAG_RESUMING_PASS = 0x4,
5811 D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_DEPTH = 0x8,
5812 D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_STENCIL = 0x10
5813} D3D12_RENDER_PASS_FLAGS;
5814cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS )")
5815
5816[uuid(DBB84C27-36CE-4FC9-B801-F048C46AC570), object, local, pointer_default(unique)]
5817interface ID3D12MetaCommand : ID3D12Pageable
5818{
5819 UINT64 GetRequiredParameterResourceSize([annotation("_In_")] D3D12_META_COMMAND_PARAMETER_STAGE Stage, [annotation("_In_")] UINT ParameterIndex);
5820}
5821
5822typedef struct D3D12_DISPATCH_RAYS_DESC
5823{
5824 D3D12_GPU_VIRTUAL_ADDRESS_RANGE RayGenerationShaderRecord;
5825 D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE MissShaderTable;
5826 D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE HitGroupTable;
5827 D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE CallableShaderTable;
5828 UINT Width;
5829 UINT Height;
5830 UINT Depth;
5831} D3D12_DISPATCH_RAYS_DESC;
5832
5833typedef enum D3D12_SET_WORK_GRAPH_FLAGS
5834{
5835 D3D12_SET_WORK_GRAPH_FLAG_NONE = 0x0,
5836 D3D12_SET_WORK_GRAPH_FLAG_INITIALIZE = 0x1,
5837} D3D12_SET_WORK_GRAPH_FLAGS;
5838cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_SET_WORK_GRAPH_FLAGS )" )
5839
5840typedef struct D3D12_SET_WORK_GRAPH_DESC
5841{
5842 D3D12_PROGRAM_IDENTIFIER ProgramIdentifier;
5843 D3D12_SET_WORK_GRAPH_FLAGS Flags;
5844 D3D12_GPU_VIRTUAL_ADDRESS_RANGE BackingMemory;
5845 D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE NodeLocalRootArgumentsTable;
5846} D3D12_SET_WORK_GRAPH_DESC;
5847
5848typedef struct D3D12_SET_RAYTRACING_PIPELINE_DESC
5849{
5850 D3D12_PROGRAM_IDENTIFIER ProgramIdentifier;
5851} D3D12_SET_RAYTRACING_PIPELINE_DESC;
5852
5853typedef struct D3D12_SET_GENERIC_PIPELINE_DESC
5854{
5855 D3D12_PROGRAM_IDENTIFIER ProgramIdentifier;
5856} D3D12_SET_GENERIC_PIPELINE_DESC;
5857
5858typedef enum D3D12_PROGRAM_TYPE
5859{
5860 D3D12_PROGRAM_TYPE_GENERIC_PIPELINE = 1,
5861 D3D12_PROGRAM_TYPE_RAYTRACING_PIPELINE = 4,
5862 D3D12_PROGRAM_TYPE_WORK_GRAPH = 5
5863} D3D12_PROGRAM_TYPE;
5864
5865typedef struct D3D12_SET_PROGRAM_DESC
5866{
5867 D3D12_PROGRAM_TYPE Type;
5868 union
5869 {
5870 D3D12_SET_GENERIC_PIPELINE_DESC GenericPipeline;
5871 D3D12_SET_RAYTRACING_PIPELINE_DESC RaytracingPipeline;
5872 D3D12_SET_WORK_GRAPH_DESC WorkGraph;
5873 };
5874} D3D12_SET_PROGRAM_DESC;
5875
5876typedef enum D3D12_DISPATCH_MODE
5877{
5878 D3D12_DISPATCH_MODE_NODE_CPU_INPUT = 0, // D3D12_NODE_CPU_INPUT
5879 D3D12_DISPATCH_MODE_NODE_GPU_INPUT = 1, // D3D12_NODE_GPU_INPUT in GPU memory
5880 D3D12_DISPATCH_MODE_MULTI_NODE_CPU_INPUT = 2, // D3D12_MULTI_NODE_CPU_INPUT
5881 D3D12_DISPATCH_MODE_MULTI_NODE_GPU_INPUT = 3 // D3D12_MULTI_NODE_GPU_INPUT in GPU memory
5882} D3D12_DISPATCH_MODE;
5883
5884typedef struct D3D12_NODE_CPU_INPUT
5885{
5886 UINT EntrypointIndex;
5887 UINT NumRecords;
5888 const void* pRecords;
5889 UINT64 RecordStrideInBytes;
5890} D3D12_NODE_CPU_INPUT;
5891
5892typedef struct D3D12_NODE_GPU_INPUT
5893{
5894 UINT EntrypointIndex;
5895 UINT NumRecords;
5896 D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE Records;
5897} D3D12_NODE_GPU_INPUT;
5898
5899typedef struct D3D12_MULTI_NODE_CPU_INPUT
5900{
5901 UINT NumNodeInputs;
5902 const D3D12_NODE_CPU_INPUT* pNodeInputs;
5903 UINT64 NodeInputStrideInBytes;
5904} D3D12_MULTI_NODE_CPU_INPUT;
5905
5906typedef struct D3D12_MULTI_NODE_GPU_INPUT
5907{
5908 UINT NumNodeInputs;
5909 D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE NodeInputs; // D3D12_GPU_NODE_INPUT array
5910} D3D12_MULTI_NODE_GPU_INPUT;
5911
5912typedef struct D3D12_DISPATCH_GRAPH_DESC
5913{
5914 D3D12_DISPATCH_MODE Mode;
5915 union
5916 {
5917 D3D12_NODE_CPU_INPUT NodeCPUInput;
5918 D3D12_GPU_VIRTUAL_ADDRESS NodeGPUInput;
5919 D3D12_MULTI_NODE_CPU_INPUT MultiNodeCPUInput;
5920 D3D12_GPU_VIRTUAL_ADDRESS MultiNodeGPUInput;
5921 };
5922} D3D12_DISPATCH_GRAPH_DESC;
5923
5924[uuid(8754318e-d3a9-4541-98cf-645b50dc4874), object, local, pointer_default(unique)]
5925interface ID3D12GraphicsCommandList4 : ID3D12GraphicsCommandList3
5926{
5927 void BeginRenderPass(
5928 [annotation("_In_")] UINT NumRenderTargets,
5929 [annotation("_In_reads_opt_(NumRenderTargets)")] const D3D12_RENDER_PASS_RENDER_TARGET_DESC* pRenderTargets,
5930 [annotation("_In_opt_")] const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC* pDepthStencil,
5931 D3D12_RENDER_PASS_FLAGS Flags
5932 );
5933
5934 void EndRenderPass();
5935
5936 void InitializeMetaCommand(
5937 [annotation("_In_")] ID3D12MetaCommand * pMetaCommand,
5938 [annotation("_In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)")] const void * pInitializationParametersData,
5939 [annotation("_In_")] SIZE_T InitializationParametersDataSizeInBytes
5940 );
5941
5942 void ExecuteMetaCommand(
5943 [annotation("_In_")] ID3D12MetaCommand * pMetaCommand,
5944 [annotation("_In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)")] const void * pExecutionParametersData,
5945 [annotation("_In_")] SIZE_T ExecutionParametersDataSizeInBytes
5946 );
5947
5948 void BuildRaytracingAccelerationStructure(
5949 [annotation("_In_")] const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* pDesc,
5950 [annotation("_In_")] UINT NumPostbuildInfoDescs,
5951 [annotation("_In_reads_opt_(NumPostbuildInfoDescs)")] const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pPostbuildInfoDescs
5952 );
5953
5954 void EmitRaytracingAccelerationStructurePostbuildInfo(
5955 [annotation("_In_")] const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pDesc,
5956 [annotation("_In_")] UINT NumSourceAccelerationStructures,
5957 [annotation("_In_reads_( NumSourceAccelerationStructures )")] const D3D12_GPU_VIRTUAL_ADDRESS* pSourceAccelerationStructureData);
5958
5959 void CopyRaytracingAccelerationStructure(
5960 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
5961 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
5962 [annotation("_In_")] D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
5963
5964 void SetPipelineState1(
5965 [annotation("_In_")] ID3D12StateObject* pStateObject);
5966
5967 void DispatchRays(
5968 [annotation("_In_")] const D3D12_DISPATCH_RAYS_DESC* pDesc);
5969}
5970
5971typedef enum D3D12_SHADER_CACHE_MODE
5972{
5973 D3D12_SHADER_CACHE_MODE_MEMORY,
5974 D3D12_SHADER_CACHE_MODE_DISK,
5975} D3D12_SHADER_CACHE_MODE;
5976
5977typedef enum D3D12_SHADER_CACHE_FLAGS
5978{
5979 D3D12_SHADER_CACHE_FLAG_NONE = 0x0,
5980 D3D12_SHADER_CACHE_FLAG_DRIVER_VERSIONED = 0x1,
5981 D3D12_SHADER_CACHE_FLAG_USE_WORKING_DIR = 0x2,
5982} D3D12_SHADER_CACHE_FLAGS;
5983cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_FLAGS )")
5984
5985typedef struct D3D12_SHADER_CACHE_SESSION_DESC
5986{
5987 GUID Identifier;
5988 D3D12_SHADER_CACHE_MODE Mode;
5989 D3D12_SHADER_CACHE_FLAGS Flags;
5990
5991 UINT MaximumInMemoryCacheSizeBytes;
5992 UINT MaximumInMemoryCacheEntries;
5993
5994 UINT MaximumValueFileSizeBytes;
5995
5996 UINT64 Version;
5997} D3D12_SHADER_CACHE_SESSION_DESC;
5998
5999typedef enum D3D12_BARRIER_LAYOUT
6000{
6001 D3D12_BARRIER_LAYOUT_UNDEFINED = 0xffffffff,
6002 D3D12_BARRIER_LAYOUT_COMMON = 0,
6003 D3D12_BARRIER_LAYOUT_PRESENT = 0,
6004 D3D12_BARRIER_LAYOUT_GENERIC_READ = 1,
6005 D3D12_BARRIER_LAYOUT_RENDER_TARGET = 2,
6006 D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS = 3,
6007 D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE = 4,
6008 D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ = 5,
6009 D3D12_BARRIER_LAYOUT_SHADER_RESOURCE = 6,
6010 D3D12_BARRIER_LAYOUT_COPY_SOURCE = 7,
6011 D3D12_BARRIER_LAYOUT_COPY_DEST = 8,
6012 D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE = 9,
6013 D3D12_BARRIER_LAYOUT_RESOLVE_DEST = 10,
6014 D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE = 11,
6015 D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ = 12,
6016 D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE = 13,
6017 D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ = 14,
6018 D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE = 15,
6019 D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ = 16,
6020 D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE = 17,
6021 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON = 18,
6022 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ = 19,
6023 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS = 20,
6024 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE = 21,
6025 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE = 22,
6026 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST = 23,
6027 D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON = 24,
6028 D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ = 25,
6029 D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS = 26,
6030 D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE = 27,
6031 D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE = 28,
6032 D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST = 29,
6033 D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ_COMPUTE_QUEUE_ACCESSIBLE = 31,
6034
6035} D3D12_BARRIER_LAYOUT;
6036
6037typedef enum D3D12_BARRIER_SYNC
6038{
6039 D3D12_BARRIER_SYNC_NONE = 0x0,
6040 D3D12_BARRIER_SYNC_ALL = 0x1,
6041 D3D12_BARRIER_SYNC_DRAW = 0x2,
6042 D3D12_BARRIER_SYNC_INDEX_INPUT = 0x4,
6043 D3D12_BARRIER_SYNC_VERTEX_SHADING = 0x8,
6044 D3D12_BARRIER_SYNC_PIXEL_SHADING = 0x10,
6045 D3D12_BARRIER_SYNC_DEPTH_STENCIL = 0x20,
6046 D3D12_BARRIER_SYNC_RENDER_TARGET = 0x40,
6047 D3D12_BARRIER_SYNC_COMPUTE_SHADING = 0x80,
6048 D3D12_BARRIER_SYNC_RAYTRACING = 0x100,
6049 D3D12_BARRIER_SYNC_COPY = 0x200,
6050 D3D12_BARRIER_SYNC_RESOLVE = 0x400,
6051 D3D12_BARRIER_SYNC_EXECUTE_INDIRECT = 0x800,
6052 D3D12_BARRIER_SYNC_PREDICATION = 0x800, // Aliased with SYNC_EXECUTE_INDIRECT
6053 D3D12_BARRIER_SYNC_ALL_SHADING = 0x1000,
6054 D3D12_BARRIER_SYNC_NON_PIXEL_SHADING = 0x2000,
6055 D3D12_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO = 0x4000,
6056 D3D12_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW = 0x8000,
6057 D3D12_BARRIER_SYNC_VIDEO_DECODE = 0x100000,
6058 D3D12_BARRIER_SYNC_VIDEO_PROCESS = 0x200000,
6059 D3D12_BARRIER_SYNC_VIDEO_ENCODE = 0x400000,
6060 D3D12_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE = 0x800000,
6061 D3D12_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE = 0x1000000,
6062 D3D12_BARRIER_SYNC_SPLIT = 0x80000000,
6063} D3D12_BARRIER_SYNC;
6064cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_SYNC )" )
6065
6066typedef enum D3D12_BARRIER_ACCESS
6067{
6068 D3D12_BARRIER_ACCESS_COMMON = 0,
6069 D3D12_BARRIER_ACCESS_VERTEX_BUFFER = 0x1,
6070 D3D12_BARRIER_ACCESS_CONSTANT_BUFFER = 0x2,
6071 D3D12_BARRIER_ACCESS_INDEX_BUFFER = 0x4,
6072 D3D12_BARRIER_ACCESS_RENDER_TARGET = 0x8,
6073 D3D12_BARRIER_ACCESS_UNORDERED_ACCESS = 0x10,
6074 D3D12_BARRIER_ACCESS_DEPTH_STENCIL_WRITE = 0x20,
6075 D3D12_BARRIER_ACCESS_DEPTH_STENCIL_READ = 0x40,
6076 D3D12_BARRIER_ACCESS_SHADER_RESOURCE = 0x80,
6077 D3D12_BARRIER_ACCESS_STREAM_OUTPUT = 0x100,
6078 D3D12_BARRIER_ACCESS_INDIRECT_ARGUMENT = 0x200,
6079 D3D12_BARRIER_ACCESS_PREDICATION = 0x200, // Aliased with ACCESS_INDIRECT_ARGUMENT
6080 D3D12_BARRIER_ACCESS_COPY_DEST = 0x400,
6081 D3D12_BARRIER_ACCESS_COPY_SOURCE = 0x800,
6082 D3D12_BARRIER_ACCESS_RESOLVE_DEST = 0x1000,
6083 D3D12_BARRIER_ACCESS_RESOLVE_SOURCE = 0x2000,
6084 D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ = 0x4000,
6085 D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE = 0x8000,
6086 D3D12_BARRIER_ACCESS_SHADING_RATE_SOURCE = 0x10000,
6087 D3D12_BARRIER_ACCESS_VIDEO_DECODE_READ = 0x20000,
6088 D3D12_BARRIER_ACCESS_VIDEO_DECODE_WRITE = 0x40000,
6089 D3D12_BARRIER_ACCESS_VIDEO_PROCESS_READ = 0x80000,
6090 D3D12_BARRIER_ACCESS_VIDEO_PROCESS_WRITE = 0x100000,
6091 D3D12_BARRIER_ACCESS_VIDEO_ENCODE_READ = 0x200000,
6092 D3D12_BARRIER_ACCESS_VIDEO_ENCODE_WRITE = 0x400000,
6093 D3D12_BARRIER_ACCESS_NO_ACCESS = 0x80000000,
6094} D3D12_BARRIER_ACCESS;
6095cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_ACCESS )" )
6096
6097typedef enum D3D12_BARRIER_TYPE
6098{
6099 D3D12_BARRIER_TYPE_GLOBAL,
6100 D3D12_BARRIER_TYPE_TEXTURE,
6101 D3D12_BARRIER_TYPE_BUFFER,
6102} D3D12_BARRIER_TYPE;
6103
6104typedef enum D3D12_TEXTURE_BARRIER_FLAGS
6105{
6106 D3D12_TEXTURE_BARRIER_FLAG_NONE = 0x0,
6107 D3D12_TEXTURE_BARRIER_FLAG_DISCARD = 0x1,
6108} D3D12_TEXTURE_BARRIER_FLAGS;
6109cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_TEXTURE_BARRIER_FLAGS )")
6110
6111typedef struct D3D12_BARRIER_SUBRESOURCE_RANGE
6112{
6113 UINT IndexOrFirstMipLevel;
6114 UINT NumMipLevels;
6115 UINT FirstArraySlice;
6116 UINT NumArraySlices;
6117 UINT FirstPlane;
6118 UINT NumPlanes;
6119} D3D12_BARRIER_SUBRESOURCE_RANGE;
6120
6121typedef struct D3D12_GLOBAL_BARRIER
6122{
6123 D3D12_BARRIER_SYNC SyncBefore;
6124 D3D12_BARRIER_SYNC SyncAfter;
6125 D3D12_BARRIER_ACCESS AccessBefore;
6126 D3D12_BARRIER_ACCESS AccessAfter;
6127} D3D12_GLOBAL_BARRIER;
6128
6129typedef struct D3D12_TEXTURE_BARRIER
6130{
6131 D3D12_BARRIER_SYNC SyncBefore;
6132 D3D12_BARRIER_SYNC SyncAfter;
6133 D3D12_BARRIER_ACCESS AccessBefore;
6134 D3D12_BARRIER_ACCESS AccessAfter;
6135 D3D12_BARRIER_LAYOUT LayoutBefore;
6136 D3D12_BARRIER_LAYOUT LayoutAfter;
6137 [annotation("_In_")] ID3D12Resource *pResource;
6138 D3D12_BARRIER_SUBRESOURCE_RANGE Subresources;
6139 D3D12_TEXTURE_BARRIER_FLAGS Flags;
6140} D3D12_TEXTURE_BARRIER;
6141
6142typedef struct D3D12_BUFFER_BARRIER
6143{
6144 D3D12_BARRIER_SYNC SyncBefore;
6145 D3D12_BARRIER_SYNC SyncAfter;
6146 D3D12_BARRIER_ACCESS AccessBefore;
6147 D3D12_BARRIER_ACCESS AccessAfter;
6148 [annotation("_In_")] ID3D12Resource *pResource;
6149 UINT64 Offset;
6150 UINT64 Size;
6151} D3D12_BUFFER_BARRIER;
6152
6153typedef struct D3D12_BARRIER_GROUP
6154{
6155 D3D12_BARRIER_TYPE Type;
6156 UINT32 NumBarriers;
6157 union
6158 {
6159 [annotation("_In_reads_(NumBarriers)")] const D3D12_GLOBAL_BARRIER *pGlobalBarriers;
6160 [annotation("_In_reads_(NumBarriers)")] const D3D12_TEXTURE_BARRIER *pTextureBarriers;
6161 [annotation("_In_reads_(NumBarriers)")] const D3D12_BUFFER_BARRIER *pBufferBarriers;
6162 };
6163} D3D12_BARRIER_GROUP;
6164
6165[uuid(28e2495d-0f64-4ae4-a6ec-129255dc49a8), object, local, pointer_default(unique)]
6166interface ID3D12ShaderCacheSession
6167 : ID3D12DeviceChild
6168{
6169 HRESULT FindValue(
6170 [in, annotation("_In_reads_bytes_(KeySize)")] const void* pKey,
6171 UINT KeySize,
6172 [out, annotation("_Out_writes_bytes_(*pValueSize)")] void* pValue,
6173 [annotation("_Inout_")] UINT* pValueSize);
6174 HRESULT StoreValue(
6175 [in, annotation("_In_reads_bytes_(KeySize)")] const void* pKey,
6176 UINT KeySize,
6177 [in, annotation("_In_reads_bytes_(ValueSize)")] const void* pValue,
6178 UINT ValueSize);
6179
6180 void SetDeleteOnDestroy();
6181 D3D12_SHADER_CACHE_SESSION_DESC GetDesc();
6182};
6183
6184typedef enum D3D12_SHADER_CACHE_KIND_FLAGS
6185{
6186 D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CACHE_FOR_DRIVER = 0x1,
6187 D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CONVERSIONS = 0x2,
6188 D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_DRIVER_MANAGED = 0x4,
6189 D3D12_SHADER_CACHE_KIND_FLAG_APPLICATION_MANAGED = 0x8,
6190} D3D12_SHADER_CACHE_KIND_FLAGS;
6191cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_KIND_FLAGS )")
6192
6193typedef enum D3D12_SHADER_CACHE_CONTROL_FLAGS
6194{
6195 D3D12_SHADER_CACHE_CONTROL_FLAG_DISABLE = 0x1,
6196 D3D12_SHADER_CACHE_CONTROL_FLAG_ENABLE = 0x2,
6197 D3D12_SHADER_CACHE_CONTROL_FLAG_CLEAR = 0x4,
6198} D3D12_SHADER_CACHE_CONTROL_FLAGS;
6199cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_CONTROL_FLAGS )")
6200
6201[uuid(4c80e962-f032-4f60-bc9e-ebc2cfa1d83c), object, local, pointer_default(unique)]
6202interface ID3D12Device9
6203 : ID3D12Device8
6204{
6205 HRESULT CreateShaderCacheSession(
6206 [annotation("_In_")] const D3D12_SHADER_CACHE_SESSION_DESC* pDesc,
6207 REFIID riid,
6208 [annotation("_COM_Outptr_opt_")] void** ppvSession);
6209
6210 HRESULT ShaderCacheControl(
6211 D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
6212 D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
6213
6214 HRESULT CreateCommandQueue1(
6215 [annotation("_In_")] const D3D12_COMMAND_QUEUE_DESC* pDesc,
6216 REFIID CreatorID,
6217 [in] REFIID riid, // Expected: ID3D12CommandQueue
6218 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandQueue
6219 );
6220};
6221
6222[uuid(517f8718-aa66-49f9-b02b-a7ab89c06031), object, local, pointer_default(unique)]
6223interface ID3D12Device10
6224 : ID3D12Device9
6225{
6226 HRESULT CreateCommittedResource3(
6227 [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties,
6228 D3D12_HEAP_FLAGS HeapFlags,
6229 [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc,
6230 D3D12_BARRIER_LAYOUT InitialLayout,
6231 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
6232 [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedSession,
6233 UINT32 NumCastableFormats,
6234 [annotation("_In_opt_count_(NumCastableFormats)")] const DXGI_FORMAT *pCastableFormats,
6235 [in] REFIID riidResource, // Expected: ID3D12Resource1*
6236 [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource);
6237
6238 HRESULT CreatePlacedResource2(
6239 [annotation("_In_")] ID3D12Heap* pHeap,
6240 UINT64 HeapOffset,
6241 [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc,
6242 D3D12_BARRIER_LAYOUT InitialLayout,
6243 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
6244 UINT32 NumCastableFormats,
6245 [annotation("_In_opt_count_(NumCastableFormats)")] const DXGI_FORMAT *pCastableFormats,
6246 [in] REFIID riid, // Expected: ID3D12Resource*
6247 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource);
6248
6249 HRESULT CreateReservedResource2(
6250 [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc,
6251 D3D12_BARRIER_LAYOUT InitialLayout,
6252 [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue,
6253 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession,
6254 UINT32 NumCastableFormats,
6255 [annotation("_In_opt_count_(NumCastableFormats)")] const DXGI_FORMAT *pCastableFormats,
6256 [in] REFIID riid, // Expected: ID3D12Resource1*
6257 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource
6258 );
6259};
6260
6261[uuid(5405c344-d457-444e-b4dd-2366e45aee39), object, local, pointer_default(unique)]
6262interface ID3D12Device11
6263 : ID3D12Device10
6264{
6265 void CreateSampler2(
6266 [annotation("_In_")] const D3D12_SAMPLER_DESC2* pDesc,
6267 [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
6268};
6269
6270[uuid(5af5c532-4c91-4cd0-b541-15a405395fc5), object, local, pointer_default(unique)]
6271interface ID3D12Device12
6272 : ID3D12Device11
6273{
6274 D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo3(
6275 UINT visibleMask,
6276 UINT numResourceDescs,
6277 [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC1* pResourceDescs,
6278 [annotation("_In_opt_count_(numResourceDescs)")] const UINT32* pNumCastableFormats,
6279 [annotation("_In_opt_count_(numResourceDescs)")] const DXGI_FORMAT *const *ppCastableFormats,
6280 [annotation("_Out_writes_opt_(numResourceDescs)")] D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1);
6281};
6282
6283[uuid(14eecffc-4df8-40f7-a118-5c816f45695e), object, local, pointer_default(unique)]
6284interface ID3D12Device13
6285 : ID3D12Device12
6286{
6287 HRESULT OpenExistingHeapFromAddress1(
6288 [annotation("_In_")] const void* pAddress,
6289 SIZE_T size,
6290 [in] REFIID riid, // Expected: ID3D12Heap
6291 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap
6292 );
6293};
6294
6295[uuid(5f6e592d-d895-44c2-8e4a-88ad4926d323), object, local, pointer_default(unique)]
6296interface ID3D12Device14 : ID3D12Device13
6297{
6298 HRESULT CreateRootSignatureFromSubobjectInLibrary(
6299 [annotation("_In_")] UINT nodeMask,
6300 [annotation("_In_reads_(blobLengthInBytes)")] const void* pLibraryBlob,
6301 [annotation("_In_")] SIZE_T blobLengthInBytes,
6302 [annotation("_In_opt_")] LPCWSTR subobjectName,
6303 [in] REFIID riid, // Expected ID3D12RootSignature
6304 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature);
6305};
6306
6307typedef union D3D12_VERSION_NUMBER
6308{
6309 UINT64 Version;
6310 UINT16 VersionParts[4];
6311} D3D12_VERSION_NUMBER;
6312
6313// D3D12_FEATURE_SHADER_CACHE_ABI_SUPPORT
6314typedef struct D3D12_FEATURE_DATA_SHADERCACHE_ABI_SUPPORT
6315{
6316 WCHAR szAdapterFamily[128];
6317 UINT64 MinimumABISupportVersion;
6318 UINT64 MaximumABISupportVersion;
6319 D3D12_VERSION_NUMBER CompilerVersion;
6320 D3D12_VERSION_NUMBER ApplicationProfileVersion;
6321} D3D12_FEATURE_DATA_SHADERCACHE_ABI_SUPPORT;
6322
6323
6324typedef void(__stdcall* D3D12PipelineStateFunc) (
6325 [annotation("_In_reads_bytes_(KeySize)")] const void* pKey,
6326 UINT KeySize,
6327 UINT Version,
6328 const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc,
6329 [annotation("_Inout_opt_")] void* pContext
6330 );
6331
6332typedef void(__stdcall* D3D12StateObjectFunc) (
6333 [annotation("_In_reads_bytes_(KeySize)")] const void* pKey,
6334 UINT KeySize,
6335 UINT Version,
6336 const D3D12_STATE_OBJECT_DESC* pDesc,
6337 [annotation("_In_reads_bytes_(ParentKeySize)")] const void* pParentKey,
6338 UINT ParentKeySize,
6339 [annotation("_Inout_opt_")] void* pContext
6340 );
6341
6342
6343typedef struct D3D12_APPLICATION_DESC
6344{
6345 LPCWSTR pExeFilename;
6346 LPCWSTR pName;
6347 D3D12_VERSION_NUMBER Version;
6348 LPCWSTR pEngineName;
6349 D3D12_VERSION_NUMBER EngineVersion;
6350} D3D12_APPLICATION_DESC;
6351
6352typedef void(__stdcall* D3D12ApplicationDescFunc) (
6353 [annotation("_In_")] const D3D12_APPLICATION_DESC* pApplicationDesc,
6354 [annotation("_Inout_opt_")] void* pContext
6355 );
6356
6357typedef struct D3D12_EXISTING_COLLECTION_BY_KEY_DESC
6358{
6359 [annotation("_Field_size_bytes_full_(KeySize)")] const void* pKey;
6360 UINT KeySize;
6361 UINT NumExports; // Optional, if 0 all exports in the library/collection will be surfaced
6362 [annotation("_In_reads_(NumExports)")] const D3D12_EXPORT_DESC* pExports;
6363} D3D12_EXISTING_COLLECTION_BY_KEY_DESC;
6364
6365[uuid(c56060b7-b5fc-4135-98e0-a1e9997eace0), object, local, pointer_default(unique)]
6366interface ID3D12StateObjectDatabase
6367 : IUnknown
6368{
6369 HRESULT SetApplicationDesc(
6370 [annotation("_In_")] const D3D12_APPLICATION_DESC* pApplicationDesc);
6371
6372 HRESULT GetApplicationDesc(
6373 [annotation("_In_")] D3D12ApplicationDescFunc CallbackFunc,
6374 [annotation("_Inout_opt_")] void* pContext);
6375
6376 HRESULT StorePipelineStateDesc(
6377 [annotation("_In_reads_(KeySize)")] const void* pKey,
6378 UINT KeySize,
6379 UINT Version,
6380 [annotation("_In_")] const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc);
6381
6382 HRESULT FindPipelineStateDesc(
6383 [annotation("_In_reads_(KeySize)")] const void* pKey,
6384 UINT KeySize,
6385 [annotation("_In_")] D3D12PipelineStateFunc CallbackFunc,
6386 [annotation("_Inout_opt_")] void* pContext);
6387
6388 HRESULT StoreStateObjectDesc(
6389 [annotation("_In_reads_(KeySize)")] const void* pKey,
6390 UINT KeySize,
6391 UINT Version,
6392 [annotation("_In_")] const D3D12_STATE_OBJECT_DESC* pDesc,
6393 [annotation("_In_reads_opt_(StateObjectToGrowFromKeySize)")] const void* pStateObjectToGrowFromKey,
6394 UINT StateObjectToGrowFromKeySize);
6395
6396 HRESULT FindStateObjectDesc(
6397 [annotation("_In_reads_(keySize)")] const void* pKey,
6398 UINT KeySize,
6399 D3D12StateObjectFunc CallbackFunc,
6400 [annotation("_Inout_opt_")] void* pContext);
6401
6402 HRESULT FindObjectVersion(
6403 [annotation("_In_reads_(keySize)")] const void* pKey,
6404 UINT KeySize,
6405 [annotation("_Out_")] UINT* pVersion);
6406};
6407
6408
6409
6410[uuid(bc66d368-7373-4943-8757-fc87dc79e476), object, local, pointer_default(unique)]
6411interface ID3D12VirtualizationGuestDevice
6412 : IUnknown
6413{
6414 HRESULT ShareWithHost(
6415 [annotation("_In_")] ID3D12DeviceChild* pObject,
6416 [annotation("_Out_")] HANDLE* pHandle
6417 );
6418
6419 HRESULT CreateFenceFd(
6420 [annotation("_In_")] ID3D12Fence *pFence,
6421 UINT64 FenceValue,
6422 [annotation("_Out_")] int *pFenceFd
6423 );
6424};
6425
6426
6427
6428[uuid(7071e1f0-e84b-4b33-974f-12fa49de65c5), object, local, pointer_default(unique)]
6429interface ID3D12Tools
6430 : IUnknown
6431{
6432 void EnableShaderInstrumentation(BOOL bEnable);
6433 BOOL ShaderInstrumentationEnabled();
6434}
6435
6436[uuid(e4fbc019-dd3c-43e1-8f32-7f649575f0a0), object, local, pointer_default(unique)]
6437interface ID3D12Tools1
6438 : ID3D12Tools
6439{
6440 HRESULT ReserveGPUVARangesAtCreate(
6441 [annotation("_In_reads_(uiNumRanges)")] D3D12_GPU_VIRTUAL_ADDRESS_RANGE* pRanges,
6442 [annotation("_In_")] UINT uiNumRanges);
6443 void ClearReservedGPUVARangesList();
6444}
6445
6446[uuid(01d393c5-c9b0-42a1-958c-c26b02d4d097), object, local, pointer_default(unique)]
6447interface ID3D12Tools2
6448 : ID3D12Tools1
6449{
6450 HRESULT SetApplicationSpecificDriverState(
6451 [annotation("_In_")] IUnknown* pAdapter,
6452 [annotation("_In_opt_")] ID3DBlob* pBlob);
6453};
6454
6455
6456[uuid(8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d), object, local, pointer_default(unique)]
6457interface ID3D12PageableTools
6458 : IUnknown
6459{
6460 HRESULT GetAllocation(
6461 [annotation("_Inout_")] D3D12_GPU_VIRTUAL_ADDRESS_RANGE* pAllocation);
6462}
6463
6464[uuid(2ea68e9c-19c3-4e47-a109-6cdadff0aca9), object, local, pointer_default(unique)]
6465interface ID3D12DeviceTools
6466 : IUnknown
6467{
6468 void SetNextAllocationAddress(
6469 [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress);
6470}
6471
6472typedef enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS
6473{
6474 D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN = 1,
6475 D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED = 2,
6476 D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED = 3,
6477 D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED = 4,
6478} D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS;
6479
6480[uuid(e30e9fc7-e641-4d6e-8a81-9dd9206ec47a), object, local, pointer_default(unique)]
6481interface ID3D12DeviceTools1
6482 : ID3D12DeviceTools
6483{
6484 HRESULT GetApplicationSpecificDriverState(
6485 [annotation("_COM_Outptr_")] ID3DBlob** ppBlob);
6486 D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS GetApplicationSpecificDriverBlobStatus();
6487}
6488
6489typedef struct D3D12_SUBRESOURCE_DATA
6490{
6491 const void* pData;
6492 LONG_PTR RowPitch;
6493 LONG_PTR SlicePitch;
6494} D3D12_SUBRESOURCE_DATA;
6495
6496typedef struct D3D12_MEMCPY_DEST
6497{
6498 void* pData;
6499 SIZE_T RowPitch;
6500 SIZE_T SlicePitch;
6501} D3D12_MEMCPY_DEST;
6502
6503
6504
6505cpp_quote( "#if !defined( D3D12_IGNORE_SDK_LAYERS ) ")
6506cpp_quote( "#include \"d3d12sdklayers.h\" ")
6507cpp_quote( "#endif ")
6508
6509
6510cpp_quote("")
6511cpp_quote("///////////////////////////////////////////////////////////////////////////")
6512cpp_quote("// D3D12CreateDevice")
6513cpp_quote("// ------------------")
6514cpp_quote("//")
6515cpp_quote("// pAdapter")
6516cpp_quote("// If NULL, D3D12CreateDevice will choose the primary adapter.")
6517cpp_quote("// If non-NULL, D3D12CreateDevice will use the provided adapter.")
6518cpp_quote("// MinimumFeatureLevel")
6519cpp_quote("// The minimum feature level required for successful device creation.")
6520cpp_quote("// riid")
6521cpp_quote("// The interface IID of the device to be returned. Expected: ID3D12Device.")
6522cpp_quote("// ppDevice")
6523cpp_quote("// Pointer to returned interface. May be NULL.")
6524cpp_quote("//")
6525cpp_quote("// Return Values")
6526cpp_quote("// Any of those documented for ")
6527cpp_quote("// CreateDXGIFactory1")
6528cpp_quote("// IDXGIFactory::EnumAdapters")
6529cpp_quote("// D3D12CreateDevice")
6530cpp_quote("//")
6531cpp_quote("///////////////////////////////////////////////////////////////////////////")
6532cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_CREATE_DEVICE)( _In_opt_ IUnknown*, ")
6533cpp_quote(" D3D_FEATURE_LEVEL, ")
6534cpp_quote(" _In_ REFIID, _COM_Outptr_opt_ void** );")
6535cpp_quote("")
6536cpp_quote("HRESULT WINAPI D3D12CreateDevice(")
6537cpp_quote(" _In_opt_ IUnknown* pAdapter,")
6538cpp_quote(" D3D_FEATURE_LEVEL MinimumFeatureLevel,")
6539cpp_quote(" _In_ REFIID riid, // Expected: ID3D12Device")
6540cpp_quote(" _COM_Outptr_opt_ void** ppDevice );")
6541cpp_quote("")
6542
6543cpp_quote("")
6544cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_GET_DEBUG_INTERFACE)( _In_ REFIID, _COM_Outptr_opt_ void** );")
6545cpp_quote("")
6546cpp_quote("HRESULT WINAPI D3D12GetDebugInterface( _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug );")
6547cpp_quote("")
6548
6549cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6550cpp_quote("// D3D12EnableExperimentalFeatures")
6551cpp_quote("//")
6552cpp_quote("// Pass in a list of feature GUIDs to be enabled together.")
6553cpp_quote("// ")
6554cpp_quote("// If a particular feature requires some configuration information on enablement, it will have")
6555cpp_quote("// a configuration struct that can be passed alongside the GUID.")
6556cpp_quote("// ")
6557cpp_quote("// Some features might use an interface IID as the GUID. For these, once the feature is enabled via")
6558cpp_quote("// D3D12EnableExperimentalFeatures, D3D12GetDebugInterface can then be called with the IID to retrieve the interface")
6559cpp_quote("// for manipulating the feature. This allows for control that might not cleanly be expressed by just ")
6560cpp_quote("// the configuration struct that D3D12EnableExperimentalFeatures provides.")
6561cpp_quote("//")
6562cpp_quote("// If this method is called and a change to existing feature enablement is made, ")
6563cpp_quote("// all current D3D12 devices are set to DEVICE_REMOVED state, since under the covers there is really only one")
6564cpp_quote("// singleton device for a process. Removing the devices when configuration changes prevents")
6565cpp_quote("// mismatched expectations of how a device is supposed to work after it has been created from the app's point of view.")
6566cpp_quote("//")
6567cpp_quote("// The call returns E_NOINTERFACE if an unrecognized feature is passed in or Windows Developer mode is not on.")
6568cpp_quote("// The call returns E_INVALIDARG if the configuration of a feature is incorrect, the set of features passed")
6569cpp_quote("// in are known to be incompatible with each other, or other errors.")
6570cpp_quote("// Returns S_OK otherwise.")
6571cpp_quote("//")
6572cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6573cpp_quote("HRESULT WINAPI D3D12EnableExperimentalFeatures(")
6574cpp_quote(" UINT NumFeatures,")
6575cpp_quote(" _In_count_(NumFeatures) const IID* pIIDs,")
6576cpp_quote(" _In_opt_count_(NumFeatures) void* pConfigurationStructs,")
6577cpp_quote(" _In_opt_count_(NumFeatures) UINT* pConfigurationStructSizes);")
6578cpp_quote("")
6579cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6580cpp_quote("// Experimental Feature: D3D12ExperimentalShaderModels")
6581cpp_quote("//")
6582cpp_quote("// Use with D3D12EnableExperimentalFeatures to enable experimental shader model support,")
6583cpp_quote("// meaning shader models that haven't been finalized for use in retail.")
6584cpp_quote("//")
6585cpp_quote("// Enabling D3D12ExperimentalShaderModels needs no configuration struct, pass NULL in the pConfigurationStructs array.")
6586cpp_quote("//")
6587cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6588cpp_quote("static const UUID D3D12ExperimentalShaderModels = { /* 76f5573e-f13a-40f5-b297-81ce9e18933f */")
6589cpp_quote(" 0x76f5573e,")
6590cpp_quote(" 0xf13a,")
6591cpp_quote(" 0x40f5,")
6592cpp_quote(" { 0xb2, 0x97, 0x81, 0xce, 0x9e, 0x18, 0x93, 0x3f }")
6593cpp_quote("};")
6594cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6595cpp_quote("// Experimental Feature: D3D12TiledResourceTier4")
6596cpp_quote("//")
6597cpp_quote("// Use with D3D12EnableExperimentalFeatures to enable tiled resource tier 4 support,")
6598cpp_quote("// meaning texture tile data-inheritance is allowed.")
6599cpp_quote("//")
6600cpp_quote("// Enabling D3D12TiledResourceTier4 needs no configuration struct, pass NULL in the pConfigurationStructs array.")
6601cpp_quote("//")
6602cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6603cpp_quote("static const UUID D3D12TiledResourceTier4 = { /* c9c4725f-a81a-4f56-8c5b-c51039d694fb */")
6604cpp_quote(" 0xc9c4725f,")
6605cpp_quote(" 0xa81a,")
6606cpp_quote(" 0x4f56,")
6607cpp_quote(" { 0x8c, 0x5b, 0xc5, 0x10, 0x39, 0xd6, 0x94, 0xfb }")
6608cpp_quote("};")
6609cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6610cpp_quote("// Experimental Feature: D3D12GPUUploadHeapsOnUnsupportedOS")
6611cpp_quote("//")
6612cpp_quote("// Use with D3D12EnableExperimentalFeatures to enable GPU upload heaps support on an unsupported OS, ")
6613cpp_quote("// driver support is still required for this feature.")
6614cpp_quote("//")
6615cpp_quote("// Enabling D3D12GPUUploadHeapsOnUnsupportedOS needs no configuration struct, pass NULL in the pConfigurationStructs array.")
6616cpp_quote("//")
6617cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6618cpp_quote("static const UUID D3D12GPUUploadHeapsOnUnsupportedOS = { /* 45dc51f3-767f-4588-b206-0baa2b16fbae */")
6619cpp_quote(" 0x45dc51f3,")
6620cpp_quote(" 0x767f,")
6621cpp_quote(" 0x4588,")
6622cpp_quote(" { 0xb2, 0x06, 0x0b, 0xaa, 0x2b, 0x16, 0xfb, 0xae }")
6623cpp_quote("};")
6624cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------")
6625cpp_quote("// D3D12GetInterface")
6626cpp_quote("//")
6627cpp_quote("// Retrieve Global D3D12 Interface.")
6628cpp_quote("//")
6629cpp_quote("")
6630cpp_quote("DEFINE_GUID(CLSID_D3D12Debug, 0xf2352aeb, 0xdd84, 0x49fe, 0xb9, 0x7b, 0xa9, 0xdc, 0xfd, 0xcc, 0x1b, 0x4f);")
6631cpp_quote("DEFINE_GUID(CLSID_D3D12Tools, 0xe38216b1, 0x3c8c, 0x4833, 0xaa, 0x09, 0x0a, 0x06, 0xb6, 0x5d, 0x96, 0xc8);")
6632cpp_quote("DEFINE_GUID(CLSID_D3D12DeviceRemovedExtendedData, 0x4a75bbc4, 0x9ff4, 0x4ad8, 0x9f, 0x18, 0xab, 0xae, 0x84, 0xdc, 0x5f, 0xf2);")
6633cpp_quote("DEFINE_GUID(CLSID_D3D12SDKConfiguration, 0x7cda6aca, 0xa03e, 0x49c8, 0x94, 0x58, 0x03, 0x34, 0xd2, 0x0e, 0x07, 0xce);")
6634cpp_quote("DEFINE_GUID(CLSID_D3D12DeviceFactory, 0x114863bf, 0xc386, 0x4aee, 0xb3, 0x9d, 0x8f, 0x0b, 0xbb, 0x06, 0x29, 0x55);")
6635cpp_quote("DEFINE_GUID(CLSID_D3D12DSRDeviceFactory, 0xbb6dd27e, 0x94a9, 0x41a6, 0x9f, 0x1b, 0x13, 0x37, 0x72, 0x17, 0x24, 0x28);")
6636cpp_quote("DEFINE_GUID(CLSID_D3D12StateObjectFactory, 0x54e1c9f3, 0x1303, 0x4112, 0xbf, 0x8e, 0x7b, 0xf2, 0xbb, 0x60, 0x6a, 0x73);")
6637cpp_quote("")
6638cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_GET_INTERFACE)( _In_ REFCLSID, _In_ REFIID, _COM_Outptr_opt_ void** );")
6639cpp_quote("")
6640cpp_quote("HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug );")
6641cpp_quote("")
6642
6643//==================================================================================================================================
6644//
6645// SDK Configuration
6646//
6647//==================================================================================================================================
6648
6649[uuid(e9eb5314-33aa-42b2-a718-d77f58b1f1c7), object, local, pointer_default(unique)]
6650interface ID3D12SDKConfiguration
6651 : IUnknown
6652{
6653 HRESULT SetSDKVersion(
6654 UINT SDKVersion,
6655 [annotation("_In_z_")] LPCSTR SDKPath
6656 );
6657}
6658
6659[uuid(8aaf9303-ad25-48b9-9a57-d9c37e009d9f), object, local, pointer_default(unique)]
6660interface ID3D12SDKConfiguration1
6661 : ID3D12SDKConfiguration
6662{
6663 HRESULT CreateDeviceFactory(
6664 UINT SDKVersion,
6665 [annotation("_In_")] LPCSTR SDKPath,
6666 REFIID riid, // Expected: ID3D12DeviceFactory
6667 [annotation("_COM_Outptr_")] void **ppvFactory
6668 );
6669 void FreeUnusedSDKs();
6670}
6671
6672typedef enum D3D12_DEVICE_FACTORY_FLAGS
6673{
6674 D3D12_DEVICE_FACTORY_FLAG_NONE = 0,
6675 D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_EXISTING_DEVICE = 0x1,
6676 D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_INCOMPATIBLE_EXISTING_DEVICE = 0x2,
6677 D3D12_DEVICE_FACTORY_FLAG_DISALLOW_STORING_NEW_DEVICE_AS_SINGLETON = 0x4,
6678} D3D12_DEVICE_FACTORY_FLAGS;
6679cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS )")
6680
6681[uuid(61f307d3-d34e-4e7c-8374-3ba4de23cccb), object, local, pointer_default(unique)]
6682interface ID3D12DeviceFactory
6683 : IUnknown
6684{
6685 HRESULT InitializeFromGlobalState();
6686 HRESULT ApplyToGlobalState();
6687
6688 HRESULT SetFlags(D3D12_DEVICE_FACTORY_FLAGS flags);
6689 D3D12_DEVICE_FACTORY_FLAGS GetFlags();
6690
6691 HRESULT GetConfigurationInterface(
6692 REFCLSID clsid,
6693 REFIID iid,
6694 [annotation("_COM_Outptr_")] void **ppv);
6695
6696 HRESULT EnableExperimentalFeatures(
6697 UINT NumFeatures,
6698 [annotation("_In_reads_(NumFeatures)")] const IID *pIIDs,
6699 [annotation("_In_reads_opt_(NumFeatures)")] void *pConfigurationStructs,
6700 [annotation("_In_reads_opt_(NumFeatures)")] UINT *pConfigurationStructSizes);
6701
6702 HRESULT CreateDevice(
6703 [annotation("_In_opt_")] IUnknown *adapter,
6704 D3D_FEATURE_LEVEL FeatureLevel,
6705 REFIID riid,
6706 [annotation("_COM_Outptr_opt_")] void **ppvDevice);
6707};
6708
6709typedef enum D3D12_DEVICE_FLAGS
6710{
6711 D3D12_DEVICE_FLAG_NONE = 0,
6712 D3D12_DEVICE_FLAG_DEBUG_LAYER_ENABLED = 0x1,
6713 D3D12_DEVICE_FLAG_GPU_BASED_VALIDATION_ENABLED = 0x2,
6714 D3D12_DEVICE_FLAG_SYNCHRONIZED_COMMAND_QUEUE_VALIDATION_DISABLED = 0x4,
6715 D3D12_DEVICE_FLAG_DRED_AUTO_BREADCRUMBS_ENABLED = 0x8,
6716 D3D12_DEVICE_FLAG_DRED_PAGE_FAULT_REPORTING_ENABLED = 0x10,
6717 D3D12_DEVICE_FLAG_DRED_WATSON_REPORTING_ENABLED = 0x20,
6718 D3D12_DEVICE_FLAG_DRED_BREADCRUMB_CONTEXT_ENABLED = 0x40,
6719 D3D12_DEVICE_FLAG_DRED_USE_MARKERS_ONLY_BREADCRUMBS = 0x80,
6720 D3D12_DEVICE_FLAG_SHADER_INSTRUMENTATION_ENABLED = 0x100,
6721 D3D12_DEVICE_FLAG_AUTO_DEBUG_NAME_ENABLED = 0x200,
6722 D3D12_DEVICE_FLAG_FORCE_LEGACY_STATE_VALIDATION = 0x400,
6723} D3D12_DEVICE_FLAGS;
6724cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FLAGS )")
6725
6726typedef struct D3D12_DEVICE_CONFIGURATION_DESC
6727{
6728 D3D12_DEVICE_FLAGS Flags;
6729 UINT GpuBasedValidationFlags; // D3D12_GPU_BASED_VALIDATION_FLAGS from d3d12sdklayers.h
6730 UINT SDKVersion;
6731 UINT NumEnabledExperimentalFeatures;
6732} D3D12_DEVICE_CONFIGURATION_DESC;
6733
6734[uuid(78dbf87b-f766-422b-a61c-c8c446bdb9ad), object, local, pointer_default(unique)]
6735interface ID3D12DeviceConfiguration
6736 : IUnknown
6737{
6738 D3D12_DEVICE_CONFIGURATION_DESC GetDesc();
6739 HRESULT GetEnabledExperimentalFeatures([annotation("_Out_writes_(NumGuids)")] GUID *pGuids, UINT NumGuids);
6740
6741 HRESULT SerializeVersionedRootSignature(
6742 [annotation("_In_")] const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc,
6743 [annotation("_COM_Outptr_")] ID3DBlob **ppResult,
6744 [annotation("_Always_(_Outptr_opt_result_maybenull_)")] ID3DBlob **ppError);
6745
6746 HRESULT CreateVersionedRootSignatureDeserializer(
6747 [annotation("_In_reads_bytes_(Size)")] const void *pBlob,
6748 SIZE_T Size,
6749 REFIID riid,
6750 [annotation("_COM_Outptr_")] void **ppvDeserializer);
6751};
6752
6753[uuid(ed342442-6343-4e16-bb82-a3a577874e56), object, local, pointer_default(unique)]
6754interface ID3D12DeviceConfiguration1
6755 : ID3D12DeviceConfiguration
6756{
6757 HRESULT CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(
6758 [annotation("_In_reads_bytes_(Size)")] const void* pLibraryBlob,
6759 SIZE_T Size,
6760 LPCWSTR RootSignatureSubobjectName,
6761 REFIID riid,
6762 [annotation("_COM_Outptr_")] void** ppvDeserializer);
6763};
6764
6765
6766typedef enum D3D12_STATE_OBJECT_DATABASE_FLAGS
6767{
6768 D3D12_STATE_OBJECT_DATABASE_FLAG_NONE = 0x0,
6769 D3D12_STATE_OBJECT_DATABASE_FLAG_READ_ONLY = 0x1,
6770} D3D12_STATE_OBJECT_DATABASE_FLAGS;
6771cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_DATABASE_FLAGS )")
6772
6773[uuid(f5b066f0-648a-4611-bd41-27fd0948b9eb), object, local, pointer_default(unique)]
6774interface ID3D12StateObjectDatabaseFactory
6775 : IUnknown
6776{
6777 HRESULT CreateStateObjectDatabaseFromFile(
6778 LPCWSTR pDatabaseFile,
6779 D3D12_STATE_OBJECT_DATABASE_FLAGS flags,
6780 REFIID riid,
6781 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvStateObjectDatabase
6782 );
6783};
6784
6785
6786typedef enum D3D12_AXIS_SHADING_RATE
6787{
6788 D3D12_AXIS_SHADING_RATE_1X = 0x0,
6789 D3D12_AXIS_SHADING_RATE_2X = 0x1,
6790 D3D12_AXIS_SHADING_RATE_4X = 0x2
6791} D3D12_AXIS_SHADING_RATE;
6792
6793
6794cpp_quote("#define D3D12_SHADING_RATE_X_AXIS_SHIFT 2")
6795cpp_quote("#define D3D12_SHADING_RATE_VALID_MASK 3")
6796
6797cpp_quote("#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << D3D12_SHADING_RATE_X_AXIS_SHIFT | (y))")
6798
6799cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) (((x) >> D3D12_SHADING_RATE_X_AXIS_SHIFT) & D3D12_SHADING_RATE_VALID_MASK)")
6800cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & D3D12_SHADING_RATE_VALID_MASK)")
6801
6802typedef enum D3D12_SHADING_RATE
6803{
6804 D3D12_SHADING_RATE_1X1 = 0x0,
6805 D3D12_SHADING_RATE_1X2 = 0x1,
6806 D3D12_SHADING_RATE_2X1 = 0x4,
6807 D3D12_SHADING_RATE_2X2 = 0x5,
6808 D3D12_SHADING_RATE_2X4 = 0x6,
6809 D3D12_SHADING_RATE_4X2 = 0x9,
6810 D3D12_SHADING_RATE_4X4 = 0xA
6811} D3D12_SHADING_RATE;
6812
6813typedef enum D3D12_SHADING_RATE_COMBINER
6814{
6815 D3D12_SHADING_RATE_COMBINER_PASSTHROUGH = 0,
6816 D3D12_SHADING_RATE_COMBINER_OVERRIDE = 1,
6817 D3D12_SHADING_RATE_COMBINER_MIN = 2,
6818 D3D12_SHADING_RATE_COMBINER_MAX = 3,
6819 D3D12_SHADING_RATE_COMBINER_SUM = 4,
6820} D3D12_SHADING_RATE_COMBINER;
6821
6822[uuid(55050859-4024-474c-87f5-6472eaee44ea), object, local, pointer_default(unique)]
6823interface ID3D12GraphicsCommandList5 : ID3D12GraphicsCommandList4
6824{
6825 void RSSetShadingRate(
6826 [annotation("_In_")] D3D12_SHADING_RATE baseShadingRate,
6827 [annotation("_In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)")] const D3D12_SHADING_RATE_COMBINER* combiners);
6828
6829 void RSSetShadingRateImage(
6830 [annotation("_In_opt_")] ID3D12Resource* shadingRateImage);
6831}
6832
6833typedef struct D3D12_DISPATCH_MESH_ARGUMENTS
6834{
6835 UINT ThreadGroupCountX;
6836 UINT ThreadGroupCountY;
6837 UINT ThreadGroupCountZ;
6838} D3D12_DISPATCH_MESH_ARGUMENTS;
6839
6840[uuid(c3827890-e548-4cfa-96cf-5689a9370f80), object, local, pointer_default(unique)]
6841interface ID3D12GraphicsCommandList6 : ID3D12GraphicsCommandList5
6842{
6843 void DispatchMesh(
6844 [annotation("_In_")] UINT ThreadGroupCountX,
6845 [annotation("_In_")] UINT ThreadGroupCountY,
6846 [annotation("_In_")] UINT ThreadGroupCountZ
6847 );
6848}
6849
6850[uuid(dd171223-8b61-4769-90e3-160ccde4e2c1), object, local, pointer_default(unique)]
6851interface ID3D12GraphicsCommandList7 : ID3D12GraphicsCommandList6
6852{
6853 void Barrier(
6854 UINT32 NumBarrierGroups,
6855 [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups
6856 );
6857};
6858
6859[uuid(ee936ef9-599d-4d28-938e-23c4ad05ce51), object, local, pointer_default(unique)]
6860interface ID3D12GraphicsCommandList8 : ID3D12GraphicsCommandList7
6861{
6862 void OMSetFrontAndBackStencilRef(
6863 [annotation("_In_")] UINT FrontStencilRef,
6864 [annotation("_In_")] UINT BackStencilRef
6865 );
6866};
6867
6868[uuid(34ed2808-ffe6-4c2b-b11a-cabd2b0c59e1), object, local, pointer_default(unique)]
6869interface ID3D12GraphicsCommandList9 : ID3D12GraphicsCommandList8
6870{
6871 void RSSetDepthBias(
6872 [annotation("_In_")] FLOAT DepthBias,
6873 [annotation("_In_")] FLOAT DepthBiasClamp,
6874 [annotation("_In_")] FLOAT SlopeScaledDepthBias
6875 );
6876
6877 void IASetIndexBufferStripCutValue(
6878 [annotation("_In_")] D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue
6879 );
6880};
6881
6882[uuid(7013c015-d161-4b63-a08c-238552dd8acc), object, local, pointer_default(unique)]
6883interface ID3D12GraphicsCommandList10 : ID3D12GraphicsCommandList9
6884{
6885 void SetProgram([annotation("_In_")] const D3D12_SET_PROGRAM_DESC* pDesc);
6886 void DispatchGraph([annotation("_In_")] const D3D12_DISPATCH_GRAPH_DESC* pDesc);
6887};
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897[uuid(f343d1a0-afe3-439f-b13d-cd87a43b70ca), object, local, pointer_default(unique)]
6898interface ID3D12DSRDeviceFactory : IUnknown
6899{
6900 HRESULT CreateDSRDevice(
6901 [in] ID3D12Device *pD3D12Device,
6902 [in] UINT NodeMask,
6903 [in] REFIID riid, // Expected IDSRDevice
6904 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvDSRDevice);
6905}
6906
6907[uuid(597985ab-9b75-4dbb-be23-0761195bebee), object, local, pointer_default(unique)]
6908interface ID3D12GBVDiagnostics
6909 : IUnknown
6910{
6911 HRESULT GetGBVEntireSubresourceStatesData( [annotation("_In_")] ID3D12Resource* pResource, [annotation("_Out_writes_bytes_(DataSize)")] int *pData, UINT DataSize );
6912 HRESULT GetGBVSubresourceState( [annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, [annotation("_Out_")] int *pData );
6913 HRESULT GetGBVResourceUniformState( [annotation("_In_")] ID3D12Resource* pResource, [annotation("_Out_")] int *pData );
6914 HRESULT GetGBVResourceInfo( [annotation("_In_")] ID3D12Resource* pResource,
6915 [annotation("_In_opt_")] D3D12_RESOURCE_DESC* pResourceDesc,
6916 [annotation("_In_opt_")] UINT32* pResourceHash,
6917 [annotation("_In_opt_")] UINT32* pSubresourceStatesByteOffset );
6918
6919 void GBVReserved0();
6920
6921 void GBVReserved1();
6922}
6923
6924
6925//----------------------------------------------------------------------------------------------------------
6926// Old types which are still supported by the runtime for app-compat
6927
6928cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */")
6929#pragma endregion
6930
6931
6932cpp_quote( "DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8);" )
6933cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57);" )
6934cpp_quote( "DEFINE_GUID(IID_ID3D12RootSignature,0xc54a6b66,0x72df,0x4ee8,0x8b,0xe5,0xa9,0x46,0xa1,0x42,0x92,0x14);" )
6935cpp_quote( "DEFINE_GUID(IID_ID3D12RootSignatureDeserializer,0x34AB647B,0x3CC8,0x46AC,0x84,0x1B,0xC0,0x96,0x56,0x45,0xC0,0x46);" )
6936cpp_quote( "DEFINE_GUID(IID_ID3D12VersionedRootSignatureDeserializer,0x7F91CE67,0x090C,0x4BB7,0xB7,0x8E,0xED,0x8F,0xF2,0xE3,0x1D,0xA0);" )
6937cpp_quote( "DEFINE_GUID(IID_ID3D12Pageable,0x63ee58fb,0x1268,0x4835,0x86,0xda,0xf0,0x08,0xce,0x62,0xf0,0xd6);" )
6938cpp_quote( "DEFINE_GUID(IID_ID3D12Heap,0x6b3b2502,0x6e51,0x45b3,0x90,0xee,0x98,0x84,0x26,0x5e,0x8d,0xf3);" )
6939cpp_quote( "DEFINE_GUID(IID_ID3D12Resource,0x696442be,0xa72e,0x4059,0xbc,0x79,0x5b,0x5c,0x98,0x04,0x0f,0xad);" )
6940cpp_quote( "DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0x4d,0x73,0xf0,0x9b,0x24);" )
6941cpp_quote( "DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76);" )
6942cpp_quote( "DEFINE_GUID(IID_ID3D12Fence1,0x433685fe,0xe22b,0x4ca0,0xa8,0xdb,0xb5,0xb4,0xf4,0xdd,0x0e,0x4a);" )
6943cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45);" )
6944cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineState1,0x5646804c,0x9638,0x48f7,0x91,0x82,0xb3,0xee,0x5a,0x6b,0x60,0xfb);" )
6945cpp_quote( "DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51);" )
6946cpp_quote( "DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4);" )
6947cpp_quote( "DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1);" )
6948cpp_quote( "DEFINE_GUID(IID_ID3D12CommandList,0x7116d91c,0xe7e4,0x47ce,0xb8,0xc6,0xec,0x81,0x68,0xf4,0x37,0xe5);" )
6949cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList,0x5b160d0f,0xac1b,0x4185,0x8b,0xa8,0xb3,0xae,0x42,0xa5,0xa4,0x55);" )
6950cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList1,0x553103fb,0x1fe7,0x4557,0xbb,0x38,0x94,0x6d,0x7d,0x0e,0x7c,0xa7);" )
6951cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList2,0x38C3E585,0xFF17,0x412C,0x91,0x50,0x4F,0xC6,0xF9,0xD7,0x2A,0x28);" )
6952cpp_quote( "DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed);" )
6953cpp_quote( "DEFINE_GUID(IID_ID3D12CommandQueue1,0x3a3c3165,0x0ee7,0x4b8e,0xa0,0xaf,0x63,0x56,0xb4,0xc3,0xbb,0xb9);" )
6954cpp_quote( "DEFINE_GUID(IID_ID3D12Device,0x189819f1,0x1db6,0x4b57,0xbe,0x54,0x18,0x21,0x33,0x9b,0x85,0xf7);" )
6955cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineLibrary,0xc64226a8,0x9201,0x46af,0xb4,0xcc,0x53,0xfb,0x9f,0xf7,0x41,0x4f);" )
6956cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineLibrary1,0x80eabf42,0x2568,0x4e5e,0xbd,0x82,0xc3,0x7f,0x86,0x96,0x1d,0xc3);" )
6957cpp_quote( "DEFINE_GUID(IID_ID3D12Device1,0x77acce80,0x638e,0x4e65,0x88,0x95,0xc1,0xf2,0x33,0x86,0x86,0x3e);" )
6958cpp_quote( "DEFINE_GUID(IID_ID3D12Device2,0x30baa41e,0xb15b,0x475c,0xa0,0xbb,0x1a,0xf5,0xc5,0xb6,0x43,0x28);" )
6959cpp_quote( "DEFINE_GUID(IID_ID3D12Device3,0x81dadc15,0x2bad,0x4392,0x93,0xc5,0x10,0x13,0x45,0xc4,0xaa,0x98);" )
6960cpp_quote( "DEFINE_GUID(IID_ID3D12ProtectedSession,0xA1533D18,0x0AC1,0x4084,0x85,0xB9,0x89,0xA9,0x61,0x16,0x80,0x6B);" )
6961cpp_quote( "DEFINE_GUID(IID_ID3D12ProtectedResourceSession,0x6CD696F4,0xF289,0x40CC,0x80,0x91,0x5A,0x6C,0x0A,0x09,0x9C,0x3D);" )
6962cpp_quote( "DEFINE_GUID(IID_ID3D12Device4,0xe865df17,0xa9ee,0x46f9,0xa4,0x63,0x30,0x98,0x31,0x5a,0xa2,0xe5);" )
6963cpp_quote( "DEFINE_GUID(IID_ID3D12LifetimeOwner,0xe667af9f,0xcd56,0x4f46,0x83,0xce,0x03,0x2e,0x59,0x5d,0x70,0xa8);" )
6964cpp_quote( "DEFINE_GUID(IID_ID3D12SwapChainAssistant,0xf1df64b6,0x57fd,0x49cd,0x88,0x07,0xc0,0xeb,0x88,0xb4,0x5c,0x8f);" )
6965cpp_quote( "DEFINE_GUID(IID_ID3D12LifetimeTracker,0x3fd03d36,0x4eb1,0x424a,0xa5,0x82,0x49,0x4e,0xcb,0x8b,0xa8,0x13);" )
6966cpp_quote( "DEFINE_GUID(IID_ID3D12StateObject,0x47016943,0xfca8,0x4594,0x93,0xea,0xaf,0x25,0x8b,0x55,0x34,0x6d);" )
6967cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectProperties,0xde5fa827,0x9bf9,0x4f26,0x89,0xff,0xd7,0xf5,0x6f,0xde,0x38,0x60);" )
6968cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectProperties1,0x460caac7,0x1d24,0x446a,0xa1,0x84,0xca,0x67,0xdb,0x49,0x41,0x38);" )
6969cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectProperties2,0xd5e82917,0xf0f1,0x44cf,0xae,0x5e,0xce,0x22,0x2d,0xd0,0xb8,0x84);" )
6970cpp_quote( "DEFINE_GUID(IID_ID3D12WorkGraphProperties,0x065acf71,0xf863,0x4b89,0x82,0xf4,0x02,0xe4,0xd5,0x88,0x67,0x57);" )
6971cpp_quote( "DEFINE_GUID(IID_ID3D12Device5,0x8b4f173b,0x2fea,0x4b80,0x8f,0x58,0x43,0x07,0x19,0x1a,0xb9,0x5d);" )
6972cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings,0x82BC481C,0x6B9B,0x4030,0xAE,0xDB,0x7E,0xE3,0xD1,0xDF,0x1E,0x63);" )
6973cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings1,0xDBD5AE51,0x3317,0x4F0A,0xAD,0xF9,0x1D,0x7C,0xED,0xCA,0xAE,0x0B);" )
6974cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings2,0x61552388,0x01ab,0x4008,0xa4,0x36,0x83,0xdb,0x18,0x95,0x66,0xea);" )
6975cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData,0x98931D33,0x5AE8,0x4791,0xAA,0x3C,0x1A,0x73,0xA2,0x93,0x4E,0x71);" )
6976cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData1,0x9727A022,0xCF1D,0x4DDA,0x9E,0xBA,0xEF,0xFA,0x65,0x3F,0xC5,0x06);" )
6977cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData2,0x67FC5816,0xE4CA,0x4915,0xBF,0x18,0x42,0x54,0x12,0x72,0xDA,0x54);" )
6978cpp_quote( "DEFINE_GUID(IID_ID3D12Device6,0xc70b221b,0x40e4,0x4a17,0x89,0xaf,0x02,0x5a,0x07,0x27,0xa6,0xdc);" )
6979cpp_quote( "DEFINE_GUID(IID_ID3D12ProtectedResourceSession1,0xD6F12DD6,0x76FB,0x406E,0x89,0x61,0x42,0x96,0xEE,0xFC,0x04,0x09);" )
6980cpp_quote( "DEFINE_GUID(IID_ID3D12Device7,0x5c014b53,0x68a1,0x4b9b,0x8b,0xd1,0xdd,0x60,0x46,0xb9,0x35,0x8b);" )
6981cpp_quote( "DEFINE_GUID(IID_ID3D12Device8,0x9218E6BB,0xF944,0x4F7E,0xA7,0x5C,0xB1,0xB2,0xC7,0xB7,0x01,0xF3);" )
6982cpp_quote( "DEFINE_GUID(IID_ID3D12Resource1,0x9D5E227A,0x4430,0x4161,0x88,0xB3,0x3E,0xCA,0x6B,0xB1,0x6E,0x19);" )
6983cpp_quote( "DEFINE_GUID(IID_ID3D12Resource2,0xBE36EC3B,0xEA85,0x4AEB,0xA4,0x5A,0xE9,0xD7,0x64,0x04,0xA4,0x95);" )
6984cpp_quote( "DEFINE_GUID(IID_ID3D12Heap1,0x572F7389,0x2168,0x49E3,0x96,0x93,0xD6,0xDF,0x58,0x71,0xBF,0x6D);" )
6985cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList3,0x6FDA83A7,0xB84C,0x4E38,0x9A,0xC8,0xC7,0xBD,0x22,0x01,0x6B,0x3D);" )
6986cpp_quote( "DEFINE_GUID(IID_ID3D12MetaCommand,0xDBB84C27,0x36CE,0x4FC9,0xB8,0x01,0xF0,0x48,0xC4,0x6A,0xC5,0x70);" )
6987cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList4,0x8754318e,0xd3a9,0x4541,0x98,0xcf,0x64,0x5b,0x50,0xdc,0x48,0x74);" )
6988cpp_quote( "DEFINE_GUID(IID_ID3D12ShaderCacheSession,0x28e2495d,0x0f64,0x4ae4,0xa6,0xec,0x12,0x92,0x55,0xdc,0x49,0xa8);" )
6989cpp_quote( "DEFINE_GUID(IID_ID3D12Device9,0x4c80e962,0xf032,0x4f60,0xbc,0x9e,0xeb,0xc2,0xcf,0xa1,0xd8,0x3c);" )
6990cpp_quote( "DEFINE_GUID(IID_ID3D12Device10,0x517f8718,0xaa66,0x49f9,0xb0,0x2b,0xa7,0xab,0x89,0xc0,0x60,0x31);" )
6991cpp_quote( "DEFINE_GUID(IID_ID3D12Device11,0x5405c344,0xd457,0x444e,0xb4,0xdd,0x23,0x66,0xe4,0x5a,0xee,0x39);" )
6992cpp_quote( "DEFINE_GUID(IID_ID3D12Device12,0x5af5c532,0x4c91,0x4cd0,0xb5,0x41,0x15,0xa4,0x05,0x39,0x5f,0xc5);" )
6993cpp_quote( "DEFINE_GUID(IID_ID3D12Device13,0x14eecffc,0x4df8,0x40f7,0xa1,0x18,0x5c,0x81,0x6f,0x45,0x69,0x5e);" )
6994cpp_quote( "DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49,0x26,0xd3,0x23);" )
6995cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectDatabase,0xc56060b7,0xb5fc,0x4135,0x98,0xe0,0xa1,0xe9,0x99,0x7e,0xac,0xe0);" )
6996cpp_quote( "DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76);" )
6997cpp_quote( "DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);" )
6998cpp_quote( "DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0);" )
6999cpp_quote( "DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97);" )
7000cpp_quote( "DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d);" )
7001cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9);" )
7002cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a);" )
7003cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7);" )
7004cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f);" )
7005cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb);" )
7006cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceConfiguration,0x78dbf87b,0xf766,0x422b,0xa6,0x1c,0xc8,0xc4,0x46,0xbd,0xb9,0xad);" )
7007cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceConfiguration1,0xed342442,0x6343,0x4e16,0xbb,0x82,0xa3,0xa5,0x77,0x87,0x4e,0x56);" )
7008cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectDatabaseFactory,0xf5b066f0,0x648a,0x4611,0xbd,0x41,0x27,0xfd,0x09,0x48,0xb9,0xeb);" )
7009cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList5,0x55050859,0x4024,0x474c,0x87,0xf5,0x64,0x72,0xea,0xee,0x44,0xea);" )
7010cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList6,0xc3827890,0xe548,0x4cfa,0x96,0xcf,0x56,0x89,0xa9,0x37,0x0f,0x80);" )
7011cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList7,0xdd171223,0x8b61,0x4769,0x90,0xe3,0x16,0x0c,0xcd,0xe4,0xe2,0xc1);" )
7012cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList8,0xee936ef9,0x599d,0x4d28,0x93,0x8e,0x23,0xc4,0xad,0x05,0xce,0x51);" )
7013cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList9,0x34ed2808,0xffe6,0x4c2b,0xb1,0x1a,0xca,0xbd,0x2b,0x0c,0x59,0xe1);" )
7014cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList10,0x7013c015,0xd161,0x4b63,0xa0,0x8c,0x23,0x85,0x52,0xdd,0x8a,0xcc);" )
7015cpp_quote( "DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0x87,0xa4,0x3b,0x70,0xca);" )
7016cpp_quote( "DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee);" )