From dd99b58aa8d4bbafffa8f7dd6b30ca0619632e88 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Fri, 1 Sep 2023 19:08:57 +0200 Subject: [PATCH] tu: Support clearing A8_UNORM Part-of: --- src/freedreno/vulkan/tu_clear_blit.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_clear_blit.cc b/src/freedreno/vulkan/tu_clear_blit.cc index 4bfbaea576a..36c56bc8027 100644 --- a/src/freedreno/vulkan/tu_clear_blit.cc +++ b/src/freedreno/vulkan/tu_clear_blit.cc @@ -179,8 +179,12 @@ r2d_clear_value(struct tu_cs *cs, enum pipe_format format, const VkClearValue *v assert(desc->layout == UTIL_FORMAT_LAYOUT_PLAIN || format == PIPE_FORMAT_R11G11B10_FLOAT); - for (unsigned i = 0; i < desc->nr_channels; i++) { - const struct util_format_channel_description *ch = &desc->channel[i]; + for (unsigned i = 0; i < 4; i++) { + if (desc->swizzle[i] > PIPE_SWIZZLE_W) + continue; + + const struct util_format_channel_description *ch = + &desc->channel[desc->swizzle[i]]; if (ifmt == R2D_UNORM8) { float linear = val->color.float32[i]; if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB && i < 3) @@ -2981,6 +2985,10 @@ pack_gmem_clear_value(const VkClearValue *val, enum pipe_format format, uint32_t case 32: memcpy(clear_value, val->color.float32, 4 * sizeof(float)); break; + case 0: + assert(format == PIPE_FORMAT_A8_UNORM); + PACK_F(a8_unorm); + break; default: unreachable("unexpected channel size"); }