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