From 69f02164b3b52758d80f722e9bff4bdf0a3350de Mon Sep 17 00:00:00 2001 From: James Zhu Date: Sun, 20 Feb 2022 11:39:45 -0500 Subject: [PATCH] amd: update headers to support decode software ring Update headers to support decode software ring. Signed-off-by: James Zhu Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/amd/common/ac_vcn_dec.h | 73 +++++++++++++++++++ src/gallium/drivers/radeonsi/radeon_vcn_dec.h | 2 + 2 files changed, 75 insertions(+) diff --git a/src/amd/common/ac_vcn_dec.h b/src/amd/common/ac_vcn_dec.h index d520f3980c0..72762753dc7 100644 --- a/src/amd/common/ac_vcn_dec.h +++ b/src/amd/common/ac_vcn_dec.h @@ -51,6 +51,38 @@ (RDECODE_PKT_REG_J(reg) | RDECODE_PKT_RES_J(0) | RDECODE_PKT_COND_J(cond) | \ RDECODE_PKT_TYPE_J(type)) +#define RDECODE_IB_PARAM_DECODE_BUFFER (0x00000001) +#define RDECODE_IB_PARAM_QUERY_BUFFER (0x00000002) +#define RDECODE_IB_PARAM_PREDICATION_BUFFER (0x00000003) +#define RDECODE_IB_PARAM_UMD_64BIT_FENCE (0x00000005) +#define RDECODE_IB_PARAM_UMD_RECORD_TIMESTAMP (0x00000006) +#define RDECODE_IB_PARAM_UMD_REPORT_EVENT_STATUS (0x00000007) +#define RDECODE_IB_PARAM_UMD_COPY_MEMORY (0x00000008) +#define RDECODE_IB_PARAM_UMD_WRITE_MEMORY (0x00000009) +#define RDECODE_IB_PARAM_FEEDBACK_BUFFER (0x0000000A) + +#define RDECODE_CMDBUF_FLAGS_MSG_BUFFER (0x00000001) +#define RDECODE_CMDBUF_FLAGS_DPB_BUFFER (0x00000002) +#define RDECODE_CMDBUF_FLAGS_BITSTREAM_BUFFER (0x00000004) +#define RDECODE_CMDBUF_FLAGS_DECODING_TARGET_BUFFER (0x00000008) +#define RDECODE_CMDBUF_FLAGS_FEEDBACK_BUFFER (0x00000010) +#define RDECODE_CMDBUF_FLAGS_PICTURE_PARAM_BUFFER (0x00000020) +#define RDECODE_CMDBUF_FLAGS_MB_CONTROL_BUFFER (0x00000040) +#define RDECODE_CMDBUF_FLAGS_IDCT_COEF_BUFFER (0x00000080) +#define RDECODE_CMDBUF_FLAGS_PREEMPT_BUFFER (0x00000100) +#define RDECODE_CMDBUF_FLAGS_IT_SCALING_BUFFER (0x00000200) +#define RDECODE_CMDBUF_FLAGS_SCALER_TARGET_BUFFER (0x00000400) +#define RDECODE_CMDBUF_FLAGS_CONTEXT_BUFFER (0x00000800) +#define RDECODE_CMDBUF_FLAGS_PROB_TBL_BUFFER (0x00001000) +#define RDECODE_CMDBUF_FLAGS_QUERY_BUFFER (0x00002000) +#define RDECODE_CMDBUF_FLAGS_PREDICATION_BUFFER (0x00004000) +#define RDECODE_CMDBUF_FLAGS_SCLR_COEF_BUFFER (0x00008000) +#define RDECODE_CMDBUF_FLAGS_RECORD_TIMESTAMP (0x00010000) +#define RDECODE_CMDBUF_FLAGS_REPORT_EVENT_STATUS (0x00020000) +#define RDECODE_CMDBUF_FLAGS_RESERVED_SIZE_INFO_BUFFER (0x00040000) +#define RDECODE_CMDBUF_FLAGS_LUMA_HIST_BUFFER (0x00080000) +#define RDECODE_CMDBUF_FLAGS_SESSION_CONTEXT_BUFFER (0x00100000) + #define RDECODE_CMD_MSG_BUFFER 0x00000000 #define RDECODE_CMD_DPB_BUFFER 0x00000001 #define RDECODE_CMD_DECODING_TARGET_BUFFER 0x00000002 @@ -363,6 +395,47 @@ #define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_CDF_UPDATE_MASK (0x00000002) #define RDECODE_FRAME_HDR_INFO_AV1_SHOW_FRAME_MASK (0x00000001) +typedef struct rvcn_decode_buffer_s { + unsigned int valid_buf_flag; + unsigned int msg_buffer_address_hi; + unsigned int msg_buffer_address_lo; + unsigned int dpb_buffer_address_hi; + unsigned int dpb_buffer_address_lo; + unsigned int target_buffer_address_hi; + unsigned int target_buffer_address_lo; + unsigned int session_contex_buffer_address_hi; + unsigned int session_contex_buffer_address_lo; + unsigned int bitstream_buffer_address_hi; + unsigned int bitstream_buffer_address_lo; + unsigned int context_buffer_address_hi; + unsigned int context_buffer_address_lo; + unsigned int feedback_buffer_address_hi; + unsigned int feedback_buffer_address_lo; + unsigned int luma_hist_buffer_address_hi; + unsigned int luma_hist_buffer_address_lo; + unsigned int prob_tbl_buffer_address_hi; + unsigned int prob_tbl_buffer_address_lo; + unsigned int sclr_coeff_buffer_address_hi; + unsigned int sclr_coeff_buffer_address_lo; + unsigned int it_sclr_table_buffer_address_hi; + unsigned int it_sclr_table_buffer_address_lo; + unsigned int sclr_target_buffer_address_hi; + unsigned int sclr_target_buffer_address_lo; + unsigned int reserved_size_info_buffer_address_hi; + unsigned int reserved_size_info_buffer_address_lo; + unsigned int mpeg2_pic_param_buffer_address_hi; + unsigned int mpeg2_pic_param_buffer_address_lo; + unsigned int mpeg2_mb_control_buffer_address_hi; + unsigned int mpeg2_mb_control_buffer_address_lo; + unsigned int mpeg2_idct_coeff_buffer_address_hi; + unsigned int mpeg2_idct_coeff_buffer_address_lo; +} rvcn_decode_buffer_t; + +typedef struct rvcn_decode_ib_package_s { + unsigned int package_size; + unsigned int package_type; +} rvcn_decode_ib_package_t; + typedef struct rvcn_dec_message_index_s { unsigned int message_id; unsigned int offset; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.h b/src/gallium/drivers/radeonsi/radeon_vcn_dec.h index 0299e6066ad..b436083f9e1 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.h +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.h @@ -61,6 +61,8 @@ struct radeon_decoder { uint8_t *it; uint8_t *probs; void *bs_ptr; + rvcn_decode_buffer_t *decode_buffer; + bool vcn_dec_sw_ring; struct rvid_buffer msg_fb_it_probs_buffers[NUM_BUFFERS]; struct rvid_buffer bs_buffers[NUM_BUFFERS];