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 }