From 4ab38112f36ec25afe98a1636909bb8bde4ad7a1 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Sun, 14 Aug 2022 21:41:04 +0300 Subject: [PATCH] anv: fixup assertions on lowered storage formats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With VK_FORMAT_B10G11R11_UFLOAT_PACK32 in particular, we're seeing applications create image views with swizzle = R,G,B,0 But since the format has no alpha channel, the swizzle value for it does not matter for the equivalence we're trying to verify. Signed-off-by: Lionel Landwerlin Fixes: a9edc268b9b1 ("anv: validate image view lowered storage formats for storage") Reviewed-by: José Roberto de Souza Reviewed-by: Tapani Pälli Part-of: --- src/intel/isl/isl.h | 16 ++++++++++++++++ src/intel/vulkan/anv_image.c | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index 715a089cb8c..2073c58154a 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -2357,6 +2357,22 @@ isl_swizzle_is_identity(struct isl_swizzle swizzle) swizzle.a == ISL_CHANNEL_SELECT_ALPHA; } +static inline bool +isl_swizzle_is_identity_for_format(enum isl_format format, + struct isl_swizzle swizzle) +{ + const struct isl_format_layout *layout = isl_format_get_layout(format); + +#define channel_id_or_zero(name, ID) \ + (swizzle.name == ISL_CHANNEL_SELECT_##ID || \ + layout->channels.name.bits == 0) + return channel_id_or_zero(r, RED) && + channel_id_or_zero(g, GREEN) && + channel_id_or_zero(b, BLUE) && + channel_id_or_zero(a, ALPHA); +#undef channel_id_or_zero +} + bool isl_swizzle_supports_rendering(const struct intel_device_info *devinfo, struct isl_swizzle swizzle); diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index bcc04a3853e..6fb8b43c6de 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -2566,7 +2566,7 @@ anv_image_fill_surface_state(struct anv_device *device, */ assert(isl_formats_have_same_bits_per_channel(lower_format, view.format) || - isl_swizzle_is_identity(view.swizzle)); + isl_swizzle_is_identity_for_format(view.format, view.swizzle)); view.format = lower_format; }