From 9696fd378a4dff4b2cb78cd5b1d7ccd2d9799d1f Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Wed, 26 Jun 2024 10:20:11 +0200 Subject: [PATCH] v3dv: restrict to channels when encoding border color Not all the formats have 4 channels, so let's restrict the border encoding to the number of channels. This has been detected by the Undefined Behaviour Sanitizer (UBSan). Reviewed-by: Iago Toral Quiroga Signed-off-by: Juan A. Suarez Romero Part-of: --- src/broadcom/vulkan/v3dvx_device.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/broadcom/vulkan/v3dvx_device.c b/src/broadcom/vulkan/v3dvx_device.c index a27d65cfd23..1df69d0240f 100644 --- a/src/broadcom/vulkan/v3dvx_device.c +++ b/src/broadcom/vulkan/v3dvx_device.c @@ -117,18 +117,18 @@ static union pipe_color_union encode_border_color( border.f[0] = CLAMP(border.f[0], 0, 1); border.ui[1] = CLAMP(border.ui[1], 0, 0xff); } else if (vk_format_is_unorm(bc_info->format)) { - for (int i = 0; i < 4; i++) + for (int i = 0; i < desc->nr_channels; i++) border.f[i] = CLAMP(border.f[i], 0, 1); } else if (vk_format_is_snorm(bc_info->format)) { - for (int i = 0; i < 4; i++) + for (int i = 0; i < desc->nr_channels; i++) border.f[i] = CLAMP(border.f[i], -1, 1); } else if (vk_format_is_uint(bc_info->format) && desc->channel[0].size < 32) { - for (int i = 0; i < 4; i++) + for (int i = 0; i < desc->nr_channels; i++) border.ui[i] = CLAMP(border.ui[i], 0, (1 << desc->channel[i].size)); } else if (vk_format_is_sint(bc_info->format) && desc->channel[0].size < 32) { - for (int i = 0; i < 4; i++) + for (int i = 0; i < desc->nr_channels; i++) border.i[i] = CLAMP(border.i[i], -(1 << (desc->channel[i].size - 1)), (1 << (desc->channel[i].size - 1)) - 1);