From 138ba42a8705ea3ae5b3a66d64f5d06b7a5abc7b Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 20 Aug 2024 17:59:51 +0200 Subject: [PATCH] radeonsi/vcn: Fix radeon_enc_code_ue with values over 2^16 Values over 2^16 as ue(v) are encoded with more than 32 bits, but radeon_enc_code_fixed_bits can only handle 32 bits at max. Change radeon_enc_code_ue to code the leading zeros separately. Reviewed-by: Ruijing Dong Part-of: --- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 7f0a4569409..f52388d042a 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -1914,7 +1914,7 @@ void radeon_enc_flush_headers(struct radeon_encoder *enc) void radeon_enc_code_ue(struct radeon_encoder *enc, unsigned int value) { - int x = -1; + unsigned int x = 0; unsigned int ue_code = value + 1; value += 1; @@ -1923,8 +1923,9 @@ void radeon_enc_code_ue(struct radeon_encoder *enc, unsigned int value) x += 1; } - unsigned int ue_length = (x << 1) + 1; - radeon_enc_code_fixed_bits(enc, ue_code, ue_length); + if (x > 1) + radeon_enc_code_fixed_bits(enc, 0, x - 1); + radeon_enc_code_fixed_bits(enc, ue_code, x); } void radeon_enc_code_se(struct radeon_encoder *enc, int value)