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:
David Rosca
2025-11-05 09:13:21 +01:00
committed by Marge Bot
parent 7845ba5a8d
commit a9b2e9e480
3 changed files with 5 additions and 12 deletions

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);