diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc.h b/src/gallium/drivers/radeon/radeon_vcn_enc.h index f62f1fbf3c1..491d51b32bf 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_enc.h +++ b/src/gallium/drivers/radeon/radeon_vcn_enc.h @@ -164,6 +164,7 @@ typedef struct rvcn_enc_session_init_s { uint32_t padding_height; uint32_t pre_encode_mode; uint32_t pre_encode_chroma_enabled; + uint32_t display_remote; } rvcn_enc_session_init_t; typedef struct rvcn_enc_layer_control_s { @@ -356,6 +357,7 @@ typedef struct rvcn_enc_encode_context_buffer_s { rvcn_enc_reconstructed_picture_t pre_encode_reconstructed_pictures[RENCODE_MAX_NUM_RECONSTRUCTED_PICTURES]; rvcn_enc_reconstructed_picture_t pre_encode_input_picture; + uint32_t two_pass_search_center_map_offset; } rvcn_enc_encode_context_buffer_t; typedef struct rvcn_enc_video_bitstream_buffer_s { diff --git a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c index 37645934e81..faa89911f29 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeon/radeon_vcn_enc_1_2.c @@ -35,7 +35,7 @@ #include #define RENCODE_FW_INTERFACE_MAJOR_VERSION 1 -#define RENCODE_FW_INTERFACE_MINOR_VERSION 2 +#define RENCODE_FW_INTERFACE_MINOR_VERSION 9 #define RENCODE_IB_PARAM_SESSION_INFO 0x00000001 #define RENCODE_IB_PARAM_TASK_INFO 0x00000002 @@ -99,6 +99,7 @@ static void radeon_enc_session_init(struct radeon_encoder *enc) enc->enc_pic.session_init.aligned_picture_height - enc->base.height; enc->enc_pic.session_init.pre_encode_mode = RENCODE_PREENCODE_MODE_NONE; enc->enc_pic.session_init.pre_encode_chroma_enabled = false; + enc->enc_pic.session_init.display_remote = 0; RADEON_ENC_BEGIN(enc->cmd.session_init); RADEON_ENC_CS(enc->enc_pic.session_init.encode_standard); @@ -108,6 +109,7 @@ static void radeon_enc_session_init(struct radeon_encoder *enc) RADEON_ENC_CS(enc->enc_pic.session_init.padding_height); RADEON_ENC_CS(enc->enc_pic.session_init.pre_encode_mode); RADEON_ENC_CS(enc->enc_pic.session_init.pre_encode_chroma_enabled); + RADEON_ENC_CS(enc->enc_pic.session_init.display_remote); RADEON_ENC_END(); } @@ -122,6 +124,7 @@ static void radeon_enc_session_init_hevc(struct radeon_encoder *enc) enc->enc_pic.session_init.aligned_picture_height - enc->base.height; enc->enc_pic.session_init.pre_encode_mode = RENCODE_PREENCODE_MODE_NONE; enc->enc_pic.session_init.pre_encode_chroma_enabled = false; + enc->enc_pic.session_init.display_remote = 0; RADEON_ENC_BEGIN(enc->cmd.session_init); RADEON_ENC_CS(enc->enc_pic.session_init.encode_standard); @@ -131,6 +134,7 @@ static void radeon_enc_session_init_hevc(struct radeon_encoder *enc) RADEON_ENC_CS(enc->enc_pic.session_init.padding_height); RADEON_ENC_CS(enc->enc_pic.session_init.pre_encode_mode); RADEON_ENC_CS(enc->enc_pic.session_init.pre_encode_chroma_enabled); + RADEON_ENC_CS(enc->enc_pic.session_init.display_remote); RADEON_ENC_END(); } @@ -272,11 +276,13 @@ static void radeon_enc_quality_params(struct radeon_encoder *enc) enc->enc_pic.quality_params.vbaq_mode = 0; enc->enc_pic.quality_params.scene_change_sensitivity = 0; enc->enc_pic.quality_params.scene_change_min_idr_interval = 0; + enc->enc_pic.quality_params.two_pass_search_center_map_mode = 0; RADEON_ENC_BEGIN(enc->cmd.quality_params); RADEON_ENC_CS(enc->enc_pic.quality_params.vbaq_mode); RADEON_ENC_CS(enc->enc_pic.quality_params.scene_change_sensitivity); RADEON_ENC_CS(enc->enc_pic.quality_params.scene_change_min_idr_interval); + RADEON_ENC_CS(enc->enc_pic.quality_params.two_pass_search_center_map_mode); RADEON_ENC_END(); } @@ -1051,6 +1057,7 @@ static void radeon_enc_ctx(struct radeon_encoder *enc) enc->enc_pic.ctx_buf.rec_luma_pitch = align(enc->base.width, enc->alignment); enc->enc_pic.ctx_buf.rec_chroma_pitch = align(enc->base.width, enc->alignment); enc->enc_pic.ctx_buf.num_reconstructed_pictures = 2; + enc->enc_pic.ctx_buf.two_pass_search_center_map_offset = 0; RADEON_ENC_BEGIN(enc->cmd.ctx); RADEON_ENC_READWRITE(enc->cpb.res->buf, enc->cpb.res->domains, 0); @@ -1070,6 +1077,7 @@ static void radeon_enc_ctx(struct radeon_encoder *enc) for (int i = 0; i < 136; i++) RADEON_ENC_CS(0x00000000); + RADEON_ENC_CS(enc->enc_pic.ctx_buf.two_pass_search_center_map_offset); RADEON_ENC_END(); }