radeonsi/vcn: Update spec, slice, quality and deblock params each frame
These params may change every frame, so we need to always send them to FW, not just in begin session. Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38257>
This commit is contained in:
@@ -1073,7 +1073,6 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc,
|
||||
enc_pic->av1.skip_mode_allowed = radeon_enc_av1_skip_mode_allowed(enc, skip_frames);
|
||||
|
||||
if (enc_pic->av1.compound) {
|
||||
bool disallow_skip_mode = enc_pic->av1_spec_misc.disallow_skip_mode;
|
||||
enc_pic->av1_spec_misc.disallow_skip_mode = !enc_pic->av1.skip_mode_allowed;
|
||||
/* Skip mode frames must match reference frames */
|
||||
if (enc_pic->av1.skip_mode_allowed) {
|
||||
@@ -1081,9 +1080,6 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc,
|
||||
skip_frames[0] != enc_pic->av1_enc_params.lsm_reference_frame_index[0] ||
|
||||
skip_frames[1] != enc_pic->av1_enc_params.lsm_reference_frame_index[1];
|
||||
}
|
||||
enc->need_spec_misc = disallow_skip_mode != enc_pic->av1_spec_misc.disallow_skip_mode;
|
||||
} else {
|
||||
enc->need_spec_misc = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -254,7 +254,6 @@ struct radeon_encoder {
|
||||
bool need_feedback;
|
||||
bool need_rate_control;
|
||||
bool need_rc_per_pic;
|
||||
bool need_spec_misc;
|
||||
unsigned dpb_size;
|
||||
unsigned dpb_slots;
|
||||
unsigned roi_size;
|
||||
|
||||
@@ -1184,13 +1184,9 @@ static void begin(struct radeon_encoder *enc)
|
||||
enc->op_init(enc);
|
||||
|
||||
enc->session_init(enc);
|
||||
enc->slice_control(enc);
|
||||
enc->spec_misc(enc);
|
||||
enc->deblocking_filter(enc);
|
||||
|
||||
enc->layer_control(enc);
|
||||
enc->rc_session_init(enc);
|
||||
enc->quality_params(enc);
|
||||
enc->encode_latency(enc);
|
||||
|
||||
i = 0;
|
||||
@@ -1229,11 +1225,9 @@ static void encode(struct radeon_encoder *enc)
|
||||
enc->total_task_size = 0;
|
||||
enc->task_info(enc, enc->need_feedback);
|
||||
|
||||
if (enc->need_spec_misc)
|
||||
enc->spec_misc(enc);
|
||||
|
||||
if (enc->need_rate_control || enc->need_rc_per_pic) {
|
||||
i = 0;
|
||||
enc->layer_control(enc);
|
||||
do {
|
||||
enc->enc_pic.layer_sel.temporal_layer_index = i;
|
||||
if (enc->need_rate_control) {
|
||||
@@ -1250,6 +1244,10 @@ static void encode(struct radeon_encoder *enc)
|
||||
enc->enc_pic.layer_sel.temporal_layer_index = enc->enc_pic.temporal_id;
|
||||
enc->layer_select(enc);
|
||||
|
||||
enc->quality_params(enc);
|
||||
enc->slice_control(enc);
|
||||
enc->spec_misc(enc);
|
||||
enc->deblocking_filter(enc);
|
||||
enc->encode_headers(enc);
|
||||
enc->ctx(enc);
|
||||
enc->ctx_override(enc);
|
||||
|
||||
Reference in New Issue
Block a user