From 5ce967c7174a4d0098f9372dda980405cb57b109 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 19 Aug 2025 15:21:48 +0200 Subject: [PATCH] radeonsi/vcn: Fix HEVC encode transform_skip with old FW Cc: mesa-stable Reviewed-by: Ruijing Dong Part-of: (cherry picked from commit e1fcc403d4ddbe2555fd8c28c552103b2e64ef1a) --- .pick_status.json | 2 +- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 1d4c9d25ba0..180c4385ed7 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4964,7 +4964,7 @@ "description": "radeonsi/vcn: Fix HEVC encode transform_skip 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 eb966a32aab..a909e27179a 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -641,6 +641,18 @@ static bool cu_qp_delta_supported(struct si_screen *sscreen) return false; } +static bool transform_skip_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 >= 2; + else if (sscreen->info.vcn_ip_version >= VCN_3_0_0) + return sscreen->info.vcn_enc_minor_version >= 23; + else + return false; +} + static void radeon_vcn_enc_hevc_get_spec_misc_param(struct radeon_encoder *enc, struct pipe_h265_enc_picture_desc *pic) { @@ -659,7 +671,7 @@ static void radeon_vcn_enc_hevc_get_spec_misc_param(struct radeon_encoder *enc, enc->enc_pic.hevc_spec_misc.half_pel_enabled = 1; enc->enc_pic.hevc_spec_misc.quarter_pel_enabled = 1; enc->enc_pic.hevc_spec_misc.transform_skip_disabled = - sscreen->info.vcn_ip_version < VCN_3_0_0 || + !transform_skip_supported(sscreen) || !pic->pic.transform_skip_enabled_flag; enc->enc_pic.hevc_spec_misc.cu_qp_delta_enabled_flag = (cu_qp_delta_supported(sscreen) && pic->pic.cu_qp_delta_enabled_flag) ||