From 270ea2ac7e7b63d604ebb979136c80b1e2fb9829 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 4 Oct 2022 15:31:41 -0700 Subject: [PATCH] zink: Skip border color clamping for compressed formats. You won't have a non-void channel for block formats, because "how many bits are there in the red channel" doesn't even make sense. Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_format.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/zink/zink_format.c b/src/gallium/drivers/zink/zink_format.c index cb70d65d3d0..9c6a9149573 100644 --- a/src/gallium/drivers/zink/zink_format.c +++ b/src/gallium/drivers/zink/zink_format.c @@ -347,15 +347,19 @@ zink_format_clamp_channel_color(const struct util_format_description *desc, unio int non_void = util_format_get_first_non_void_channel(desc->format); switch (desc->channel[i].type) { case UTIL_FORMAT_TYPE_VOID: - if (desc->channel[non_void].type == UTIL_FORMAT_TYPE_FLOAT) { - dst->f[i] = uif(UINT32_MAX); + if (non_void != -1) { + if (desc->channel[non_void].type == UTIL_FORMAT_TYPE_FLOAT) { + dst->f[i] = uif(UINT32_MAX); + } else { + if (desc->channel[non_void].normalized) + dst->f[i] = 1.0; + else if (desc->channel[non_void].type == UTIL_FORMAT_TYPE_SIGNED) + dst->i[i] = INT32_MAX; + else + dst->ui[i] = UINT32_MAX; + } } else { - if (desc->channel[non_void].normalized) - dst->f[i] = 1.0; - else if (desc->channel[non_void].type == UTIL_FORMAT_TYPE_SIGNED) - dst->i[i] = INT32_MAX; - else - dst->ui[i] = UINT32_MAX; + dst->ui[i] = src->ui[i]; } break; case UTIL_FORMAT_TYPE_SIGNED: