diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 9c193b948b7..ec30999aeb6 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -27,10 +27,16 @@ static void radeon_vcn_enc_quality_modes(struct radeon_encoder *enc, ? RENCODE_PRESET_MODE_HIGH_QUALITY : in->preset_mode; - if (u_reduce_video_profile(enc->base.profile) != PIPE_VIDEO_FORMAT_AV1 && + if (sscreen->info.vcn_ip_version < VCN_4_0_0 && p->preset_mode == RENCODE_PRESET_MODE_HIGH_QUALITY) p->preset_mode = RENCODE_PRESET_MODE_QUALITY; + if (sscreen->info.vcn_ip_version >= VCN_2_0_0 && + p->preset_mode == RENCODE_PRESET_MODE_SPEED && + !enc->enc_pic.hevc_deblock.disable_sao && + u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) + p->preset_mode = RENCODE_PRESET_MODE_BALANCE; + if (enc->first_frame) { p->pre_encode_mode = in->pre_encode_mode ? RENCODE_PREENCODE_MODE_4X : RENCODE_PREENCODE_MODE_NONE; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c index d808e090fa7..801e6f3a1e6 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c @@ -871,7 +871,9 @@ static void radeon_enc_op_preset(struct radeon_encoder *enc) { uint32_t preset_mode; - if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_QUALITY) + if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_HIGH_QUALITY) + preset_mode = RENCODE_IB_OP_SET_HIGH_QUALITY_ENCODING_MODE; + else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_QUALITY) preset_mode = RENCODE_IB_OP_SET_QUALITY_ENCODING_MODE; else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_BALANCE) preset_mode = RENCODE_IB_OP_SET_BALANCE_ENCODING_MODE; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c index 590b117267a..5b5b25d65ee 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c @@ -17,25 +17,6 @@ #define RENCODE_FW_INTERFACE_MAJOR_VERSION 1 #define RENCODE_FW_INTERFACE_MINOR_VERSION 20 -static void radeon_enc_op_preset(struct radeon_encoder *enc) -{ - uint32_t preset_mode; - - if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_SPEED && - (!enc->enc_pic.hevc_deblock.disable_sao && - (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC))) - preset_mode = RENCODE_IB_OP_SET_BALANCE_ENCODING_MODE; - else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_QUALITY) - preset_mode = RENCODE_IB_OP_SET_QUALITY_ENCODING_MODE; - else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_BALANCE) - preset_mode = RENCODE_IB_OP_SET_BALANCE_ENCODING_MODE; - else - preset_mode = RENCODE_IB_OP_SET_SPEED_ENCODING_MODE; - - RADEON_ENC_BEGIN(preset_mode); - RADEON_ENC_END(); -} - static void radeon_enc_quality_params(struct radeon_encoder *enc) { RADEON_ENC_BEGIN(enc->cmd.quality_params); @@ -150,7 +131,6 @@ void radeon_enc_2_0_init(struct radeon_encoder *enc) enc->input_format = radeon_enc_input_format; enc->output_format = radeon_enc_output_format; enc->ctx = radeon_enc_ctx; - enc->op_preset = radeon_enc_op_preset; enc->quality_params = radeon_enc_quality_params; if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC) { diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c index 2907a72da81..e1a3c188bfa 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c @@ -37,27 +37,6 @@ static void radeon_enc_sq_destroy(struct radeon_encoder *enc) rvcn_sq_tail(&enc->cs, &enc->sq); } -static void radeon_enc_op_preset(struct radeon_encoder *enc) -{ - uint32_t preset_mode; - - if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_SPEED && - (!enc->enc_pic.hevc_deblock.disable_sao && - (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_HEVC))) - preset_mode = RENCODE_IB_OP_SET_BALANCE_ENCODING_MODE; - else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_QUALITY) - preset_mode = RENCODE_IB_OP_SET_QUALITY_ENCODING_MODE; - else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_HIGH_QUALITY) - preset_mode = RENCODE_IB_OP_SET_HIGH_QUALITY_ENCODING_MODE; - else if (enc->enc_pic.quality_modes.preset_mode == RENCODE_PRESET_MODE_BALANCE) - preset_mode = RENCODE_IB_OP_SET_BALANCE_ENCODING_MODE; - else - preset_mode = RENCODE_IB_OP_SET_SPEED_ENCODING_MODE; - - RADEON_ENC_BEGIN(preset_mode); - RADEON_ENC_END(); -} - static void radeon_enc_session_init(struct radeon_encoder *enc) { enc->enc_pic.session_init.slice_output_enabled = 0; @@ -533,7 +512,6 @@ void radeon_enc_4_0_init(struct radeon_encoder *enc) enc->begin = radeon_enc_sq_begin; enc->encode = radeon_enc_sq_encode; enc->destroy = radeon_enc_sq_destroy; - enc->op_preset = radeon_enc_op_preset; if (u_reduce_video_profile(enc->base.profile) == PIPE_VIDEO_FORMAT_AV1) { /* begin function need to set these functions to dummy */