diff --git a/.pick_status.json b/.pick_status.json index 3c800c44ace..bf67d02a3c9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -204,7 +204,7 @@ "description": "radeonsi/vcn: Enable VCN4 AV1 encode WA", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/common/ac_vcn_enc.h b/src/amd/common/ac_vcn_enc.h index bc9c02658f3..0a6ea335c2d 100644 --- a/src/amd/common/ac_vcn_enc.h +++ b/src/amd/common/ac_vcn_enc.h @@ -236,6 +236,7 @@ typedef struct rvcn_enc_session_init_s { uint32_t pre_encode_chroma_enabled; uint32_t slice_output_enabled; uint32_t display_remote; + uint32_t WA_flags; } rvcn_enc_session_init_t; typedef struct rvcn_enc_layer_control_s { diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c index ec339179836..24465a78cb0 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c @@ -79,6 +79,7 @@ static void radeon_enc_op_preset(struct radeon_encoder *enc) static void radeon_enc_session_init(struct radeon_encoder *enc) { + struct si_screen *sscreen = (struct si_screen *)enc->screen; uint32_t av1_height = enc->enc_pic.pic_height_in_luma_samples; switch (u_reduce_video_profile(enc->base.profile)) { @@ -122,6 +123,12 @@ static void radeon_enc_session_init(struct radeon_encoder *enc) enc->enc_pic.render_width) || (enc->enc_pic.session_init.aligned_picture_height != enc->enc_pic.render_height); + + if (sscreen->info.vcn_ip_version == VCN_4_0_2 || + sscreen->info.vcn_ip_version == VCN_4_0_5 || + sscreen->info.vcn_ip_version == VCN_4_0_6) + enc->enc_pic.session_init.WA_flags = 1; + break; default: assert(0); @@ -143,7 +150,7 @@ static void radeon_enc_session_init(struct radeon_encoder *enc) RADEON_ENC_CS(enc->enc_pic.session_init.pre_encode_chroma_enabled); RADEON_ENC_CS(enc->enc_pic.session_init.slice_output_enabled); RADEON_ENC_CS(enc->enc_pic.session_init.display_remote); - RADEON_ENC_CS(0); + RADEON_ENC_CS(enc->enc_pic.session_init.WA_flags); RADEON_ENC_END(); }