aboutsummaryrefslogtreecommitdiff
path: root/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-12-02 16:39:36 -0800
committer3gg <3gg@shellblade.net>2025-12-02 16:39:36 -0800
commit6c8ae19be66cee247980a48e736a4e05d14de179 (patch)
treed860767907bf0cbe17ec66422e11bea700cf56d9 /contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl
parent8f594c8ebd11f0e5f8a0c6369c3fe7383d250cbe (diff)
Immediate-mode renderer, triangle demo, shader compilation in cmake, Agility SDKHEADmain
Diffstat (limited to 'contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl')
-rw-r--r--contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl3818
1 files changed, 3818 insertions, 0 deletions
diff --git a/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl b/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl
new file mode 100644
index 0000000..b2c930b
--- /dev/null
+++ b/contrib/microsoft.direct3d.d3d12.1.618.4/build/native/include/d3d12video.idl
@@ -0,0 +1,3818 @@
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 "d3d12.idl";
12
13cpp_quote("#include <winapifamily.h>")
14
15#pragma region App Family
16cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)")
17
18typedef enum D3D12_VIDEO_FIELD_TYPE
19{
20 D3D12_VIDEO_FIELD_TYPE_NONE = 0,
21 D3D12_VIDEO_FIELD_TYPE_INTERLACED_TOP_FIELD_FIRST = 1,
22 D3D12_VIDEO_FIELD_TYPE_INTERLACED_BOTTOM_FIELD_FIRST = 2,
23} D3D12_VIDEO_FIELD_TYPE;
24
25typedef enum D3D12_VIDEO_FRAME_STEREO_FORMAT
26{
27 D3D12_VIDEO_FRAME_STEREO_FORMAT_NONE = 0,
28 D3D12_VIDEO_FRAME_STEREO_FORMAT_MONO = 1,
29 D3D12_VIDEO_FRAME_STEREO_FORMAT_HORIZONTAL = 2,
30 D3D12_VIDEO_FRAME_STEREO_FORMAT_VERTICAL = 3,
31 D3D12_VIDEO_FRAME_STEREO_FORMAT_SEPARATE = 4,
32} D3D12_VIDEO_FRAME_STEREO_FORMAT;
33
34typedef struct D3D12_VIDEO_FORMAT
35{
36 DXGI_FORMAT Format;
37 DXGI_COLOR_SPACE_TYPE ColorSpace;
38} D3D12_VIDEO_FORMAT;
39
40typedef struct D3D12_VIDEO_SAMPLE
41{
42 UINT Width;
43 UINT Height;
44 D3D12_VIDEO_FORMAT Format;
45} D3D12_VIDEO_SAMPLE;
46
47typedef enum D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE
48{
49 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE = 0,
50 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED = 1,
51} D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE;
52
53typedef enum D3D12_FEATURE_VIDEO
54{
55 D3D12_FEATURE_VIDEO_DECODE_SUPPORT = 0,
56 D3D12_FEATURE_VIDEO_DECODE_PROFILES = 1,
57 D3D12_FEATURE_VIDEO_DECODE_FORMATS = 2,
58 D3D12_FEATURE_VIDEO_DECODE_CONVERSION_SUPPORT = 3,
59 D3D12_FEATURE_VIDEO_PROCESS_SUPPORT = 5,
60 D3D12_FEATURE_VIDEO_PROCESS_MAX_INPUT_STREAMS = 6,
61 D3D12_FEATURE_VIDEO_PROCESS_REFERENCE_INFO = 7,
62 D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE = 8,
63 D3D12_FEATURE_VIDEO_PROCESSOR_SIZE = 9,
64 D3D12_FEATURE_VIDEO_DECODE_PROFILE_COUNT = 10,
65 D3D12_FEATURE_VIDEO_DECODE_FORMAT_COUNT = 11,
66 D3D12_FEATURE_VIDEO_ARCHITECTURE = 17,
67 D3D12_FEATURE_VIDEO_DECODE_HISTOGRAM = 18,
68 D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT = 19,
69 D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR = 20,
70 D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE = 21,
71 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_COUNT = 22,
72 D3D12_FEATURE_VIDEO_EXTENSION_COMMANDS = 23,
73 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT = 24,
74 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETERS = 25,
75 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SUPPORT = 26,
76 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SIZE = 27,
77 D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES = 28,
78 D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES = 29,
79 D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES = 30,
80 D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1 = 31,
81 D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1 = 32,
82 D3D12_FEATURE_VIDEO_ENCODER_CODEC = 33,
83 D3D12_FEATURE_VIDEO_ENCODER_PROFILE_LEVEL = 34,
84 D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 35,
85 D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION = 36,
86 D3D12_FEATURE_VIDEO_ENCODER_INPUT_FORMAT = 37,
87 D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_MODE = 38,
88 D3D12_FEATURE_VIDEO_ENCODER_INTRA_REFRESH_MODE = 39,
89 D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 40,
90 D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE = 41,
91 D3D12_FEATURE_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT = 42,
92 D3D12_FEATURE_VIDEO_ENCODER_SUPPORT = 43,
93 D3D12_FEATURE_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 44,
94 D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS = 45,
95 D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG = 46,
96 D3D12_FEATURE_VIDEO_ENCODER_SUPPORT1 = 47,
97 D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS1 = 48,
98 D3D12_FEATURE_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT = 49,
99 D3D12_FEATURE_VIDEO_ENCODER_QPMAP_INPUT = 50,
100 D3D12_FEATURE_VIDEO_ENCODER_DIRTY_REGIONS = 51,
101 D3D12_FEATURE_VIDEO_ENCODER_MOTION_SEARCH = 52,
102 D3D12_FEATURE_VIDEO_ENCODER_SUPPORT2 = 55,
103 D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE1 = 56,
104 D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS = 57,
105
106} D3D12_FEATURE_VIDEO;
107
108typedef enum D3D12_BITSTREAM_ENCRYPTION_TYPE
109{
110 D3D12_BITSTREAM_ENCRYPTION_TYPE_NONE = 0,
111} D3D12_BITSTREAM_ENCRYPTION_TYPE;
112
113typedef struct D3D12_VIDEO_DECODE_CONFIGURATION
114{
115 GUID DecodeProfile;
116 D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption;
117 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType;
118} D3D12_VIDEO_DECODE_CONFIGURATION;
119
120typedef struct D3D12_VIDEO_DECODER_DESC
121{
122 UINT NodeMask;
123 D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
124} D3D12_VIDEO_DECODER_DESC;
125
126typedef struct D3D12_VIDEO_DECODER_HEAP_DESC
127{
128 UINT NodeMask;
129 D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
130 UINT DecodeWidth;
131 UINT DecodeHeight;
132 DXGI_FORMAT Format;
133 DXGI_RATIONAL FrameRate;
134 UINT BitRate;
135 UINT MaxDecodePictureBufferCount;
136} D3D12_VIDEO_DECODER_HEAP_DESC;
137
138typedef struct D3D12_VIDEO_SIZE_RANGE
139{
140 UINT MaxWidth;
141 UINT MaxHeight;
142 UINT MinWidth;
143 UINT MinHeight;
144} D3D12_VIDEO_SIZE_RANGE;
145
146typedef enum D3D12_VIDEO_PROCESS_FILTER
147{
148 D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS = 0,
149 D3D12_VIDEO_PROCESS_FILTER_CONTRAST = 1,
150 D3D12_VIDEO_PROCESS_FILTER_HUE = 2,
151 D3D12_VIDEO_PROCESS_FILTER_SATURATION = 3,
152 D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION = 4,
153 D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT = 5,
154 D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING = 6,
155 D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT = 7,
156} D3D12_VIDEO_PROCESS_FILTER;
157
158typedef enum D3D12_VIDEO_PROCESS_FILTER_FLAGS
159{
160 D3D12_VIDEO_PROCESS_FILTER_FLAG_NONE = 0x0,
161 D3D12_VIDEO_PROCESS_FILTER_FLAG_BRIGHTNESS = (1 << D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS),
162 D3D12_VIDEO_PROCESS_FILTER_FLAG_CONTRAST = (1 << D3D12_VIDEO_PROCESS_FILTER_CONTRAST),
163 D3D12_VIDEO_PROCESS_FILTER_FLAG_HUE = (1 << D3D12_VIDEO_PROCESS_FILTER_HUE),
164 D3D12_VIDEO_PROCESS_FILTER_FLAG_SATURATION = (1 << D3D12_VIDEO_PROCESS_FILTER_SATURATION),
165 D3D12_VIDEO_PROCESS_FILTER_FLAG_NOISE_REDUCTION = (1 << D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION),
166 D3D12_VIDEO_PROCESS_FILTER_FLAG_EDGE_ENHANCEMENT = (1 << D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT),
167 D3D12_VIDEO_PROCESS_FILTER_FLAG_ANAMORPHIC_SCALING = (1 << D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING),
168 D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT = (1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT),
169
170} D3D12_VIDEO_PROCESS_FILTER_FLAGS;
171cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS )")
172
173typedef enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS
174{
175 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_NONE = 0x0,
176 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_BOB = 0x1,
177 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM = 0x80000000,
178
179} D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS;
180cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS )")
181
182typedef struct D3D12_VIDEO_PROCESS_ALPHA_BLENDING
183{
184 BOOL Enable;
185 FLOAT Alpha;
186} D3D12_VIDEO_PROCESS_ALPHA_BLENDING;
187
188typedef struct D3D12_VIDEO_PROCESS_LUMA_KEY
189{
190 BOOL Enable;
191 FLOAT Lower;
192 FLOAT Upper;
193} D3D12_VIDEO_PROCESS_LUMA_KEY;
194
195typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
196{
197 DXGI_FORMAT Format;
198 DXGI_COLOR_SPACE_TYPE ColorSpace;
199 DXGI_RATIONAL SourceAspectRatio;
200 DXGI_RATIONAL DestinationAspectRatio;
201 DXGI_RATIONAL FrameRate;
202 D3D12_VIDEO_SIZE_RANGE SourceSizeRange;
203 D3D12_VIDEO_SIZE_RANGE DestinationSizeRange;
204 BOOL EnableOrientation;
205 D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags;
206 D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat;
207 D3D12_VIDEO_FIELD_TYPE FieldType;
208 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode;
209 BOOL EnableAlphaBlending;
210 D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey;
211 UINT NumPastFrames;
212 UINT NumFutureFrames;
213 BOOL EnableAutoProcessing;
214} D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC;
215
216typedef enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE
217{
218 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_OPAQUE = 0,
219 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_BACKGROUND = 1,
220 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_DESTINATION = 2,
221 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
222} D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE;
223
224typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
225{
226 DXGI_FORMAT Format;
227 DXGI_COLOR_SPACE_TYPE ColorSpace;
228 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode;
229 UINT AlphaFillModeSourceStreamIndex;
230 FLOAT BackgroundColor[4];
231 DXGI_RATIONAL FrameRate;
232 BOOL EnableStereo;
233} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC;
234
235[uuid(0946B7C9-EBF6-4047-BB73-8683E27DBB1F), object, local, pointer_default(unique)]
236interface ID3D12VideoDecoderHeap
237 : ID3D12Pageable
238{
239 D3D12_VIDEO_DECODER_HEAP_DESC GetDesc();
240}
241
242[uuid(1F052807-0B46-4ACC-8A89-364F793718A4), object, local, pointer_default(unique)]
243interface ID3D12VideoDevice
244 : IUnknown
245{
246 HRESULT CheckFeatureSupport(
247 D3D12_FEATURE_VIDEO FeatureVideo,
248 [annotation("_Inout_updates_bytes_(FeatureSupportDataSize)")] void* pFeatureSupportData,
249 UINT FeatureSupportDataSize
250 );
251
252 HRESULT CreateVideoDecoder(
253 [annotation("_In_")] const D3D12_VIDEO_DECODER_DESC* pDesc,
254 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoder,
255 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoder
256 );
257
258 HRESULT CreateVideoDecoderHeap(
259 [annotation("_In_")]const D3D12_VIDEO_DECODER_HEAP_DESC* pVideoDecoderHeapDesc,
260 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoderHeap,
261 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoderHeap
262 );
263
264 HRESULT CreateVideoProcessor(
265 UINT NodeMask,
266 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc,
267 UINT NumInputStreamDescs,
268 [annotation("_In_reads_(NumInputStreamDescs)")]const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs,
269 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoProcessor,
270 [out, iid_is(riid), annotation("_COM_Outptr_")] void **ppVideoProcessor
271 );
272}
273
274[uuid(C59B6BDC-7720-4074-A136-17A156037470), object, local, pointer_default(unique)]
275interface ID3D12VideoDecoder
276 : ID3D12Pageable
277{
278 D3D12_VIDEO_DECODER_DESC GetDesc();
279}
280
281typedef enum D3D12_VIDEO_DECODE_TIER
282{
283 D3D12_VIDEO_DECODE_TIER_NOT_SUPPORTED = 0,
284 D3D12_VIDEO_DECODE_TIER_1 = 1,
285 D3D12_VIDEO_DECODE_TIER_2 = 2,
286 D3D12_VIDEO_DECODE_TIER_3 = 3,
287} D3D12_VIDEO_DECODE_TIER;
288
289typedef enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS
290{
291 D3D12_VIDEO_DECODE_SUPPORT_FLAG_NONE = 0x0,
292 D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED = 0x1,
293
294} D3D12_VIDEO_DECODE_SUPPORT_FLAGS;
295cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS )")
296
297typedef enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS
298{
299 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_NONE = 0x0,
300 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED = 0x1,
301 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_POST_PROCESSING_SUPPORTED = 0x2,
302 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_REFERENCE_ONLY_ALLOCATIONS_REQUIRED = 0x4,
303 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME = 0x8,
304
305} D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS;
306cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS )")
307
308typedef enum D3D12_VIDEO_DECODE_STATUS
309{
310 D3D12_VIDEO_DECODE_STATUS_OK = 0,
311 D3D12_VIDEO_DECODE_STATUS_CONTINUE = 1,
312 D3D12_VIDEO_DECODE_STATUS_CONTINUE_SKIP_DISPLAY = 2,
313 D3D12_VIDEO_DECODE_STATUS_RESTART = 3,
314 D3D12_VIDEO_DECODE_STATUS_RATE_EXCEEDED = 4,
315} D3D12_VIDEO_DECODE_STATUS;
316
317typedef enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE
318{
319 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS = 0,
320 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX = 1,
321 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL = 2,
322 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_HUFFMAN_TABLE = 3,
323} D3D12_VIDEO_DECODE_ARGUMENT_TYPE;
324
325typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT
326{
327 UINT NodeIndex; // input
328 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
329 UINT Width; // input
330 UINT Height; // input
331 DXGI_FORMAT DecodeFormat; // input
332 DXGI_RATIONAL FrameRate; // input
333 UINT BitRate; // input
334 D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags; // output
335 D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags; // output
336 D3D12_VIDEO_DECODE_TIER DecodeTier; // output
337} D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT;
338
339typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT
340{
341 UINT NodeIndex; // input
342 UINT ProfileCount; // output
343} D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT;
344
345typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES
346{
347 UINT NodeIndex; // input
348 UINT ProfileCount; // input
349 [annotation("_Field_size_full_(ProfileCount)")] GUID *pProfiles; // output. The list of supported profiles. The caller allocates storage for the profile list before calling CheckFeatureSupport.
350} D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES;
351
352typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT
353{
354 UINT NodeIndex; // input
355 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
356 UINT FormatCount; // output
357} D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT;
358
359typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS
360{
361 UINT NodeIndex; // input
362 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
363 UINT FormatCount; // input
364 [annotation("_Field_size_full_(FormatCount)")] DXGI_FORMAT *pOutputFormats; // output. The list of supported video formats. The caller allocates storage for the format list before calling CheckFeatureSupport.
365} D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS;
366
367typedef struct D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE
368{
369 BOOL IOCoherent;
370} D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE;
371
372typedef enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT
373{
374 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y = 0,
375 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U = 1,
376 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V = 2,
377
378 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R = 0,
379 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G = 1,
380 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B = 2,
381
382 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A = 3,
383} D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT;
384
385typedef enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS
386{
387 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_NONE = 0x0,
388
389 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_Y = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y),
390 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_U = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U),
391 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_V = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V),
392
393 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_R = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R),
394 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_G = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G),
395 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_B = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B),
396
397 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_A = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A),
398} D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS;
399cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS )")
400
401typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM
402{
403 UINT NodeIndex; // in
404 GUID DecodeProfile; // in
405 UINT Width; // in
406 UINT Height; // in
407 DXGI_FORMAT DecodeFormat; // in
408 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS Components; // out
409 UINT BinCount; // out
410 UINT CounterBitDepth; // out
411} D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM;
412
413typedef enum D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS
414{
415 D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_NONE = 0x0,
416 D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_SUPPORTED = 0x1,
417
418} D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS;
419cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS )")
420
421typedef enum D3D12_VIDEO_SCALE_SUPPORT_FLAGS
422{
423 D3D12_VIDEO_SCALE_SUPPORT_FLAG_NONE = 0x0,
424 D3D12_VIDEO_SCALE_SUPPORT_FLAG_POW2_ONLY = 0x1,
425 D3D12_VIDEO_SCALE_SUPPORT_FLAG_EVEN_DIMENSIONS_ONLY = 0x2,
426 D3D12_VIDEO_SCALE_SUPPORT_FLAG_DPB_ENCODER_RESOURCES = 0x4,
427
428} D3D12_VIDEO_SCALE_SUPPORT_FLAGS;
429cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_SCALE_SUPPORT_FLAGS )")
430
431typedef struct D3D12_VIDEO_SCALE_SUPPORT
432{
433 D3D12_VIDEO_SIZE_RANGE OutputSizeRange;
434 D3D12_VIDEO_SCALE_SUPPORT_FLAGS Flags;
435} D3D12_VIDEO_SCALE_SUPPORT;
436
437typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT
438{
439 UINT NodeIndex; // input
440 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
441 D3D12_VIDEO_SAMPLE DecodeSample; // input
442 D3D12_VIDEO_FORMAT OutputFormat; // input
443 DXGI_RATIONAL FrameRate; // input
444 UINT BitRate; // input
445 D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS SupportFlags; // output
446 D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; // output
447} D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT;
448
449typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE
450{
451 D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; // input
452 UINT64 MemoryPoolL0Size; // output
453 UINT64 MemoryPoolL1Size; // output
454} D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE;
455
456typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE
457{
458 UINT NodeMask;
459 const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc; // input
460 UINT NumInputStreamDescs; // input
461 const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; // input
462 UINT64 MemoryPoolL0Size; // output
463 UINT64 MemoryPoolL1Size; // output
464} D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE;
465
466typedef struct D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS
467{
468 UINT64 Status; // see D3D12_VIDEO_DECODE_STATUS
469 UINT64 NumMacroblocksAffected;
470 DXGI_RATIONAL FrameRate;
471 UINT BitRate;
472} D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS;
473
474typedef struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT
475{
476 D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type;
477 UINT Size;
478 [annotation("_Field_size_bytes_full_(Size)")] void *pData;
479} D3D12_VIDEO_DECODE_FRAME_ARGUMENT;
480
481typedef struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES
482{
483 UINT NumTexture2Ds;
484 [annotation("_Field_size_full_(NumTexture2Ds)")] ID3D12Resource** ppTexture2Ds;
485 [annotation("_Field_size_full_(NumTexture2Ds)")] UINT* pSubresources;
486 [annotation("_Field_size_full_opt_(NumTexture2Ds)")] ID3D12VideoDecoderHeap** ppHeaps; // If null, assume single decoder heap from input args.
487} D3D12_VIDEO_DECODE_REFERENCE_FRAMES;
488
489typedef struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM
490{
491 ID3D12Resource* pBuffer;
492 UINT64 Offset;
493 UINT64 Size;
494} D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM;
495
496typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS
497{
498 BOOL Enable;
499 ID3D12Resource* pReferenceTexture2D;
500 UINT ReferenceSubresource;
501 DXGI_COLOR_SPACE_TYPE OutputColorSpace;
502 DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
503} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS;
504
505typedef struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
506{
507 UINT NumFrameArguments;
508 D3D12_VIDEO_DECODE_FRAME_ARGUMENT FrameArguments[D3D12_VIDEO_DECODE_MAX_ARGUMENTS];
509 D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames;
510 D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream;
511 ID3D12VideoDecoderHeap *pHeap;
512} D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS;
513
514typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS
515{
516 ID3D12Resource* pOutputTexture2D;
517 UINT OutputSubresource;
518 D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments;
519} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS;
520
521[uuid(304FDB32-BEDE-410A-8545-943AC6A46138), object, local, pointer_default(unique)]
522interface ID3D12VideoProcessor
523 : ID3D12Pageable
524{
525 UINT GetNodeMask();
526 UINT GetNumInputStreamDescs();
527 HRESULT GetInputStreamDescs(UINT NumInputStreamDescs, [annotation("_Out_writes_(NumInputStreamDescs)")] D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs);
528 D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC GetOutputStreamDesc();
529}
530
531typedef enum D3D12_VIDEO_PROCESS_FEATURE_FLAGS
532{
533 D3D12_VIDEO_PROCESS_FEATURE_FLAG_NONE = 0x0,
534 D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_FILL = 0x1,
535 D3D12_VIDEO_PROCESS_FEATURE_FLAG_LUMA_KEY = 0x2,
536 D3D12_VIDEO_PROCESS_FEATURE_FLAG_STEREO = 0x4,
537 D3D12_VIDEO_PROCESS_FEATURE_FLAG_ROTATION = 0x8,
538 D3D12_VIDEO_PROCESS_FEATURE_FLAG_FLIP = 0x10,
539 D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_BLENDING = 0x20,
540 D3D12_VIDEO_PROCESS_FEATURE_FLAG_PIXEL_ASPECT_RATIO = 0x40,
541
542} D3D12_VIDEO_PROCESS_FEATURE_FLAGS;
543cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FEATURE_FLAGS )")
544
545typedef enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS
546{
547 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_NONE = 0x0,
548 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DENOISE = 0x01,
549 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DERINGING = 0x02,
550 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_EDGE_ENHANCEMENT = 0x04,
551 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_COLOR_CORRECTION = 0x08,
552 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_FLESH_TONE_MAPPING = 0x10,
553 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_IMAGE_STABILIZATION = 0x20,
554 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_SUPER_RESOLUTION = 0x40,
555 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_ANAMORPHIC_SCALING = 0x80,
556 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_CUSTOM = 0x80000000,
557
558} D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS;
559cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS )")
560
561typedef enum D3D12_VIDEO_PROCESS_ORIENTATION
562{
563 D3D12_VIDEO_PROCESS_ORIENTATION_DEFAULT = 0,
564 D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_HORIZONTAL = 1,
565 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90 = 2,
566 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90_FLIP_HORIZONTAL = 3,
567 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_180 = 4,
568 D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_VERTICAL = 5,
569 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270 = 6,
570 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270_FLIP_HORIZONTAL = 7,
571} D3D12_VIDEO_PROCESS_ORIENTATION;
572
573typedef enum D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS
574{
575 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_NONE = 0x0,
576 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_DISCONTINUITY = 0x1,
577 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_REPEAT = 0x2,
578
579} D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS;
580cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS )")
581
582typedef struct D3D12_VIDEO_PROCESS_FILTER_RANGE
583{
584 INT Minimum;
585 INT Maximum;
586 INT Default;
587 FLOAT Multiplier;
588} D3D12_VIDEO_PROCESS_FILTER_RANGE;
589
590typedef enum D3D12_VIDEO_PROCESS_SUPPORT_FLAGS
591{
592 D3D12_VIDEO_PROCESS_SUPPORT_FLAG_NONE = 0x0,
593 D3D12_VIDEO_PROCESS_SUPPORT_FLAG_SUPPORTED = 0x1,
594
595} D3D12_VIDEO_PROCESS_SUPPORT_FLAGS;
596cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_SUPPORT_FLAGS )")
597
598typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT
599{
600 UINT NodeIndex; // input
601 D3D12_VIDEO_SAMPLE InputSample; // input
602 D3D12_VIDEO_FIELD_TYPE InputFieldType; // input
603 D3D12_VIDEO_FRAME_STEREO_FORMAT InputStereoFormat; // input
604 DXGI_RATIONAL InputFrameRate; // input
605 D3D12_VIDEO_FORMAT OutputFormat; // input
606 D3D12_VIDEO_FRAME_STEREO_FORMAT OutputStereoFormat; // input
607 DXGI_RATIONAL OutputFrameRate; // input
608 D3D12_VIDEO_PROCESS_SUPPORT_FLAGS SupportFlags; // output
609 D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; // output
610 D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; // output
611 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceSupport; // output
612 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS AutoProcessingSupport; // output
613 D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterSupport; // output
614 D3D12_VIDEO_PROCESS_FILTER_RANGE FilterRangeSupport[D3D12_VIDEO_PROCESS_MAX_FILTERS]; // output
615} D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT;
616
617typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS
618{
619 UINT NodeIndex; // input
620 UINT MaxInputStreams; // output
621} D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS;
622
623typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO
624{
625 UINT NodeIndex; // input
626 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode; // input
627 D3D12_VIDEO_PROCESS_FILTER_FLAGS Filters; // input
628 D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; // input
629 DXGI_RATIONAL InputFrameRate; // input
630 DXGI_RATIONAL OutputFrameRate; // input
631 BOOL EnableAutoProcessing; // input
632 UINT PastFrames; // output
633 UINT FutureFrames; // output
634} D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO;
635
636typedef struct D3D12_VIDEO_PROCESS_REFERENCE_SET
637{
638 UINT NumPastFrames;
639 ID3D12Resource **ppPastFrames;
640 UINT *pPastSubresources;
641 UINT NumFutureFrames;
642 ID3D12Resource **ppFutureFrames;
643 UINT *pFutureSubresources;
644} D3D12_VIDEO_PROCESS_REFERENCE_SET;
645
646typedef struct D3D12_VIDEO_PROCESS_TRANSFORM
647{
648 D3D12_RECT SourceRectangle;
649 D3D12_RECT DestinationRectangle;
650 D3D12_VIDEO_PROCESS_ORIENTATION Orientation;
651} D3D12_VIDEO_PROCESS_TRANSFORM;
652
653typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE
654{
655 UINT OutputIndex;
656 UINT InputFrameOrField;
657} D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE;
658
659typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM
660{
661 ID3D12Resource *pTexture2D;
662 UINT Subresource;
663 D3D12_VIDEO_PROCESS_REFERENCE_SET ReferenceSet;
664} D3D12_VIDEO_PROCESS_INPUT_STREAM;
665
666typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS
667{
668 D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS];
669 D3D12_VIDEO_PROCESS_TRANSFORM Transform;
670 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags;
671 D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo;
672 INT FilterLevels[D3D12_VIDEO_PROCESS_MAX_FILTERS];
673 D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending;
674} D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS;
675
676typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM
677{
678 ID3D12Resource* pTexture2D;
679 UINT Subresource;
680} D3D12_VIDEO_PROCESS_OUTPUT_STREAM;
681
682typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS
683{
684 D3D12_VIDEO_PROCESS_OUTPUT_STREAM OutputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS];
685 D3D12_RECT TargetRectangle;
686} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS;
687
688[uuid(3B60536E-AD29-4E64-A269-F853837E5E53), object, local, pointer_default(unique)]
689interface ID3D12VideoDecodeCommandList
690 : ID3D12CommandList
691{
692 HRESULT Close();
693
694 HRESULT Reset(
695 [annotation("_In_")] ID3D12CommandAllocator* pAllocator
696 );
697
698 void ClearState();
699
700 void ResourceBarrier(
701 [annotation("_In_")] UINT NumBarriers,
702 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
703 );
704
705 void DiscardResource(
706 [annotation("_In_")] ID3D12Resource* pResource,
707 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
708 );
709
710 void BeginQuery(
711 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
712 [annotation("_In_")] D3D12_QUERY_TYPE Type,
713 [annotation("_In_")] UINT Index
714 );
715
716 void EndQuery(
717 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
718 [annotation("_In_")] D3D12_QUERY_TYPE Type,
719 [annotation("_In_")] UINT Index
720 );
721
722 void ResolveQueryData(
723 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
724 [annotation("_In_")] D3D12_QUERY_TYPE Type,
725 [annotation("_In_")] UINT StartIndex,
726 [annotation("_In_")] UINT NumQueries,
727 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
728 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
729 );
730
731 void SetPredication(
732 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
733 [annotation("_In_")] UINT64 AlignedBufferOffset,
734 [annotation("_In_")] D3D12_PREDICATION_OP Operation
735 );
736
737 void SetMarker(
738 UINT Metadata,
739 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
740 UINT Size);
741
742 void BeginEvent(
743 UINT Metadata,
744 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
745 UINT Size);
746
747 void EndEvent();
748
749 void DecodeFrame(
750 [annotation("_In_")] ID3D12VideoDecoder* pDecoder,
751 [annotation("_In_")] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments,
752 [annotation("_In_")] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments
753 );
754
755 void WriteBufferImmediate(
756 UINT Count,
757 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
758 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
759 );
760}
761
762[uuid(AEB2543A-167F-4682-ACC8-D159ED4A6209), object, local, pointer_default(unique)]
763interface ID3D12VideoProcessCommandList
764 : ID3D12CommandList
765{
766 HRESULT Close();
767
768 HRESULT Reset(
769 [annotation("_In_")] ID3D12CommandAllocator* pAllocator
770 );
771
772 void ClearState();
773
774 void ResourceBarrier(
775 [annotation("_In_")] UINT NumBarriers,
776 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
777 );
778
779 void DiscardResource(
780 [annotation("_In_")] ID3D12Resource* pResource,
781 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
782 );
783
784 void BeginQuery(
785 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
786 [annotation("_In_")] D3D12_QUERY_TYPE Type,
787 [annotation("_In_")] UINT Index
788 );
789
790 void EndQuery(
791 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
792 [annotation("_In_")] D3D12_QUERY_TYPE Type,
793 [annotation("_In_")] UINT Index
794 );
795
796 void ResolveQueryData(
797 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
798 [annotation("_In_")] D3D12_QUERY_TYPE Type,
799 [annotation("_In_")] UINT StartIndex,
800 [annotation("_In_")] UINT NumQueries,
801 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
802 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
803 );
804
805 void SetPredication(
806 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
807 [annotation("_In_")] UINT64 AlignedBufferOffset,
808 [annotation("_In_")] D3D12_PREDICATION_OP Operation
809 );
810
811 void SetMarker(
812 UINT Metadata,
813 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
814 UINT Size);
815
816 void BeginEvent(
817 UINT Metadata,
818 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
819 UINT Size);
820
821 void EndEvent();
822
823 void ProcessFrames(
824 [annotation("_In_")] ID3D12VideoProcessor* pVideoProcessor,
825 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments,
826 UINT NumInputStreams,
827 [annotation("_In_reads_(NumInputStreams)")] const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments
828 );
829
830 void WriteBufferImmediate(
831 UINT Count,
832 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
833 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
834 );
835}
836
837typedef struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM
838{
839 UINT64 Offset;
840 ID3D12Resource* pBuffer;
841} D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM;
842
843typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1
844{
845 BOOL Enable;
846 ID3D12Resource* pReferenceTexture2D;
847 UINT ReferenceSubresource;
848 DXGI_COLOR_SPACE_TYPE OutputColorSpace;
849 DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
850 UINT OutputWidth;
851 UINT OutputHeight;
852} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1;
853
854typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1
855{
856 ID3D12Resource* pOutputTexture2D;
857 UINT OutputSubresource;
858 D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments;
859 D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM Histograms[D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS];
860} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1;
861
862[uuid(D52F011B-B56E-453C-A05A-A7F311C8F472), object, local, pointer_default(unique)]
863interface ID3D12VideoDecodeCommandList1
864 : ID3D12VideoDecodeCommandList
865{
866 void DecodeFrame1(
867 [annotation("_In_")] ID3D12VideoDecoder* pDecoder,
868 [annotation("_In_")] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments,
869 [annotation("_In_")] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments
870 );
871}
872
873typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1
874{
875 D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS];
876 D3D12_VIDEO_PROCESS_TRANSFORM Transform;
877 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags;
878 D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo;
879 INT FilterLevels[D3D12_VIDEO_PROCESS_MAX_FILTERS];
880 D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending;
881 D3D12_VIDEO_FIELD_TYPE FieldType;
882} D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1;
883
884[uuid(542C5C4D-7596-434F-8C93-4EFA6766F267), object, local, pointer_default(unique)]
885interface ID3D12VideoProcessCommandList1 : ID3D12VideoProcessCommandList
886{
887 void ProcessFrames1(
888 [annotation("_In_")] ID3D12VideoProcessor* pVideoProcessor,
889 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments,
890 UINT NumInputStreams,
891 [annotation("_In_reads_(NumInputStreams)")] const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments
892 );
893}
894
895typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE
896{
897 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8 = 0,
898 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 = 1,
899} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE;
900
901typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS
902{
903 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_NONE = 0,
904 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_8X8 = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8),
905 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_16X16 = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16),
906
907} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS;
908cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS )" )
909
910typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION
911{
912 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL = 0,
913} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION;
914
915typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS
916{
917 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_NONE = 0,
918 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_QUARTER_PEL = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL),
919
920} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS;
921cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS )" )
922
923// D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT
924typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT
925{
926 UINT NodeIndex; // input
927 BOOL VideoDecodeSupport; // output
928 BOOL VideoProcessSupport; // output
929 BOOL VideoEncodeSupport; // output
930} D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT;
931
932// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR
933typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR
934{
935 UINT NodeIndex; // input
936 DXGI_FORMAT InputFormat; // input
937 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS BlockSizeFlags; // output
938 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS PrecisionFlags; // output
939 D3D12_VIDEO_SIZE_RANGE SizeRange; // output
940} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR;
941
942// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE
943typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE
944{
945 UINT NodeIndex; // input
946 DXGI_FORMAT InputFormat; // input
947 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; // input
948 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; // input
949 D3D12_VIDEO_SIZE_RANGE SizeRange; // input
950 BOOL Protected; // input
951 UINT64 MotionVectorHeapMemoryPoolL0Size; // output
952 UINT64 MotionVectorHeapMemoryPoolL1Size; // output
953 UINT64 MotionEstimatorMemoryPoolL0Size; // output
954 UINT64 MotionEstimatorMemoryPoolL1Size; // output
955} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE;
956
957typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_DESC
958{
959 UINT NodeMask;
960 DXGI_FORMAT InputFormat;
961 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize;
962 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision;
963 D3D12_VIDEO_SIZE_RANGE SizeRange;
964
965} D3D12_VIDEO_MOTION_ESTIMATOR_DESC;
966
967[uuid(33FDAE0E-098B-428F-87BB-34B695DE08F8), object, local, pointer_default(unique)]
968interface ID3D12VideoMotionEstimator
969 : ID3D12Pageable
970{
971 D3D12_VIDEO_MOTION_ESTIMATOR_DESC GetDesc();
972
973 HRESULT GetProtectedResourceSession(
974 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
975 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
976}
977
978typedef struct D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC
979{
980 UINT NodeMask;
981 DXGI_FORMAT InputFormat;
982 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize;
983 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision;
984 D3D12_VIDEO_SIZE_RANGE SizeRange;
985
986} D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC;
987
988[uuid(5BE17987-743A-4061-834B-23D22DAEA505), object, local, pointer_default(unique)]
989interface ID3D12VideoMotionVectorHeap
990 : ID3D12Pageable
991{
992 D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC GetDesc();
993
994 HRESULT GetProtectedResourceSession(
995 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
996 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
997}
998
999[uuid(981611AD-A144-4C83-9890-F30E26D658AB), object, local, pointer_default(unique)]
1000interface ID3D12VideoDevice1
1001 : ID3D12VideoDevice
1002{
1003 HRESULT CreateVideoMotionEstimator(
1004 [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_DESC* pDesc,
1005 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1006 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoMotionEstimator,
1007 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoMotionEstimator
1008 );
1009
1010 HRESULT CreateVideoMotionVectorHeap(
1011 [annotation("_In_")] const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC* pDesc,
1012 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1013 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoMotionVectorHeap,
1014 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoMotionVectorHeap
1015 );
1016}
1017
1018typedef struct D3D12_RESOURCE_COORDINATE
1019{
1020 // Coordinate values below index pixels.
1021 UINT64 X; // Used for buffer, 1D, 2D, 3D
1022 UINT Y; // Used for 2D, 3D
1023 UINT Z; // Used for 3D
1024 UINT SubresourceIndex; // indexes into mips, arrays, and planes. Used for 1D, 2D, 3D
1025} D3D12_RESOURCE_COORDINATE;
1026
1027typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT
1028{
1029 ID3D12VideoMotionVectorHeap* pMotionVectorHeap;
1030} D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT;
1031
1032typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_INPUT
1033{
1034 ID3D12Resource* pInputTexture2D;
1035 UINT InputSubresourceIndex;
1036 ID3D12Resource* pReferenceTexture2D;
1037 UINT ReferenceSubresourceIndex;
1038 ID3D12VideoMotionVectorHeap* pHintMotionVectorHeap;
1039} D3D12_VIDEO_MOTION_ESTIMATOR_INPUT;
1040
1041typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT
1042{
1043 ID3D12Resource* pMotionVectorTexture2D;
1044 D3D12_RESOURCE_COORDINATE MotionVectorCoordinate;
1045} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT;
1046
1047typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT
1048{
1049 ID3D12VideoMotionVectorHeap* pMotionVectorHeap;
1050 UINT PixelWidth;
1051 UINT PixelHeight;
1052} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT;
1053
1054[uuid(8455293A-0CBD-4831-9B39-FBDBAB724723), object, local, pointer_default(unique)]
1055interface ID3D12VideoEncodeCommandList
1056 : ID3D12CommandList
1057{
1058 HRESULT Close();
1059
1060 HRESULT Reset(
1061 [annotation("_In_")] ID3D12CommandAllocator* pAllocator
1062 );
1063
1064 void ClearState();
1065
1066 void ResourceBarrier(
1067 [annotation("_In_")] UINT NumBarriers,
1068 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
1069 );
1070
1071 void DiscardResource(
1072 [annotation("_In_")] ID3D12Resource* pResource,
1073 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
1074 );
1075
1076 void BeginQuery(
1077 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
1078 [annotation("_In_")] D3D12_QUERY_TYPE Type,
1079 [annotation("_In_")] UINT Index
1080 );
1081
1082 void EndQuery(
1083 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
1084 [annotation("_In_")] D3D12_QUERY_TYPE Type,
1085 [annotation("_In_")] UINT Index
1086 );
1087
1088 void ResolveQueryData(
1089 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
1090 [annotation("_In_")] D3D12_QUERY_TYPE Type,
1091 [annotation("_In_")] UINT StartIndex,
1092 [annotation("_In_")] UINT NumQueries,
1093 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
1094 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
1095 );
1096
1097 void SetPredication(
1098 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
1099 [annotation("_In_")] UINT64 AlignedBufferOffset,
1100 [annotation("_In_")] D3D12_PREDICATION_OP Operation
1101 );
1102
1103 void SetMarker(
1104 UINT Metadata,
1105 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
1106 UINT Size);
1107
1108 void BeginEvent(
1109 UINT Metadata,
1110 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
1111 UINT Size);
1112
1113 void EndEvent();
1114
1115 void EstimateMotion(
1116 [annotation("_In_")] ID3D12VideoMotionEstimator* pMotionEstimator,
1117 [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT* pOutputArguments,
1118 [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT* pInputArguments
1119 );
1120
1121 void ResolveMotionVectorHeap(
1122 const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT* pOutputArguments,
1123 const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT* pInputArguments
1124 );
1125
1126 void WriteBufferImmediate(
1127 UINT Count,
1128 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
1129 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
1130 );
1131
1132 void SetProtectedResourceSession(
1133 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
1134 );
1135}
1136
1137typedef enum D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS
1138{
1139 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_NONE = 0x0,
1140 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_SUPPORTED = 0x1,
1141
1142} D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS;
1143cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS )")
1144
1145// D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES
1146typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES
1147{
1148 UINT NodeIndex; // input
1149 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
1150 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output
1151} D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES;
1152
1153// D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES
1154typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES
1155{
1156 UINT NodeIndex; // input
1157 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output
1158} D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES;
1159
1160// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES
1161typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES
1162{
1163 UINT NodeIndex; // input
1164 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output
1165} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES;
1166
1167//D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1
1168typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1
1169{
1170 D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; // input
1171 BOOL Protected; // input
1172 UINT64 MemoryPoolL0Size; // output
1173 UINT64 MemoryPoolL1Size; // output
1174} D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1;
1175
1176// D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1
1177typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1
1178{
1179 UINT NodeMask;
1180 const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc; // input
1181 UINT NumInputStreamDescs; // input
1182 const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; // input
1183 BOOL Protected; // input
1184 UINT64 MemoryPoolL0Size; // output
1185 UINT64 MemoryPoolL1Size; // output
1186} D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1;
1187
1188typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE
1189{
1190 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CREATION = 0,
1191 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1,
1192 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_EXECUTION = 2,
1193 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_INPUT = 3,
1194 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_OUTPUT = 4,
1195 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_INPUT = 5,
1196 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_OUTPUT = 6,
1197} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE;
1198
1199typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE
1200{
1201 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT8 = 0,
1202 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT16 = 1,
1203 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT32 = 2,
1204 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT64 = 3,
1205 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT8 = 4,
1206 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT16 = 5,
1207 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT32 = 6,
1208 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT64 = 7,
1209 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_FLOAT = 8,
1210 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_DOUBLE = 9,
1211 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_RESOURCE = 10,
1212} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE;
1213
1214typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS
1215{
1216 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_NONE = 0x00000000,
1217 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_READ = 0x00000001,
1218 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_WRITE = 0x00000002
1219} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS;
1220
1221cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS )")
1222
1223typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT
1224{
1225 UINT NodeIndex; // in
1226 UINT CommandCount; // out
1227} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT;
1228
1229typedef struct D3D12_VIDEO_EXTENSION_COMMAND_INFO
1230{
1231 GUID CommandId;
1232 LPCWSTR Name;
1233 D3D12_COMMAND_LIST_SUPPORT_FLAGS CommandListSupportFlags;
1234} D3D12_VIDEO_EXTENSION_COMMAND_INFO;
1235
1236typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS
1237{
1238 UINT NodeIndex;
1239 UINT CommandCount;
1240 [annotation("_Field_size_full_(CommandCount)")] D3D12_VIDEO_EXTENSION_COMMAND_INFO* pCommandInfos;
1241} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS;
1242
1243typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT
1244{
1245 GUID CommandId; // in
1246 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; // in
1247 UINT ParameterCount; // out
1248 UINT ParameterPacking; // out
1249} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT;
1250
1251typedef struct D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO
1252{
1253 LPCWSTR Name;
1254 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE Type;
1255 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS Flags;
1256} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO;
1257
1258typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS
1259{
1260 GUID CommandId; // in
1261 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; // in
1262 UINT ParameterCount; // in
1263 [annotation("_Field_size_full_(ParameterCount)")] D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO* pParameterInfos; // out
1264} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS;
1265
1266typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT
1267{
1268 UINT NodeIndex;
1269 GUID CommandId;
1270 [annotation("_Field_size_bytes_full_opt_(InputDataSizeInBytes)")] const void *pInputData;
1271 SIZE_T InputDataSizeInBytes;
1272 [annotation("_Field_size_bytes_full_opt_(OutputDataSizeInBytes)")] void *pOutputData;
1273 SIZE_T OutputDataSizeInBytes;
1274} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT;
1275
1276typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE
1277{
1278 UINT NodeIndex;
1279 GUID CommandId;
1280 [annotation("_Field_size_bytes_full_(CreationParametersDataSizeInBytes)")] const void* pCreationParameters;
1281 SIZE_T CreationParametersSizeInBytes;
1282 UINT64 MemoryPoolL0Size; // output
1283 UINT64 MemoryPoolL1Size; // output
1284} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE;
1285
1286typedef struct D3D12_VIDEO_EXTENSION_COMMAND_DESC
1287{
1288 UINT NodeMask;
1289 GUID CommandId;
1290} D3D12_VIDEO_EXTENSION_COMMAND_DESC;
1291
1292[uuid(79A2E5FB-CCD2-469A-9FDE-195D10951F7E), object, local, pointer_default(unique)]
1293interface ID3D12VideoDecoder1
1294 : ID3D12VideoDecoder
1295{
1296 HRESULT GetProtectedResourceSession(
1297 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1298 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1299}
1300
1301[uuid(DA1D98C5-539F-41B2-BF6B-1198A03B6D26), object, local, pointer_default(unique)]
1302interface ID3D12VideoDecoderHeap1
1303 : ID3D12VideoDecoderHeap
1304{
1305 HRESULT GetProtectedResourceSession(
1306 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1307 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1308}
1309
1310[uuid(F3CFE615-553F-425C-86D8-EE8C1B1FB01C), object, local, pointer_default(unique)]
1311interface ID3D12VideoProcessor1
1312 : ID3D12VideoProcessor
1313{
1314 HRESULT GetProtectedResourceSession(
1315 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1316 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1317}
1318
1319[uuid(554E41E8-AE8E-4A8C-B7D2-5B4F274A30E4), object, local, pointer_default(unique)]
1320interface ID3D12VideoExtensionCommand
1321 : ID3D12Pageable
1322{
1323 D3D12_VIDEO_EXTENSION_COMMAND_DESC GetDesc();
1324
1325 HRESULT GetProtectedResourceSession(
1326 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1327 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1328}
1329
1330[uuid(F019AC49-F838-4A95-9B17-579437C8F513), object, local, pointer_default(unique)]
1331interface ID3D12VideoDevice2
1332 : ID3D12VideoDevice1
1333{
1334 HRESULT CreateVideoDecoder1(
1335 [annotation("_In_")] const D3D12_VIDEO_DECODER_DESC* pDesc,
1336 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1337 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoder1,
1338 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoder
1339 );
1340
1341 HRESULT CreateVideoDecoderHeap1(
1342 [annotation("_In_")] const D3D12_VIDEO_DECODER_HEAP_DESC* pVideoDecoderHeapDesc,
1343 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1344 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoderHeap1,
1345 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoderHeap
1346 );
1347
1348 HRESULT CreateVideoProcessor1(
1349 UINT NodeMask,
1350 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc,
1351 UINT NumInputStreamDescs,
1352 [annotation("_In_reads_(NumInputStreamDescs)")]const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs,
1353 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1354 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoProcessor1,
1355 [out, iid_is(riid), annotation("_COM_Outptr_")] void **ppVideoProcessor
1356 );
1357
1358 HRESULT CreateVideoExtensionCommand(
1359 [annotation("_In_")] const D3D12_VIDEO_EXTENSION_COMMAND_DESC* pDesc,
1360 [annotation("_In_reads_bytes_(CreationParametersDataSizeInBytes)")] const void* pCreationParameters,
1361 SIZE_T CreationParametersDataSizeInBytes,
1362 [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedResourceSession,
1363 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoExtensionCommand,
1364 [annotation("_COM_Outptr_")] void** ppVideoExtensionCommand);
1365
1366 HRESULT ExecuteExtensionCommand(
1367 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1368 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1369 SIZE_T ExecutionParametersSizeInBytes,
1370 [annotation("_Out_writes_bytes_(OutputDataSizeInBytes)")] void *pOutputData,
1371 SIZE_T OutputDataSizeInBytes
1372 );
1373}
1374
1375[uuid(6e120880-c114-4153-8036-d247051e1729), object, local, pointer_default(unique)]
1376interface ID3D12VideoDecodeCommandList2
1377 : ID3D12VideoDecodeCommandList1
1378{
1379 void SetProtectedResourceSession(
1380 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
1381 );
1382
1383 void InitializeExtensionCommand(
1384 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1385 [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters,
1386 SIZE_T InitializationParametersSizeInBytes);
1387
1388 void ExecuteExtensionCommand(
1389 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1390 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1391 SIZE_T ExecutionParametersSizeInBytes);
1392}
1393
1394[uuid(2aee8c37-9562-42da-8abf-61efeb2e4513), object, local, pointer_default(unique)]
1395interface ID3D12VideoDecodeCommandList3
1396 : ID3D12VideoDecodeCommandList2
1397{
1398 void Barrier(
1399 UINT32 NumBarrierGroups,
1400 [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups
1401 );
1402}
1403
1404
1405
1406[uuid(db525ae4-6ad6-473c-baa7-59b2e37082e4), object, local, pointer_default(unique)]
1407interface ID3D12VideoProcessCommandList2
1408 : ID3D12VideoProcessCommandList1
1409{
1410
1411 void SetProtectedResourceSession(
1412 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
1413 );
1414
1415 void InitializeExtensionCommand(
1416 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1417 [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters,
1418 SIZE_T InitializationParametersSizeInBytes);
1419
1420 void ExecuteExtensionCommand(
1421 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1422 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1423 SIZE_T ExecutionParametersSizeInBytes);
1424}
1425
1426[uuid(1a0a4ca4-9f08-40ce-9558-b411fd2666ff), object, local, pointer_default(unique)]
1427interface ID3D12VideoProcessCommandList3
1428 : ID3D12VideoProcessCommandList2
1429{
1430 void Barrier(
1431 UINT32 NumBarrierGroups,
1432 [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups
1433 );
1434}
1435
1436
1437
1438[uuid(94971eca-2bdb-4769-88cf-3675ea757ebc), object, local, pointer_default(unique)]
1439interface ID3D12VideoEncodeCommandList1
1440 : ID3D12VideoEncodeCommandList
1441{
1442 void InitializeExtensionCommand(
1443 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1444 [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters,
1445 SIZE_T InitializationParametersSizeInBytes);
1446
1447 void ExecuteExtensionCommand(
1448 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1449 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1450 SIZE_T ExecutionParametersSizeInBytes);
1451}
1452
1453cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG2, 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9); ")
1454cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG1_AND_MPEG2, 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60); ")
1455cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
1456cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO_PROGRESSIVE, 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d);")
1457cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO, 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52);")
1458cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_MULTIVIEW, 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c);")
1459cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1, 0x1b81beA3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
1460cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1_D2010, 0x1b81beA4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
1461cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_SIMPLE, 0xefd64d74, 0xc9e8,0x41d7,0xa5,0xe9,0xe9,0xb0,0xe3,0x9f,0xa3,0x19);")
1462cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_ADVSIMPLE_NOGMC, 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e);")
1463cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN, 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0);")
1464cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10, 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13);")
1465cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MONOCHROME, 0x0685b993, 0x3d8c, 0x43a0, 0x8b, 0x28, 0xd7, 0x4c, 0x2d, 0x68, 0x99, 0xa4);")
1466cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MONOCHROME10, 0x142a1d0f, 0x69dd, 0x4ec9, 0x85, 0x91, 0xb1, 0x2f, 0xfc, 0xb9, 0x1a, 0x29);")
1467cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12, 0x1a72925f, 0x0c2c, 0x4f15, 0x96, 0xfb, 0xb1, 0x7d, 0x14, 0x73, 0x60, 0x3f);")
1468cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_422, 0x0bac4fe5, 0x1532, 0x4429, 0xa8, 0x54, 0xf8, 0x4d, 0xe0, 0x49, 0x53, 0xdb);")
1469cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12_422, 0x55bcac81, 0xf311, 0x4093, 0xa7, 0xd0, 0x1c, 0xbc, 0x0b, 0x84, 0x9b, 0xee);")
1470cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN_444, 0x4008018f, 0xf537, 0x4b36, 0x98, 0xcf, 0x61, 0xaf, 0x8a, 0x2c, 0x1a, 0x33);")
1471cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_EXT, 0x9cc55490, 0xe37c, 0x4932, 0x86, 0x84, 0x49, 0x20, 0xf9, 0xf6, 0x40, 0x9c);")
1472cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_444, 0x0dabeffa, 0x4458, 0x4602, 0xbc, 0x03, 0x07, 0x95, 0x65, 0x9d, 0x61, 0x7c);")
1473cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12_444, 0x9798634d, 0xfe9d, 0x48e5, 0xb4, 0xda, 0xdb, 0xec, 0x45, 0xb3, 0xdf, 0x01);")
1474cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN16, 0xa4fbdbb0, 0xa113, 0x482b, 0xa2, 0x32, 0x63, 0x5c, 0xc0, 0x69, 0x7f, 0x6d);")
1475cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e);")
1476cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2, 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7);")
1477cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP8, 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7);")
1478cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a);")
1479cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08);")
1480cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8);")
1481cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0);")
1482cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8);")
1483cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_420, 0x725cb506, 0xc29, 0x43c4, 0x94, 0x40, 0x8e, 0x93, 0x97, 0x90, 0x3a, 0x4); ")
1484cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_422, 0x5b77b9cd, 0x1a35, 0x4c30, 0x9f, 0xd8, 0xef, 0x4b, 0x60, 0xc0, 0x35, 0xdd); ")
1485cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_444, 0xd95161f9, 0xd44, 0x47e6, 0xbc, 0xf5, 0x1b, 0xfb, 0xfb, 0x26, 0x8f, 0x97); ")
1486cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_4444, 0xc91748d5, 0xfd18, 0x4aca, 0x9d, 0xb3, 0x3a, 0x66, 0x34, 0xab, 0x54, 0x7d); ")
1487cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_420, 0xcf782c83, 0xbef5, 0x4a2c, 0x87, 0xcb, 0x60, 0x19, 0xe7, 0xb1, 0x75, 0xac); ")
1488cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_422, 0xf04df417, 0xeee2, 0x4067, 0xa7, 0x78, 0xf3, 0x5c, 0x15, 0xab, 0x97, 0x21); ")
1489cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_444, 0x4cd00e17, 0x89ba, 0x48ef, 0xb9, 0xf9, 0xed, 0xcb, 0x82, 0x71, 0x3f, 0x65);")
1490
1491///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1492// Video Encoder
1493///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1494
1495typedef enum D3D12_VIDEO_ENCODER_AV1_PROFILE
1496{
1497 D3D12_VIDEO_ENCODER_AV1_PROFILE_MAIN = 0,
1498 D3D12_VIDEO_ENCODER_AV1_PROFILE_HIGH = 1,
1499 D3D12_VIDEO_ENCODER_AV1_PROFILE_PROFESSIONAL = 2,
1500} D3D12_VIDEO_ENCODER_AV1_PROFILE;
1501
1502typedef enum D3D12_VIDEO_ENCODER_AV1_LEVELS
1503{ // These values are defined according to the AV1 codec standard spec
1504 D3D12_VIDEO_ENCODER_AV1_LEVELS_2_0 = 0,
1505 D3D12_VIDEO_ENCODER_AV1_LEVELS_2_1 = 1,
1506 D3D12_VIDEO_ENCODER_AV1_LEVELS_2_2 = 2,
1507 D3D12_VIDEO_ENCODER_AV1_LEVELS_2_3 = 3,
1508 D3D12_VIDEO_ENCODER_AV1_LEVELS_3_0 = 4,
1509 D3D12_VIDEO_ENCODER_AV1_LEVELS_3_1 = 5,
1510 D3D12_VIDEO_ENCODER_AV1_LEVELS_3_2 = 6,
1511 D3D12_VIDEO_ENCODER_AV1_LEVELS_3_3 = 7,
1512 D3D12_VIDEO_ENCODER_AV1_LEVELS_4_0 = 8,
1513 D3D12_VIDEO_ENCODER_AV1_LEVELS_4_1 = 9,
1514 D3D12_VIDEO_ENCODER_AV1_LEVELS_4_2 = 10,
1515 D3D12_VIDEO_ENCODER_AV1_LEVELS_4_3 = 11,
1516 D3D12_VIDEO_ENCODER_AV1_LEVELS_5_0 = 12,
1517 D3D12_VIDEO_ENCODER_AV1_LEVELS_5_1 = 13,
1518 D3D12_VIDEO_ENCODER_AV1_LEVELS_5_2 = 14,
1519 D3D12_VIDEO_ENCODER_AV1_LEVELS_5_3 = 15,
1520 D3D12_VIDEO_ENCODER_AV1_LEVELS_6_0 = 16,
1521 D3D12_VIDEO_ENCODER_AV1_LEVELS_6_1 = 17,
1522 D3D12_VIDEO_ENCODER_AV1_LEVELS_6_2 = 18,
1523 D3D12_VIDEO_ENCODER_AV1_LEVELS_6_3 = 19,
1524 D3D12_VIDEO_ENCODER_AV1_LEVELS_7_0 = 20,
1525 D3D12_VIDEO_ENCODER_AV1_LEVELS_7_1 = 21,
1526 D3D12_VIDEO_ENCODER_AV1_LEVELS_7_2 = 22,
1527 D3D12_VIDEO_ENCODER_AV1_LEVELS_7_3 = 23,
1528} D3D12_VIDEO_ENCODER_AV1_LEVELS;
1529
1530typedef enum D3D12_VIDEO_ENCODER_AV1_TIER
1531{
1532 D3D12_VIDEO_ENCODER_AV1_TIER_MAIN = 0,
1533 D3D12_VIDEO_ENCODER_AV1_TIER_HIGH = 1,
1534} D3D12_VIDEO_ENCODER_AV1_TIER;
1535
1536typedef struct D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS
1537{
1538 D3D12_VIDEO_ENCODER_AV1_LEVELS Level;
1539 D3D12_VIDEO_ENCODER_AV1_TIER Tier;
1540} D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS;
1541
1542typedef enum D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS
1543{
1544 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_NONE = 0x0,
1545 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_128x128_SUPERBLOCK = 0x1,
1546 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FILTER_INTRA = 0x2,
1547 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTRA_EDGE_FILTER = 0x4,
1548 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTERINTRA_COMPOUND = 0x8,
1549 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_MASKED_COMPOUND = 0x10,
1550 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_WARPED_MOTION = 0x20,
1551 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DUAL_FILTER = 0x40,
1552 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_JNT_COMP = 0x80,
1553 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FORCED_INTEGER_MOTION_VECTORS = 0x100,
1554 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_SUPER_RESOLUTION = 0x200,
1555 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_LOOP_RESTORATION_FILTER = 0x400,
1556 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_PALETTE_ENCODING = 0x800,
1557 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_CDEF_FILTERING = 0x1000,
1558 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTRA_BLOCK_COPY = 0x2000,
1559 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FRAME_REFERENCE_MOTION_VECTORS = 0x4000,
1560 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_ORDER_HINT_TOOLS = 0x8000,
1561 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_AUTO_SEGMENTATION = 0x10000,
1562 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_CUSTOM_SEGMENTATION = 0x20000,
1563 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_LOOP_FILTER_DELTAS = 0x40000,
1564 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_QUANTIZATION_DELTAS = 0x80000,
1565 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_QUANTIZATION_MATRIX = 0x100000,
1566 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_REDUCED_TX_SET = 0x200000,
1567 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_MOTION_MODE_SWITCHABLE = 0x400000,
1568 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_ALLOW_HIGH_PRECISION_MV = 0x800000,
1569 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_SKIP_MODE_PRESENT = 0x1000000,
1570 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DELTA_LF_PARAMS = 0x2000000,
1571} D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS;
1572cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS)")
1573
1574typedef enum D3D12_VIDEO_ENCODER_AV1_TX_MODE {
1575 D3D12_VIDEO_ENCODER_AV1_TX_MODE_ONLY4x4 = 0,
1576 D3D12_VIDEO_ENCODER_AV1_TX_MODE_LARGEST = 1,
1577 D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT = 2,
1578} D3D12_VIDEO_ENCODER_AV1_TX_MODE;
1579
1580typedef enum D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS {
1581 D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_NONE = 0x0,
1582 D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_ONLY4x4 = (1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_ONLY4x4),
1583 D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_LARGEST = (1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_LARGEST),
1584 D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_SELECT = (1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT),
1585} D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS;
1586cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS)")
1587
1588typedef enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS {
1589 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP = 0,
1590 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SMOOTH = 1,
1591 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SHARP = 2,
1592 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_BILINEAR = 3,
1593 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE = 4,
1594} D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS;
1595
1596typedef enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS {
1597 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_NONE = 0x0,
1598 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP),
1599 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP_SMOOTH = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SMOOTH),
1600 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP_SHARP = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SHARP),
1601 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_BILINEAR = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_BILINEAR),
1602 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_SWITCHABLE = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE),
1603} D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS;
1604cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS)")
1605
1606typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE {
1607 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_4x4 = 0,
1608 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_8x8 = 1,
1609 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_16x16 = 2,
1610 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_32x32 = 3,
1611 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_64x64 = 4,
1612} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE;
1613
1614typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE {
1615 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_DISABLED = 0,
1616 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_Q = 1,
1617 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_V = 2,
1618 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_H = 3,
1619 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_U = 4,
1620 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_V = 5,
1621 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_REF_FRAME = 6,
1622 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_SKIP = 7,
1623 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV = 8,
1624} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE;
1625
1626typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS {
1627 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_NONE = 0,
1628 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_DISABLED = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_DISABLED),
1629 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_Q = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_Q),
1630 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_Y_V = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_V),
1631 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_Y_H = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_H),
1632 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_U = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_U),
1633 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_V = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_V),
1634 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_REF_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_REF_FRAME),
1635 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_SKIP = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_SKIP),
1636 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_GLOBALMV = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV),
1637} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS;
1638cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS)")
1639
1640typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE {
1641 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_DISABLED = 0,
1642 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_SWITCHABLE = 1,
1643 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_WIENER = 2,
1644 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_SGRPROJ = 3,
1645} D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE;
1646
1647typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE {
1648 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_DISABLED = 0,
1649 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_32x32 = 1,
1650 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_64x64 = 2,
1651 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_128x128 = 3,
1652 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_256x256 = 4,
1653} D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE;
1654
1655typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS {
1656 D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_NOT_SUPPORTED = 0x0,
1657 D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_32x32 = 0x1,
1658 D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_64x64 = 0x2,
1659 D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_128x128 = 0x4,
1660 D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_256x256 = 0x8,
1661} D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS;
1662cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS)")
1663
1664typedef enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION
1665{
1666 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_IDENTITY = 0,
1667 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_TRANSLATION = 1,
1668 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_ROTZOOM = 2,
1669 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE = 3,
1670} D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION;
1671
1672typedef enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS {
1673 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_NONE = 0, // None is supported, reference warp motion arguments are ignored and is_global syntax is false for all references
1674 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_IDENTITY = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_IDENTITY),
1675 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_TRANSLATION = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_TRANSLATION),
1676 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_ROTZOOM = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_ROTZOOM),
1677 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_AFFINE = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE),
1678} D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS;
1679cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS)")
1680
1681typedef enum D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS {
1682 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_NONE = 0,
1683 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_QUANTIZATION = 0x1,
1684 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_QUANTIZATION_DELTA = 0x2,
1685 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_LOOP_FILTER = 0x4,
1686 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_LOOP_FILTER_DELTA = 0x8,
1687 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_CDEF_DATA = 0x10,
1688 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_CONTEXT_UPDATE_TILE_ID = 0x20,
1689 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_COMPOUND_PREDICTION_MODE = 0x40,
1690 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_PRIMARY_REF_FRAME = 0x80,
1691 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_REFERENCE_INDICES = 0x100,
1692} D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS;
1693cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS)")
1694
1695typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT {
1696 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS SupportedFeatureFlags;
1697 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS RequiredFeatureFlags;
1698 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS SupportedInterpolationFilters;
1699 D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS SupportedRestorationParams[3][3];
1700 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS SupportedSegmentationModes;
1701 D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS SupportedTxModes[4]; // Different for D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE types
1702 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE SegmentationBlockSize;
1703 D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS PostEncodeValuesFlags;
1704 UINT MaxTemporalLayers;
1705 UINT MaxSpatialLayers;
1706} D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT;
1707
1708typedef enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE
1709{
1710 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_KEY_FRAME = 0,
1711 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTER_FRAME = 1,
1712 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTRA_ONLY_FRAME = 2,
1713 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME = 3,
1714} D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE;
1715
1716typedef enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS {
1717 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_NONE = 0x0,
1718 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_KEY_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_KEY_FRAME),
1719 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_INTER_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTER_FRAME),
1720 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_INTRA_ONLY_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTRA_ONLY_FRAME),
1721 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME),
1722} D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS;
1723cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS)")
1724
1725typedef enum D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE
1726{
1727 D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_SINGLE_REFERENCE = 0,
1728 D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_COMPOUND_REFERENCE = 1,
1729} D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE;
1730
1731typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT {
1732 D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE PredictionMode;
1733 UINT MaxUniqueReferencesPerFrame;
1734 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS SupportedFrameTypes;
1735 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS SupportedReferenceWarpedMotionFlags;
1736} D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT;
1737
1738typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION {
1739 D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS FeatureFlags;
1740 UINT OrderHintBitsMinus1;
1741} D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION;
1742
1743typedef struct D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE
1744{
1745 UINT IntraDistance;
1746 UINT InterFramePeriod;
1747} D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE;
1748
1749typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
1750{
1751 D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION TransformationType;
1752 INT TransformationMatrix[8];
1753 BOOL InvalidAffineSet; // Valid or invalid on affine set
1754} D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO;
1755
1756typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
1757{
1758 UINT ReconstructedPictureResourceIndex;
1759 UINT TemporalLayerIndexPlus1;
1760 UINT SpatialLayerIndexPlus1;
1761 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType;
1762 // Only used if supported in D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS, ignored by driver otherwise
1763 D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo;
1764 UINT OrderHint;
1765 UINT PictureIndex;
1766} D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR;
1767
1768typedef enum D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS
1769{
1770 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_NONE = 0x0,
1771 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_ERROR_RESILIENT_MODE = 0x1,
1772 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_DISABLE_CDF_UPDATE = 0x2,
1773 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_PALETTE_ENCODING = 0x4,
1774 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_SKIP_MODE = 0x8,
1775 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_FRAME_REFERENCE_MOTION_VECTORS = 0x10,
1776 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_FORCE_INTEGER_MOTION_VECTORS = 0x20,
1777 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_INTRA_BLOCK_COPY = 0x40,
1778 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_USE_SUPER_RESOLUTION = 0x80,
1779 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_DISABLE_FRAME_END_UPDATE_CDF = 0x100,
1780 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_FRAME_SEGMENTATION_AUTO = 0x200,
1781 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM = 0x400,
1782 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_WARPED_MOTION = 0x800,
1783 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_REDUCED_TX_SET = 0x1000,
1784 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_MOTION_MODE_SWITCHABLE = 0x2000,
1785 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_HIGH_PRECISION_MV = 0x4000,
1786
1787} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS;
1788cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS)")
1789
1790typedef struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG {
1791 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE FrameRestorationType[3];
1792 D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE LoopRestorationPixelSize[3];
1793} D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG;
1794
1795typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA {
1796 UINT64 EnabledFeatures; // D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS
1797 // For the enabled features in EnabledFeatures, the array below
1798 // is indexed by D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE - 1
1799 INT64 FeatureValue[8];
1800} D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA;
1801
1802typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG {
1803 UINT64 UpdateMap;
1804 UINT64 TemporalUpdate;
1805 UINT64 UpdateData;
1806 UINT64 NumSegments;
1807 D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA SegmentsData[8];
1808} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG;
1809
1810typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP {
1811 UINT SegmentsMapByteSize;
1812 UINT8* pSegmentsMap;
1813} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP;
1814
1815typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG {
1816 UINT64 LoopFilterLevel[2];
1817 UINT64 LoopFilterLevelU;
1818 UINT64 LoopFilterLevelV;
1819 UINT64 LoopFilterSharpnessLevel;
1820 UINT64 LoopFilterDeltaEnabled;
1821 // loop_filter_delta_update = UpdateRefDelta || UpdateModeDelta
1822 UINT64 UpdateRefDelta;
1823 INT64 RefDeltas[8];
1824 UINT64 UpdateModeDelta;
1825 INT64 ModeDeltas[2];
1826} D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG;
1827
1828typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG {
1829 UINT64 DeltaLFPresent;
1830 UINT64 DeltaLFMulti;
1831 UINT64 DeltaLFRes;
1832} D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG;
1833
1834typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG {
1835 UINT64 BaseQIndex;
1836 INT64 YDCDeltaQ;
1837 INT64 UDCDeltaQ;
1838 INT64 UACDeltaQ;
1839 INT64 VDCDeltaQ;
1840 INT64 VACDeltaQ;
1841 UINT64 UsingQMatrix;
1842 UINT64 QMY;
1843 UINT64 QMU;
1844 UINT64 QMV;
1845} D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG;
1846
1847typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG {
1848 UINT64 DeltaQPresent;
1849 UINT64 DeltaQRes;
1850} D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG;
1851
1852typedef struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG {
1853 UINT64 CdefBits;
1854 UINT64 CdefDampingMinus3;
1855 UINT64 CdefYPriStrength[8];
1856 UINT64 CdefUVPriStrength[8];
1857 UINT64 CdefYSecStrength[8];
1858 UINT64 CdefUVSecStrength[8];
1859} D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG;
1860
1861typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA
1862{
1863 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS Flags;
1864 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType;
1865 D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE CompoundPredictionType;
1866 D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS InterpolationFilter;
1867 D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig;
1868 D3D12_VIDEO_ENCODER_AV1_TX_MODE TxMode;
1869 UINT SuperResDenominator;
1870 UINT OrderHint;
1871 UINT PictureIndex;
1872 UINT TemporalLayerIndexPlus1;
1873 UINT SpatialLayerIndexPlus1;
1874 D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR ReferenceFramesReconPictureDescriptors[8];
1875 UINT ReferenceIndices[7];
1876 UINT PrimaryRefFrame;
1877 UINT RefreshFrameFlags;
1878 D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter;
1879 D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta;
1880 D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization;
1881 D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta;
1882 D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF;
1883 UINT QPMapValuesCount;
1884 [annotation("_Field_size_full_(QPMapValuesCount)")] INT16* pRateControlQPMap;
1885 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation;
1886 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap;
1887} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA;
1888
1889typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES
1890{
1891 UINT64 RowCount;
1892 UINT64 ColCount;
1893 UINT64 RowHeights[D3D12_VIDEO_ENCODER_AV1_MAX_TILE_ROWS];
1894 UINT64 ColWidths[D3D12_VIDEO_ENCODER_AV1_MAX_TILE_COLS];
1895 UINT64 ContextUpdateTileId;
1896} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES;
1897
1898typedef struct D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES
1899{
1900 UINT64 CompoundPredictionType; // D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE
1901 D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter;
1902 D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta;
1903 D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization;
1904 D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta;
1905 D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF;
1906 D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG SegmentationConfig;
1907 UINT64 PrimaryRefFrame; // Aligned to 64 for use of post encode metadata with predication
1908 UINT64 ReferenceIndices[7]; // Aligned to 64 for use of post encode metadata with predication
1909} D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES;
1910
1911//
1912// Rate control API
1913//
1914
1915typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE
1916{
1917 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_ABSOLUTE_QP_MAP = 0,
1918 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CQP = 1,
1919 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CBR = 2,
1920 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_VBR = 3,
1921 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_QVBR = 4,
1922} D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE;
1923
1924typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS
1925{
1926 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_NONE = 0x0,
1927 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_DELTA_QP = 0x1,
1928 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_FRAME_ANALYSIS = 0x2,
1929 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QP_RANGE = 0x4,
1930 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_INITIAL_QP = 0x8,
1931 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_MAX_FRAME_SIZE = 0x10,
1932 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_VBV_SIZES = 0x20,
1933 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_EXTENSION1_SUPPORT = 0x40,
1934 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QUALITY_VS_SPEED = 0x80,
1935 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_SPATIAL_ADAPTIVE_QP = 0x100,
1936} D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS;
1937cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS)")
1938
1939typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP {
1940 UINT ConstantQP_FullIntracodedFrame;
1941 UINT ConstantQP_InterPredictedFrame_PrevRefOnly;
1942 UINT ConstantQP_InterPredictedFrame_BiDirectionalRef;
1943} D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP;
1944
1945typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1 {
1946 UINT ConstantQP_FullIntracodedFrame;
1947 UINT ConstantQP_InterPredictedFrame_PrevRefOnly;
1948 UINT ConstantQP_InterPredictedFrame_BiDirectionalRef;
1949 UINT QualityVsSpeed;
1950} D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1;
1951
1952typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR {
1953 UINT InitialQP;
1954 UINT MinQP;
1955 UINT MaxQP;
1956 UINT64 MaxFrameBitSize;
1957 UINT64 TargetBitRate;
1958 UINT64 VBVCapacity;
1959 UINT64 InitialVBVFullness;
1960} D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR;
1961
1962typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1 {
1963 UINT InitialQP;
1964 UINT MinQP;
1965 UINT MaxQP;
1966 UINT64 MaxFrameBitSize;
1967 UINT64 TargetBitRate;
1968 UINT64 VBVCapacity;
1969 UINT64 InitialVBVFullness;
1970 UINT QualityVsSpeed;
1971} D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1;
1972
1973typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR {
1974 UINT InitialQP;
1975 UINT MinQP;
1976 UINT MaxQP;
1977 UINT64 MaxFrameBitSize;
1978 UINT64 TargetAvgBitRate;
1979 UINT64 PeakBitRate;
1980 UINT64 VBVCapacity;
1981 UINT64 InitialVBVFullness;
1982} D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR;
1983
1984typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1 {
1985 UINT InitialQP;
1986 UINT MinQP;
1987 UINT MaxQP;
1988 UINT64 MaxFrameBitSize;
1989 UINT64 TargetAvgBitRate;
1990 UINT64 PeakBitRate;
1991 UINT64 VBVCapacity;
1992 UINT64 InitialVBVFullness;
1993 UINT QualityVsSpeed;
1994} D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1;
1995
1996typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR {
1997 UINT InitialQP;
1998 UINT MinQP;
1999 UINT MaxQP;
2000 UINT64 MaxFrameBitSize;
2001 UINT64 TargetAvgBitRate;
2002 UINT64 PeakBitRate;
2003 UINT ConstantQualityTarget;
2004} D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR;
2005
2006typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1
2007{
2008 UINT InitialQP;
2009 UINT MinQP;
2010 UINT MaxQP;
2011 UINT64 MaxFrameBitSize;
2012 UINT64 TargetAvgBitRate;
2013 UINT64 PeakBitRate;
2014 UINT ConstantQualityTarget;
2015 UINT64 VBVCapacity;
2016 UINT64 InitialVBVFullness;
2017 UINT QualityVsSpeed;
2018} D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1;
2019
2020typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP {
2021 UINT QualityVsSpeed;
2022} D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP;
2023
2024typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS
2025{
2026 UINT DataSize;
2027 union
2028 {
2029 const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP* pConfiguration_CQP;
2030 const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR* pConfiguration_CBR;
2031 const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR* pConfiguration_VBR;
2032 const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR* pConfiguration_QVBR;
2033 const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1* pConfiguration_CQP1;
2034 const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1* pConfiguration_CBR1;
2035 const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1* pConfiguration_VBR1;
2036 const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1* pConfiguration_QVBR1;
2037 const D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP* pConfiguration_AbsoluteQPMap;
2038 };
2039} D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS;
2040
2041typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL {
2042 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE Mode;
2043 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS Flags;
2044 D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS ConfigParams;
2045 DXGI_RATIONAL TargetFrameRate;
2046} D3D12_VIDEO_ENCODER_RATE_CONTROL;
2047
2048//
2049// Video Encoder support API
2050//
2051
2052typedef enum D3D12_VIDEO_ENCODER_CODEC
2053{
2054 D3D12_VIDEO_ENCODER_CODEC_H264 = 0,
2055 D3D12_VIDEO_ENCODER_CODEC_HEVC = 1,
2056 D3D12_VIDEO_ENCODER_CODEC_AV1 = 2,
2057} D3D12_VIDEO_ENCODER_CODEC;
2058
2059typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC
2060{
2061 UINT NodeIndex; // input
2062 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2063 BOOL IsSupported; // output
2064} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC;
2065
2066typedef enum D3D12_VIDEO_ENCODER_PROFILE_H264
2067{
2068 D3D12_VIDEO_ENCODER_PROFILE_H264_MAIN = 0,
2069 D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH = 1,
2070 D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH_10 = 2,
2071} D3D12_VIDEO_ENCODER_PROFILE_H264;
2072
2073typedef enum D3D12_VIDEO_ENCODER_PROFILE_HEVC
2074{
2075 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN = 0,
2076 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10 = 1,
2077 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12 = 2,
2078 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_422 = 3,
2079 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_422 = 4,
2080 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN_444 = 5,
2081 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_444 = 6,
2082 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_444 = 7,
2083 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN16_444 = 8,
2084} D3D12_VIDEO_ENCODER_PROFILE_HEVC;
2085
2086typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC
2087{
2088 UINT DataSize;
2089 union
2090 {
2091 D3D12_VIDEO_ENCODER_PROFILE_H264* pH264Profile;
2092 D3D12_VIDEO_ENCODER_PROFILE_HEVC* pHEVCProfile;
2093 D3D12_VIDEO_ENCODER_AV1_PROFILE* pAV1Profile;
2094 };
2095} D3D12_VIDEO_ENCODER_PROFILE_DESC;
2096
2097typedef enum D3D12_VIDEO_ENCODER_LEVELS_H264
2098{
2099 D3D12_VIDEO_ENCODER_LEVELS_H264_1 = 0,
2100 D3D12_VIDEO_ENCODER_LEVELS_H264_1b = 1,
2101 D3D12_VIDEO_ENCODER_LEVELS_H264_11 = 2,
2102 D3D12_VIDEO_ENCODER_LEVELS_H264_12 = 3,
2103 D3D12_VIDEO_ENCODER_LEVELS_H264_13 = 4,
2104 D3D12_VIDEO_ENCODER_LEVELS_H264_2 = 5,
2105 D3D12_VIDEO_ENCODER_LEVELS_H264_21 = 6,
2106 D3D12_VIDEO_ENCODER_LEVELS_H264_22 = 7,
2107 D3D12_VIDEO_ENCODER_LEVELS_H264_3 = 8,
2108 D3D12_VIDEO_ENCODER_LEVELS_H264_31 = 9,
2109 D3D12_VIDEO_ENCODER_LEVELS_H264_32 = 10,
2110 D3D12_VIDEO_ENCODER_LEVELS_H264_4 = 11,
2111 D3D12_VIDEO_ENCODER_LEVELS_H264_41 = 12,
2112 D3D12_VIDEO_ENCODER_LEVELS_H264_42 = 13,
2113 D3D12_VIDEO_ENCODER_LEVELS_H264_5 = 14,
2114 D3D12_VIDEO_ENCODER_LEVELS_H264_51 = 15,
2115 D3D12_VIDEO_ENCODER_LEVELS_H264_52 = 16,
2116 D3D12_VIDEO_ENCODER_LEVELS_H264_6 = 17,
2117 D3D12_VIDEO_ENCODER_LEVELS_H264_61 = 18,
2118 D3D12_VIDEO_ENCODER_LEVELS_H264_62 = 19,
2119} D3D12_VIDEO_ENCODER_LEVELS_H264;
2120
2121typedef enum D3D12_VIDEO_ENCODER_TIER_HEVC
2122{
2123 D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN = 0,
2124 D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH = 1,
2125} D3D12_VIDEO_ENCODER_TIER_HEVC;
2126
2127typedef enum D3D12_VIDEO_ENCODER_LEVELS_HEVC
2128{
2129 D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 = 0,
2130 D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 = 1,
2131 D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 = 2,
2132 D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 = 3,
2133 D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 = 4,
2134 D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 = 5,
2135 D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 = 6,
2136 D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 = 7,
2137 D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 = 8,
2138 D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 = 9,
2139 D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 = 10,
2140 D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 = 11,
2141 D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 = 12,
2142} D3D12_VIDEO_ENCODER_LEVELS_HEVC;
2143
2144typedef struct D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC
2145{
2146 D3D12_VIDEO_ENCODER_LEVELS_HEVC Level;
2147 D3D12_VIDEO_ENCODER_TIER_HEVC Tier;
2148} D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC;
2149
2150typedef struct D3D12_VIDEO_ENCODER_LEVEL_SETTING
2151{
2152 UINT DataSize;
2153 union
2154 {
2155 D3D12_VIDEO_ENCODER_LEVELS_H264* pH264LevelSetting;
2156 D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC* pHEVCLevelSetting;
2157 D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS* pAV1LevelSetting;
2158 };
2159} D3D12_VIDEO_ENCODER_LEVEL_SETTING;
2160
2161typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_PROFILE_LEVEL
2162{
2163 UINT NodeIndex; // input
2164 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2165 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2166 BOOL IsSupported; // output
2167 D3D12_VIDEO_ENCODER_LEVEL_SETTING MinSupportedLevel; // output
2168 D3D12_VIDEO_ENCODER_LEVEL_SETTING MaxSupportedLevel; // output
2169} D3D12_FEATURE_DATA_VIDEO_ENCODER_PROFILE_LEVEL;
2170
2171typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
2172{
2173 UINT Width;
2174 UINT Height;
2175} D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC;
2176
2177typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC
2178{
2179 UINT WidthRatio;
2180 UINT HeightRatio;
2181} D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC;
2182
2183typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT
2184{
2185 UINT NodeIndex; // input
2186 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2187 UINT ResolutionRatiosCount; // output
2188} D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT;
2189
2190typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION
2191{
2192 UINT NodeIndex; // input
2193 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2194 UINT ResolutionRatiosCount; // input
2195 BOOL IsSupported; // output
2196 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC MinResolutionSupported; // output
2197 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC MaxResolutionSupported; // output
2198 UINT ResolutionWidthMultipleRequirement; // output
2199 UINT ResolutionHeightMultipleRequirement; // output
2200 [annotation("_Field_size_full_(ResolutionRatiosCount)")] D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC* pResolutionRatios;
2201} D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION;
2202
2203typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_INPUT_FORMAT
2204{
2205 UINT NodeIndex; // input
2206 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2207 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2208 DXGI_FORMAT Format; // input
2209 BOOL IsSupported; // output
2210} D3D12_FEATURE_DATA_VIDEO_ENCODER_INPUT_FORMAT;
2211
2212typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE
2213{
2214 UINT NodeIndex; // input
2215 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2216 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE RateControlMode; // input
2217 BOOL IsSupported; // output
2218} D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE;
2219
2220typedef enum D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE
2221{
2222 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE = 0,
2223 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ROW_BASED = 1,
2224} D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE;
2225
2226typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_INTRA_REFRESH_MODE {
2227 UINT NodeIndex; // input
2228 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2229 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2230 D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; // input
2231 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefreshMode; // input
2232 BOOL IsSupported; // output
2233} D3D12_FEATURE_DATA_VIDEO_ENCODER_INTRA_REFRESH_MODE;
2234
2235typedef enum D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE
2236{
2237 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_FULL_FRAME = 0,
2238 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION = 1,
2239 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED = 2,
2240 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION = 3,
2241 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME = 4,
2242 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_GRID_PARTITION = 5,
2243 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_CONFIGURABLE_GRID_PARTITION = 6,
2244 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_AUTO = 7,
2245} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE;
2246
2247typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE
2248{
2249 UINT NodeIndex; // input
2250 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2251 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2252 D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; // input
2253 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionMode; // input
2254 BOOL IsSupported; // output
2255} D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE;
2256
2257typedef enum D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS
2258{
2259 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_NONE = 0x0,
2260 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_NOT_SPECIFIED = 0x1,
2261 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_CODEC_CONSTRAINT = 0x2,
2262 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_HARDWARE_CONSTRAINT = 0x4,
2263 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_ROWS_COUNT = 0x8,
2264 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_COLS_COUNT = 0x10,
2265 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_WIDTH = 0x20,
2266 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_AREA = 0x40,
2267 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_TOTAL_TILES = 0x80,
2268
2269} D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS;
2270cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS)")
2271
2272typedef struct D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT
2273{
2274 BOOL Use128SuperBlocks;
2275 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES TilesConfiguration;
2276 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS ValidationFlags;
2277 UINT MinTileRows;
2278 UINT MaxTileRows;
2279 UINT MinTileCols;
2280 UINT MaxTileCols;
2281 UINT MinTileWidth;
2282 UINT MaxTileWidth;
2283 UINT MinTileArea;
2284 UINT MaxTileArea;
2285 UINT TileSizeBytesMinus1;
2286} D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT;
2287
2288typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT {
2289 UINT DataSize;
2290 union
2291 {
2292 D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT* pAV1Support;
2293 };
2294} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT;
2295
2296typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG
2297{
2298 UINT NodeIndex; // input
2299 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2300 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2301 D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; // input
2302 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionMode; // input
2303 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC FrameResolution; // input
2304 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT CodecSupport; // input/output
2305 BOOL IsSupported; // output
2306} D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG;
2307
2308typedef enum D3D12_VIDEO_ENCODER_HEAP_FLAGS
2309{
2310 D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE = 0x0,
2311 D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_SUBREGION_NOTIFICATION_ARRAY_OF_BUFFERS = 0x1,
2312 D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_SUBREGION_NOTIFICATION_SINGLE_BUFFER = 0x2,
2313 D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_DIRTY_REGIONS = 0x4,
2314 D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_RATE_CONTROL_FRAME_ANALYSIS = 0x8,
2315} D3D12_VIDEO_ENCODER_HEAP_FLAGS;
2316cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS)")
2317
2318typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC
2319{
2320 UINT NodeMask;
2321 D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags;
2322 D3D12_VIDEO_ENCODER_CODEC EncodeCodec;
2323 D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile;
2324 D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel;
2325 UINT ResolutionsListCount;
2326 [annotation("_Field_size_full_(ResolutionsListCount)")] const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList;
2327} D3D12_VIDEO_ENCODER_HEAP_DESC;
2328
2329typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE {
2330 D3D12_VIDEO_ENCODER_HEAP_DESC HeapDesc; // input
2331 BOOL IsSupported; // output
2332 UINT64 MemoryPoolL0Size; // output
2333 UINT64 MemoryPoolL1Size; // output
2334} D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE;
2335
2336typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS
2337{
2338 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NONE = 0x0,
2339 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CABAC_ENCODING_SUPPORT = 0x1,
2340 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2,
2341 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x4,
2342 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_ADAPTIVE_8x8_TRANSFORM_ENCODING_SUPPORT = 0x8,
2343 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_SPATIAL_ENCODING_SUPPORT = 0x10,
2344 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_TEMPORAL_ENCODING_SUPPORT = 0x20,
2345 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x40,
2346 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x80,
2347} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS;
2348cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS)")
2349
2350typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES {
2351 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = 0,
2352 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES = 1,
2353 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = 2,
2354 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING = 3,
2355 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES = 4,
2356 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = 5,
2357 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = 6,
2358} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES;
2359
2360typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS {
2361 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_NONE = 0x0,
2362 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED),
2363 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_1_DISABLE_ALL_SLICE_BLOCK_EDGES = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES),
2364 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS),
2365 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_3_USE_TWO_STAGE_DEBLOCKING = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING),
2366 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_4_DISABLE_CHROMA_BLOCK_EDGES = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES),
2367 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES),
2368 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING),
2369} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS;
2370cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS)")
2371
2372typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 {
2373 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS SupportFlags;
2374 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS DisableDeblockingFilterSupportedModes;
2375} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264;
2376
2377typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS
2378{
2379 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NONE = 0x0,
2380 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x1,
2381 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2,
2382 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x4,
2383 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_SAO_FILTER_SUPPORT = 0x8,
2384 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_SUPPORT = 0x10,
2385 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_REQUIRED = 0x20,
2386 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_SUPPORT = 0x40,
2387 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_DISABLING_LOOP_FILTER_ACROSS_SLICES_SUPPORT = 0x80,
2388 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES = 0x100,
2389 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x200,
2390 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_SUPPORT = 0x400,
2391 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_REQUIRED = 0x800,
2392 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_SUPPORT = 0x1000,
2393 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_REQUIRED = 0x2000,
2394 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_SUPPORT = 0x4000,
2395 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_REQUIRED = 0x8000,
2396 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_SUPPORT = 0x10000,
2397 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_REQUIRED = 0x20000,
2398 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_SUPPORT = 0x40000,
2399 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_REQUIRED = 0x80000,
2400 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_SUPPORT = 0x100000,
2401 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_REQUIRED = 0x200000,
2402 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_SUPPORT = 0x400000,
2403 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_REQUIRED = 0x800000,
2404 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_SUPPORT = 0x1000000,
2405 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_REQUIRED = 0x2000000,
2406 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_SUPPORT = 0x4000000,
2407 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_REQUIRED = 0x8000000,
2408 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_SUPPORT = 0x10000000,
2409 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_REQUIRED = 0x20000000,
2410 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_SUPPORT = 0x40000000,
2411 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_REQUIRED = 0x80000000, // 2^31 - 32 bit integer enum type
2412
2413} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS;
2414cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS)")
2415
2416typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE {
2417 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 = 0,
2418 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 = 1,
2419 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_32x32 = 2,
2420 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_64x64 = 3,
2421} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE;
2422
2423typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE {
2424 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 = 0,
2425 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_8x8 = 1,
2426 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 = 2,
2427 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_32x32 = 3,
2428} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE;
2429
2430typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC {
2431 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags;
2432 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize;
2433 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize;
2434 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize;
2435 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize;
2436 UCHAR max_transform_hierarchy_depth_inter;
2437 UCHAR max_transform_hierarchy_depth_intra;
2438} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC;
2439
2440
2441typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1
2442{
2443 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_NONE = 0x0,
2444 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_SUPPORT = 0x1,
2445 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_REQUIRED = 0x2,
2446} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1;
2447cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1)")
2448
2449typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1 {
2450 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags;
2451 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize;
2452 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize;
2453 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize;
2454 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize;
2455 UCHAR max_transform_hierarchy_depth_inter;
2456 UCHAR max_transform_hierarchy_depth_intra;
2457 UINT allowed_diff_cu_chroma_qp_offset_depth_values;
2458 UINT allowed_log2_sao_offset_scale_luma_values;
2459 UINT allowed_log2_sao_offset_scale_chroma_values;
2460 UINT allowed_log2_max_transform_skip_block_size_minus2_values;
2461 UINT allowed_chroma_qp_offset_list_len_minus1_values;
2462 UINT allowed_cb_qp_offset_list_values[6];
2463 UINT allowed_cr_qp_offset_list_values[6];
2464 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 SupportFlags1;
2465} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1;
2466
2467typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT {
2468 UINT DataSize;
2469 union
2470 {
2471 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264* pH264Support;
2472 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC* pHEVCSupport;
2473 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1* pHEVCSupport1;
2474 D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT* pAV1Support;
2475 };
2476} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT;
2477
2478typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT {
2479 UINT NodeIndex; // input
2480 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2481 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2482 BOOL IsSupported; // output
2483 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT CodecSupportLimits; // input/output
2484} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT;
2485
2486typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264 {
2487 UINT MaxL0ReferencesForP;
2488 UINT MaxL0ReferencesForB;
2489 UINT MaxL1ReferencesForB;
2490 UINT MaxLongTermReferences;
2491 UINT MaxDPBCapacity;
2492} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264;
2493
2494typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC {
2495 UINT MaxL0ReferencesForP;
2496 UINT MaxL0ReferencesForB;
2497 UINT MaxL1ReferencesForB;
2498 UINT MaxLongTermReferences;
2499 UINT MaxDPBCapacity;
2500} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC;
2501
2502typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT {
2503 UINT DataSize;
2504 union
2505 {
2506 D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264* pH264Support;
2507 D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC* pHEVCSupport;
2508 D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT* pAV1Support;
2509 };
2510} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT;
2511
2512typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT {
2513 UINT NodeIndex; // input
2514 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2515 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2516 BOOL IsSupported; // output
2517 D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT PictureSupport; // output
2518} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT;
2519
2520typedef enum D3D12_VIDEO_ENCODER_SUPPORT_FLAGS
2521{
2522 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_NONE = 0x0,
2523 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK = 0x1,
2524 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_RECONFIGURATION_AVAILABLE = 0x2,
2525 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE = 0x4,
2526 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_VBV_SIZE_CONFIG_AVAILABLE = 0x8,
2527 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_FRAME_ANALYSIS_AVAILABLE = 0x10,
2528 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RECONSTRUCTED_FRAMES_REQUIRE_TEXTURE_ARRAYS = 0x20,
2529 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_DELTA_QP_AVAILABLE = 0x40,
2530 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE = 0x80,
2531 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_ADJUSTABLE_QP_RANGE_AVAILABLE = 0x100,
2532 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_INITIAL_QP_AVAILABLE = 0x200,
2533 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_MAX_FRAME_SIZE_AVAILABLE = 0x400,
2534 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE = 0x800,
2535 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_MOTION_ESTIMATION_PRECISION_MODE_LIMIT_AVAILABLE = 0x1000,
2536 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_EXTENSION1_SUPPORT = 0x2000,
2537 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_QUALITY_VS_SPEED_AVAILABLE = 0x4000,
2538 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_READABLE_RECONSTRUCTED_PICTURE_LAYOUT_AVAILABLE = 0x8000,
2539 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_PER_BLOCK_QP_MAP_METADATA_AVAILABLE = 0x10000,
2540 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_PER_BLOCK_SATD_MAP_METADATA_AVAILABLE = 0x20000,
2541 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_PER_BLOCK_RC_BIT_ALLOCATION_MAP_METADATA_AVAILABLE = 0x40000,
2542 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_NOTIFICATION_ARRAY_OF_BUFFERS_AVAILABLE = 0x80000,
2543 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_NOTIFICATION_SINGLE_BUFFER_AVAILABLE = 0x100000,
2544 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_FRAME_PSNR_METADATA_AVAILABLE = 0x200000,
2545 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGIONS_PSNR_METADATA_AVAILABLE = 0x400000,
2546 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_SPATIAL_ADAPTIVE_QP_AVAILABLE = 0x800000,
2547} D3D12_VIDEO_ENCODER_SUPPORT_FLAGS;
2548cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS)")
2549
2550typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS
2551{
2552 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_NONE = 0x0,
2553 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x1,
2554 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM = 0x2,
2555 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING = 0x4,
2556 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x8,
2557} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS;
2558cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS)")
2559
2560typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES {
2561 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_DISABLED = 0,
2562 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_TEMPORAL = 1,
2563 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_SPATIAL = 2,
2564} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES;
2565
2566typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264
2567{
2568 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS ConfigurationFlags;
2569 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES DirectModeConfig;
2570 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES DisableDeblockingFilterConfig;
2571} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264;
2572
2573typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS
2574{
2575 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_NONE = 0x0,
2576 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES = 0x1,
2577 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x2,
2578 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER = 0x4,
2579 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES = 0x8,
2580 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION = 0x10,
2581 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING = 0x20,
2582 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x40,
2583 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_ROTATION = 0x80,
2584 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT = 0x100,
2585 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_IMPLICIT_RDPCM = 0x200,
2586 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXPLICIT_RDPCM = 0x400,
2587 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING = 0x800,
2588 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_INTRA_SMOOTHING_DISABLED = 0x1000,
2589 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_HIGH_PRECISION_OFFSETS = 0x2000,
2590 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION = 0x4000,
2591 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT = 0x8000,
2592 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_SEPARATE_COLOUR_PLANE = 0x10000,
2593} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS;
2594cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS)")
2595
2596typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC {
2597 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS ConfigurationFlags;
2598 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize;
2599 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize;
2600 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize;
2601 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize;
2602 UCHAR max_transform_hierarchy_depth_inter;
2603 UCHAR max_transform_hierarchy_depth_intra;
2604} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC;
2605
2606typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION
2607{
2608 UINT DataSize;
2609 union
2610 {
2611 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264* pH264Config;
2612 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC* pHEVCConfig;
2613 D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION* pAV1Config;
2614 };
2615} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION;
2616
2617typedef struct D3D12_VIDEO_ENCODER_INTRA_REFRESH
2618{
2619 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE Mode;
2620 UINT IntraRefreshDuration;
2621} D3D12_VIDEO_ENCODER_INTRA_REFRESH;
2622
2623
2624typedef enum D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE
2625{
2626 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM = 0,
2627 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_FULL_PIXEL = 1,
2628 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_HALF_PIXEL = 2,
2629 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_QUARTER_PIXEL = 3,
2630 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL = 4,
2631} D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE;
2632
2633typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS
2634{
2635 UINT MaxSubregionsNumber;
2636 UINT MaxIntraRefreshFrameDuration;
2637 UINT SubregionBlockPixelsSize;
2638 UINT QPMapRegionPixelsSize;
2639} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS;
2640
2641typedef enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS
2642{
2643 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_NONE = 0x0,
2644 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED = 0x1,
2645 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED = 0x8,
2646 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED = 0x10,
2647 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED = 0x20,
2648 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED = 0x40,
2649 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED = 0x80,
2650 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED = 0x100,
2651 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST = 0x200,
2652 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED = 0x800,
2653 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED = 0x1000,
2654 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000,
2655 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000,
2656 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000,
2657 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_FRAME_ANALYSIS_NOT_SUPPORTED = 0x10000,
2658} D3D12_VIDEO_ENCODER_VALIDATION_FLAGS;
2659cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS)")
2660
2661typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264
2662{
2663 UINT GOPLength;
2664 UINT PPicturePeriod;
2665 UCHAR pic_order_cnt_type;
2666 UCHAR log2_max_frame_num_minus4;
2667 UCHAR log2_max_pic_order_cnt_lsb_minus4;
2668} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264;
2669
2670typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC
2671{
2672 UINT GOPLength;
2673 UINT PPicturePeriod;
2674 UCHAR log2_max_pic_order_cnt_lsb_minus4;
2675} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC;
2676
2677typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE
2678{
2679 UINT DataSize;
2680 union
2681 {
2682 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264* pH264GroupOfPictures;
2683 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC* pHEVCGroupOfPictures;
2684 D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE* pAV1SequenceStructure;
2685 };
2686} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE;
2687
2688typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT
2689{
2690 // input
2691 UINT NodeIndex;
2692 D3D12_VIDEO_ENCODER_CODEC Codec;
2693 DXGI_FORMAT InputFormat;
2694 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
2695 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence;
2696 D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl;
2697 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh;
2698 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding;
2699 UINT ResolutionsListCount;
2700 const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList;
2701 UINT MaxReferenceFramesInDPB;
2702
2703 // single value output
2704 D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags;
2705 D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags;
2706 D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile;
2707 D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel; // assuming max resolution from input list
2708
2709 // resolution dependent output
2710 [annotation("_Field_size_full_(ResolutionsListCount)")] D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS* pResolutionDependentSupport;
2711} D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT;
2712
2713typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES
2714{
2715 // Mutually exclusive options according to selected mode
2716 union
2717 {
2718 // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION
2719 UINT MaxBytesPerSlice;
2720
2721 // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED
2722 UINT NumberOfCodingUnitsPerSlice;
2723
2724 // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION
2725 UINT NumberOfRowsPerSlice;
2726
2727 // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME
2728 UINT NumberOfSlicesPerFrame;
2729 };
2730} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES;
2731
2732typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA
2733{
2734 UINT DataSize;
2735 union
2736 {
2737 const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES* pSlicesPartition_H264;
2738 const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES* pSlicesPartition_HEVC;
2739 const D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES* pTilesPartition_AV1;
2740 };
2741
2742} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA;
2743
2744typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1
2745{
2746 /* Below match existing D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT */
2747 UINT NodeIndex;
2748 D3D12_VIDEO_ENCODER_CODEC Codec;
2749 DXGI_FORMAT InputFormat;
2750 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
2751 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence;
2752 D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl;
2753 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh;
2754 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding;
2755 UINT ResolutionsListCount;
2756 const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList;
2757 UINT MaxReferenceFramesInDPB;
2758 D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags;
2759 D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags;
2760 D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile;
2761 D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel;
2762 [annotation("_Field_size_full_(ResolutionsListCount)")] D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS* pResolutionDependentSupport;
2763
2764 /* Below are new arguments for D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1 */
2765 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData; // input
2766 UINT MaxQualityVsSpeed;
2767} D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1;
2768
2769typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS
2770{
2771 UINT NodeIndex; // input
2772 D3D12_VIDEO_ENCODER_CODEC Codec; // input
2773 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
2774 DXGI_FORMAT InputFormat; // input
2775 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; // input
2776
2777 BOOL IsSupported; // output
2778 UINT CompressedBitstreamBufferAccessAlignment; // output
2779 UINT EncoderMetadataBufferAccessAlignment; // output
2780 UINT MaxEncoderOutputMetadataBufferSize; // output
2781} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS;
2782
2783//
2784// Video Encoder creation API
2785//
2786
2787typedef enum D3D12_VIDEO_ENCODER_FLAGS
2788{
2789 D3D12_VIDEO_ENCODER_FLAG_NONE = 0x0,
2790} D3D12_VIDEO_ENCODER_FLAGS;
2791cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS)")
2792
2793typedef struct D3D12_VIDEO_ENCODER_DESC
2794{
2795 UINT NodeMask;
2796 D3D12_VIDEO_ENCODER_FLAGS Flags;
2797 D3D12_VIDEO_ENCODER_CODEC EncodeCodec;
2798 D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile;
2799 DXGI_FORMAT InputFormat;
2800 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
2801 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE MaxMotionEstimationPrecision;
2802} D3D12_VIDEO_ENCODER_DESC;
2803
2804[uuid(2E0D212D-8DF9-44A6-A770-BB289B182737), object, local, pointer_default(unique)]
2805interface ID3D12VideoEncoder
2806 : ID3D12Pageable
2807{
2808 UINT GetNodeMask();
2809 D3D12_VIDEO_ENCODER_FLAGS GetEncoderFlags();
2810 D3D12_VIDEO_ENCODER_CODEC GetCodec();
2811 HRESULT GetCodecProfile([annotation("_Inout_")] D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile);
2812 HRESULT GetCodecConfiguration([annotation("_Inout_")] D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dstCodecConfig);
2813 DXGI_FORMAT GetInputFormat();
2814 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE GetMaxMotionEstimationPrecision();
2815}
2816
2817[uuid(22B35D96-876A-44C0-B25E-FB8C9C7F1C4A), object, local, pointer_default(unique)]
2818interface ID3D12VideoEncoderHeap
2819 : ID3D12Pageable
2820{
2821 UINT GetNodeMask();
2822 D3D12_VIDEO_ENCODER_HEAP_FLAGS GetEncoderHeapFlags();
2823 D3D12_VIDEO_ENCODER_CODEC GetCodec();
2824 HRESULT GetCodecProfile([annotation("_Inout_")] D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile);
2825 HRESULT GetCodecLevel([annotation("_Inout_")] D3D12_VIDEO_ENCODER_LEVEL_SETTING dstLevel);
2826 UINT GetResolutionListCount();
2827 HRESULT GetResolutionList(
2828 const UINT ResolutionsListCount,
2829 [annotation("_Out_writes_(ResolutionsListCount)")] D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList);
2830}
2831
2832[uuid(4243ADB4-3A32-4666-973C-0CCC5625DC44), object, local, pointer_default(unique)]
2833interface ID3D12VideoDevice3
2834 : ID3D12VideoDevice2
2835{
2836
2837 HRESULT CreateVideoEncoder(
2838 [annotation("_In_")] const D3D12_VIDEO_ENCODER_DESC* pDesc,
2839 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoEncoder,
2840 [annotation("_COM_Outptr_")] void** ppVideoEncoder);
2841
2842 HRESULT CreateVideoEncoderHeap(
2843 [annotation("_In_")] const D3D12_VIDEO_ENCODER_HEAP_DESC* pDesc,
2844 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoEncoderHeap,
2845 [annotation("_COM_Outptr_")] void** ppVideoEncoderHeap);
2846
2847}
2848
2849//
2850// Video Encoder operation API
2851//
2852
2853
2854typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_H264
2855{
2856 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_I_FRAME = 0,
2857 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_P_FRAME = 1,
2858 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_B_FRAME = 2,
2859 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME = 3,
2860} D3D12_VIDEO_ENCODER_FRAME_TYPE_H264;
2861
2862
2863typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264
2864{
2865 UINT ReconstructedPictureResourceIndex;
2866 BOOL IsLongTermReference;
2867 UINT LongTermPictureIdx;
2868 UINT PictureOrderCountNumber;
2869 UINT FrameDecodingOrderNumber;
2870 UINT TemporalLayerIndex;
2871} D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264;
2872
2873typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS
2874{
2875 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_NONE = 0x0,
2876 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1,
2877 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2,
2878} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS;
2879cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS)")
2880
2881typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION
2882{
2883 UCHAR memory_management_control_operation;
2884 UINT difference_of_pic_nums_minus1;
2885 UINT long_term_pic_num;
2886 UINT long_term_frame_idx;
2887 UINT max_long_term_frame_idx_plus1;
2888} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION;
2889
2890typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION
2891{
2892 UCHAR modification_of_pic_nums_idc;
2893 UINT abs_diff_pic_num_minus1;
2894 UINT long_term_pic_num;
2895} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION;
2896
2897typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264
2898{
2899 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags;
2900 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType;
2901 UINT pic_parameter_set_id;
2902 UINT idr_pic_id;
2903 UINT PictureOrderCountNumber;
2904 UINT FrameDecodingOrderNumber;
2905 UINT TemporalLayerIndex;
2906 UINT List0ReferenceFramesCount;
2907 [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames;
2908 UINT List1ReferenceFramesCount;
2909 [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames;
2910 UINT ReferenceFramesReconPictureDescriptorsCount;
2911 [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264* pReferenceFramesReconPictureDescriptors;
2912 UCHAR adaptive_ref_pic_marking_mode_flag;
2913 UINT RefPicMarkingOperationsCommandsCount;
2914 [annotation("_Field_size_full_(RefPicMarkingOperationsCommandsCount)")] D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION* pRefPicMarkingOperationsCommands;
2915 UINT List0RefPicModificationsCount;
2916 [annotation("_Field_size_full_(List0RefPicModificationsCount)")] D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION* pList0RefPicModifications;
2917 UINT List1RefPicModificationsCount;
2918 [annotation("_Field_size_full_(List1RefPicModificationsCount)")] D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION* pList1RefPicModifications;
2919 UINT QPMapValuesCount;
2920 [annotation("_Field_size_full_(QPMapValuesCount)")] INT8 *pRateControlQPMap;
2921} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264;
2922
2923typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC
2924{
2925 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_I_FRAME = 0,
2926 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_P_FRAME = 1,
2927 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME = 2,
2928 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_IDR_FRAME = 3,
2929} D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC;
2930
2931typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC
2932{
2933 UINT ReconstructedPictureResourceIndex;
2934 BOOL IsRefUsedByCurrentPic;
2935 BOOL IsLongTermReference;
2936 UINT PictureOrderCountNumber;
2937 UINT TemporalLayerIndex;
2938} D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC;
2939
2940typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS
2941{
2942 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_NONE = 0x0,
2943 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1,
2944 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2,
2945 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CROSS_COMPONENT_PREDICTION = 0x4,
2946 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CHROMA_QP_OFFSET_LIST = 0x8,
2947} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS;
2948cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS)")
2949
2950typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
2951{
2952 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
2953 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
2954 UINT slice_pic_parameter_set_id;
2955 UINT PictureOrderCountNumber;
2956 UINT TemporalLayerIndex;
2957 UINT List0ReferenceFramesCount;
2958 [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames;
2959 UINT List1ReferenceFramesCount;
2960 [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames;
2961 UINT ReferenceFramesReconPictureDescriptorsCount;
2962 [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* pReferenceFramesReconPictureDescriptors;
2963 UINT List0RefPicModificationsCount;
2964 [annotation("_Field_size_full_(List0RefPicModificationsCount)")] UINT* pList0RefPicModifications;
2965 UINT List1RefPicModificationsCount;
2966 [annotation("_Field_size_full_(List1RefPicModificationsCount)")] UINT* pList1RefPicModifications;
2967 UINT QPMapValuesCount;
2968 [annotation("_Field_size_full_(QPMapValuesCount)")] INT8 *pRateControlQPMap;
2969} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;
2970
2971typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1
2972{
2973 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
2974 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
2975 UINT slice_pic_parameter_set_id;
2976 UINT PictureOrderCountNumber;
2977 UINT TemporalLayerIndex;
2978 UINT List0ReferenceFramesCount;
2979 [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames;
2980 UINT List1ReferenceFramesCount;
2981 [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames;
2982 UINT ReferenceFramesReconPictureDescriptorsCount;
2983 [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* pReferenceFramesReconPictureDescriptors;
2984 UINT List0RefPicModificationsCount;
2985 [annotation("_Field_size_full_(List0RefPicModificationsCount)")] UINT* pList0RefPicModifications;
2986 UINT List1RefPicModificationsCount;
2987 [annotation("_Field_size_full_(List1RefPicModificationsCount)")] UINT* pList1RefPicModifications;
2988 UINT QPMapValuesCount;
2989 [annotation("_Field_size_full_(QPMapValuesCount)")] INT8* pRateControlQPMap;
2990 UCHAR diff_cu_chroma_qp_offset_depth;
2991 UCHAR log2_sao_offset_scale_luma;
2992 UCHAR log2_sao_offset_scale_chroma;
2993 UCHAR log2_max_transform_skip_block_size_minus2;
2994 UCHAR chroma_qp_offset_list_len_minus1;
2995 CHAR cb_qp_offset_list[6];
2996 CHAR cr_qp_offset_list[6];
2997} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1;
2998
2999typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA
3000{
3001 UINT DataSize;
3002 union
3003 {
3004 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264* pH264PicData;
3005 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC* pHEVCPicData;
3006 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1* pHEVCPicData1;
3007 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA* pAV1PicData;
3008 };
3009} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA;
3010
3011typedef struct D3D12_VIDEO_ENCODE_REFERENCE_FRAMES
3012{
3013 UINT NumTexture2Ds;
3014 [annotation("_Field_size_full_(NumTexture2Ds)")] ID3D12Resource** ppTexture2Ds;
3015 [annotation("_Field_size_full_(NumTexture2Ds)")] UINT* pSubresources;
3016} D3D12_VIDEO_ENCODE_REFERENCE_FRAMES;
3017
3018typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS
3019{
3020 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_NONE = 0x0,
3021 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE = 0x1,
3022 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_ENABLE_QUANTIZATION_MATRIX_INPUT = 0x2,
3023 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_ENABLE_DIRTY_REGIONS_INPUT = 0x4,
3024 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_ENABLE_MOTION_VECTORS_INPUT = 0x8,
3025} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS;
3026cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS)")
3027
3028typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC
3029{
3030 UINT IntraRefreshFrameIndex;
3031 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags;
3032 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA PictureControlCodecData;
3033 D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames;
3034} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC;
3035
3036typedef enum D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS
3037{
3038 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_NONE = 0x0,
3039 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RESOLUTION_CHANGE = 0x1,
3040 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RATE_CONTROL_CHANGE = 0x2,
3041 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_SUBREGION_LAYOUT_CHANGE = 0x4,
3042 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_REQUEST_INTRA_REFRESH = 0x8,
3043 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_GOP_SEQUENCE_CHANGE = 0x10,
3044} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS;
3045cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS)")
3046
3047typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC
3048{
3049 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Flags;
3050 D3D12_VIDEO_ENCODER_INTRA_REFRESH IntraRefreshConfig;
3051 D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl;
3052 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution;
3053 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SelectedLayoutMode;
3054 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA FrameSubregionsLayoutData;
3055 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence;
3056} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC;
3057
3058//
3059// Video Encoder operation commands API
3060//
3061
3062typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS
3063{
3064 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc;
3065 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC PictureControlDesc;
3066 ID3D12Resource *pInputFrame;
3067 UINT InputFrameSubresource;
3068 UINT CurrentFrameBitstreamMetadataSize;
3069} D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS;
3070
3071typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM
3072{
3073 ID3D12Resource* pBuffer;
3074 UINT64 FrameStartOffset;
3075} D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM;
3076
3077typedef struct D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE
3078{
3079 ID3D12Resource *pReconstructedPicture;
3080 UINT ReconstructedPictureSubresource;
3081} D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE;
3082
3083typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA
3084{
3085 UINT64 bSize;
3086 UINT64 bStartOffset;
3087 UINT64 bHeaderSize;
3088} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA;
3089
3090typedef enum D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS
3091{
3092 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_NO_ERROR = 0x0,
3093 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_CODEC_PICTURE_CONTROL_NOT_SUPPORTED = 0x1,
3094 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_SUBREGION_LAYOUT_CONFIGURATION_NOT_SUPPORTED = 0x2,
3095 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_REFERENCE_PICTURES = 0x4,
3096 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_RECONFIGURATION_REQUEST_NOT_SUPPORTED = 0x8,
3097 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_METADATA_BUFFER_SOURCE = 0x10,
3098} D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS;
3099cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS)")
3100
3101typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
3102{
3103 UINT64 AverageQP;
3104 UINT64 IntraCodingUnitsCount;
3105 UINT64 InterCodingUnitsCount;
3106 UINT64 SkipCodingUnitsCount;
3107 UINT64 AverageMotionEstimationXDirection;
3108 UINT64 AverageMotionEstimationYDirection;
3109} D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS;
3110
3111typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA
3112{
3113 UINT64 EncodeErrorFlags; // D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS
3114 D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats;
3115 UINT64 EncodedBitstreamWrittenBytesCount;
3116 UINT64 WrittenSubregionsCount;
3117} D3D12_VIDEO_ENCODER_OUTPUT_METADATA;
3118
3119typedef struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
3120{
3121 ID3D12Resource* pBuffer;
3122 UINT64 Offset;
3123} D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER;
3124
3125typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
3126{
3127 D3D12_VIDEO_ENCODER_CODEC EncoderCodec;
3128 D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile;
3129 DXGI_FORMAT EncoderInputFormat;
3130 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution;
3131 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata;
3132} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS;
3133
3134typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS
3135{
3136 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata;
3137} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS;
3138
3139typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS
3140{
3141 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM Bitstream;
3142 D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture;
3143 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata;
3144} D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS;
3145
3146[uuid(895491e2-e701-46a9-9a1f-8d3480ed867a), object, local, pointer_default(unique)]
3147interface ID3D12VideoEncodeCommandList2
3148 : ID3D12VideoEncodeCommandList1
3149{
3150 void EncodeFrame(
3151 [annotation("_In_")] ID3D12VideoEncoder* pEncoder,
3152 [annotation("_In_")] ID3D12VideoEncoderHeap *pHeap,
3153 [annotation("_In_")] const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *pInputArguments,
3154 [annotation("_In_")] const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *pOutputArguments);
3155
3156 void ResolveEncoderOutputMetadata(
3157 [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS* pInputArguments,
3158 [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS* pOutputArguments);
3159}
3160
3161
3162[uuid(7f027b22-1515-4e85-aa0d-026486580576), object, local, pointer_default(unique)]
3163interface ID3D12VideoEncodeCommandList3
3164 : ID3D12VideoEncodeCommandList2
3165{
3166
3167 void Barrier(
3168 UINT32 NumBarrierGroups,
3169 [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups
3170 );
3171}
3172
3173
3174
3175typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC1
3176{
3177 UINT NodeMask;
3178 D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags;
3179 D3D12_VIDEO_ENCODER_CODEC EncodeCodec;
3180 D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile;
3181 D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel;
3182 UINT ResolutionsListCount;
3183 [annotation("_Field_size_full_(ResolutionsListCount)")] const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList;
3184 UINT Pow2DownscaleFactor;
3185} D3D12_VIDEO_ENCODER_HEAP_DESC1;
3186
3187[uuid(ea8f1968-4aa0-43a4-9d30-ba86ec84d4f9), object, local, pointer_default(unique)]
3188interface ID3D12VideoEncoderHeap1
3189 : ID3D12VideoEncoderHeap
3190{
3191 UINT GetPow2DownscaleFactor();
3192}
3193
3194[uuid(e59ad09e-f1ae-42bb-8983-9f6e5586c4eb), object, local, pointer_default(unique)]
3195interface ID3D12VideoDevice4
3196 : ID3D12VideoDevice3
3197{
3198 HRESULT CreateVideoEncoderHeap1(
3199 [annotation("_In_")] const D3D12_VIDEO_ENCODER_HEAP_DESC1* pDesc,
3200 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoEncoderHeap1,
3201 [annotation("_COM_Outptr_")] void** ppVideoEncoderHeap);
3202
3203}
3204
3205typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE1 {
3206 D3D12_VIDEO_ENCODER_HEAP_DESC1 HeapDesc; // input
3207 BOOL IsSupported; // output
3208 UINT64 MemoryPoolL0Size; // output
3209 UINT64 MemoryPoolL1Size; // output
3210} D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE1;
3211
3212typedef enum D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS
3213{
3214 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_NONE = 0x0,
3215 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_QP_MAP = 0x1,
3216 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_SATD_MAP = 0x2,
3217 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_RC_BIT_ALLOCATION_MAP = 0x4,
3218 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_FRAME_PSNR = 0x8,
3219 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_SUBREGIONS_PSNR = 0x10,
3220} D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS;
3221cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS )")
3222
3223// Binary back-compat with D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS
3224typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS1
3225{
3226 UINT NodeIndex; // input
3227 D3D12_VIDEO_ENCODER_CODEC Codec; // input
3228 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input
3229 DXGI_FORMAT InputFormat; // input
3230 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; // input
3231
3232 BOOL IsSupported; // output
3233 UINT CompressedBitstreamBufferAccessAlignment; // output
3234 UINT EncoderMetadataBufferAccessAlignment; // output
3235 UINT MaxEncoderOutputMetadataBufferSize; // output
3236 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS OptionalMetadata; // input
3237 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; // input
3238 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncoderOutputMetadataQPMapTextureDimensions; // output
3239 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncoderOutputMetadataSATDMapTextureDimensions; // output
3240 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncoderOutputMetadataBitAllocationMapTextureDimensions; // output
3241 UINT EncoderOutputMetadataFramePSNRComponentsNumber; // output
3242 UINT EncoderOutputMetadataSubregionsPSNRComponentsNumber; // output
3243 UINT EncoderOutputMetadataSubregionsPSNRResolvedMetadataBufferSize; // output
3244} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS1;
3245
3246typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_PSNR_RESOLVED_LAYOUT
3247{
3248 float PSNRY;
3249 float PSNRU;
3250 float PSNRV;
3251} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_PSNR_RESOLVED_LAYOUT;
3252
3253typedef enum D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE
3254{
3255 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_CPU_BUFFER = 0,
3256 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_GPU_TEXTURE = 1,
3257} D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE;
3258
3259typedef enum D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE
3260{
3261 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE_DIRTY = 0,
3262 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE_SKIP = 1,
3263} D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE;
3264
3265typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO
3266{
3267 D3D12_VIDEO_ENCODER_CODEC Codec;
3268 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile;
3269 D3D12_VIDEO_ENCODER_LEVEL_SETTING Level;
3270 DXGI_FORMAT InputFormat;
3271 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC InputResolution;
3272 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
3273 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding;
3274 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData;
3275} D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO;
3276
3277typedef enum D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE
3278{
3279 D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_QUANTIZATION_MATRIX = 0,
3280 D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_DIRTY_REGIONS = 1,
3281 D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_MOTION_VECTORS = 2,
3282} D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE;
3283
3284typedef enum D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE
3285{
3286 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_FULL_SEARCH = 0,
3287 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_START_HINT = 1,
3288 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_START_HINT_LIMITED_DISTANCE = 2,
3289} D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE;
3290
3291// D3D12_FEATURE_VIDEO_ENCODER_QPMAP_INPUT
3292typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_QPMAP_INPUT
3293{
3294 UINT NodeIndex;
3295 D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo;
3296 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3297 BOOL IsSupported;
3298 UINT MapSourcePreferenceRanking;
3299 UINT BlockSize;
3300} D3D12_FEATURE_DATA_VIDEO_ENCODER_QPMAP_INPUT;
3301
3302typedef enum D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS
3303{
3304 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_NONE = 0x0,
3305 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_REPEAT_FRAME = 0x1,
3306 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_DIRTY_REGIONS = 0x2,
3307 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_DIRTY_REGIONS_REQUIRE_FULL_ROW = 0x4,
3308} D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS;
3309cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS )")
3310
3311// D3D12_FEATURE_VIDEO_ENCODER_DIRTY_REGIONS
3312typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_DIRTY_REGIONS
3313{
3314 UINT NodeIndex;
3315 D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo;
3316 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3317 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType;
3318 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS SupportFlags;
3319 UINT MapSourcePreferenceRanking;
3320} D3D12_FEATURE_DATA_VIDEO_ENCODER_DIRTY_REGIONS;
3321
3322typedef enum D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION
3323{
3324 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_FULL_PIXEL = 0,
3325 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_HALF_PIXEL = 1,
3326 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_QUARTER_PIXEL = 2,
3327} D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION;
3328
3329typedef enum D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS {
3330 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_NONE = 0x0,
3331 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_FULL_PIXEL = (1 << D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_FULL_PIXEL), // 0x1
3332 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_HALF_PIXEL = (1 << D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_HALF_PIXEL), // 0x2
3333 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_QUARTER_PIXEL = (1 << D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_QUARTER_PIXEL), // 0x4
3334} D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS;
3335cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS )")
3336
3337typedef enum D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS
3338{
3339 D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_NONE = 0x0,
3340 D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_SUPPORTED = 0x1,
3341 D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_MULTIPLE_HINTS = 0x2,
3342 D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_GPU_TEXTURE_MULTIPLE_REFERENCES = 0x4,
3343
3344
3345} D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS;
3346cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS )")
3347
3348// D3D12_FEATURE_VIDEO_ENCODER_MOTION_SEARCH
3349typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_MOTION_SEARCH
3350{
3351 UINT NodeIndex;
3352 D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo;
3353 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE MotionSearchMode;
3354 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3355 BOOL BidirectionalRefFrameEnabled;
3356 D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS SupportFlags;
3357 UINT MaxMotionHints;
3358 UINT MinDeviation;
3359 UINT MaxDeviation;
3360 UINT MapSourcePreferenceRanking;
3361 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS MotionUnitPrecisionSupport;
3362} D3D12_FEATURE_DATA_VIDEO_ENCODER_MOTION_SEARCH;
3363
3364// D3D12_FEATURE_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT
3365typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT
3366{
3367 UINT NodeIndex;
3368 D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo;
3369 D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE MapType;
3370 BOOL IsSupported;
3371 UINT64 MaxResolvedBufferAllocationSize;
3372} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT;
3373
3374typedef struct D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION
3375{
3376 BOOL Enabled;
3377 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3378} D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION;
3379
3380typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_QPMAP
3381{
3382 // Reuse existing D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1.QPMapRegionPixelsSize for BlockSize
3383 UINT MapSourcePreferenceRanking;
3384} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_QPMAP;
3385
3386typedef struct D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION
3387{
3388 BOOL Enabled;
3389 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3390 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType;
3391} D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION;
3392
3393typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_DIRTY_REGIONS
3394{
3395 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS DirtyRegionsSupportFlags;
3396 UINT MapSourcePreferenceRanking;
3397} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_DIRTY_REGIONS;
3398
3399typedef struct D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION
3400{
3401 BOOL Enabled;
3402 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3403 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE MotionSearchMode;
3404 BOOL BidirectionalRefFrameEnabled;
3405} D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION;
3406
3407typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_MOTION_SEARCH
3408{
3409 UINT MaxMotionHints;
3410 UINT MinDeviation;
3411 UINT MaxDeviation;
3412 UINT MapSourcePreferenceRanking;
3413 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS MotionUnitPrecisionSupportFlags;
3414 D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS SupportFlags;
3415} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_MOTION_SEARCH;
3416
3417typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS
3418{
3419 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_NONE = 0x0,
3420 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_INTRACODED_FRAME_SUPPORTED = 0x1,
3421 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_UNIDIR_INTER_FRAME_SUPPORTED = 0x2,
3422 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_BIDIR_INTER_FRAME_SUPPORTED = 0x4,
3423 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_EXTERNAL_DPB_DOWNSCALING = 0x8,
3424 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_DYNAMIC_1ST_PASS_SKIP = 0x10,
3425 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_DYNAMIC_DOWNSCALE_FACTOR_CHANGE_KEY_FRAME = 0x20,
3426
3427 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_SUPPORTED =
3428 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_INTRACODED_FRAME_SUPPORTED |
3429 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_UNIDIR_INTER_FRAME_SUPPORTED |
3430 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_BIDIR_INTER_FRAME_SUPPORTED,
3431
3432} D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS;
3433cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS )")
3434
3435// D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS
3436typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS
3437{
3438 UINT NodeIndex;
3439 D3D12_VIDEO_ENCODER_CODEC Codec;
3440 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile;
3441 D3D12_VIDEO_ENCODER_LEVEL_SETTING Level;
3442 DXGI_FORMAT InputFormat;
3443 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC InputResolution;
3444 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
3445 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding;
3446 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData;
3447 D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION QPMap;
3448 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION DirtyRegions;
3449 D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION MotionSearch;
3450 UINT Pow2DownscaleFactor;
3451 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS SupportFlags;
3452} D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS;
3453
3454typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_FRAME_ANALYSIS
3455{
3456 D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS SupportFlags;
3457} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_FRAME_ANALYSIS;
3458
3459typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1
3460{
3461 /* Below match existing D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS */
3462 UINT MaxSubregionsNumber;
3463 UINT MaxIntraRefreshFrameDuration;
3464 UINT SubregionBlockPixelsSize;
3465 UINT QPMapRegionPixelsSize;
3466
3467 /* Below are new arguments for D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1 */
3468 D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_QPMAP QPMap;
3469 D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_DIRTY_REGIONS DirtyRegions;
3470 D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_MOTION_SEARCH MotionSearch;
3471 D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_FRAME_ANALYSIS FrameAnalysis;
3472} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1;
3473
3474typedef struct D3D12_VIDEO_ENCODER_FRAME_ANALYSIS_CONFIGURATION
3475{
3476 BOOL Enabled;
3477 UINT Pow2DownscaleFactor;
3478} D3D12_VIDEO_ENCODER_FRAME_ANALYSIS_CONFIGURATION;
3479
3480// D3D12_FEATURE_VIDEO_ENCODER_SUPPORT2
3481typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT2
3482{
3483 /*
3484 * Below params match existing D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1 binary size
3485 * please note pResolutionDependentSupport type changes from D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS to D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1
3486 */
3487
3488 UINT NodeIndex;
3489 D3D12_VIDEO_ENCODER_CODEC Codec;
3490 DXGI_FORMAT InputFormat;
3491 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
3492 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence;
3493 D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl;
3494 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh;
3495 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding;
3496 UINT ResolutionsListCount;
3497 const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList;
3498 UINT MaxReferenceFramesInDPB;
3499 D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags;
3500 D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags;
3501 D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile;
3502 D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel;
3503 [annotation("_Field_size_full_(ResolutionsListCount)")] D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1* pResolutionDependentSupport;
3504 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData;
3505 UINT MaxQualityVsSpeed;
3506
3507 /* Below are new arguments for D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT2 */
3508 D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION QPMap;
3509 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION DirtyRegions;
3510 D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION MotionSearch;
3511 D3D12_VIDEO_ENCODER_FRAME_ANALYSIS_CONFIGURATION FrameAnalysis;
3512} D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT2;
3513
3514typedef struct D3D12_VIDEO_ENCODER_DIRTY_RECT_INFO
3515{
3516 BOOL FullFrameIdentical;
3517 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType;
3518 UINT NumDirtyRects;
3519 [annotation("_Field_size_full_(NumDirtyRects)")] RECT* pDirtyRects;
3520 UINT SourceDPBFrameReference;
3521} D3D12_VIDEO_ENCODER_DIRTY_RECT_INFO;
3522
3523typedef struct D3D12_VIDEO_ENCODER_DIRTY_REGIONS
3524{
3525 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3526 union
3527 {
3528 // Use with: D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_GPU_TEXTURE
3529 ID3D12Resource* pOpaqueLayoutBuffer;
3530 // Use with: D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_CPU_BUFFER
3531 D3D12_VIDEO_ENCODER_DIRTY_RECT_INFO* pCPUBuffer;
3532 };
3533} D3D12_VIDEO_ENCODER_DIRTY_REGIONS;
3534
3535typedef struct D3D12_VIDEO_ENCODER_QUANTIZATION_OPAQUE_MAP
3536{
3537 ID3D12Resource* pOpaqueQuantizationMap;
3538} D3D12_VIDEO_ENCODER_QUANTIZATION_OPAQUE_MAP;
3539
3540typedef struct D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG
3541{
3542 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE MotionSearchMode;
3543 UINT SearchDeviationLimit;
3544} D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG;
3545
3546typedef struct D3D12_VIDEO_ENCODER_MOVE_RECT
3547{
3548 POINT SourcePoint;
3549 RECT DestRect;
3550} D3D12_VIDEO_ENCODER_MOVE_RECT;
3551
3552typedef enum D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAGS
3553{
3554 D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAG_NONE = 0x0,
3555 D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAG_MULTIPLE_HINTS = 0x1,
3556} D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAGS;
3557
3558typedef struct D3D12_VIDEO_ENCODER_MOVEREGION_INFO
3559{
3560 UINT NumMoveRegions;
3561 [annotation("_Field_size_full_(NumMoveRegions)")] D3D12_VIDEO_ENCODER_MOVE_RECT* pMoveRegions;
3562 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG MotionSearchModeConfiguration;
3563 UINT SourceDPBFrameReference;
3564 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION MotionUnitPrecision;
3565 D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAGS Flags;
3566} D3D12_VIDEO_ENCODER_MOVEREGION_INFO;
3567
3568typedef struct D3D12_VIDEO_ENCODER_FRAME_MOTION_VECTORS
3569{
3570 D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource;
3571 union
3572 {
3573 // Use with: D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_GPU_TEXTURE
3574 ID3D12Resource* pOpaqueLayoutBuffer;
3575 // Use with: D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_CPU_BUFFER
3576 D3D12_VIDEO_ENCODER_MOVEREGION_INFO* pCPUBuffer;
3577 };
3578} D3D12_VIDEO_ENCODER_FRAME_MOTION_VECTORS;
3579
3580typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2
3581{
3582 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
3583 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
3584 UINT slice_pic_parameter_set_id;
3585 UINT PictureOrderCountNumber;
3586 UINT TemporalLayerIndex;
3587 UINT List0ReferenceFramesCount;
3588 [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames;
3589 UINT List1ReferenceFramesCount;
3590 [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames;
3591 UINT ReferenceFramesReconPictureDescriptorsCount;
3592 [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* pReferenceFramesReconPictureDescriptors;
3593 UINT List0RefPicModificationsCount;
3594 [annotation("_Field_size_full_(List0RefPicModificationsCount)")] UINT* pList0RefPicModifications;
3595 UINT List1RefPicModificationsCount;
3596 [annotation("_Field_size_full_(List1RefPicModificationsCount)")] UINT* pList1RefPicModifications;
3597 UINT QPMapValuesCount;
3598 [annotation("_Field_size_full_(QPMapValuesCount)")] INT8* pRateControlQPMap;
3599 UCHAR diff_cu_chroma_qp_offset_depth;
3600 UCHAR log2_sao_offset_scale_luma;
3601 UCHAR log2_sao_offset_scale_chroma;
3602 UCHAR log2_max_transform_skip_block_size_minus2;
3603 UCHAR chroma_qp_offset_list_len_minus1;
3604 CHAR cb_qp_offset_list[6];
3605 CHAR cr_qp_offset_list[6];
3606 UINT num_ref_idx_l0_active_minus1;
3607 UINT num_ref_idx_l1_active_minus1;
3608} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2;
3609
3610typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1
3611{
3612 UINT DataSize;
3613 union
3614 {
3615 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264* pH264PicData;
3616 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2* pHEVCPicData;
3617 D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA* pAV1PicData;
3618 };
3619} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1;
3620
3621typedef struct D3D12_VIDEO_ENCODER_FRAME_ANALYSIS
3622{
3623 ID3D12Resource* pDownscaledFrame;
3624 UINT64 Subresource;
3625 D3D12_VIDEO_ENCODE_REFERENCE_FRAMES DownscaledReferences;
3626} D3D12_VIDEO_ENCODER_FRAME_ANALYSIS;
3627
3628typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC1
3629{
3630 UINT IntraRefreshFrameIndex;
3631 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags;
3632 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1 PictureControlCodecData;
3633 D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames;
3634 D3D12_VIDEO_ENCODER_FRAME_MOTION_VECTORS MotionVectors;
3635 D3D12_VIDEO_ENCODER_DIRTY_REGIONS DirtyRects;
3636 D3D12_VIDEO_ENCODER_QUANTIZATION_OPAQUE_MAP QuantizationTextureMap;
3637 D3D12_VIDEO_ENCODER_FRAME_ANALYSIS FrameAnalysis;
3638} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC1;
3639
3640typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1
3641{
3642 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc;
3643 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC1 PictureControlDesc;
3644 ID3D12Resource* pInputFrame;
3645 UINT InputFrameSubresource;
3646 UINT CurrentFrameBitstreamMetadataSize;
3647 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS OptionalMetadata;
3648} D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1;
3649
3650typedef enum D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE
3651{
3652 D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE_ARRAY_OF_BUFFERS = 0,
3653 D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE_SINGLE_BUFFER = 1,
3654} D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE;
3655
3656typedef struct D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM
3657{
3658 D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE BufferMode;
3659 UINT ExpectedSubregionCount;
3660 UINT64* pSubregionBitstreamsBaseOffsets;
3661 ID3D12Resource** ppSubregionBitstreams;
3662 ID3D12Resource** ppSubregionSizes;
3663 ID3D12Resource** ppSubregionOffsets;
3664 ID3D12Fence** ppSubregionFences;
3665 UINT64* pSubregionFenceValues;
3666} D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM;
3667
3668typedef enum D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE
3669{
3670 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE_FULL_FRAME = 0,
3671 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE_SUBREGIONS = 1,
3672} D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE;
3673
3674typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM1
3675{
3676 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE NotificationMode;
3677 union
3678 {
3679 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM FrameOutputBuffer;
3680 D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM SubregionOutputBuffers;
3681 };
3682} D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM1;
3683
3684typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1
3685{
3686 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM1 Bitstream;
3687 D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture;
3688 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata;
3689 D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE FrameAnalysisReconstructedPicture;
3690} D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1;
3691
3692typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1
3693{
3694 D3D12_VIDEO_ENCODER_CODEC EncoderCodec;
3695 D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile;
3696 DXGI_FORMAT EncoderInputFormat;
3697 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution;
3698 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata;
3699 D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS OptionalMetadata;
3700 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
3701} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1;
3702
3703typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1
3704{
3705 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata;
3706 ID3D12Resource* pOutputQPMap;
3707 ID3D12Resource* pOutputSATDMap;
3708 ID3D12Resource* pOutputBitAllocationMap;
3709 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedFramePSNRData;
3710 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedSubregionsPSNRData;
3711} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1;
3712
3713typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_QUANTIZATION_MATRIX
3714{
3715 ID3D12Resource* pQuantizationMap;
3716} D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_QUANTIZATION_MATRIX;
3717
3718typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_DIRTY_REGIONS
3719{
3720 BOOL FullFrameIdentical;
3721 D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType;
3722 ID3D12Resource* pDirtyRegionsMap;
3723 UINT SourceDPBFrameReference;
3724} D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_DIRTY_REGIONS;
3725
3726typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_MOTION_VECTORS
3727{
3728 D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG MotionSearchModeConfiguration;
3729 UINT NumHintsPerPixel;
3730 [annotation("_Field_size_full_(NumHintsPerPixel)")] ID3D12Resource** ppMotionVectorMaps;
3731 [annotation("_Field_size_full_(NumHintsPerPixel)")] UINT* pMotionVectorMapsSubresources;
3732 [annotation("_Field_size_full_(NumHintsPerPixel)")] ID3D12Resource** ppMotionVectorMapsMetadata;
3733 [annotation("_Field_size_full_(NumHintsPerPixel)")] UINT* pMotionVectorMapsMetadataSubresources;
3734 D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION MotionUnitPrecision;
3735 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1 PictureControlConfiguration;
3736} D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_MOTION_VECTORS;
3737
3738typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA
3739{
3740 D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE MapType;
3741 union
3742 {
3743 // For MapType: D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_QUANTIZATION_MATRIX
3744 D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_QUANTIZATION_MATRIX Quantization;
3745 // For MapType: D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_DIRTY_REGIONS
3746 D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_DIRTY_REGIONS DirtyRegions;
3747 // For MapType: D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_MOTION_VECTORS
3748 D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_MOTION_VECTORS MotionVectors;
3749 };
3750} D3D12_VIDEO_ENCODER_INPUT_MAP_DATA;
3751
3752typedef struct D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS
3753{
3754 D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo;
3755 D3D12_VIDEO_ENCODER_INPUT_MAP_DATA InputData;
3756} D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS;
3757
3758typedef struct D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS
3759{
3760 ID3D12Resource* pOpaqueLayoutBuffer;
3761} D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS;
3762
3763// Change this interface UUID when changing the base class in the inheritance
3764[uuid(69aeb5b7-55f2-4012-8b73-3a88d65a204c), object, local, pointer_default(unique)]
3765interface ID3D12VideoEncodeCommandList4
3766 : ID3D12VideoEncodeCommandList3
3767{
3768 void EncodeFrame1(
3769 [annotation("_In_")] ID3D12VideoEncoder* pEncoder,
3770 [annotation("_In_")] ID3D12VideoEncoderHeap1* pHeap,
3771 [annotation("_In_")] const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1* pInputArguments,
3772 [annotation("_In_")] const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1* pOutputArguments);
3773
3774 void ResolveEncoderOutputMetadata1(
3775 [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1* pInputArguments,
3776 [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1* pOutputArguments);
3777
3778 void ResolveInputParamLayout(
3779 [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS* pInputArguments,
3780 [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS* pOutputArguments);
3781}
3782
3783
3784
3785cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */")
3786#pragma endregion
3787
3788
3789cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoderHeap,0x0946B7C9,0xEBF6,0x4047,0xBB,0x73,0x86,0x83,0xE2,0x7D,0xBB,0x1F);" )
3790cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice,0x1F052807,0x0B46,0x4ACC,0x8A,0x89,0x36,0x4F,0x79,0x37,0x18,0xA4);" )
3791cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoder,0xC59B6BDC,0x7720,0x4074,0xA1,0x36,0x17,0xA1,0x56,0x03,0x74,0x70);" )
3792cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessor,0x304FDB32,0xBEDE,0x410A,0x85,0x45,0x94,0x3A,0xC6,0xA4,0x61,0x38);" )
3793cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList,0x3B60536E,0xAD29,0x4E64,0xA2,0x69,0xF8,0x53,0x83,0x7E,0x5E,0x53);" )
3794cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList,0xAEB2543A,0x167F,0x4682,0xAC,0xC8,0xD1,0x59,0xED,0x4A,0x62,0x09);" )
3795cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList1,0xD52F011B,0xB56E,0x453C,0xA0,0x5A,0xA7,0xF3,0x11,0xC8,0xF4,0x72);" )
3796cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList1,0x542C5C4D,0x7596,0x434F,0x8C,0x93,0x4E,0xFA,0x67,0x66,0xF2,0x67);" )
3797cpp_quote( "DEFINE_GUID(IID_ID3D12VideoMotionEstimator,0x33FDAE0E,0x098B,0x428F,0x87,0xBB,0x34,0xB6,0x95,0xDE,0x08,0xF8);" )
3798cpp_quote( "DEFINE_GUID(IID_ID3D12VideoMotionVectorHeap,0x5BE17987,0x743A,0x4061,0x83,0x4B,0x23,0xD2,0x2D,0xAE,0xA5,0x05);" )
3799cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice1,0x981611AD,0xA144,0x4C83,0x98,0x90,0xF3,0x0E,0x26,0xD6,0x58,0xAB);" )
3800cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList,0x8455293A,0x0CBD,0x4831,0x9B,0x39,0xFB,0xDB,0xAB,0x72,0x47,0x23);" )
3801cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoder1,0x79A2E5FB,0xCCD2,0x469A,0x9F,0xDE,0x19,0x5D,0x10,0x95,0x1F,0x7E);" )
3802cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoderHeap1,0xDA1D98C5,0x539F,0x41B2,0xBF,0x6B,0x11,0x98,0xA0,0x3B,0x6D,0x26);" )
3803cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessor1,0xF3CFE615,0x553F,0x425C,0x86,0xD8,0xEE,0x8C,0x1B,0x1F,0xB0,0x1C);" )
3804cpp_quote( "DEFINE_GUID(IID_ID3D12VideoExtensionCommand,0x554E41E8,0xAE8E,0x4A8C,0xB7,0xD2,0x5B,0x4F,0x27,0x4A,0x30,0xE4);" )
3805cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice2,0xF019AC49,0xF838,0x4A95,0x9B,0x17,0x57,0x94,0x37,0xC8,0xF5,0x13);" )
3806cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList2,0x6e120880,0xc114,0x4153,0x80,0x36,0xd2,0x47,0x05,0x1e,0x17,0x29);" )
3807cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList3,0x2aee8c37,0x9562,0x42da,0x8a,0xbf,0x61,0xef,0xeb,0x2e,0x45,0x13);" )
3808cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList2,0xdb525ae4,0x6ad6,0x473c,0xba,0xa7,0x59,0xb2,0xe3,0x70,0x82,0xe4);" )
3809cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList3,0x1a0a4ca4,0x9f08,0x40ce,0x95,0x58,0xb4,0x11,0xfd,0x26,0x66,0xff);" )
3810cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList1,0x94971eca,0x2bdb,0x4769,0x88,0xcf,0x36,0x75,0xea,0x75,0x7e,0xbc);" )
3811cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncoder,0x2E0D212D,0x8DF9,0x44A6,0xA7,0x70,0xBB,0x28,0x9B,0x18,0x27,0x37);" )
3812cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncoderHeap,0x22B35D96,0x876A,0x44C0,0xB2,0x5E,0xFB,0x8C,0x9C,0x7F,0x1C,0x4A);" )
3813cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice3,0x4243ADB4,0x3A32,0x4666,0x97,0x3C,0x0C,0xCC,0x56,0x25,0xDC,0x44);" )
3814cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList2,0x895491e2,0xe701,0x46a9,0x9a,0x1f,0x8d,0x34,0x80,0xed,0x86,0x7a);" )
3815cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList3,0x7f027b22,0x1515,0x4e85,0xaa,0x0d,0x02,0x64,0x86,0x58,0x05,0x76);" )
3816cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncoderHeap1,0xea8f1968,0x4aa0,0x43a4,0x9d,0x30,0xba,0x86,0xec,0x84,0xd4,0xf9);" )
3817cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice4,0xe59ad09e,0xf1ae,0x42bb,0x89,0x83,0x9f,0x6e,0x55,0x86,0xc4,0xeb);" )
3818cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList4,0x69aeb5b7,0x55f2,0x4012,0x8b,0x73,0x3a,0x88,0xd6,0x5a,0x20,0x4c);" )