1 module aurora.directx.d3d12.d3d12video;
2 
3 public import aurora.directx.com;
4 public import aurora.directx.dxgi.dxgicommon;
5 public import aurora.directx.d3d12.d3d12;
6 
7 public:
8 
9 ///
10 /// Constants
11 ///
12 
13 ///
14 /// Functions
15 ///
16 
17 ///
18 /// Enumerations
19 ///
20 
21 enum D3D12_VIDEO_FIELD_TYPE
22 {
23     D3D12_VIDEO_FIELD_TYPE_NONE	= 0,
24     D3D12_VIDEO_FIELD_TYPE_INTERLACED_TOP_FIELD_FIRST	= 1,
25     D3D12_VIDEO_FIELD_TYPE_INTERLACED_BOTTOM_FIELD_FIRST	= 2
26 }
27 
28 enum D3D12_VIDEO_FRAME_STEREO_FORMAT
29 {
30     NONE	= 0,
31     MONO	= 1,
32     HORIZONTAL	= 2,
33     VERTICAL	= 3,
34     SEPARATE	= 4
35 }
36 
37 enum D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE
38 {
39     NONE	= 0,
40     FIELD_BASED	= 1
41 }
42 
43 enum D3D12_FEATURE_VIDEO
44 {
45     DECODE_SUPPORT	= 0,
46     DECODE_PROFILES	= 1,
47     DECODE_FORMATS	= 2,
48     DECODE_CONVERSION_SUPPORT	= 3,
49     PROCESS_SUPPORT	= 5,
50     PROCESS_MAX_INPUT_STREAMS	= 6,
51     PROCESS_REFERENCE_INFO	= 7,
52     DECODER_HEAP_SIZE	= 8,
53     PROCESSOR_SIZE	= 9,
54     DECODE_PROFILE_COUNT	= 10,
55     DECODE_FORMAT_COUNT	= 11,
56     ARCHITECTURE	= 17
57 }
58 
59 enum D3D12_BITSTREAM_ENCRYPTION_TYPE
60 {
61     NONE	= 0
62 }
63 
64 enum D3D12_VIDEO_PROCESS_FILTER
65 {
66     BRIGHTNESS	= 0,
67     CONTRAST	= 1,
68     HUE	= 2,
69     SATURATION	= 3,
70     NOISE_REDUCTION	= 4,
71     EDGE_ENHANCEMENT	= 5,
72     ANAMORPHIC_SCALING	= 6,
73     STEREO_ADJUSTMENT	= 7
74 }
75 
76 enum D3D12_VIDEO_PROCESS_FILTER_FLAGS
77 {
78     RANGE_UINT64NONE	= 0,
79     RANGE_UINT64BRIGHTNESS	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.BRIGHTNESS ) ,
80     RANGE_UINT64CONTRAST	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.CONTRAST ) ,
81     RANGE_UINT64HUE	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.HUE ) ,
82     RANGE_UINT64SATURATION	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.SATURATION ) ,
83     RANGE_UINT64NOISE_REDUCTION	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.NOISE_REDUCTION ) ,
84     RANGE_UINT64EDGE_ENHANCEMENT	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.EDGE_ENHANCEMENT ) ,
85     RANGE_UINT64ANAMORPHIC_SCALING	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.ANAMORPHIC_SCALING ) ,
86     RANGE_UINT64STEREO_ADJUSTMENT	= ( 1 << D3D12_VIDEO_PROCESS_FILTER.STEREO_ADJUSTMENT ) 
87 }
88 
89 enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS
90 {
91     NONE	= 0,
92     BOB	= 0x1,
93     CUSTOM	= 0x80000000
94 }
95 
96 enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE
97 {
98     OPAQUE	= 0,
99     BACKGROUND	= 1,
100     DESTINATION	= 2,
101     SOURCE_STREAM	= 3
102 }
103 
104 enum D3D12_VIDEO_DECODE_TIER
105 {
106     TIER_NOT_SUPPORTED	= 0,
107     TIER_1	= 1,
108     TIER_2	= 2,
109     TIER_3	= 3
110 }
111 
112 enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS
113 {
114     NONE	= 0,
115     SUPPORTED	= 0x1
116 }
117 
118 enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS
119 {
120     NONE	= 0,
121     HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED	= 0x1,
122     POST_PROCESSING_SUPPORTED	= 0x2,
123     REFERENCE_ONLY_ALLOCATIONS_REQUIRED	= 0x4,
124     ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME	= 0x8
125 }
126 
127 enum D3D12_VIDEO_DECODE_STATUS
128 {
129     OK	= 0,
130     CONTINUE	= 1,
131     CONTINUE_SKIP_DISPLAY	= 2,
132     RESTART	= 3
133 }
134 
135 enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE
136 {
137     PICTURE_PARAMETERS	= 0,
138     INVERSE_QUANTIZATION_MATRIX	= 1,
139     SLICE_CONTROL	= 2,
140     MAX_VALID	= 3
141 }
142 
143 enum D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS
144 {
145     NONE	= 0,
146     SUPPORTED	= 0x1
147 }
148 
149 enum D3D12_VIDEO_SCALE_SUPPORT_FLAGS
150 {
151     NONE	= 0,
152     POW2_ONLY	= 0x1,
153     EVEN_DIMENSIONS_ONLY	= 0x2
154 }
155 
156 enum D3D12_VIDEO_PROCESS_FEATURE_FLAGS
157 {
158     NONE	= 0,
159     ALPHA_FILL	= 0x1,
160     LUMA_KEY	= 0x2,
161     STEREO	= 0x4,
162     ROTATION	= 0x8,
163     FLIP	= 0x10,
164     ALPHA_BLENDING	= 0x20,
165     PIXEL_ASPECT_RATIO	= 0x40
166 }
167 
168 enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS
169 {
170     NONE	= 0,
171     DENOISE	= 0x1,
172     DERINGING	= 0x2,
173     EDGE_ENHANCEMENT	= 0x4,
174     COLOR_CORRECTION	= 0x8,
175     FLESH_TONE_MAPPING	= 0x10,
176     IMAGE_STABILIZATION	= 0x20,
177     SUPER_RESOLUTION	= 0x40,
178     ANAMORPHIC_SCALING	= 0x80,
179     CUSTOM	= 0x80000000
180 }
181 
182 enum D3D12_VIDEO_PROCESS_ORIENTATION
183 {
184     DEFAULT	= 0,
185     FLIP_HORIZONTAL	= 1,
186     CLOCKWISE_90	= 2,
187     CLOCKWISE_90_FLIP_HORIZONTAL	= 3,
188     CLOCKWISE_180	= 4,
189     FLIP_VERTICAL	= 5,
190     CLOCKWISE_270	= 6,
191     CLOCKWISE_270_FLIP_HORIZONTAL	= 7
192 }
193 
194 enum D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS
195 {
196     NONE	= 0,
197     FRAME_DISCONTINUITY	= 0x1,
198     D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_REPEAT	= 0x2
199 }
200 
201 enum D3D12_VIDEO_PROCESS_SUPPORT_FLAGS
202 {
203     NONE	= 0,
204     SUPPORTED	= 0x1
205 }
206 
207 ///
208 /// Structures
209 ///
210 
211 struct D3D12_VIDEO_FORMAT
212 {
213     DXGI_FORMAT Format;
214     DXGI_COLOR_SPACE_TYPE ColorSpace;
215 }
216 
217 struct D3D12_VIDEO_SAMPLE
218 {
219     uint Width;
220     uint Height;
221     D3D12_VIDEO_FORMAT Format;
222 }
223 
224 struct D3D12_VIDEO_DECODE_CONFIGURATION
225 {
226     GUID DecodeProfile;
227     D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption;
228     D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType;
229 }
230 
231 struct D3D12_VIDEO_DECODER_DESC
232 {
233     uint NodeMask;
234     D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
235 }
236 
237 struct D3D12_VIDEO_DECODER_HEAP_DESC
238 {
239     uint NodeMask;
240     D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
241     uint DecodeWidth;
242     uint DecodeHeight;
243     DXGI_FORMAT Format;
244     DXGI_RATIONAL FrameRate;
245     uint BitRate;
246     uint MaxDecodePictureBufferCount;
247 }
248 
249 struct D3D12_VIDEO_SIZE_RANGE
250 {
251     uint MaxWidth;
252     uint MaxHeight;
253     uint MinWidth;
254     uint MinHeight;
255 }
256 
257 struct D3D12_VIDEO_PROCESS_ALPHA_BLENDING
258 {
259     bool Enable;
260     float Alpha;
261 }
262 
263 struct D3D12_VIDEO_PROCESS_LUMA_KEY
264 {
265     bool Enable;
266     float Lower;
267     float Upper;
268 }
269 
270 struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
271 {
272     DXGI_FORMAT Format;
273     DXGI_COLOR_SPACE_TYPE ColorSpace;
274     DXGI_RATIONAL SourceAspectRatio;
275     DXGI_RATIONAL DestinationAspectRatio;
276     DXGI_RATIONAL FrameRate;
277     D3D12_VIDEO_SIZE_RANGE SourceSizeRange;
278     D3D12_VIDEO_SIZE_RANGE DestinationSizeRange;
279     bool EnableOrientation;
280     D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags;
281     D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat;
282     D3D12_VIDEO_FIELD_TYPE FieldType;
283     D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode;
284     bool EnableAlphaBlending;
285     D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey;
286     uint NumPastFrames;
287     uint NumFutureFrames;
288     bool EnableAutoProcessing;
289 }
290 
291 struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
292 {
293     DXGI_FORMAT Format;
294     DXGI_COLOR_SPACE_TYPE ColorSpace;
295     D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode;
296     uint AlphaFillModeSourceStreamIndex;
297     float[4] BackgroundColor;
298     DXGI_RATIONAL FrameRate;
299     bool EnableStereo;
300 }
301 
302 struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT
303 {
304     uint NodeIndex;
305     D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
306     uint Width;
307     uint Height;
308     DXGI_FORMAT DecodeFormat;
309     DXGI_RATIONAL FrameRate;
310     uint BitRate;
311     D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags;
312     D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags;
313     D3D12_VIDEO_DECODE_TIER DecodeTier;
314 }
315 
316 struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT
317 {
318     uint NodeIndex;
319     uint ProfileCount;
320 }
321 
322 struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES
323 {
324     uint NodeIndex;
325     uint ProfileCount;
326     GUID *pProfiles;
327 }
328 
329 struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT
330 {
331     uint NodeIndex;
332     D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
333     uint FormatCount;
334 }
335 
336 struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS
337 {
338     uint NodeIndex;
339     D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
340     uint FormatCount;
341     DXGI_FORMAT *pOutputFormats;
342 }
343 
344 struct D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE
345 {
346     bool IOCoherent;
347 }
348 
349 struct D3D12_VIDEO_SCALE_SUPPORT
350 {
351     D3D12_VIDEO_SIZE_RANGE OutputSizeRange;
352     D3D12_VIDEO_SCALE_SUPPORT_FLAGS Flags;
353 }
354 
355 struct D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT
356 {
357     uint NodeIndex;
358     D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
359     D3D12_VIDEO_SAMPLE DecodeSample;
360     D3D12_VIDEO_FORMAT OutputFormat;
361     DXGI_RATIONAL FrameRate;
362     uint BitRate;
363     D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS SupportFlags;
364     D3D12_VIDEO_SCALE_SUPPORT ScaleSupport;
365 }
366 
367 struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE
368 {
369     D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc;
370     ulong MemoryPoolL0Size;
371     ulong MemoryPoolL1Size;
372 }
373 
374 struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE
375 {
376     uint NodeMask;
377     const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc;
378     uint NumInputStreamDescs;
379     const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs;
380     ulong MemoryPoolL0Size;
381     ulong MemoryPoolL1Size;
382 }
383 
384 struct D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS
385 {
386     ulong Status;
387     ulong NumMacroblocksAffected;
388     DXGI_RATIONAL FrameRate;
389     uint BitRate;
390 }
391 
392 struct D3D12_VIDEO_DECODE_SUB_SAMPLE_MAPPING_BLOCK
393 {
394     uint ClearSize;
395     uint EncryptedSize;
396 }
397 
398 struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT
399 {
400     D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type;
401     uint Size;
402     void *pData;
403 }
404 
405 struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES
406 {
407     uint NumTexture2Ds;
408     ID3D12Resource *ppTexture2Ds;
409     uint *pSubresources;
410     ID3D12VideoDecoderHeap *ppHeaps;
411 }
412 
413 struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM
414 {
415     ID3D12Resource pBuffer;
416     ulong Offset;
417     ulong Size;
418 }
419 
420 struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS
421 {
422     bool Enable;
423     ID3D12Resource pReferenceTexture2D;
424     uint ReferenceSubresource;
425     DXGI_COLOR_SPACE_TYPE OutputColorSpace;
426     DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
427 }
428 
429 struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
430 {
431     uint NumFrameArguments;
432     D3D12_VIDEO_DECODE_FRAME_ARGUMENT[10] FrameArguments;
433     D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames;
434     D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream;
435     ID3D12VideoDecoderHeap pHeap;
436 }
437 
438 struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS
439 {
440     ID3D12Resource pOutputTexture2D;
441     uint OutputSubresource;
442     D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments;
443 }
444 
445 struct D3D12_VIDEO_PROCESS_FILTER_RANGE
446 {
447     int Minimum;
448     int Maximum;
449     int Default;
450     float Multiplier;
451 }
452 
453 struct D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT
454 {
455     uint NodeIndex;
456     D3D12_VIDEO_SAMPLE InputSample;
457     D3D12_VIDEO_FIELD_TYPE InputFieldType;
458     D3D12_VIDEO_FRAME_STEREO_FORMAT InputStereoFormat;
459     DXGI_RATIONAL InputFrameRate;
460     D3D12_VIDEO_FORMAT OutputFormat;
461     D3D12_VIDEO_FRAME_STEREO_FORMAT OutputStereoFormat;
462     DXGI_RATIONAL OutputFrameRate;
463     D3D12_VIDEO_PROCESS_SUPPORT_FLAGS SupportFlags;
464     D3D12_VIDEO_SCALE_SUPPORT ScaleSupport;
465     D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport;
466     D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceSupport;
467     D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS AutoProcessingSupport;
468     D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterSupport;
469     D3D12_VIDEO_PROCESS_FILTER_RANGE[32] FilterRangeSupport;
470 }
471 
472 struct D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS
473 {
474     uint NodeIndex;
475     uint MaxInputStreams;
476 }
477 
478 struct D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO
479 {
480     uint NodeIndex;
481     D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode;
482     D3D12_VIDEO_PROCESS_FILTER_FLAGS Filters;
483     D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport;
484     DXGI_RATIONAL InputFrameRate;
485     DXGI_RATIONAL OutputFrameRate;
486     bool EnableAutoProcessing;
487     uint PastFrames;
488     uint FutureFrames;
489 }
490 
491 struct D3D12_VIDEO_PROCESS_REFERENCE_SET
492 {
493     uint NumPastFrames;
494     ID3D12Resource *ppPastFrames;
495     uint *pPastSubresources;
496     uint NumFutureFrames;
497     ID3D12Resource *ppFutureFrames;
498     uint *pFutureSubresources;
499 }
500 
501 struct D3D12_VIDEO_PROCESS_TRANSFORM
502 {
503     D3D12_RECT SourceRectangle;
504     D3D12_RECT DestinationRectangle;
505     D3D12_VIDEO_PROCESS_ORIENTATION Orientation;
506 }
507 
508 struct D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE
509 {
510     uint OutputIndex;
511     uint InputFrameOrField;
512 }
513 
514 struct D3D12_VIDEO_PROCESS_INPUT_STREAM
515 {
516     ID3D12Resource pTexture2D;
517     uint Subresource;
518     D3D12_VIDEO_PROCESS_REFERENCE_SET ReferenceSet;
519 }
520 
521 struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS
522 {
523     D3D12_VIDEO_PROCESS_INPUT_STREAM[2] InputStream;
524     D3D12_VIDEO_PROCESS_TRANSFORM Transform;
525     D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags;
526     D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo;
527     int[32] FilterLevels;
528     D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending;
529 }
530 
531 struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM
532 {
533     ID3D12Resource pTexture2D;
534     uint Subresource;
535 }
536 
537 struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS
538 {
539     D3D12_VIDEO_PROCESS_OUTPUT_STREAM[2] OutputStream;
540     D3D12_RECT TargetRectangle;
541 }
542 
543 ///
544 /// Interfaces
545 ///
546 
547 mixin(uuid!(ID3D12VideoDecoderHeap, "0946B7C9-EBF6-4047-BB73-8683E27DBB1F"));
548 public interface ID3D12VideoDecoderHeap : ID3D12Pageable
549 {
550 extern(Windows):
551     D3D12_VIDEO_DECODER_HEAP_DESC GetDesc();
552 }
553 
554 mixin(uuid!(ID3D12VideoDevice, "1F052807-0B46-4ACC-8A89-364F793718A4"));
555 public interface ID3D12VideoDevice : IUnknown
556 {
557 extern(Windows):
558     HRESULT CheckFeatureSupport(D3D12_FEATURE_VIDEO FeatureVideo, void *pFeatureSupportData, uint FeatureSupportDataSize);
559     HRESULT CreateVideoDecoder(const D3D12_VIDEO_DECODER_DESC *pDesc, REFIID riid, void **ppVideoDecoder);
560     HRESULT CreateVideoDecoderHeap(const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, REFIID riid, void **ppVideoDecoderHeap);
561     HRESULT CreateVideoProcessor(uint NodeMask, const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, uint NumInputStreamDescs, const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, REFIID riid, void **ppVideoProcessor);
562 }
563 
564 mixin(uuid!(ID3D12VideoDecoder, "C59B6BDC-7720-4074-A136-17A156037470"));
565 public interface ID3D12VideoDecoder : ID3D12Pageable
566 {
567 extern(Windows):
568     D3D12_VIDEO_DECODER_DESC GetDesc();
569 }
570 
571 mixin(uuid!(ID3D12VideoProcessor, "304FDB32-BEDE-410A-8545-943AC6A46138"));
572 public interface ID3D12VideoProcessor : ID3D12Pageable
573 {
574 extern(Windows):
575     uint GetNodeMask();
576     uint GetNumInputStreamDescs();
577     HRESULT GetInputStreamDescs(uint NumInputStreamDescs, D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs);
578     D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC GetOutputStreamDesc();
579 }
580 
581 mixin(uuid!(ID3D12VideoDecodeCommandList, "3B60536E-AD29-4E64-A269-F853837E5E53"));
582 public interface ID3D12VideoDecodeCommandList : ID3D12CommandList
583 {
584 extern(Windows):
585     HRESULT Close();
586     HRESULT Reset(ID3D12CommandAllocator pAllocator);
587     void ClearState();
588     void ResourceBarrier( uint NumBarriers, const D3D12_RESOURCE_BARRIER *pBarriers);
589     void DiscardResource(ID3D12Resource pResource, const D3D12_DISCARD_REGION *pRegion);
590     void BeginQuery(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint Index);
591     void EndQuery(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint Index);
592     void ResolveQueryData(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint StartIndex, uint NumQueries, ID3D12Resource pDestinationBuffer, ulong AlignedDestinationBufferOffset);
593     void SetPredication(ID3D12Resource pBuffer, ulong AlignedBufferOffset, D3D12_PREDICATION_OP Operation);
594     void SetMarker(uint Metadata, const void *pData, uint Size);
595     void BeginEvent(uint Metadata, const void *pData, uint Size);
596     void EndEvent();
597     void DecodeFrame(ID3D12VideoDecoder pDecoder, const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments);
598     void WriteBufferImmediate(uint Count, const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
599 }
600 
601 mixin(uuid!(ID3D12VideoProcessCommandList, "AEB2543A-167F-4682-ACC8-D159ED4A6209"));
602 public interface ID3D12VideoProcessCommandList : ID3D12CommandList
603 {
604 extern(Windows):
605     HRESULT Close();
606     HRESULT Reset(ID3D12CommandAllocator pAllocator);
607     void ClearState();
608     void ResourceBarrier(uint NumBarriers, const D3D12_RESOURCE_BARRIER *pBarriers);
609     void DiscardResource(ID3D12Resource pResource, const D3D12_DISCARD_REGION *pRegion);
610     void BeginQuery(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint Index);
611     void EndQuery(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint Index);
612     void ResolveQueryData(ID3D12QueryHeap pQueryHeap, D3D12_QUERY_TYPE Type, uint StartIndex, uint NumQueries, ID3D12Resource pDestinationBuffer, ulong AlignedDestinationBufferOffset);
613     void SetPredication(ID3D12Resource pBuffer, ulong AlignedBufferOffset, D3D12_PREDICATION_OP Operation);
614     void SetMarker(uint Metadata, const void *pData, uint Size);
615     void BeginEvent(uint Metadata, const void *pData, uint Size);
616     void EndEvent();
617     void ProcessFrames(ID3D12VideoProcessor pVideoProcessor, const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, uint NumInputStreams, const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments);
618     void WriteBufferImmediate(uint Count, const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
619 }
620 
621 struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM
622 {
623     ulong Offset;
624     ID3D12Resource pBuffer;
625 }
626 
627 struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1
628 {
629     bool Enable;
630     ID3D12Resource pReferenceTexture2D;
631     uint ReferenceSubresource;
632     DXGI_COLOR_SPACE_TYPE OutputColorSpace;
633     DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
634     uint OutputWidth;
635     uint OutputHeight;
636 }
637 
638 struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1
639 {
640     ID3D12Resource pOutputTexture2D;
641     uint OutputSubresource;
642     D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments;
643     D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM[4] Histograms;
644 }
645 
646 mixin(uuid!(ID3D12VideoDecodeCommandList1, "D52F011B-B56E-453C-A05A-A7F311C8F472"));
647 public interface ID3D12VideoDecodeCommandList1 : ID3D12VideoDecodeCommandList
648 {
649 extern(Windows):
650     void DecodeFrame1(ID3D12VideoDecoder pDecoder, const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments, const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments);
651 }
652 
653 struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1
654 {
655     D3D12_VIDEO_PROCESS_INPUT_STREAM[2] InputStream;
656     D3D12_VIDEO_PROCESS_TRANSFORM Transform;
657     D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags;
658     D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo;
659     int[32] FilterLevels;
660     D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending;
661     D3D12_VIDEO_FIELD_TYPE FieldType;
662 }
663 
664 mixin(uuid!(ID3D12VideoProcessCommandList1, "542C5C4D-7596-434F-8C93-4EFA6766F267"));
665 public interface ID3D12VideoProcessCommandList1 : ID3D12VideoProcessCommandList
666 {
667 extern(Windows):
668     void ProcessFrames1(ID3D12VideoProcessor pVideoProcessor, const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, uint NumInputStreams, const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments);
669 }