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