Mesa (master): radeon/vcn: add AV1 codec driver firmware interfaces

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 17 19:38:28 UTC 2020


Module: Mesa
Branch: master
Commit: 80f145a0a7f07a07b1a4b9ce44f401a94e34e7a4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=80f145a0a7f07a07b1a4b9ce44f401a94e34e7a4

Author: Leo Liu <leo.liu at amd.com>
Date:   Tue Nov 10 20:55:06 2020 -0500

radeon/vcn: add AV1 codec driver firmware interfaces

This collects parameters that firmware and hardware require for
the AV1 codec.

Signed-off-by: Leo Liu <leo.liu at amd.com>
Reviewed-by: Boyuan Zhang <boyuan.zhang at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7596>

---

 src/gallium/drivers/radeon/radeon_vcn_dec.h | 227 +++++++++++++++++++++++++++-
 1 file changed, 224 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.h b/src/gallium/drivers/radeon/radeon_vcn_dec.h
index 26a3b990833..5ad847ab716 100644
--- a/src/gallium/drivers/radeon/radeon_vcn_dec.h
+++ b/src/gallium/drivers/radeon/radeon_vcn_dec.h
@@ -74,6 +74,7 @@
 #define RDECODE_CODEC_JPEG                                  0x00000008
 #define RDECODE_CODEC_H265                                  0x00000010
 #define RDECODE_CODEC_VP9                                   0x00000011
+#define RDECODE_CODEC_AV1                                   0x00000013
 
 #define RDECODE_ARRAY_MODE_LINEAR                           0x00000000
 #define RDECODE_ARRAY_MODE_MACRO_LINEAR_MICRO_TILED         0x00000001
@@ -114,6 +115,7 @@
 #define RDECODE_MESSAGE_MPEG4_ASP_VLD                       0x0000000B
 #define RDECODE_MESSAGE_HEVC                                0x0000000D
 #define RDECODE_MESSAGE_VP9                                 0x0000000E
+#define RDECODE_MESSAGE_AV1                                 0x00000011
 
 #define RDECODE_FEEDBACK_PROFILING                          0x00000001
 
@@ -293,6 +295,73 @@
 #define SAMU_DRM_DISABLE 0x00000000
 #define SAMU_DRM_ENABLE  0x00000001
 
