mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 05:40:13 +01:00
radeonsi/vcn: Stop hardcoding values in VCN version overrides
It only makes it more likely to forget updating all functions when implementing these features and cause issues. Also fixes H264 constrained_intra_pred on VCN5. Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31020>
This commit is contained in:
parent
cd2562117a
commit
22d98e35cd
5 changed files with 27 additions and 60 deletions
|
|
@ -34,7 +34,22 @@ static void radeon_vcn_enc_quality_modes(struct radeon_encoder *enc,
|
|||
|
||||
p->pre_encode_mode = in->pre_encode_mode ? RENCODE_PREENCODE_MODE_4X
|
||||
: RENCODE_PREENCODE_MODE_NONE;
|
||||
|
||||
if (enc->enc_pic.rc_session_init.rate_control_method == RENCODE_RATE_CONTROL_METHOD_QUALITY_VBR)
|
||||
p->pre_encode_mode = RENCODE_PREENCODE_MODE_4X;
|
||||
|
||||
p->vbaq_mode = in->vbaq_mode ? RENCODE_VBAQ_AUTO : RENCODE_VBAQ_NONE;
|
||||
|
||||
if (enc->enc_pic.rc_session_init.rate_control_method == RENCODE_RATE_CONTROL_METHOD_NONE)
|
||||
p->vbaq_mode = RENCODE_VBAQ_NONE;
|
||||
|
||||
enc->enc_pic.quality_params.vbaq_mode = p->vbaq_mode;
|
||||
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 =
|
||||
(enc->enc_pic.quality_modes.pre_encode_mode &&
|
||||
!enc->enc_pic.spec_misc.b_picture_enabled) ? 1 : 0;
|
||||
enc->enc_pic.quality_params.vbaq_strength = 0;
|
||||
}
|
||||
|
||||
/* to process invalid frame rate */
|
||||
|
|
@ -249,6 +264,10 @@ static void radeon_vcn_enc_h264_get_spec_misc_param(struct radeon_encoder *enc,
|
|||
enc->enc_pic.spec_misc.b_picture_enabled = !!pic->seq.max_num_reorder_frames;
|
||||
enc->enc_pic.spec_misc.constrained_intra_pred_flag =
|
||||
pic->pic_ctrl.constrained_intra_pred_flag;
|
||||
enc->enc_pic.spec_misc.half_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.quarter_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.weighted_bipred_idc = 0;
|
||||
enc->enc_pic.spec_misc.transform_8x8_mode = 0;
|
||||
}
|
||||
|
||||
static void radeon_vcn_enc_h264_get_rc_param(struct radeon_encoder *enc,
|
||||
|
|
@ -316,8 +335,6 @@ static void radeon_vcn_enc_h264_get_rc_param(struct radeon_encoder *enc,
|
|||
case PIPE_H2645_ENC_RATE_CONTROL_METHOD_QUALITY_VARIABLE:
|
||||
enc->enc_pic.rc_session_init.rate_control_method =
|
||||
RENCODE_RATE_CONTROL_METHOD_QUALITY_VBR;
|
||||
/* QVBR requires pre-encode enabled. */
|
||||
enc->enc_pic.quality_modes.pre_encode_mode = RENCODE_PREENCODE_MODE_4X;
|
||||
break;
|
||||
default:
|
||||
enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE;
|
||||
|
|
@ -361,6 +378,7 @@ static void radeon_vcn_enc_h264_get_slice_ctrl_param(struct radeon_encoder *enc,
|
|||
|
||||
num_mbs_in_slice = MAX2(4, num_mbs_in_slice);
|
||||
|
||||
enc->enc_pic.slice_ctrl.slice_control_mode = RENCODE_H264_SLICE_CONTROL_MODE_FIXED_MBS;
|
||||
enc->enc_pic.slice_ctrl.num_mbs_per_slice = num_mbs_in_slice;
|
||||
}
|
||||
|
||||
|
|
@ -449,6 +467,9 @@ static void radeon_vcn_enc_h264_get_param(struct radeon_encoder *enc,
|
|||
pic->ref_list0[0] == PIPE_H2645_LIST_REF_INVALID_ENTRY ? 0xffffffff : pic->ref_list0[0];
|
||||
enc->enc_pic.h264_enc_params.l1_reference_picture0_index =
|
||||
pic->ref_list1[0] == PIPE_H2645_LIST_REF_INVALID_ENTRY ? 0xffffffff : pic->ref_list1[0];
|
||||
enc->enc_pic.h264_enc_params.input_picture_structure = RENCODE_H264_PICTURE_STRUCTURE_FRAME;
|
||||
enc->enc_pic.h264_enc_params.interlaced_mode = RENCODE_H264_INTERLACING_MODE_PROGRESSIVE;
|
||||
enc->enc_pic.h264_enc_params.l0_reference_picture1_index = 0xffffffff;
|
||||
enc->enc_pic.enc_params.reconstructed_picture_index = pic->dpb_curr_pic;
|
||||
enc->enc_pic.h264_enc_params.is_reference = !pic->not_referenced;
|
||||
enc->enc_pic.h264_enc_params.is_long_term = pic->is_ltr;
|
||||
|
|
@ -462,7 +483,6 @@ static void radeon_vcn_enc_h264_get_param(struct radeon_encoder *enc,
|
|||
enc->enc_pic.h264.pic = pic->pic_ctrl;
|
||||
enc->enc_pic.h264.slice = pic->slice;
|
||||
|
||||
radeon_vcn_enc_quality_modes(enc, &pic->quality_modes);
|
||||
radeon_vcn_enc_h264_get_cropping_param(enc, pic);
|
||||
radeon_vcn_enc_h264_get_dbk_param(enc, pic);
|
||||
radeon_vcn_enc_h264_get_rc_param(enc, pic);
|
||||
|
|
@ -475,6 +495,7 @@ static void radeon_vcn_enc_h264_get_param(struct radeon_encoder *enc,
|
|||
radeon_vcn_enc_get_intra_refresh_param(enc, use_filter, &pic->intra_refresh);
|
||||
radeon_vcn_enc_get_roi_param(enc, &pic->roi);
|
||||
radeon_vcn_enc_get_latency_param(enc);
|
||||
radeon_vcn_enc_quality_modes(enc, &pic->quality_modes);
|
||||
}
|
||||
|
||||
static void radeon_vcn_enc_hevc_get_cropping_param(struct radeon_encoder *enc,
|
||||
|
|
@ -593,8 +614,6 @@ static void radeon_vcn_enc_hevc_get_rc_param(struct radeon_encoder *enc,
|
|||
case PIPE_H2645_ENC_RATE_CONTROL_METHOD_QUALITY_VARIABLE:
|
||||
enc->enc_pic.rc_session_init.rate_control_method =
|
||||
RENCODE_RATE_CONTROL_METHOD_QUALITY_VBR;
|
||||
/* QVBR requires pre-encode enabled. */
|
||||
enc->enc_pic.quality_modes.pre_encode_mode = RENCODE_PREENCODE_MODE_4X;
|
||||
break;
|
||||
default:
|
||||
enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE;
|
||||
|
|
@ -637,9 +656,9 @@ static void radeon_vcn_enc_hevc_get_slice_ctrl_param(struct radeon_encoder *enc,
|
|||
|
||||
num_ctbs_in_slice = MAX2(4, num_ctbs_in_slice);
|
||||
|
||||
enc->enc_pic.hevc_slice_ctrl.slice_control_mode = RENCODE_HEVC_SLICE_CONTROL_MODE_FIXED_CTBS;
|
||||
enc->enc_pic.hevc_slice_ctrl.fixed_ctbs_per_slice.num_ctbs_per_slice =
|
||||
num_ctbs_in_slice;
|
||||
|
||||
enc->enc_pic.hevc_slice_ctrl.fixed_ctbs_per_slice.num_ctbs_per_slice_segment =
|
||||
num_ctbs_in_slice;
|
||||
}
|
||||
|
|
@ -711,7 +730,6 @@ static void radeon_vcn_enc_hevc_get_param(struct radeon_encoder *enc,
|
|||
enc->enc_pic.hevc.pic = pic->pic;
|
||||
enc->enc_pic.hevc.slice = pic->slice;
|
||||
|
||||
radeon_vcn_enc_quality_modes(enc, &pic->quality_modes);
|
||||
radeon_vcn_enc_hevc_get_cropping_param(enc, pic);
|
||||
radeon_vcn_enc_hevc_get_dbk_param(enc, pic);
|
||||
radeon_vcn_enc_hevc_get_rc_param(enc, pic);
|
||||
|
|
@ -725,6 +743,7 @@ static void radeon_vcn_enc_hevc_get_param(struct radeon_encoder *enc,
|
|||
radeon_vcn_enc_hevc_get_spec_misc_param(enc, pic);
|
||||
radeon_vcn_enc_get_latency_param(enc);
|
||||
radeon_vcn_enc_hevc_get_metadata(enc, pic);
|
||||
radeon_vcn_enc_quality_modes(enc, &pic->quality_modes);
|
||||
}
|
||||
|
||||
static void radeon_vcn_enc_av1_get_spec_misc_param(struct radeon_encoder *enc,
|
||||
|
|
@ -851,8 +870,6 @@ static void radeon_vcn_enc_av1_get_rc_param(struct radeon_encoder *enc,
|
|||
case PIPE_H2645_ENC_RATE_CONTROL_METHOD_QUALITY_VARIABLE:
|
||||
enc->enc_pic.rc_session_init.rate_control_method =
|
||||
RENCODE_RATE_CONTROL_METHOD_QUALITY_VBR;
|
||||
/* QVBR requires pre-encode enabled. */
|
||||
enc->enc_pic.quality_modes.pre_encode_mode = RENCODE_PREENCODE_MODE_4X;
|
||||
break;
|
||||
default:
|
||||
enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE;
|
||||
|
|
@ -954,7 +971,6 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc,
|
|||
enc_pic->av1_recon_frame = pic->recon_frame;
|
||||
enc_pic->av1_ref_frame_ctrl_l0 = pic->ref_frame_ctrl_l0;
|
||||
|
||||
radeon_vcn_enc_quality_modes(enc, &pic->quality_modes);
|
||||
enc_pic->frame_id_numbers_present = pic->seq.seq_bits.frame_id_number_present_flag;
|
||||
enc_pic->enable_error_resilient_mode = pic->error_resilient_mode;
|
||||
enc_pic->force_integer_mv = pic->force_integer_mv;
|
||||
|
|
@ -985,6 +1001,7 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc,
|
|||
radeon_vcn_enc_get_roi_param(enc, &pic->roi);
|
||||
radeon_vcn_enc_get_latency_param(enc);
|
||||
radeon_vcn_enc_av1_get_meta_param(enc, pic);
|
||||
radeon_vcn_enc_quality_modes(enc, &pic->quality_modes);
|
||||
}
|
||||
|
||||
static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_picture_desc *picture)
|
||||
|
|
|
|||
|
|
@ -125,8 +125,6 @@ static void radeon_enc_layer_select(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_slice_control(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.slice_ctrl.slice_control_mode = RENCODE_H264_SLICE_CONTROL_MODE_FIXED_MBS;
|
||||
|
||||
RADEON_ENC_BEGIN(enc->cmd.slice_control_h264);
|
||||
RADEON_ENC_CS(enc->enc_pic.slice_ctrl.slice_control_mode);
|
||||
RADEON_ENC_CS(enc->enc_pic.slice_ctrl.num_mbs_per_slice);
|
||||
|
|
@ -135,8 +133,6 @@ static void radeon_enc_slice_control(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_slice_control_hevc(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.hevc_slice_ctrl.slice_control_mode = RENCODE_HEVC_SLICE_CONTROL_MODE_FIXED_CTBS;
|
||||
|
||||
RADEON_ENC_BEGIN(enc->cmd.slice_control_hevc);
|
||||
RADEON_ENC_CS(enc->enc_pic.hevc_slice_ctrl.slice_control_mode);
|
||||
RADEON_ENC_CS(enc->enc_pic.hevc_slice_ctrl.fixed_ctbs_per_slice.num_ctbs_per_slice);
|
||||
|
|
@ -146,8 +142,6 @@ static void radeon_enc_slice_control_hevc(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_spec_misc(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.spec_misc.half_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.quarter_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.level_idc = enc->base.level;
|
||||
|
||||
RADEON_ENC_BEGIN(enc->cmd.spec_misc_h264);
|
||||
|
|
@ -222,14 +216,6 @@ static void radeon_enc_deblocking_filter_hevc(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_quality_params(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.quality_params.vbaq_mode =
|
||||
enc->enc_pic.rc_session_init.rate_control_method != RENCODE_RATE_CONTROL_METHOD_NONE ?
|
||||
enc->enc_pic.quality_modes.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 =
|
||||
(enc->enc_pic.quality_modes.pre_encode_mode) ? 1 : 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);
|
||||
|
|
|
|||
|
|
@ -68,15 +68,6 @@ static void radeon_enc_op_preset(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_quality_params(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.quality_params.vbaq_mode =
|
||||
enc->enc_pic.rc_session_init.rate_control_method != RENCODE_RATE_CONTROL_METHOD_NONE ?
|
||||
enc->enc_pic.quality_modes.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 =
|
||||
(enc->enc_pic.quality_modes.pre_encode_mode) ? 1 : 0;
|
||||
enc->enc_pic.quality_params.vbaq_strength = 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);
|
||||
|
|
|
|||
|
|
@ -30,10 +30,7 @@ static void radeon_enc_session_info(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_spec_misc(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.spec_misc.half_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.quarter_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.level_idc = enc->base.level;
|
||||
enc->enc_pic.spec_misc.weighted_bipred_idc = 0;
|
||||
|
||||
RADEON_ENC_BEGIN(enc->cmd.spec_misc_h264);
|
||||
RADEON_ENC_CS(enc->enc_pic.spec_misc.constrained_intra_pred_flag);
|
||||
|
|
@ -65,11 +62,6 @@ static void radeon_enc_spec_misc_hevc(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_encode_params_h264(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.h264_enc_params.input_picture_structure = RENCODE_H264_PICTURE_STRUCTURE_FRAME;
|
||||
enc->enc_pic.h264_enc_params.input_pic_order_cnt = 0;
|
||||
enc->enc_pic.h264_enc_params.interlaced_mode = RENCODE_H264_INTERLACING_MODE_PROGRESSIVE;
|
||||
enc->enc_pic.h264_enc_params.l0_reference_picture1_index = 0xFFFFFFFF;
|
||||
|
||||
RADEON_ENC_BEGIN(enc->cmd.enc_params_h264);
|
||||
RADEON_ENC_CS(enc->enc_pic.h264_enc_params.input_picture_structure);
|
||||
RADEON_ENC_CS(enc->enc_pic.h264_enc_params.input_pic_order_cnt);
|
||||
|
|
@ -94,16 +86,6 @@ static void radeon_enc_encode_params_h264(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_quality_params(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.quality_params.vbaq_mode =
|
||||
enc->enc_pic.rc_session_init.rate_control_method != RENCODE_RATE_CONTROL_METHOD_NONE ?
|
||||
enc->enc_pic.quality_modes.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 =
|
||||
(enc->enc_pic.quality_modes.pre_encode_mode &&
|
||||
!enc->enc_pic.spec_misc.b_picture_enabled) ? 1 : 0;
|
||||
enc->enc_pic.quality_params.vbaq_strength = 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);
|
||||
|
|
|
|||
|
|
@ -58,12 +58,7 @@ static void radeon_enc_cdf_default_table(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_spec_misc(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.spec_misc.constrained_intra_pred_flag = 0;
|
||||
enc->enc_pic.spec_misc.transform_8x8_mode = 0;
|
||||
enc->enc_pic.spec_misc.half_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.quarter_pel_enabled = 1;
|
||||
enc->enc_pic.spec_misc.level_idc = enc->base.level;
|
||||
enc->enc_pic.spec_misc.weighted_bipred_idc = 0;
|
||||
|
||||
RADEON_ENC_BEGIN(enc->cmd.spec_misc_h264);
|
||||
RADEON_ENC_CS(enc->enc_pic.spec_misc.constrained_intra_pred_flag);
|
||||
|
|
@ -146,10 +141,6 @@ static void radeon_enc_encode_params(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_encode_params_h264(struct radeon_encoder *enc)
|
||||
{
|
||||
enc->enc_pic.h264_enc_params.input_picture_structure = RENCODE_H264_PICTURE_STRUCTURE_FRAME;
|
||||
enc->enc_pic.h264_enc_params.input_pic_order_cnt = 0;
|
||||
enc->enc_pic.h264_enc_params.interlaced_mode = RENCODE_H264_INTERLACING_MODE_PROGRESSIVE;
|
||||
|
||||
if (enc->enc_pic.enc_params.reference_picture_index != 0xFFFFFFFF){
|
||||
enc->enc_pic.h264_enc_params.lsm_reference_pictures[0].list = 0;
|
||||
enc->enc_pic.h264_enc_params.lsm_reference_pictures[0].list_index = 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue