From 3b9e2e9edc7c1dbeb9187e46379acdc7473ea737 Mon Sep 17 00:00:00 2001 From: Benjamin Cheng Date: Thu, 6 Nov 2025 11:21:29 -0500 Subject: [PATCH] radeonsi/vcn: Re-enable AV1 unidir for new FW The previous bitrate overshoot issue is fixed with new FW. Reviewed-by: David Rosca Part-of: --- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 6 +++++- src/gallium/drivers/radeonsi/radeon_vcn_enc.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 59f7a014501..77a4ff8037e 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -1050,7 +1050,7 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc, enc_pic->av1.primary_ref_frame = pic->ref_list0[0]; if (sscreen->info.vcn_ip_version >= VCN_5_0_0) { - bool allow_unidir = + bool allow_unidir = enc_pic->av1_unidir_rc_available || pic->rc[0].rate_ctrl_method == PIPE_H2645_ENC_RATE_CONTROL_METHOD_DISABLE; for (uint32_t i = 0; i < RENCODE_AV1_REFS_PER_FRAME; i++) @@ -2178,6 +2178,10 @@ struct pipe_video_codec *radeon_create_encoder(struct pipe_context *context, } if (sscreen->info.vcn_enc_minor_version >= 8) enc->enc_pic.has_dependent_slice_instructions = true; + if (sscreen->info.vcn_enc_minor_version > 8 || + (sscreen->info.vcn_enc_minor_version == 8 && + sscreen->info.vcn_fw_revision >= 6)) + enc->enc_pic.av1_unidir_rc_available = true; } else if (sscreen->info.vcn_ip_version >= VCN_4_0_0) { if (sscreen->info.vcn_enc_minor_version >= 1) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h index c585d92dbeb..ac4eb2086e9 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.h +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.h @@ -105,6 +105,7 @@ struct radeon_enc_pic { bool use_rc_per_pic_ex; bool av1_tile_splitting_legacy_flag; bool has_dependent_slice_instructions; + bool av1_unidir_rc_available; struct { union {