+/* AV1 Frame header flags */
+#define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_REF_FRAME_MVS_SHIFT        (31)
+#define RDECODE_FRAME_HDR_INFO_AV1_SKIP_REFERENCE_UPDATE_SHIFT        (30)
+#define RDECODE_FRAME_HDR_INFO_AV1_SWITCHABLE_SKIP_MODE_SHIFT         (29)
+#define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_MULTI_SHIFT               (28)
+#define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_TEMPORAL_UPDATE_SHIFT (27)
+#define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_UPDATE_MAP_SHIFT      (26)
+#define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_ENABLED_SHIFT         (25)
+#define RDECODE_FRAME_HDR_INFO_AV1_REDUCED_TX_SET_USED_SHIFT          (24)
+#define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_PRESENT_FLAG_SHIFT        (23)
+#define RDECODE_FRAME_HDR_INFO_AV1_DELTA_Q_PRESENT_FLAG_SHIFT         (22)
+#define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_UPDATE_SHIFT        (21)
+#define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_ENABLED_SHIFT       (20)
+#define RDECODE_FRAME_HDR_INFO_AV1_CUR_FRAME_FORCE_INTEGER_MV_SHIFT   (19)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_SCREEN_CONTENT_TOOLS_SHIFT   (18)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_REF_FRAME_MVS_SHIFT          (17)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_JNT_COMP_SHIFT              (16)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_ORDER_HINT_SHIFT            (15)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_DUAL_FILTER_SHIFT           (14)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_WARPED_MOTION_SHIFT          (13)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_MASKED_COMPOUND_SHIFT       (12)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTERINTRA_COMPOUND_SHIFT   (11)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTRA_EDGE_FILTER_SHIFT     (10)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_FILTER_INTRA_SHIFT          (9)
+#define RDECODE_FRAME_HDR_INFO_AV1_USING_QMATRIX_SHIFT                (8)
+#define RDECODE_FRAME_HDR_INFO_AV1_SKIP_MODE_FLAG_SHIFT               (7)
+#define RDECODE_FRAME_HDR_INFO_AV1_MONOCHROME_SHIFT                   (6)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_HIGH_PRECISION_MV_SHIFT      (5)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_INTRABC_SHIFT                (4)
+#define RDECODE_FRAME_HDR_INFO_AV1_INTRA_ONLY_SHIFT                   (3)
+#define RDECODE_FRAME_HDR_INFO_AV1_REFRESH_FRAME_CONTEXT_SHIFT        (2)
+#define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_CDF_UPDATE_SHIFT           (1)
+#define RDECODE_FRAME_HDR_INFO_AV1_SHOW_FRAME_SHIFT                   (0)
+
+#define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_REF_FRAME_MVS_MASK         (0x80000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_SKIP_REFERENCE_UPDATE_MASK         (0x40000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_SWITCHABLE_SKIP_MODE_MASK          (0x20000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_MULTI_MASK                (0x10000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_TEMPORAL_UPDATE_MASK  (0x08000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_UPDATE_MAP_MASK       (0x04000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_ENABLED_MASK          (0x02000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_REDUCED_TX_SET_USED_MASK           (0x01000000)
+#define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_PRESENT_FLAG_MASK         (0x00800000)
+#define RDECODE_FRAME_HDR_INFO_AV1_DELTA_Q_PRESENT_FLAG_MASK          (0x00400000)
+#define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_UPDATE_MASK         (0x00200000)
+#define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_ENABLED_MASK        (0x00100000)
+#define RDECODE_FRAME_HDR_INFO_AV1_CUR_FRAME_FORCE_INTEGER_MV_MASK    (0x00080000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_SCREEN_CONTENT_TOOLS_MASK    (0x00040000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_REF_FRAME_MVS_MASK           (0x00020000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_JNT_COMP_MASK               (0x00010000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_ORDER_HINT_MASK             (0x00008000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_DUAL_FILTER_MASK            (0x00004000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_WARPED_MOTION_MASK           (0x00002000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_MASKED_COMPOUND_MASK        (0x00001000)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTERINTRA_COMPOUND_MASK    (0x00000800)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTRA_EDGE_FILTER_MASK      (0x00000400)
+#define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_FILTER_INTRA_MASK           (0x00000200)
+#define RDECODE_FRAME_HDR_INFO_AV1_USING_QMATRIX_MASK                 (0x00000100)
+#define RDECODE_FRAME_HDR_INFO_AV1_SKIP_MODE_FLAG_MASK                (0x00000080)
+#define RDECODE_FRAME_HDR_INFO_AV1_MONOCHROME_MASK                    (0x08000040)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_HIGH_PRECISION_MV_MASK       (0x00000020)
+#define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_INTRABC_MASK                 (0x00000010)
+#define RDECODE_FRAME_HDR_INFO_AV1_INTRA_ONLY_MASK                    (0x00000008)
+#define RDECODE_FRAME_HDR_INFO_AV1_REFRESH_FRAME_CONTEXT_MASK         (0x00000004)
+#define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_CDF_UPDATE_MASK            (0x00000002)
+#define RDECODE_FRAME_HDR_INFO_AV1_SHOW_FRAME_MASK                    (0x00000001)
+
 typedef struct rvcn_dec_message_index_s {
    unsigned int message_id;
    unsigned int offset;
@@ -360,9 +429,10 @@ typedef struct rvcn_dec_message_decode_s {
    unsigned int dt_chromaV_top_offset;
    unsigned int dt_chromaV_bottom_offset;
 
-   unsigned char dpbRefArraySlice[16];
-   unsigned char dpbCurArraySlice;
-   unsigned char dpbReserved[3];
+   unsigned int mif_wrc_en;
+   unsigned int db_pitch_uv;
+
+   unsigned char reserved1[20];
 } rvcn_dec_message_decode_t;
 
 typedef struct rvcn_dec_message_drm_s {
@@ -682,6 +752,136 @@ typedef struct rvcn_dec_message_vp9_s {
    unsigned int uncompressed_header_size;
 } rvcn_dec_message_vp9_t;
 
+typedef enum {
+   RVCN_DEC_AV1_IDENTITY = 0,
+   RVCN_DEC_AV1_TRANSLATION = 1,
+   RVCN_DEC_AV1_ROTZOOM = 2,
+   RVCN_DEC_AV1_AFFINE = 3,
+   RVCN_DEC_AV1_HORTRAPEZOID = 4,
+   RVCN_DEC_AV1_VERTRAPEZOID = 5,
+   RVCN_DEC_AV1_HOMOGRAPHY = 6,
+   RVCN_DEC_AV1_TRANS_TYPES = 7,
+} rvcn_dec_transformation_type_e;
+
+typedef struct {
+   rvcn_dec_transformation_type_e wmtype;
+   int wmmat[8];
+   short alpha, beta, gamma, delta;
+} rvcn_dec_warped_motion_params_t;
+
+typedef struct {
+   unsigned char apply_grain;
+   unsigned char scaling_points_y[14][2];
+   unsigned char num_y_points;
+   unsigned char scaling_points_cb[10][2];
+   unsigned char num_cb_points;
+   unsigned char scaling_points_cr[10][2];
+   unsigned char num_cr_points;
+   unsigned char scaling_shift;
+   unsigned char ar_coeff_lag;
+   signed char ar_coeffs_y[24];
+   signed char ar_coeffs_cb[25];
+   signed char ar_coeffs_cr[25];
+   unsigned char ar_coeff_shift;
+   unsigned char cb_mult;
+   unsigned char cb_luma_mult;
+   unsigned short cb_offset;
+   unsigned char cr_mult;
+   unsigned char cr_luma_mult;
+   unsigned short cr_offset;
+   unsigned char overlap_flag;
+   unsigned char clip_to_restricted_range;
+   unsigned char bit_depth_minus_8;
+   unsigned char chroma_scaling_from_luma;
+   unsigned char grain_scale_shift;
+   unsigned short random_seed;
+} rvcn_dec_film_grain_params_t;
+
+typedef struct rvcn_dec_av1_tile_info_s {
+   unsigned int offset;
+   unsigned int size;
+} rvcn_dec_av1_tile_info_t;
+
+typedef struct rvcn_dec_message_av1_s {
+   unsigned int frame_header_flags;
+   unsigned int current_frame_id;
+   unsigned int frame_offset;
+
+   unsigned char profile;
+   unsigned char is_annexb;
+   unsigned char frame_type;
+   unsigned char primary_ref_frame;
+   unsigned char curr_pic_idx;
+
+   unsigned char sb_size;
+   unsigned char interp_filter;
+   unsigned char filter_level[2];
+   unsigned char filter_level_u;
+   unsigned char filter_level_v;
+   unsigned char sharpness_level;
+   signed char ref_deltas[8];
+   signed char mode_deltas[2];
+   unsigned char base_qindex;
+   signed char y_dc_delta_q;
+   signed char u_dc_delta_q;
+   signed char v_dc_delta_q;
+   signed char u_ac_delta_q;
+   signed char v_ac_delta_q;
+   signed char qm_y;
+   signed char qm_u;
+   signed char qm_v;
+   signed char delta_q_res;
+   signed char delta_lf_res;
+
+   unsigned char tile_cols;
+   unsigned char tile_rows;
+   unsigned char tx_mode;
+   unsigned char reference_mode;
+   unsigned char chroma_format;
+   unsigned int tile_size_bytes;
+   unsigned int context_update_tile_id;
+   unsigned int tile_col_start_sb[65];
+   unsigned int tile_row_start_sb[65];
+   unsigned int max_width;
+   unsigned int max_height;
+   unsigned int width;
+   unsigned int height;
+   unsigned int superres_upscaled_width;
+   unsigned char superres_scale_denominator;
+   unsigned char order_hint_bits;
+
+   unsigned char ref_frame_map[8];
+   unsigned int ref_frame_offset[8];
+   unsigned char frame_refs[7];
+   unsigned char ref_frame_sign_bias[7];
+
+   unsigned char bit_depth_luma_minus8;
+   unsigned char bit_depth_chroma_minus8;
+
+   int feature_data[8][8];
+   unsigned char feature_mask[8];
+
+   unsigned char cdef_damping;
+   unsigned char cdef_bits;
+   unsigned short cdef_strengths[16];
+   unsigned short cdef_uv_strengths[16];
+   unsigned char frame_restoration_type[3];
+   unsigned char log2_restoration_unit_size_minus5[3];
+
+   unsigned char p010_mode;
+   unsigned char msb_mode;
+   unsigned char luma_10to8;
+   unsigned char chroma_10to8;
+   unsigned char preskip_segid;
+   unsigned char last_active_segid;
+   unsigned char seg_lossless_flag;
+   unsigned char coded_lossless;
+   rvcn_dec_film_grain_params_t film_grain;
+   unsigned int uncompressed_header_size;
+   rvcn_dec_warped_motion_params_t global_motion[8];
+   rvcn_dec_av1_tile_info_t tile_info[256];
+} rvcn_dec_message_av1_t;
+
 typedef struct rvcn_dec_feature_index_s {
    unsigned int feature_id;
    unsigned int offset;
@@ -801,6 +1001,27 @@ typedef struct rvcn_dec_vp9_probs_segment_s {
    };
 } rvcn_dec_vp9_probs_segment_t;
 
+typedef struct rvcn_dec_av1_fg_init_buf_s {
+   short luma_grain_block[64][96];
+   short cb_grain_block[32][48];
+   short cr_grain_block[32][48];
+   short scaling_lut_y[256];
+   short scaling_lut_cb[256];
+   short scaling_lut_cr[256];
+   unsigned short temp_tile_left_seed[256];
+} rvcn_dec_av1_fg_init_buf_t;
+
+typedef struct rvcn_dec_av1_segment_fg_s {
+   union {
+      struct {
+         unsigned char feature_data[128];
+         unsigned char feature_mask[8];
+      } seg;
+      unsigned char segment_data[256];
+   };
+   rvcn_dec_av1_fg_init_buf_t fg_buf;
+} rvcn_dec_av1_segment_fg_t;
+
 struct jpeg_params {
    unsigned bsd_size;
    unsigned dt_pitch;



More information about the mesa-commit mailing list