From e9f8647f0f203faf2a686338f4a67491f4e23bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Fri, 11 Jul 2025 20:30:01 +0200 Subject: [PATCH] re-added custom dxva.h --- WickedEngine/Utility/dxva.h | 265 +++++++++++++++++++++++++ WickedEngine/wiGraphicsDevice_DX12.cpp | 3 +- 2 files changed, 266 insertions(+), 2 deletions(-) create mode 100644 WickedEngine/Utility/dxva.h diff --git a/WickedEngine/Utility/dxva.h b/WickedEngine/Utility/dxva.h new file mode 100644 index 000000000..ce002e0d8 --- /dev/null +++ b/WickedEngine/Utility/dxva.h @@ -0,0 +1,265 @@ +#ifndef DXVA_H +#define DXVA_H +// This is a minimal version of dxva.h from the Windows SDK +// It contains only the bare necessary structures for interoping with DirectX Video APIs + +#pragma pack(push, BeforeDXVApacking, 1) + +// H264 (AVC) + +/* H.264/AVC picture entry data structure */ +typedef struct _DXVA_PicEntry_H264 { + union { + struct { + UCHAR Index7Bits : 7; + UCHAR AssociatedFlag : 1; + }; + UCHAR bPicEntry; + }; +} DXVA_PicEntry_H264, * LPDXVA_PicEntry_H264; /* 1 byte */ + +/* H.264/AVC picture parameters structure */ +typedef struct _DXVA_PicParams_H264 { + USHORT wFrameWidthInMbsMinus1; + USHORT wFrameHeightInMbsMinus1; + DXVA_PicEntry_H264 CurrPic; /* flag is bot field flag */ + UCHAR num_ref_frames; + + union { + struct { + USHORT field_pic_flag : 1; + USHORT MbaffFrameFlag : 1; + USHORT residual_colour_transform_flag : 1; + USHORT sp_for_switch_flag : 1; + USHORT chroma_format_idc : 2; + USHORT RefPicFlag : 1; + USHORT constrained_intra_pred_flag : 1; + + USHORT weighted_pred_flag : 1; + USHORT weighted_bipred_idc : 2; + USHORT MbsConsecutiveFlag : 1; + USHORT frame_mbs_only_flag : 1; + USHORT transform_8x8_mode_flag : 1; + USHORT MinLumaBipredSize8x8Flag : 1; + USHORT IntraPicFlag : 1; + }; + USHORT wBitFields; + }; + UCHAR bit_depth_luma_minus8; + UCHAR bit_depth_chroma_minus8; + + USHORT Reserved16Bits; + UINT StatusReportFeedbackNumber; + + DXVA_PicEntry_H264 RefFrameList[16]; /* flag LT */ + INT CurrFieldOrderCnt[2]; + INT FieldOrderCntList[16][2]; + + CHAR pic_init_qs_minus26; + CHAR chroma_qp_index_offset; /* also used for QScb */ + CHAR second_chroma_qp_index_offset; /* also for QScr */ + UCHAR ContinuationFlag; + + /* remainder for parsing */ + CHAR pic_init_qp_minus26; + UCHAR num_ref_idx_l0_active_minus1; + UCHAR num_ref_idx_l1_active_minus1; + UCHAR Reserved8BitsA; + + USHORT FrameNumList[16]; + UINT UsedForReferenceFlags; + USHORT NonExistingFrameFlags; + USHORT frame_num; + + UCHAR log2_max_frame_num_minus4; + UCHAR pic_order_cnt_type; + UCHAR log2_max_pic_order_cnt_lsb_minus4; + UCHAR delta_pic_order_always_zero_flag; + + UCHAR direct_8x8_inference_flag; + UCHAR entropy_coding_mode_flag; + UCHAR pic_order_present_flag; + UCHAR num_slice_groups_minus1; + + UCHAR slice_group_map_type; + UCHAR deblocking_filter_control_present_flag; + UCHAR redundant_pic_cnt_present_flag; + UCHAR Reserved8BitsB; + + USHORT slice_group_change_rate_minus1; + + UCHAR SliceGroupMap[810]; /* 4b/sgmu, Size BT.601 */ + +} DXVA_PicParams_H264, * LPDXVA_PicParams_H264; + +/* H.264/AVC quantization weighting matrix data structure */ +typedef struct _DXVA_Qmatrix_H264 { + UCHAR bScalingLists4x4[6][16]; + UCHAR bScalingLists8x8[2][64]; + +} DXVA_Qmatrix_H264, * LPDXVA_Qmatrix_H264; + +/* H.264/AVC slice control data structure - short form */ +typedef struct _DXVA_Slice_H264_Short { + UINT BSNALunitDataLocation; /* type 1..5 */ + UINT SliceBytesInBuffer; /* for off-host parse */ + USHORT wBadSliceChopping; /* for off-host parse */ +} DXVA_Slice_H264_Short, * LPDXVA_Slice_H264_Short; + + + + +// H265 (HEVC) + +/* HEVC Picture Entry structure */ +typedef struct _DXVA_PicEntry_HEVC +{ + union + { + struct + { + UCHAR Index7Bits : 7; + UCHAR AssociatedFlag : 1; + }; + UCHAR bPicEntry; + }; +} DXVA_PicEntry_HEVC, * LPDXVA_PicEntry_HEVC; + +/* HEVC Picture Parameter structure */ +typedef struct _DXVA_PicParams_HEVC { + USHORT PicWidthInMinCbsY; + USHORT PicHeightInMinCbsY; + union { + struct { + USHORT chroma_format_idc : 2; + USHORT separate_colour_plane_flag : 1; + USHORT bit_depth_luma_minus8 : 3; + USHORT bit_depth_chroma_minus8 : 3; + USHORT log2_max_pic_order_cnt_lsb_minus4 : 4; + USHORT NoPicReorderingFlag : 1; + USHORT NoBiPredFlag : 1; + USHORT ReservedBits1 : 1; + }; + USHORT wFormatAndSequenceInfoFlags; + }; + DXVA_PicEntry_HEVC CurrPic; + UCHAR sps_max_dec_pic_buffering_minus1; + UCHAR log2_min_luma_coding_block_size_minus3; + UCHAR log2_diff_max_min_luma_coding_block_size; + UCHAR log2_min_transform_block_size_minus2; + UCHAR log2_diff_max_min_transform_block_size; + UCHAR max_transform_hierarchy_depth_inter; + UCHAR max_transform_hierarchy_depth_intra; + UCHAR num_short_term_ref_pic_sets; + UCHAR num_long_term_ref_pics_sps; + UCHAR num_ref_idx_l0_default_active_minus1; + UCHAR num_ref_idx_l1_default_active_minus1; + CHAR init_qp_minus26; + UCHAR ucNumDeltaPocsOfRefRpsIdx; + USHORT wNumBitsForShortTermRPSInSlice; + USHORT ReservedBits2; + + union { + struct { + UINT32 scaling_list_enabled_flag : 1; + UINT32 amp_enabled_flag : 1; + UINT32 sample_adaptive_offset_enabled_flag : 1; + UINT32 pcm_enabled_flag : 1; + UINT32 pcm_sample_bit_depth_luma_minus1 : 4; + UINT32 pcm_sample_bit_depth_chroma_minus1 : 4; + UINT32 log2_min_pcm_luma_coding_block_size_minus3 : 2; + UINT32 log2_diff_max_min_pcm_luma_coding_block_size : 2; + UINT32 pcm_loop_filter_disabled_flag : 1; + UINT32 long_term_ref_pics_present_flag : 1; + UINT32 sps_temporal_mvp_enabled_flag : 1; + UINT32 strong_intra_smoothing_enabled_flag : 1; + UINT32 dependent_slice_segments_enabled_flag : 1; + UINT32 output_flag_present_flag : 1; + UINT32 num_extra_slice_header_bits : 3; + UINT32 sign_data_hiding_enabled_flag : 1; + UINT32 cabac_init_present_flag : 1; + UINT32 ReservedBits3 : 5; + }; + UINT32 dwCodingParamToolFlags; + }; + + union { + struct { + UINT32 constrained_intra_pred_flag : 1; + UINT32 transform_skip_enabled_flag : 1; + UINT32 cu_qp_delta_enabled_flag : 1; + UINT32 pps_slice_chroma_qp_offsets_present_flag : 1; + UINT32 weighted_pred_flag : 1; + UINT32 weighted_bipred_flag : 1; + UINT32 transquant_bypass_enabled_flag : 1; + UINT32 tiles_enabled_flag : 1; + UINT32 entropy_coding_sync_enabled_flag : 1; + UINT32 uniform_spacing_flag : 1; + UINT32 loop_filter_across_tiles_enabled_flag : 1; + UINT32 pps_loop_filter_across_slices_enabled_flag : 1; + UINT32 deblocking_filter_override_enabled_flag : 1; + UINT32 pps_deblocking_filter_disabled_flag : 1; + UINT32 lists_modification_present_flag : 1; + UINT32 slice_segment_header_extension_present_flag : 1; + UINT32 IrapPicFlag : 1; + UINT32 IdrPicFlag : 1; + UINT32 IntraPicFlag : 1; + UINT32 ReservedBits4 : 13; + }; + UINT32 dwCodingSettingPicturePropertyFlags; + }; + CHAR pps_cb_qp_offset; + CHAR pps_cr_qp_offset; + UCHAR num_tile_columns_minus1; + UCHAR num_tile_rows_minus1; + USHORT column_width_minus1[19]; + USHORT row_height_minus1[21]; + UCHAR diff_cu_qp_delta_depth; + CHAR pps_beta_offset_div2; + CHAR pps_tc_offset_div2; + UCHAR log2_parallel_merge_level_minus2; + INT CurrPicOrderCntVal; + DXVA_PicEntry_HEVC RefPicList[15]; + UCHAR ReservedBits5; + INT PicOrderCntValList[15]; + UCHAR RefPicSetStCurrBefore[8]; + UCHAR RefPicSetStCurrAfter[8]; + UCHAR RefPicSetLtCurr[8]; + USHORT ReservedBits6; + USHORT ReservedBits7; + UINT StatusReportFeedbackNumber; +} DXVA_PicParams_HEVC, * LPDXVA_PicParams_HEVC; + +/* HEVC Quantizatiuon Matrix structure */ +typedef struct _DXVA_Qmatrix_HEVC +{ + UCHAR ucScalingLists0[6][16]; + UCHAR ucScalingLists1[6][64]; + UCHAR ucScalingLists2[6][64]; + UCHAR ucScalingLists3[2][64]; + UCHAR ucScalingListDCCoefSizeID2[6]; + UCHAR ucScalingListDCCoefSizeID3[2]; +} DXVA_Qmatrix_HEVC, * LPDXVA_Qmatrix_HEVC; + + +/* HEVC Slice Control Structure */ +typedef struct _DXVA_Slice_HEVC_Short +{ + UINT BSNALunitDataLocation; + UINT SliceBytesInBuffer; + USHORT wBadSliceChopping; +} DXVA_Slice_HEVC_Short, * LPDXVA_Slice_HEVC_Short; + +/* H.265/HEVC status reporting data structure */ +typedef struct _DXVA_Status_HEVC { + USHORT StatusReportFeedbackNumber; + DXVA_PicEntry_HEVC CurrPic; + UCHAR bBufType; + UCHAR bStatus; + UCHAR bReserved8Bits; + USHORT wNumMbsAffected; +} DXVA_Status_HEVC, * LPDXVA_Status_HEVC; + +#pragma pack(pop, BeforeDXVApacking) + +#endif // DXVA_H diff --git a/WickedEngine/wiGraphicsDevice_DX12.cpp b/WickedEngine/wiGraphicsDevice_DX12.cpp index 222977b5a..c427400be 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.cpp +++ b/WickedEngine/wiGraphicsDevice_DX12.cpp @@ -22,8 +22,7 @@ DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0 #include "Utility/D3D12MemAlloc.cpp" // include this here because we use D3D12MA_D3D12_HEADERS_ALREADY_INCLUDED #include "Utility/h264.h" - -#include +#include "Utility/dxva.h" #include #include