From b189a72fe4f3f98a7368e932b303f3d61ce329b3 Mon Sep 17 00:00:00 2001 From: Sviatoslav Peleshko Date: Wed, 8 Feb 2023 10:48:40 +0200 Subject: [PATCH] anv: Handle UNDEFINED format in image format list It's not invalid to have this value in the list, but the only case it is actually valid as format in the creation of an image or image view is with Android Hardware Buffers which have their format specified externally. So we can just ignore all entries with VK_FORMAT_UNDEFINED. Cc: 22.2 Signed-off-by: Sviatoslav Peleshko Reviewed-by: Ivan Briano Reviewed-by: Lionel Landwerlin Part-of: (cherry picked from commit 98991513616a3d8995eb59c70d9cf22bbb0e3b2e) --- .pick_status.json | 2 +- src/intel/vulkan/anv_formats.c | 4 ++++ src/intel/vulkan/anv_image.c | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 9f100f42c36..9e86678a199 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3163,7 +3163,7 @@ "description": "anv: Handle UNDEFINED format in image format list", "nominated": false, "nomination_type": null, - "resolution": 4, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c index 959c2c27976..1c8f55ebd14 100644 --- a/src/intel/vulkan/anv_formats.c +++ b/src/intel/vulkan/anv_formats.c @@ -1037,6 +1037,10 @@ anv_get_image_format_properties( if ((info->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) && format_list_info) { for (uint32_t i = 0; i < format_list_info->viewFormatCount; ++i) { VkFormat vk_view_format = format_list_info->pViewFormats[i]; + + if (vk_view_format == VK_FORMAT_UNDEFINED) + continue; + const struct anv_format *anv_view_format = anv_get_format(vk_view_format); VkFormatFeatureFlags2 view_format_features = anv_get_image_format_features2(devinfo, vk_view_format, diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index d556c6921a2..5fff72dbb88 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -364,6 +364,9 @@ can_fast_clear_with_non_zero_color(const struct intel_device_info *devinfo, /* Check bit compatibility for clear color components */ for (uint32_t i = 0; i < fmt_list->viewFormatCount; i++) { + if (fmt_list->pViewFormats[i] == VK_FORMAT_UNDEFINED) + continue; + struct anv_format_plane view_format_plane = anv_get_format_plane(devinfo, fmt_list->pViewFormats[i], plane, image->vk.tiling); @@ -401,6 +404,9 @@ storage_image_format_supports_atomic(const struct intel_device_info *devinfo, if (fmt_list) { for (uint32_t i = 0; i < fmt_list->viewFormatCount; i++) { + if (fmt_list->pViewFormats[i] == VK_FORMAT_UNDEFINED) + continue; + enum isl_format view_format = anv_get_isl_format(devinfo, fmt_list->pViewFormats[i], VK_IMAGE_ASPECT_COLOR_BIT, vk_tiling); @@ -469,6 +475,9 @@ formats_ccs_e_compatible(const struct intel_device_info *devinfo, return false; for (uint32_t i = 0; i < fmt_list->viewFormatCount; i++) { + if (fmt_list->pViewFormats[i] == VK_FORMAT_UNDEFINED) + continue; + enum isl_format view_format = anv_get_isl_format_with_usage(devinfo, fmt_list->pViewFormats[i], VK_IMAGE_ASPECT_COLOR_BIT, vk_usage,