radeonsi/vcn: Enable VCN4 AV1 encode WA

Cc: mesa-stable
Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31889>
(cherry picked from commit c9ade8c3b5)
This commit is contained in:
David Rosca 2024-10-29 15:35:05 +01:00 committed by Eric Engestrom
parent 904c9d6464
commit 85cfa40dcc
3 changed files with 10 additions and 2 deletions

View file

@ -204,7 +204,7 @@
"description": "radeonsi/vcn: Enable VCN4 AV1 encode WA", "description": "radeonsi/vcn: Enable VCN4 AV1 encode WA",
"nominated": true, "nominated": true,
"nomination_type": 0, "nomination_type": 0,
"resolution": 0, "resolution": 1,
"main_sha": null, "main_sha": null,
"because_sha": null, "because_sha": null,
"notes": null "notes": null

View file

@ -236,6 +236,7 @@ typedef struct rvcn_enc_session_init_s {
uint32_t pre_encode_chroma_enabled; uint32_t pre_encode_chroma_enabled;
uint32_t slice_output_enabled; uint32_t slice_output_enabled;
uint32_t display_remote; uint32_t display_remote;
uint32_t WA_flags;
} rvcn_enc_session_init_t; } rvcn_enc_session_init_t;
typedef struct rvcn_enc_layer_control_s { typedef struct rvcn_enc_layer_control_s {

View file

@ -79,6 +79,7 @@ static void radeon_enc_op_preset(struct radeon_encoder *enc)
static void radeon_enc_session_init(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; uint32_t av1_height = enc->enc_pic.pic_height_in_luma_samples;
switch (u_reduce_video_profile(enc->base.profile)) { 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.render_width) ||
(enc->enc_pic.session_init.aligned_picture_height != (enc->enc_pic.session_init.aligned_picture_height !=
enc->enc_pic.render_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; break;
default: default:
assert(0); 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.pre_encode_chroma_enabled);
RADEON_ENC_CS(enc->enc_pic.session_init.slice_output_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(enc->enc_pic.session_init.display_remote);
RADEON_ENC_CS(0); RADEON_ENC_CS(enc->enc_pic.session_init.WA_flags);
RADEON_ENC_END(); RADEON_ENC_END();
} }