aboutsummaryrefslogtreecommitdiff
path: root/contrib/DirectX-Headers/include/directx/d3d12video.idl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/DirectX-Headers/include/directx/d3d12video.idl')
-rw-r--r--contrib/DirectX-Headers/include/directx/d3d12video.idl1448
1 files changed, 1448 insertions, 0 deletions
diff --git a/contrib/DirectX-Headers/include/directx/d3d12video.idl b/contrib/DirectX-Headers/include/directx/d3d12video.idl
new file mode 100644
index 0000000..a4d8945
--- /dev/null
+++ b/contrib/DirectX-Headers/include/directx/d3d12video.idl
@@ -0,0 +1,1448 @@
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
83} D3D12_FEATURE_VIDEO;
84
85typedef enum D3D12_BITSTREAM_ENCRYPTION_TYPE
86{
87 D3D12_BITSTREAM_ENCRYPTION_TYPE_NONE = 0,
88} D3D12_BITSTREAM_ENCRYPTION_TYPE;
89
90typedef struct D3D12_VIDEO_DECODE_CONFIGURATION
91{
92 GUID DecodeProfile;
93 D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption;
94 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType;
95} D3D12_VIDEO_DECODE_CONFIGURATION;
96
97typedef struct D3D12_VIDEO_DECODER_DESC
98{
99 UINT NodeMask;
100 D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
101} D3D12_VIDEO_DECODER_DESC;
102
103typedef struct D3D12_VIDEO_DECODER_HEAP_DESC
104{
105 UINT NodeMask;
106 D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
107 UINT DecodeWidth;
108 UINT DecodeHeight;
109 DXGI_FORMAT Format;
110 DXGI_RATIONAL FrameRate;
111 UINT BitRate;
112 UINT MaxDecodePictureBufferCount;
113} D3D12_VIDEO_DECODER_HEAP_DESC;
114
115typedef struct D3D12_VIDEO_SIZE_RANGE
116{
117 UINT MaxWidth;
118 UINT MaxHeight;
119 UINT MinWidth;
120 UINT MinHeight;
121} D3D12_VIDEO_SIZE_RANGE;
122
123typedef enum D3D12_VIDEO_PROCESS_FILTER
124{
125 D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS = 0,
126 D3D12_VIDEO_PROCESS_FILTER_CONTRAST = 1,
127 D3D12_VIDEO_PROCESS_FILTER_HUE = 2,
128 D3D12_VIDEO_PROCESS_FILTER_SATURATION = 3,
129 D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION = 4,
130 D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT = 5,
131 D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING = 6,
132 D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT = 7,
133} D3D12_VIDEO_PROCESS_FILTER;
134
135typedef enum D3D12_VIDEO_PROCESS_FILTER_FLAGS
136{
137 D3D12_VIDEO_PROCESS_FILTER_FLAG_NONE = 0x0,
138 D3D12_VIDEO_PROCESS_FILTER_FLAG_BRIGHTNESS = (1 << D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS),
139 D3D12_VIDEO_PROCESS_FILTER_FLAG_CONTRAST = (1 << D3D12_VIDEO_PROCESS_FILTER_CONTRAST),
140 D3D12_VIDEO_PROCESS_FILTER_FLAG_HUE = (1 << D3D12_VIDEO_PROCESS_FILTER_HUE),
141 D3D12_VIDEO_PROCESS_FILTER_FLAG_SATURATION = (1 << D3D12_VIDEO_PROCESS_FILTER_SATURATION),
142 D3D12_VIDEO_PROCESS_FILTER_FLAG_NOISE_REDUCTION = (1 << D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION),
143 D3D12_VIDEO_PROCESS_FILTER_FLAG_EDGE_ENHANCEMENT = (1 << D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT),
144 D3D12_VIDEO_PROCESS_FILTER_FLAG_ANAMORPHIC_SCALING = (1 << D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING),
145 D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT = (1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT),
146
147} D3D12_VIDEO_PROCESS_FILTER_FLAGS;
148cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS );")
149
150typedef enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS
151{
152 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_NONE = 0x0,
153 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_BOB = 0x1,
154 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM = 0x80000000,
155
156} D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS;
157cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS );")
158
159typedef struct D3D12_VIDEO_PROCESS_ALPHA_BLENDING
160{
161 BOOL Enable;
162 FLOAT Alpha;
163} D3D12_VIDEO_PROCESS_ALPHA_BLENDING;
164
165typedef struct D3D12_VIDEO_PROCESS_LUMA_KEY
166{
167 BOOL Enable;
168 FLOAT Lower;
169 FLOAT Upper;
170} D3D12_VIDEO_PROCESS_LUMA_KEY;
171
172typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
173{
174 DXGI_FORMAT Format;
175 DXGI_COLOR_SPACE_TYPE ColorSpace;
176 DXGI_RATIONAL SourceAspectRatio;
177 DXGI_RATIONAL DestinationAspectRatio;
178 DXGI_RATIONAL FrameRate;
179 D3D12_VIDEO_SIZE_RANGE SourceSizeRange;
180 D3D12_VIDEO_SIZE_RANGE DestinationSizeRange;
181 BOOL EnableOrientation;
182 D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags;
183 D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat;
184 D3D12_VIDEO_FIELD_TYPE FieldType;
185 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode;
186 BOOL EnableAlphaBlending;
187 D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey;
188 UINT NumPastFrames;
189 UINT NumFutureFrames;
190 BOOL EnableAutoProcessing;
191} D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC;
192
193typedef enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE
194{
195 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_OPAQUE = 0,
196 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_BACKGROUND = 1,
197 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_DESTINATION = 2,
198 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
199} D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE;
200
201typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
202{
203 DXGI_FORMAT Format;
204 DXGI_COLOR_SPACE_TYPE ColorSpace;
205 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode;
206 UINT AlphaFillModeSourceStreamIndex;
207 FLOAT BackgroundColor[4];
208 DXGI_RATIONAL FrameRate;
209 BOOL EnableStereo;
210} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC;
211
212[uuid(0946B7C9-EBF6-4047-BB73-8683E27DBB1F), object, local, pointer_default(unique)]
213interface ID3D12VideoDecoderHeap
214 : ID3D12Pageable
215{
216 D3D12_VIDEO_DECODER_HEAP_DESC GetDesc();
217}
218
219[uuid(1F052807-0B46-4ACC-8A89-364F793718A4), object, local, pointer_default(unique)]
220interface ID3D12VideoDevice
221 : IUnknown
222{
223 HRESULT CheckFeatureSupport(
224 D3D12_FEATURE_VIDEO FeatureVideo,
225 [annotation("_Inout_updates_bytes_(FeatureSupportDataSize)")] void* pFeatureSupportData,
226 UINT FeatureSupportDataSize
227 );
228
229 HRESULT CreateVideoDecoder(
230 [annotation("_In_")] const D3D12_VIDEO_DECODER_DESC* pDesc,
231 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoder,
232 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoder
233 );
234
235 HRESULT CreateVideoDecoderHeap(
236 [annotation("_In_")]const D3D12_VIDEO_DECODER_HEAP_DESC* pVideoDecoderHeapDesc,
237 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoderHeap,
238 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoderHeap
239 );
240
241 HRESULT CreateVideoProcessor(
242 UINT NodeMask,
243 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc,
244 UINT NumInputStreamDescs,
245 [annotation("_In_reads_(NumInputStreamDescs)")]const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs,
246 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoProcessor,
247 [out, iid_is(riid), annotation("_COM_Outptr_")] void **ppVideoProcessor
248 );
249}
250
251[uuid(C59B6BDC-7720-4074-A136-17A156037470), object, local, pointer_default(unique)]
252interface ID3D12VideoDecoder
253 : ID3D12Pageable
254{
255 D3D12_VIDEO_DECODER_DESC GetDesc();
256}
257
258typedef enum D3D12_VIDEO_DECODE_TIER
259{
260 D3D12_VIDEO_DECODE_TIER_NOT_SUPPORTED = 0,
261 D3D12_VIDEO_DECODE_TIER_1 = 1,
262 D3D12_VIDEO_DECODE_TIER_2 = 2,
263 D3D12_VIDEO_DECODE_TIER_3 = 3,
264} D3D12_VIDEO_DECODE_TIER;
265
266typedef enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS
267{
268 D3D12_VIDEO_DECODE_SUPPORT_FLAG_NONE = 0x0,
269 D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED = 0x1,
270
271} D3D12_VIDEO_DECODE_SUPPORT_FLAGS;
272cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS );")
273
274typedef enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS
275{
276 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_NONE = 0x0,
277 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED = 0x1,
278 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_POST_PROCESSING_SUPPORTED = 0x2,
279 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_REFERENCE_ONLY_ALLOCATIONS_REQUIRED = 0x4,
280 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME = 0x8,
281
282} D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS;
283cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS );")
284
285typedef enum D3D12_VIDEO_DECODE_STATUS
286{
287 D3D12_VIDEO_DECODE_STATUS_OK = 0,
288 D3D12_VIDEO_DECODE_STATUS_CONTINUE = 1,
289 D3D12_VIDEO_DECODE_STATUS_CONTINUE_SKIP_DISPLAY = 2,
290 D3D12_VIDEO_DECODE_STATUS_RESTART = 3,
291 D3D12_VIDEO_DECODE_STATUS_RATE_EXCEEDED = 4,
292} D3D12_VIDEO_DECODE_STATUS;
293
294typedef enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE
295{
296 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS = 0,
297 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX = 1,
298 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL = 2,
299 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_MAX_VALID = 3
300} D3D12_VIDEO_DECODE_ARGUMENT_TYPE;
301
302typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT
303{
304 UINT NodeIndex; // input
305 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
306 UINT Width; // input
307 UINT Height; // input
308 DXGI_FORMAT DecodeFormat; // input
309 DXGI_RATIONAL FrameRate; // input
310 UINT BitRate; // input
311 D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags; // output
312 D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags; // output
313 D3D12_VIDEO_DECODE_TIER DecodeTier; // output
314} D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT;
315
316typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT
317{
318 UINT NodeIndex; // input
319 UINT ProfileCount; // output
320} D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT;
321
322typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES
323{
324 UINT NodeIndex; // input
325 UINT ProfileCount; // input
326 [annotation("_Field_size_full_(ProfileCount)")] GUID *pProfiles; // output. The list of supported profiles. The caller allocates storage for the profile list before calling CheckFeatureSupport.
327} D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES;
328
329typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT
330{
331 UINT NodeIndex; // input
332 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
333 UINT FormatCount; // output
334} D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT;
335
336typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS
337{
338 UINT NodeIndex; // input
339 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
340 UINT FormatCount; // input
341 [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.
342} D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS;
343
344typedef struct D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE
345{
346 BOOL IOCoherent;
347} D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE;
348
349typedef enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT
350{
351 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y = 0,
352 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U = 1,
353 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V = 2,
354
355 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R = 0,
356 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G = 1,
357 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B = 2,
358
359 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A = 3,
360} D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT;
361
362typedef enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS
363{
364 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_NONE = 0x0,
365
366 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_Y = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y),
367 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_U = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U),
368 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_V = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V),
369
370 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_R = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R),
371 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_G = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G),
372 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_B = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B),
373
374 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_A = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A),
375} D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS;
376cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS );")
377
378typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM
379{
380 UINT NodeIndex; // in
381 GUID DecodeProfile; // in
382 UINT Width; // in
383 UINT Height; // in
384 DXGI_FORMAT DecodeFormat; // in
385 D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS Components; // out
386 UINT BinCount; // out
387 UINT CounterBitDepth; // out
388} D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM;
389
390typedef enum D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS
391{
392 D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_NONE = 0x0,
393 D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_SUPPORTED = 0x1,
394
395} D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS;
396cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS );")
397
398typedef enum D3D12_VIDEO_SCALE_SUPPORT_FLAGS
399{
400 D3D12_VIDEO_SCALE_SUPPORT_FLAG_NONE = 0x0,
401 D3D12_VIDEO_SCALE_SUPPORT_FLAG_POW2_ONLY = 0x1,
402 D3D12_VIDEO_SCALE_SUPPORT_FLAG_EVEN_DIMENSIONS_ONLY = 0x2,
403
404} D3D12_VIDEO_SCALE_SUPPORT_FLAGS;
405cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_SCALE_SUPPORT_FLAGS );")
406
407typedef struct D3D12_VIDEO_SCALE_SUPPORT
408{
409 D3D12_VIDEO_SIZE_RANGE OutputSizeRange;
410 D3D12_VIDEO_SCALE_SUPPORT_FLAGS Flags;
411} D3D12_VIDEO_SCALE_SUPPORT;
412
413typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT
414{
415 UINT NodeIndex; // input
416 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
417 D3D12_VIDEO_SAMPLE DecodeSample; // input
418 D3D12_VIDEO_FORMAT OutputFormat; // input
419 DXGI_RATIONAL FrameRate; // input
420 UINT BitRate; // input
421 D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS SupportFlags; // output
422 D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; // output
423} D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT;
424
425typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE
426{
427 D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; // input
428 UINT64 MemoryPoolL0Size; // output
429 UINT64 MemoryPoolL1Size; // output
430} D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE;
431
432typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE
433{
434 UINT NodeMask;
435 const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc; // input
436 UINT NumInputStreamDescs; // input
437 const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; // input
438 UINT64 MemoryPoolL0Size; // output
439 UINT64 MemoryPoolL1Size; // output
440} D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE;
441
442typedef struct D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS
443{
444 UINT64 Status; // see D3D12_VIDEO_DECODE_STATUS
445 UINT64 NumMacroblocksAffected;
446 DXGI_RATIONAL FrameRate;
447 UINT BitRate;
448} D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS;
449
450typedef struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT
451{
452 D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type;
453 UINT Size;
454 [annotation("_Field_size_bytes_full_(Size)")] void *pData;
455} D3D12_VIDEO_DECODE_FRAME_ARGUMENT;
456
457typedef struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES
458{
459 UINT NumTexture2Ds;
460 [annotation("_Field_size_full_(NumTexture2Ds)")] ID3D12Resource** ppTexture2Ds;
461 [annotation("_Field_size_full_(NumTexture2Ds)")] UINT* pSubresources;
462 [annotation("_Field_size_full_opt_(NumTexture2Ds)")] ID3D12VideoDecoderHeap** ppHeaps; // If null, assume single decoder heap from input args.
463} D3D12_VIDEO_DECODE_REFERENCE_FRAMES;
464
465typedef struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM
466{
467 ID3D12Resource* pBuffer;
468 UINT64 Offset;
469 UINT64 Size;
470} D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM;
471
472typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS
473{
474 BOOL Enable;
475 ID3D12Resource* pReferenceTexture2D;
476 UINT ReferenceSubresource;
477 DXGI_COLOR_SPACE_TYPE OutputColorSpace;
478 DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
479} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS;
480
481typedef struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
482{
483 UINT NumFrameArguments;
484 D3D12_VIDEO_DECODE_FRAME_ARGUMENT FrameArguments[D3D12_VIDEO_DECODE_MAX_ARGUMENTS];
485 D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames;
486 D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream;
487 ID3D12VideoDecoderHeap *pHeap;
488} D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS;
489
490typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS
491{
492 ID3D12Resource* pOutputTexture2D;
493 UINT OutputSubresource;
494 D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments;
495} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS;
496
497[uuid(304FDB32-BEDE-410A-8545-943AC6A46138), object, local, pointer_default(unique)]
498interface ID3D12VideoProcessor
499 : ID3D12Pageable
500{
501 UINT GetNodeMask();
502 UINT GetNumInputStreamDescs();
503 HRESULT GetInputStreamDescs(UINT NumInputStreamDescs, [annotation("_Out_writes_(NumInputStreamDescs)")] D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs);
504 D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC GetOutputStreamDesc();
505}
506
507typedef enum D3D12_VIDEO_PROCESS_FEATURE_FLAGS
508{
509 D3D12_VIDEO_PROCESS_FEATURE_FLAG_NONE = 0x0,
510 D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_FILL = 0x1,
511 D3D12_VIDEO_PROCESS_FEATURE_FLAG_LUMA_KEY = 0x2,
512 D3D12_VIDEO_PROCESS_FEATURE_FLAG_STEREO = 0x4,
513 D3D12_VIDEO_PROCESS_FEATURE_FLAG_ROTATION = 0x8,
514 D3D12_VIDEO_PROCESS_FEATURE_FLAG_FLIP = 0x10,
515 D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_BLENDING = 0x20,
516 D3D12_VIDEO_PROCESS_FEATURE_FLAG_PIXEL_ASPECT_RATIO = 0x40,
517
518} D3D12_VIDEO_PROCESS_FEATURE_FLAGS;
519cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FEATURE_FLAGS );")
520
521typedef enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS
522{
523 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_NONE = 0x0,
524 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DENOISE = 0x01,
525 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DERINGING = 0x02,
526 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_EDGE_ENHANCEMENT = 0x04,
527 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_COLOR_CORRECTION = 0x08,
528 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_FLESH_TONE_MAPPING = 0x10,
529 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_IMAGE_STABILIZATION = 0x20,
530 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_SUPER_RESOLUTION = 0x40,
531 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_ANAMORPHIC_SCALING = 0x80,
532 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_CUSTOM = 0x80000000,
533
534} D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS;
535cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS );")
536
537typedef enum D3D12_VIDEO_PROCESS_ORIENTATION
538{
539 D3D12_VIDEO_PROCESS_ORIENTATION_DEFAULT = 0,
540 D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_HORIZONTAL = 1,
541 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90 = 2,
542 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90_FLIP_HORIZONTAL = 3,
543 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_180 = 4,
544 D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_VERTICAL = 5,
545 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270 = 6,
546 D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270_FLIP_HORIZONTAL = 7,
547} D3D12_VIDEO_PROCESS_ORIENTATION;
548
549typedef enum D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS
550{
551 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_NONE = 0x0,
552 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_DISCONTINUITY = 0x1,
553 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_REPEAT = 0x2,
554
555} D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS;
556cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS );")
557
558typedef struct D3D12_VIDEO_PROCESS_FILTER_RANGE
559{
560 INT Minimum;
561 INT Maximum;
562 INT Default;
563 FLOAT Multiplier;
564} D3D12_VIDEO_PROCESS_FILTER_RANGE;
565
566typedef enum D3D12_VIDEO_PROCESS_SUPPORT_FLAGS
567{
568 D3D12_VIDEO_PROCESS_SUPPORT_FLAG_NONE = 0x0,
569 D3D12_VIDEO_PROCESS_SUPPORT_FLAG_SUPPORTED = 0x1,
570
571} D3D12_VIDEO_PROCESS_SUPPORT_FLAGS;
572cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_SUPPORT_FLAGS );")
573
574typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT
575{
576 UINT NodeIndex; // input
577 D3D12_VIDEO_SAMPLE InputSample; // input
578 D3D12_VIDEO_FIELD_TYPE InputFieldType; // input
579 D3D12_VIDEO_FRAME_STEREO_FORMAT InputStereoFormat; // input
580 DXGI_RATIONAL InputFrameRate; // input
581 D3D12_VIDEO_FORMAT OutputFormat; // input
582 D3D12_VIDEO_FRAME_STEREO_FORMAT OutputStereoFormat; // input
583 DXGI_RATIONAL OutputFrameRate; // input
584 D3D12_VIDEO_PROCESS_SUPPORT_FLAGS SupportFlags; // output
585 D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; // output
586 D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; // output
587 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceSupport; // output
588 D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS AutoProcessingSupport; // output
589 D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterSupport; // output
590 D3D12_VIDEO_PROCESS_FILTER_RANGE FilterRangeSupport[D3D12_VIDEO_PROCESS_MAX_FILTERS]; // output
591} D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT;
592
593typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS
594{
595 UINT NodeIndex; // input
596 UINT MaxInputStreams; // output
597} D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS;
598
599typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO
600{
601 UINT NodeIndex; // input
602 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode; // input
603 D3D12_VIDEO_PROCESS_FILTER_FLAGS Filters; // input
604 D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; // input
605 DXGI_RATIONAL InputFrameRate; // input
606 DXGI_RATIONAL OutputFrameRate; // input
607 BOOL EnableAutoProcessing; // input
608 UINT PastFrames; // output
609 UINT FutureFrames; // output
610} D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO;
611
612typedef struct D3D12_VIDEO_PROCESS_REFERENCE_SET
613{
614 UINT NumPastFrames;
615 ID3D12Resource **ppPastFrames;
616 UINT *pPastSubresources;
617 UINT NumFutureFrames;
618 ID3D12Resource **ppFutureFrames;
619 UINT *pFutureSubresources;
620} D3D12_VIDEO_PROCESS_REFERENCE_SET;
621
622typedef struct D3D12_VIDEO_PROCESS_TRANSFORM
623{
624 D3D12_RECT SourceRectangle;
625 D3D12_RECT DestinationRectangle;
626 D3D12_VIDEO_PROCESS_ORIENTATION Orientation;
627} D3D12_VIDEO_PROCESS_TRANSFORM;
628
629typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE
630{
631 UINT OutputIndex;
632 UINT InputFrameOrField;
633} D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE;
634
635typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM
636{
637 ID3D12Resource *pTexture2D;
638 UINT Subresource;
639 D3D12_VIDEO_PROCESS_REFERENCE_SET ReferenceSet;
640} D3D12_VIDEO_PROCESS_INPUT_STREAM;
641
642typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS
643{
644 D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS];
645 D3D12_VIDEO_PROCESS_TRANSFORM Transform;
646 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags;
647 D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo;
648 INT FilterLevels[D3D12_VIDEO_PROCESS_MAX_FILTERS];
649 D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending;
650} D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS;
651
652typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM
653{
654 ID3D12Resource* pTexture2D;
655 UINT Subresource;
656} D3D12_VIDEO_PROCESS_OUTPUT_STREAM;
657
658typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS
659{
660 D3D12_VIDEO_PROCESS_OUTPUT_STREAM OutputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS];
661 D3D12_RECT TargetRectangle;
662} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS;
663
664[uuid(3B60536E-AD29-4E64-A269-F853837E5E53), object, local, pointer_default(unique)]
665interface ID3D12VideoDecodeCommandList
666 : ID3D12CommandList
667{
668 HRESULT Close();
669
670 HRESULT Reset(
671 [annotation("_In_")] ID3D12CommandAllocator* pAllocator
672 );
673
674 void ClearState();
675
676 void ResourceBarrier(
677 [annotation("_In_")] UINT NumBarriers,
678 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
679 );
680
681 void DiscardResource(
682 [annotation("_In_")] ID3D12Resource* pResource,
683 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
684 );
685
686 void BeginQuery(
687 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
688 [annotation("_In_")] D3D12_QUERY_TYPE Type,
689 [annotation("_In_")] UINT Index
690 );
691
692 void EndQuery(
693 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
694 [annotation("_In_")] D3D12_QUERY_TYPE Type,
695 [annotation("_In_")] UINT Index
696 );
697
698 void ResolveQueryData(
699 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
700 [annotation("_In_")] D3D12_QUERY_TYPE Type,
701 [annotation("_In_")] UINT StartIndex,
702 [annotation("_In_")] UINT NumQueries,
703 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
704 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
705 );
706
707 void SetPredication(
708 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
709 [annotation("_In_")] UINT64 AlignedBufferOffset,
710 [annotation("_In_")] D3D12_PREDICATION_OP Operation
711 );
712
713 void SetMarker(
714 UINT Metadata,
715 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
716 UINT Size);
717
718 void BeginEvent(
719 UINT Metadata,
720 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
721 UINT Size);
722
723 void EndEvent();
724
725 void DecodeFrame(
726 [annotation("_In_")] ID3D12VideoDecoder* pDecoder,
727 [annotation("_In_")] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments,
728 [annotation("_In_")] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments
729 );
730
731 void WriteBufferImmediate(
732 UINT Count,
733 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
734 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
735 );
736}
737
738[uuid(AEB2543A-167F-4682-ACC8-D159ED4A6209), object, local, pointer_default(unique)]
739interface ID3D12VideoProcessCommandList
740 : ID3D12CommandList
741{
742 HRESULT Close();
743
744 HRESULT Reset(
745 [annotation("_In_")] ID3D12CommandAllocator* pAllocator
746 );
747
748 void ClearState();
749
750 void ResourceBarrier(
751 [annotation("_In_")] UINT NumBarriers,
752 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
753 );
754
755 void DiscardResource(
756 [annotation("_In_")] ID3D12Resource* pResource,
757 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
758 );
759
760 void BeginQuery(
761 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
762 [annotation("_In_")] D3D12_QUERY_TYPE Type,
763 [annotation("_In_")] UINT Index
764 );
765
766 void EndQuery(
767 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
768 [annotation("_In_")] D3D12_QUERY_TYPE Type,
769 [annotation("_In_")] UINT Index
770 );
771
772 void ResolveQueryData(
773 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
774 [annotation("_In_")] D3D12_QUERY_TYPE Type,
775 [annotation("_In_")] UINT StartIndex,
776 [annotation("_In_")] UINT NumQueries,
777 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
778 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
779 );
780
781 void SetPredication(
782 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
783 [annotation("_In_")] UINT64 AlignedBufferOffset,
784 [annotation("_In_")] D3D12_PREDICATION_OP Operation
785 );
786
787 void SetMarker(
788 UINT Metadata,
789 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
790 UINT Size);
791
792 void BeginEvent(
793 UINT Metadata,
794 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
795 UINT Size);
796
797 void EndEvent();
798
799 void ProcessFrames(
800 [annotation("_In_")] ID3D12VideoProcessor* pVideoProcessor,
801 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments,
802 UINT NumInputStreams,
803 [annotation("_In_reads_(NumInputStreams)")] const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments
804 );
805
806 void WriteBufferImmediate(
807 UINT Count,
808 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
809 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
810 );
811}
812
813typedef struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM
814{
815 UINT64 Offset;
816 ID3D12Resource* pBuffer;
817} D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM;
818
819typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1
820{
821 BOOL Enable;
822 ID3D12Resource* pReferenceTexture2D;
823 UINT ReferenceSubresource;
824 DXGI_COLOR_SPACE_TYPE OutputColorSpace;
825 DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
826 UINT OutputWidth;
827 UINT OutputHeight;
828} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1;
829
830typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1
831{
832 ID3D12Resource* pOutputTexture2D;
833 UINT OutputSubresource;
834 D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments;
835 D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM Histograms[D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS];
836} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1;
837
838[uuid(D52F011B-B56E-453C-A05A-A7F311C8F472), object, local, pointer_default(unique)]
839interface ID3D12VideoDecodeCommandList1
840 : ID3D12VideoDecodeCommandList
841{
842 void DecodeFrame1(
843 [annotation("_In_")] ID3D12VideoDecoder* pDecoder,
844 [annotation("_In_")] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments,
845 [annotation("_In_")] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments
846 );
847}
848
849typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1
850{
851 D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS];
852 D3D12_VIDEO_PROCESS_TRANSFORM Transform;
853 D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags;
854 D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo;
855 INT FilterLevels[D3D12_VIDEO_PROCESS_MAX_FILTERS];
856 D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending;
857 D3D12_VIDEO_FIELD_TYPE FieldType;
858} D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1;
859
860[uuid(542C5C4D-7596-434F-8C93-4EFA6766F267), object, local, pointer_default(unique)]
861interface ID3D12VideoProcessCommandList1 : ID3D12VideoProcessCommandList
862{
863 void ProcessFrames1(
864 [annotation("_In_")] ID3D12VideoProcessor* pVideoProcessor,
865 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments,
866 UINT NumInputStreams,
867 [annotation("_In_reads_(NumInputStreams)")] const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments
868 );
869}
870
871typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE
872{
873 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8 = 0,
874 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 = 1,
875} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE;
876
877typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS
878{
879 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_NONE = 0,
880 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_8X8 = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8),
881 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_16X16 = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16),
882
883} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS;
884cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS );" )
885
886typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION
887{
888 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL = 0,
889} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION;
890
891typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS
892{
893 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_NONE = 0,
894 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_QUARTER_PEL = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL),
895
896} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS;
897cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS );" )
898
899// D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT
900typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT
901{
902 UINT NodeIndex; // input
903 BOOL VideoDecodeSupport; // output
904 BOOL VideoProcessSupport; // output
905 BOOL VideoEncodeSupport; // output
906} D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT;
907
908// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR
909typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR
910{
911 UINT NodeIndex; // input
912 DXGI_FORMAT InputFormat; // input
913 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS BlockSizeFlags; // output
914 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS PrecisionFlags; // output
915 D3D12_VIDEO_SIZE_RANGE SizeRange; // output
916} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR;
917
918// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE
919typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE
920{
921 UINT NodeIndex; // input
922 DXGI_FORMAT InputFormat; // input
923 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; // input
924 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; // input
925 D3D12_VIDEO_SIZE_RANGE SizeRange; // input
926 BOOL Protected; // input
927 UINT64 MotionVectorHeapMemoryPoolL0Size; // output
928 UINT64 MotionVectorHeapMemoryPoolL1Size; // output
929 UINT64 MotionEstimatorMemoryPoolL0Size; // output
930 UINT64 MotionEstimatorMemoryPoolL1Size; // output
931} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE;
932
933typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_DESC
934{
935 UINT NodeMask;
936 DXGI_FORMAT InputFormat;
937 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize;
938 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision;
939 D3D12_VIDEO_SIZE_RANGE SizeRange;
940
941} D3D12_VIDEO_MOTION_ESTIMATOR_DESC;
942
943[uuid(33FDAE0E-098B-428F-87BB-34B695DE08F8), object, local, pointer_default(unique)]
944interface ID3D12VideoMotionEstimator
945 : ID3D12Pageable
946{
947 D3D12_VIDEO_MOTION_ESTIMATOR_DESC GetDesc();
948
949 HRESULT GetProtectedResourceSession(
950 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
951 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
952}
953
954typedef struct D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC
955{
956 UINT NodeMask;
957 DXGI_FORMAT InputFormat;
958 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize;
959 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision;
960 D3D12_VIDEO_SIZE_RANGE SizeRange;
961
962} D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC;
963
964[uuid(5BE17987-743A-4061-834B-23D22DAEA505), object, local, pointer_default(unique)]
965interface ID3D12VideoMotionVectorHeap
966 : ID3D12Pageable
967{
968 D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC GetDesc();
969
970 HRESULT GetProtectedResourceSession(
971 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
972 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
973}
974
975[uuid(981611AD-A144-4C83-9890-F30E26D658AB), object, local, pointer_default(unique)]
976interface ID3D12VideoDevice1
977 : ID3D12VideoDevice
978{
979 HRESULT CreateVideoMotionEstimator(
980 [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_DESC* pDesc,
981 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
982 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoMotionEstimator,
983 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoMotionEstimator
984 );
985
986 HRESULT CreateVideoMotionVectorHeap(
987 [annotation("_In_")] const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC* pDesc,
988 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
989 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoMotionVectorHeap,
990 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoMotionVectorHeap
991 );
992}
993
994typedef struct D3D12_RESOURCE_COORDINATE
995{
996 // Coordinate values below index pixels.
997 UINT64 X; // Used for buffer, 1D, 2D, 3D
998 UINT Y; // Used for 2D, 3D
999 UINT Z; // Used for 3D
1000 UINT SubresourceIndex; // indexes into mips, arrays, and planes. Used for 1D, 2D, 3D
1001} D3D12_RESOURCE_COORDINATE;
1002
1003typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT
1004{
1005 ID3D12VideoMotionVectorHeap* pMotionVectorHeap;
1006} D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT;
1007
1008typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_INPUT
1009{
1010 ID3D12Resource* pInputTexture2D;
1011 UINT InputSubresourceIndex;
1012 ID3D12Resource* pReferenceTexture2D;
1013 UINT ReferenceSubresourceIndex;
1014 ID3D12VideoMotionVectorHeap* pHintMotionVectorHeap;
1015} D3D12_VIDEO_MOTION_ESTIMATOR_INPUT;
1016
1017typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT
1018{
1019 ID3D12Resource* pMotionVectorTexture2D;
1020 D3D12_RESOURCE_COORDINATE MotionVectorCoordinate;
1021} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT;
1022
1023typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT
1024{
1025 ID3D12VideoMotionVectorHeap* pMotionVectorHeap;
1026 UINT PixelWidth;
1027 UINT PixelHeight;
1028} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT;
1029
1030[uuid(8455293A-0CBD-4831-9B39-FBDBAB724723), object, local, pointer_default(unique)]
1031interface ID3D12VideoEncodeCommandList
1032 : ID3D12CommandList
1033{
1034 HRESULT Close();
1035
1036 HRESULT Reset(
1037 [annotation("_In_")] ID3D12CommandAllocator* pAllocator
1038 );
1039
1040 void ClearState();
1041
1042 void ResourceBarrier(
1043 [annotation("_In_")] UINT NumBarriers,
1044 [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers
1045 );
1046
1047 void DiscardResource(
1048 [annotation("_In_")] ID3D12Resource* pResource,
1049 [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion
1050 );
1051
1052 void BeginQuery(
1053 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
1054 [annotation("_In_")] D3D12_QUERY_TYPE Type,
1055 [annotation("_In_")] UINT Index
1056 );
1057
1058 void EndQuery(
1059 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
1060 [annotation("_In_")] D3D12_QUERY_TYPE Type,
1061 [annotation("_In_")] UINT Index
1062 );
1063
1064 void ResolveQueryData(
1065 [annotation("_In_")] ID3D12QueryHeap* pQueryHeap,
1066 [annotation("_In_")] D3D12_QUERY_TYPE Type,
1067 [annotation("_In_")] UINT StartIndex,
1068 [annotation("_In_")] UINT NumQueries,
1069 [annotation("_In_")] ID3D12Resource* pDestinationBuffer,
1070 [annotation("_In_")] UINT64 AlignedDestinationBufferOffset
1071 );
1072
1073 void SetPredication(
1074 [annotation("_In_opt_")] ID3D12Resource* pBuffer,
1075 [annotation("_In_")] UINT64 AlignedBufferOffset,
1076 [annotation("_In_")] D3D12_PREDICATION_OP Operation
1077 );
1078
1079 void SetMarker(
1080 UINT Metadata,
1081 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
1082 UINT Size);
1083
1084 void BeginEvent(
1085 UINT Metadata,
1086 [annotation("_In_reads_bytes_opt_(Size)")] const void* pData,
1087 UINT Size);
1088
1089 void EndEvent();
1090
1091 void EstimateMotion(
1092 [annotation("_In_")] ID3D12VideoMotionEstimator* pMotionEstimator,
1093 [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT* pOutputArguments,
1094 [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT* pInputArguments
1095 );
1096
1097 void ResolveMotionVectorHeap(
1098 const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT* pOutputArguments,
1099 const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT* pInputArguments
1100 );
1101
1102 void WriteBufferImmediate(
1103 UINT Count,
1104 [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
1105 [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes
1106 );
1107
1108 void SetProtectedResourceSession(
1109 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
1110 );
1111}
1112
1113typedef enum D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS
1114{
1115 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_NONE = 0x0,
1116 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_SUPPORTED = 0x1,
1117
1118} D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS;
1119cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS );")
1120
1121// D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES
1122typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES
1123{
1124 UINT NodeIndex; // input
1125 D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input
1126 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output
1127} D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES;
1128
1129// D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES
1130typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES
1131{
1132 UINT NodeIndex; // input
1133 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output
1134} D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES;
1135
1136// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES
1137typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES
1138{
1139 UINT NodeIndex; // input
1140 D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output
1141} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES;
1142
1143//D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1
1144typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1
1145{
1146 D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; // input
1147 BOOL Protected; // input
1148 UINT64 MemoryPoolL0Size; // output
1149 UINT64 MemoryPoolL1Size; // output
1150} D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1;
1151
1152// D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1
1153typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1
1154{
1155 UINT NodeMask;
1156 const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc; // input
1157 UINT NumInputStreamDescs; // input
1158 const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; // input
1159 BOOL Protected; // input
1160 UINT64 MemoryPoolL0Size; // output
1161 UINT64 MemoryPoolL1Size; // output
1162} D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1;
1163
1164typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE
1165{
1166 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CREATION = 0,
1167 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1,
1168 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_EXECUTION = 2,
1169 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_INPUT = 3,
1170 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_OUTPUT = 4,
1171 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_INPUT = 5,
1172 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_OUTPUT = 6,
1173} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE;
1174
1175typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE
1176{
1177 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT8 = 0,
1178 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT16 = 1,
1179 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT32 = 2,
1180 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT64 = 3,
1181 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT8 = 4,
1182 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT16 = 5,
1183 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT32 = 6,
1184 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT64 = 7,
1185 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_FLOAT = 8,
1186 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_DOUBLE = 9,
1187 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_RESOURCE = 10,
1188} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE;
1189
1190typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS
1191{
1192 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_NONE = 0x00000000,
1193 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_READ = 0x00000001,
1194 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_WRITE = 0x00000002
1195} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS;
1196
1197cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS );")
1198
1199typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT
1200{
1201 UINT NodeIndex; // in
1202 UINT CommandCount; // out
1203} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT;
1204
1205typedef struct D3D12_VIDEO_EXTENSION_COMMAND_INFO
1206{
1207 GUID CommandId;
1208 LPCWSTR Name;
1209 D3D12_COMMAND_LIST_SUPPORT_FLAGS CommandListSupportFlags;
1210} D3D12_VIDEO_EXTENSION_COMMAND_INFO;
1211
1212typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS
1213{
1214 UINT NodeIndex;
1215 UINT CommandCount;
1216 [annotation("_Field_size_full_(CommandCount)")] D3D12_VIDEO_EXTENSION_COMMAND_INFO* pCommandInfos;
1217} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS;
1218
1219typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT
1220{
1221 GUID CommandId; // in
1222 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; // in
1223 UINT ParameterCount; // out
1224 UINT ParameterPacking; // out
1225} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT;
1226
1227typedef struct D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO
1228{
1229 LPCWSTR Name;
1230 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE Type;
1231 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS Flags;
1232} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO;
1233
1234typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS
1235{
1236 GUID CommandId; // in
1237 D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; // in
1238 UINT ParameterCount; // in
1239 [annotation("_Field_size_full_(ParameterCount)")] D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO* pParameterInfos; // out
1240} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS;
1241
1242typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT
1243{
1244 UINT NodeIndex;
1245 GUID CommandId;
1246 [annotation("_Field_size_bytes_full_opt_(InputDataSizeInBytes)")] const void *pInputData;
1247 SIZE_T InputDataSizeInBytes;
1248 [annotation("_Field_size_bytes_full_opt_(OutputDataSizeInBytes)")] void *pOutputData;
1249 SIZE_T OutputDataSizeInBytes;
1250} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT;
1251
1252typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE
1253{
1254 UINT NodeIndex;
1255 GUID CommandId;
1256 [annotation("_Field_size_bytes_full_(CreationParametersDataSizeInBytes)")] const void* pCreationParameters;
1257 SIZE_T CreationParametersSizeInBytes;
1258 UINT64 MemoryPoolL0Size; // output
1259 UINT64 MemoryPoolL1Size; // output
1260} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE;
1261
1262typedef struct D3D12_VIDEO_EXTENSION_COMMAND_DESC
1263{
1264 UINT NodeMask;
1265 GUID CommandId;
1266} D3D12_VIDEO_EXTENSION_COMMAND_DESC;
1267
1268[uuid(79A2E5FB-CCD2-469A-9FDE-195D10951F7E), object, local, pointer_default(unique)]
1269interface ID3D12VideoDecoder1
1270 : ID3D12VideoDecoder
1271{
1272 HRESULT GetProtectedResourceSession(
1273 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1274 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1275}
1276
1277[uuid(DA1D98C5-539F-41B2-BF6B-1198A03B6D26), object, local, pointer_default(unique)]
1278interface ID3D12VideoDecoderHeap1
1279 : ID3D12VideoDecoderHeap
1280{
1281 HRESULT GetProtectedResourceSession(
1282 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1283 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1284}
1285
1286[uuid(F3CFE615-553F-425C-86D8-EE8C1B1FB01C), object, local, pointer_default(unique)]
1287interface ID3D12VideoProcessor1
1288 : ID3D12VideoProcessor
1289{
1290 HRESULT GetProtectedResourceSession(
1291 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1292 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1293}
1294
1295[uuid(554E41E8-AE8E-4A8C-B7D2-5B4F274A30E4), object, local, pointer_default(unique)]
1296interface ID3D12VideoExtensionCommand
1297 : ID3D12Pageable
1298{
1299 D3D12_VIDEO_EXTENSION_COMMAND_DESC GetDesc();
1300
1301 HRESULT GetProtectedResourceSession(
1302 [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession
1303 [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession);
1304}
1305
1306[uuid(F019AC49-F838-4A95-9B17-579437C8F513), object, local, pointer_default(unique)]
1307interface ID3D12VideoDevice2
1308 : ID3D12VideoDevice1
1309{
1310 HRESULT CreateVideoDecoder1(
1311 [annotation("_In_")] const D3D12_VIDEO_DECODER_DESC* pDesc,
1312 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1313 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoder1,
1314 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoder
1315 );
1316
1317 HRESULT CreateVideoDecoderHeap1(
1318 [annotation("_In_")] const D3D12_VIDEO_DECODER_HEAP_DESC* pVideoDecoderHeapDesc,
1319 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1320 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoderHeap1,
1321 [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoderHeap
1322 );
1323
1324 HRESULT CreateVideoProcessor1(
1325 UINT NodeMask,
1326 [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc,
1327 UINT NumInputStreamDescs,
1328 [annotation("_In_reads_(NumInputStreamDescs)")]const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs,
1329 [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession,
1330 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoProcessor1,
1331 [out, iid_is(riid), annotation("_COM_Outptr_")] void **ppVideoProcessor
1332 );
1333
1334 HRESULT CreateVideoExtensionCommand(
1335 [annotation("_In_")] const D3D12_VIDEO_EXTENSION_COMMAND_DESC* pDesc,
1336 [annotation("_In_reads_bytes_(CreationParametersDataSizeInBytes)")] const void* pCreationParameters,
1337 SIZE_T CreationParametersDataSizeInBytes,
1338 [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedResourceSession,
1339 [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoExtensionCommand,
1340 [annotation("_COM_Outptr_")] void** ppVideoExtensionCommand);
1341
1342 HRESULT ExecuteExtensionCommand(
1343 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1344 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1345 SIZE_T ExecutionParametersSizeInBytes,
1346 [annotation("_Out_writes_bytes_(OutputDataSizeInBytes)")] void *pOutputData,
1347 SIZE_T OutputDataSizeInBytes
1348 );
1349}
1350
1351[uuid(6e120880-c114-4153-8036-d247051e1729), object, local, pointer_default(unique)]
1352interface ID3D12VideoDecodeCommandList2
1353 : ID3D12VideoDecodeCommandList1
1354{
1355 void SetProtectedResourceSession(
1356 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
1357 );
1358
1359 void InitializeExtensionCommand(
1360 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1361 [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters,
1362 SIZE_T InitializationParametersSizeInBytes);
1363
1364 void ExecuteExtensionCommand(
1365 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1366 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1367 SIZE_T ExecutionParametersSizeInBytes);
1368}
1369
1370[uuid(db525ae4-6ad6-473c-baa7-59b2e37082e4), object, local, pointer_default(unique)]
1371interface ID3D12VideoProcessCommandList2
1372 : ID3D12VideoProcessCommandList1
1373{
1374
1375 void SetProtectedResourceSession(
1376 [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession
1377 );
1378
1379 void InitializeExtensionCommand(
1380 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1381 [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters,
1382 SIZE_T InitializationParametersSizeInBytes);
1383
1384 void ExecuteExtensionCommand(
1385 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1386 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1387 SIZE_T ExecutionParametersSizeInBytes);
1388}
1389
1390[uuid(94971eca-2bdb-4769-88cf-3675ea757ebc), object, local, pointer_default(unique)]
1391interface ID3D12VideoEncodeCommandList1
1392 : ID3D12VideoEncodeCommandList
1393{
1394 void InitializeExtensionCommand(
1395 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1396 [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters,
1397 SIZE_T InitializationParametersSizeInBytes);
1398
1399 void ExecuteExtensionCommand(
1400 [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand,
1401 [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters,
1402 SIZE_T ExecutionParametersSizeInBytes);
1403}
1404
1405cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG2, 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9); ")
1406cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG1_AND_MPEG2, 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60); ")
1407cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
1408cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO_PROGRESSIVE, 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d);")
1409cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO, 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52);")
1410cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_MULTIVIEW, 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c);")
1411cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1, 0x1b81beA3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
1412cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1_D2010, 0x1b81beA4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
1413cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_SIMPLE, 0xefd64d74, 0xc9e8,0x41d7,0xa5,0xe9,0xe9,0xb0,0xe3,0x9f,0xa3,0x19);")
1414cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_ADVSIMPLE_NOGMC, 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e);")
1415cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN, 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0);")
1416cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10, 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13);")
1417cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e);")
1418cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2, 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7);")
1419cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP8, 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7);")
1420cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a);")
1421cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08);")
1422cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8);")
1423cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0);")
1424cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8);")
1425
1426cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */")
1427#pragma endregion
1428
1429cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoderHeap,0x0946B7C9,0xEBF6,0x4047,0xBB,0x73,0x86,0x83,0xE2,0x7D,0xBB,0x1F);" )
1430cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice,0x1F052807,0x0B46,0x4ACC,0x8A,0x89,0x36,0x4F,0x79,0x37,0x18,0xA4);" )
1431cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoder,0xC59B6BDC,0x7720,0x4074,0xA1,0x36,0x17,0xA1,0x56,0x03,0x74,0x70);" )
1432cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessor,0x304FDB32,0xBEDE,0x410A,0x85,0x45,0x94,0x3A,0xC6,0xA4,0x61,0x38);" )
1433cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList,0x3B60536E,0xAD29,0x4E64,0xA2,0x69,0xF8,0x53,0x83,0x7E,0x5E,0x53);" )
1434cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList,0xAEB2543A,0x167F,0x4682,0xAC,0xC8,0xD1,0x59,0xED,0x4A,0x62,0x09);" )
1435cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList1,0xD52F011B,0xB56E,0x453C,0xA0,0x5A,0xA7,0xF3,0x11,0xC8,0xF4,0x72);" )
1436cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList1,0x542C5C4D,0x7596,0x434F,0x8C,0x93,0x4E,0xFA,0x67,0x66,0xF2,0x67);" )
1437cpp_quote( "DEFINE_GUID(IID_ID3D12VideoMotionEstimator,0x33FDAE0E,0x098B,0x428F,0x87,0xBB,0x34,0xB6,0x95,0xDE,0x08,0xF8);" )
1438cpp_quote( "DEFINE_GUID(IID_ID3D12VideoMotionVectorHeap,0x5BE17987,0x743A,0x4061,0x83,0x4B,0x23,0xD2,0x2D,0xAE,0xA5,0x05);" )
1439cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice1,0x981611AD,0xA144,0x4C83,0x98,0x90,0xF3,0x0E,0x26,0xD6,0x58,0xAB);" )
1440cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList,0x8455293A,0x0CBD,0x4831,0x9B,0x39,0xFB,0xDB,0xAB,0x72,0x47,0x23);" )
1441cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoder1,0x79A2E5FB,0xCCD2,0x469A,0x9F,0xDE,0x19,0x5D,0x10,0x95,0x1F,0x7E);" )
1442cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoderHeap1,0xDA1D98C5,0x539F,0x41B2,0xBF,0x6B,0x11,0x98,0xA0,0x3B,0x6D,0x26);" )
1443cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessor1,0xF3CFE615,0x553F,0x425C,0x86,0xD8,0xEE,0x8C,0x1B,0x1F,0xB0,0x1C);" )
1444cpp_quote( "DEFINE_GUID(IID_ID3D12VideoExtensionCommand,0x554E41E8,0xAE8E,0x4A8C,0xB7,0xD2,0x5B,0x4F,0x27,0x4A,0x30,0xE4);" )
1445cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice2,0xF019AC49,0xF838,0x4A95,0x9B,0x17,0x57,0x94,0x37,0xC8,0xF5,0x13);" )
1446cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList2,0x6e120880,0xc114,0x4153,0x80,0x36,0xd2,0x47,0x05,0x1e,0x17,0x29);" )
1447cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList2,0xdb525ae4,0x6ad6,0x473c,0xba,0xa7,0x59,0xb2,0xe3,0x70,0x82,0xe4);" )
1448cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList1,0x94971eca,0x2bdb,0x4769,0x88,0xcf,0x36,0x75,0xea,0x75,0x7e,0xbc);" )