From 51a19c83b000407a31b5cd17b996084a6b58a4ff Mon Sep 17 00:00:00 2001 From: Chad Versace Date: Tue, 4 Aug 2020 10:14:11 -0700 Subject: [PATCH] anv/image: Check DISJOINT in vkGetPhysicalDeviceImageFormatProperties2 (v2) The code did not return error when VK_IMAGE_CREATE_DISJOINT_BIT was incompatible with the other input params. If the Vulkan spec forbids a set of input params for vkCreateImage, but permits them for vkGetPhysicalDeviceImageFormatProperties2, then vkGetPhysicalDeviceImageFormatProperties2 must reject those input params with failure. - v2: Clearer commit message. CC: Reviewed-by: Lionel Landwerlin (v2) Reviewed-by: Jason Ekstrand --- src/intel/vulkan/anv_formats.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c index 6cbbc77337c..a8d847a57b4 100644 --- a/src/intel/vulkan/anv_formats.c +++ b/src/intel/vulkan/anv_formats.c @@ -923,6 +923,31 @@ anv_get_image_format_properties( } } + if (info->flags & VK_IMAGE_CREATE_DISJOINT_BIT) { + /* From the Vulkan 1.2.149 spec, VkImageCreateInfo: + * + * If format is a multi-planar format, and if imageCreateFormatFeatures + * (as defined in Image Creation Limits) does not contain + * VK_FORMAT_FEATURE_DISJOINT_BIT, then flags must not contain + * VK_IMAGE_CREATE_DISJOINT_BIT. + */ + if (format->n_planes > 1 && + !(format_feature_flags & VK_FORMAT_FEATURE_DISJOINT_BIT)) { + goto unsupported; + } + + /* From the Vulkan 1.2.149 spec, VkImageCreateInfo: + * + * If format is not a multi-planar format, and flags does not include + * VK_IMAGE_CREATE_ALIAS_BIT, flags must not contain + * VK_IMAGE_CREATE_DISJOINT_BIT. + */ + if (format->n_planes == 1 && + !(info->flags & VK_IMAGE_CREATE_ALIAS_BIT)) { + goto unsupported; + } + } + if (info->usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) { /* Nothing to check. */ }