From 3b26509439c5c21996cd36186316c8c5d92a83bc Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 19 Aug 2025 15:08:16 +0200 Subject: [PATCH] radeonsi/vcn: Fix HEVC encode cu_qp_delta with old FW VCN2 needs interface version bump to enable it. Cc: mesa-stable Reviewed-by: Ruijing Dong Part-of: (cherry picked from commit 26fc4798c1656a08727248c59d6e888b86976657) --- .pick_status.json | 2 +- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 17 +++++++++++++++-- .../drivers/radeonsi/radeon_vcn_enc_2_0.c | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index f351335fbd2..1d4c9d25ba0 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4974,7 +4974,7 @@ "description": "radeonsi/vcn: Fix HEVC encode cu_qp_delta with old FW", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index b18fe6a1c3c..eb966a32aab 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -627,6 +627,20 @@ static void radeon_vcn_enc_hevc_get_dbk_param(struct radeon_encoder *enc, !pic->seq.sample_adaptive_offset_enabled_flag; } +static bool cu_qp_delta_supported(struct si_screen *sscreen) +{ + if (sscreen->info.vcn_ip_version >= VCN_5_0_0) + return true; + else if (sscreen->info.vcn_ip_version >= VCN_4_0_0) + return sscreen->info.vcn_enc_minor_version >= 7; + else if (sscreen->info.vcn_ip_version >= VCN_3_0_0) + return sscreen->info.vcn_enc_minor_version >= 26; + else if (sscreen->info.vcn_ip_version >= VCN_2_0_0) + return sscreen->info.vcn_enc_minor_version >= 20; + else + return false; +} + static void radeon_vcn_enc_hevc_get_spec_misc_param(struct radeon_encoder *enc, struct pipe_h265_enc_picture_desc *pic) { @@ -648,8 +662,7 @@ static void radeon_vcn_enc_hevc_get_spec_misc_param(struct radeon_encoder *enc, sscreen->info.vcn_ip_version < VCN_3_0_0 || !pic->pic.transform_skip_enabled_flag; enc->enc_pic.hevc_spec_misc.cu_qp_delta_enabled_flag = - (sscreen->info.vcn_ip_version >= VCN_2_0_0 && - pic->pic.cu_qp_delta_enabled_flag) || + (cu_qp_delta_supported(sscreen) && pic->pic.cu_qp_delta_enabled_flag) || enc->enc_pic.enc_qp_map.qp_map_type || enc->enc_pic.rc_session_init.rate_control_method; } diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c index ba9ebde37ae..5bffa655c5b 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c @@ -15,7 +15,7 @@ #include #define RENCODE_FW_INTERFACE_MAJOR_VERSION 1 -#define RENCODE_FW_INTERFACE_MINOR_VERSION 1 +#define RENCODE_FW_INTERFACE_MINOR_VERSION 20 static void radeon_enc_op_preset(struct radeon_encoder *enc) {