From a9b2e9e48017ea078f4daf4f406b2b2c54bc2e72 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Wed, 5 Nov 2025 09:13:21 +0100 Subject: [PATCH] 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 Part-of: --- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 4 ---- src/gallium/drivers/radeonsi/radeon_vcn_enc.h | 1 - src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c | 12 +++++------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 628ba0298b6..59f7a014501 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -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; } } diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h index f725ea98d83..c585d92dbeb 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h @@ -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; 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 b48a95b2f52..3fddb64a5cb 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c @@ -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);