mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 06:20:19 +01:00
radeonsi/vce: Support old VCE firmware
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12866 Fixes:104f9c6654("radeonsi/vce: Remove support for FW 50 and older") Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34152> (cherry picked from commita2b4617c00)
This commit is contained in:
parent
e9b6cf708b
commit
e09a2e808f
4 changed files with 29 additions and 31 deletions
|
|
@ -1624,7 +1624,7 @@
|
|||
"description": "radeonsi/vce: Support old VCE firmware",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "104f9c6654583c67251fb442c49b3cf86b416efb",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -419,6 +419,7 @@ struct pipe_video_codec *si_vce_create_encoder(struct pipe_context *context,
|
|||
goto error;
|
||||
}
|
||||
|
||||
enc->fw_version = (sscreen->info.vce_fw_version & (0xff << 24)) >> 24;
|
||||
si_vce_52_init(enc);
|
||||
|
||||
return &enc->base;
|
||||
|
|
@ -435,17 +436,8 @@ error:
|
|||
*/
|
||||
bool si_vce_is_fw_version_supported(struct si_screen *sscreen)
|
||||
{
|
||||
switch (sscreen->info.vce_fw_version) {
|
||||
case FW_52_0_3:
|
||||
case FW_52_4_3:
|
||||
case FW_52_8_3:
|
||||
return true;
|
||||
default:
|
||||
if ((sscreen->info.vce_fw_version & (0xff << 24)) >= FW_53)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
unsigned version = (sscreen->info.vce_fw_version & (0xff << 24)) >> 24;
|
||||
return version >= 40;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -343,6 +343,7 @@ struct rvce_encoder {
|
|||
|
||||
bool use_vm;
|
||||
bool dual_pipe;
|
||||
unsigned fw_version;
|
||||
};
|
||||
|
||||
struct rvce_output_unit_segment {
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ static void get_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_des
|
|||
enc->enc_pic.i_remain = pic->i_remain;
|
||||
enc->enc_pic.pic_order_cnt = pic->pic_order_cnt;
|
||||
enc->enc_pic.not_referenced = pic->not_referenced;
|
||||
enc->enc_pic.addrmode_arraymode_disrdo_distwoinstants = 0x01000201;
|
||||
enc->enc_pic.addrmode_arraymode_disrdo_distwoinstants = enc->fw_version >= 52 ? 0x01000201 : 0;
|
||||
enc->enc_pic.is_idr = (pic->picture_type == PIPE_H2645_ENC_PICTURE_TYPE_IDR);
|
||||
enc->enc_pic.eo.enc_idr_pic_id = pic->idr_pic_id;
|
||||
enc->enc_pic.ec.enc_vbaq_mode =
|
||||
|
|
@ -309,10 +309,12 @@ static void create(struct rvce_encoder *enc)
|
|||
|
||||
RVCE_CS(enc->enc_pic.addrmode_arraymode_disrdo_distwoinstants);
|
||||
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_context_buffer_offset);
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_input_luma_buffer_offset);
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_input_chroma_buffer_offset);
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_mode_chromaflag_vbaqmode_scenechangesensitivity);
|
||||
if (enc->fw_version >= 52) {
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_context_buffer_offset);
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_input_luma_buffer_offset);
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_input_chroma_buffer_offset);
|
||||
RVCE_CS(enc->enc_pic.ec.enc_pre_encode_mode_chromaflag_vbaqmode_scenechangesensitivity);
|
||||
}
|
||||
RVCE_END();
|
||||
}
|
||||
|
||||
|
|
@ -373,7 +375,7 @@ static void encode(struct rvce_encoder *enc)
|
|||
enc->enc_pic.eo.enc_input_pic_swizzle_mode = enc->luma->u.gfx9.swizzle_mode;
|
||||
}
|
||||
|
||||
enc->enc_pic.eo.enc_disable_two_pipe_mode = !enc->dual_pipe;
|
||||
enc->enc_pic.eo.enc_disable_two_pipe_mode = enc->fw_version >= 50 ? !enc->dual_pipe : 0;
|
||||
RVCE_CS(enc->enc_pic.eo.enc_input_pic_addr_array_disable2pipe_disablemboffload);
|
||||
RVCE_CS(enc->enc_pic.eo.enc_input_pic_tile_config);
|
||||
RVCE_CS(enc->enc_pic.picture_type); // encPicType
|
||||
|
|
@ -457,17 +459,18 @@ static void encode(struct rvce_encoder *enc)
|
|||
RVCE_CS(enc->enc_pic.eo.num_ir_pic_remain_in_rcgop);
|
||||
RVCE_CS(enc->enc_pic.eo.enable_intra_refresh);
|
||||
|
||||
RVCE_CS(enc->enc_pic.eo.aq_variance_en);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_block_size);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_mb_variance_sel);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_frame_variance_sel);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_a);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_b);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_c);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_d);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_e);
|
||||
|
||||
RVCE_CS(enc->enc_pic.eo.context_in_sfb);
|
||||
if (enc->fw_version >= 52) {
|
||||
RVCE_CS(enc->enc_pic.eo.aq_variance_en);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_block_size);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_mb_variance_sel);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_frame_variance_sel);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_a);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_b);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_c);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_d);
|
||||
RVCE_CS(enc->enc_pic.eo.aq_param_e);
|
||||
RVCE_CS(enc->enc_pic.eo.context_in_sfb);
|
||||
}
|
||||
RVCE_END();
|
||||
}
|
||||
|
||||
|
|
@ -498,8 +501,10 @@ static void rate_control(struct rvce_encoder *enc)
|
|||
RVCE_CS(enc->enc_pic.rc.b_pics_delta_qp);
|
||||
RVCE_CS(enc->enc_pic.rc.ref_b_pics_delta_qp);
|
||||
RVCE_CS(enc->enc_pic.rc.rc_reinit_disable);
|
||||
RVCE_CS(enc->enc_pic.rc.enc_lcvbr_init_qp_flag);
|
||||
RVCE_CS(enc->enc_pic.rc.lcvbrsatd_based_nonlinear_bit_budget_flag);
|
||||
if (enc->fw_version >= 50) {
|
||||
RVCE_CS(enc->enc_pic.rc.enc_lcvbr_init_qp_flag);
|
||||
RVCE_CS(enc->enc_pic.rc.lcvbrsatd_based_nonlinear_bit_budget_flag);
|
||||
}
|
||||
RVCE_END();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue