layers: add missing VkFormatFeatureFlags checks

Checks for TRANSFER_SRC / TRANSFER_DST formats were added to:
- vkCmdClearColorImage
- vkCmdCopyImage
- vkCmdResolveImage
- vkCmdCopyImageToBuffer
- vkCmdCopyBufferToImage
These checks require VK_KHR_maintenance1 or Vulkan 1.1.

Existing checks were adapted to use the new helper function:
- vkCmdClearDepthStencilImage
- vkCmdBlitImage
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp
index 217217c..66ae672 100644
--- a/layers/buffer_validation.cpp
+++ b/layers/buffer_validation.cpp
@@ -1070,6 +1070,10 @@
         skip |= ValidateCmdQueueFlags(dev_data, cb_node, "vkCmdClearColorImage()", VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT,
                                       VALIDATION_ERROR_18802415);
         skip |= ValidateCmd(dev_data, cb_node, CMD_CLEARCOLORIMAGE, "vkCmdClearColorImage()");
+        if (GetApiVersion(dev_data) >= VK_API_VERSION_1_1 || GetDeviceExtensions(dev_data)->vk_khr_maintenance1) {
+            skip |= ValidateImageFormatFeatureFlags(dev_data, image_state, VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
+                                                    "vkCmdClearColorImage", VALIDATION_ERROR_18800002, VALIDATION_ERROR_18800002);
+        }
         skip |= insideRenderPass(dev_data, cb_node, "vkCmdClearColorImage()", VALIDATION_ERROR_18800017);
         for (uint32_t i = 0; i < rangeCount; ++i) {
             std::string param_name = "pRanges[" + std::to_string(i) + "]";
@@ -1108,6 +1112,11 @@
         skip |= ValidateCmdQueueFlags(device_data, cb_node, "vkCmdClearDepthStencilImage()", VK_QUEUE_GRAPHICS_BIT,
                                       VALIDATION_ERROR_18a02415);
         skip |= ValidateCmd(device_data, cb_node, CMD_CLEARDEPTHSTENCILIMAGE, "vkCmdClearDepthStencilImage()");
+        if (GetApiVersion(device_data) >= VK_API_VERSION_1_1 || GetDeviceExtensions(device_data)->vk_khr_maintenance1) {
+            skip |= ValidateImageFormatFeatureFlags(device_data, image_state, VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
+                                                    "vkCmdClearDepthStencilImage", VALIDATION_ERROR_18a00010,
+                                                    VALIDATION_ERROR_18a00010);
+        }
         skip |= insideRenderPass(device_data, cb_node, "vkCmdClearDepthStencilImage()", VALIDATION_ERROR_18a00017);
         for (uint32_t i = 0; i < rangeCount; ++i) {
             std::string param_name = "pRanges[" + std::to_string(i) + "]";
@@ -1136,17 +1145,6 @@
             skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
                             HandleToUint64(image), VALIDATION_ERROR_18a00012, "%s.", str);
         }
-        VkFormatProperties props = GetFormatProperties(device_data, image_state->createInfo.format);
-        VkImageTiling tiling = image_state->createInfo.tiling;
-        VkFormatFeatureFlags flags = (tiling == VK_IMAGE_TILING_LINEAR ? props.linearTilingFeatures : props.optimalTilingFeatures);
-        if ((GetDeviceExtensions(device_data)->vk_khr_maintenance1) &&
-            (VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR != (flags & VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR))) {
-            skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
-                            HandleToUint64(image), VALIDATION_ERROR_18a00010,
-                            "vkCmdClearDepthStencilImage() called with an image of format %s and tiling %s that does not support "
-                            "VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR.",
-                            string_VkFormat(image_state->createInfo.format), string_VkImageTiling(image_state->createInfo.tiling));
-        }
     }
     return skip;
 }
@@ -2051,6 +2049,12 @@
                                     "vkCmdCopyImage()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
     skip |= ValidateImageUsageFlags(device_data, dst_image_state, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_19000106,
                                     "vkCmdCopyImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT");
+    if (GetApiVersion(device_data) >= VK_API_VERSION_1_1 || GetDeviceExtensions(device_data)->vk_khr_maintenance1) {
+        skip |= ValidateImageFormatFeatureFlags(device_data, src_image_state, VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
+                                                "vkCmdCopyImage()", VALIDATION_ERROR_190000fa, VALIDATION_ERROR_190000fa);
+        skip |= ValidateImageFormatFeatureFlags(device_data, dst_image_state, VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
+                                                "vkCmdCopyImage()", VALIDATION_ERROR_19000104, VALIDATION_ERROR_19000104);
+    }
     skip |= ValidateCmdQueueFlags(device_data, cb_node, "vkCmdCopyImage()",
                                   VK_QUEUE_TRANSFER_BIT | VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, VALIDATION_ERROR_19002415);
     skip |= ValidateCmd(device_data, cb_node, CMD_COPYIMAGE, "vkCmdCopyImage()");
@@ -2229,6 +2233,8 @@
             ValidateCmdQueueFlags(device_data, cb_node, "vkCmdResolveImage()", VK_QUEUE_GRAPHICS_BIT, VALIDATION_ERROR_1c802415);
         skip |= ValidateCmd(device_data, cb_node, CMD_RESOLVEIMAGE, "vkCmdResolveImage()");
         skip |= insideRenderPass(device_data, cb_node, "vkCmdResolveImage()", VALIDATION_ERROR_1c800017);
+        skip |= ValidateImageFormatFeatureFlags(device_data, dst_image_state, VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
+                                                "vkCmdResolveImage()", VALIDATION_ERROR_1c800210, VALIDATION_ERROR_1c800212);
 
         // For each region, the number of layers in the image subresource should not be zero
         // For each region, src and dest image aspect must be color only
@@ -2315,6 +2321,11 @@
         skip |= ValidateCmdQueueFlags(device_data, cb_node, "vkCmdBlitImage()", VK_QUEUE_GRAPHICS_BIT, VALIDATION_ERROR_18402415);
         skip |= ValidateCmd(device_data, cb_node, CMD_BLITIMAGE, "vkCmdBlitImage()");
         skip |= insideRenderPass(device_data, cb_node, "vkCmdBlitImage()", VALIDATION_ERROR_18400017);
+        skip |= ValidateImageFormatFeatureFlags(device_data, src_image_state, VK_FORMAT_FEATURE_BLIT_SRC_BIT, "vkCmdBlitImage()",
+                                                VALIDATION_ERROR_184001b4, VALIDATION_ERROR_184001b4);
+        skip |= ValidateImageFormatFeatureFlags(device_data, dst_image_state, VK_FORMAT_FEATURE_BLIT_DST_BIT, "vkCmdBlitImage()",
+                                                VALIDATION_ERROR_184001be, VALIDATION_ERROR_184001be);
+
         // TODO: Need to validate image layouts, which will include layout validation for shared presentable images
 
         VkFormat src_format = src_image_state->createInfo.format;
@@ -2322,30 +2333,13 @@
         VkImageType src_type = src_image_state->createInfo.imageType;
         VkImageType dst_type = dst_image_state->createInfo.imageType;
 
-        VkFormatProperties props = GetFormatProperties(device_data, src_format);
-        VkImageTiling tiling = src_image_state->createInfo.tiling;
-        VkFormatFeatureFlags flags = (tiling == VK_IMAGE_TILING_LINEAR ? props.linearTilingFeatures : props.optimalTilingFeatures);
-        if (VK_FORMAT_FEATURE_BLIT_SRC_BIT != (flags & VK_FORMAT_FEATURE_BLIT_SRC_BIT)) {
-            skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-                            HandleToUint64(cb_node->commandBuffer), VALIDATION_ERROR_184001b4,
-                            "vkCmdBlitImage: source image format %s does not support VK_FORMAT_FEATURE_BLIT_SRC_BIT feature.",
-                            string_VkFormat(src_format));
-        }
-
-        if ((VK_FILTER_LINEAR == filter) &&
-            (VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT != (flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT))) {
+        if (VK_FILTER_LINEAR == filter) {
+            skip |= ValidateImageFormatFeatureFlags(device_data, src_image_state, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
+                                                    "vkCmdBlitImage()", VALIDATION_ERROR_184001d6, VALIDATION_ERROR_184001d6);
+        } else if (VK_FILTER_CUBIC_IMG == filter) {
             skip |=
-                log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-                        HandleToUint64(cb_node->commandBuffer), VALIDATION_ERROR_184001d6,
-                        "vkCmdBlitImage: source image format %s does not support linear filtering.", string_VkFormat(src_format));
-        }
-
-        if ((VK_FILTER_CUBIC_IMG == filter) && (VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG !=
-                                                (flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG))) {
-            skip |=
-                log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-                        HandleToUint64(cb_node->commandBuffer), VALIDATION_ERROR_184001d8,
-                        "vkCmdBlitImage: source image format %s does not support cubic filtering.", string_VkFormat(src_format));
+                ValidateImageFormatFeatureFlags(device_data, src_image_state, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
+                                                "vkCmdBlitImage()", VALIDATION_ERROR_184001d8, VALIDATION_ERROR_184001d8);
         }
 
         if ((VK_FILTER_CUBIC_IMG == filter) && (VK_IMAGE_TYPE_3D != src_type)) {
@@ -2354,16 +2348,6 @@
                             "vkCmdBlitImage: source image type must be VK_IMAGE_TYPE_3D when cubic filtering is specified.");
         }
 
-        props = GetFormatProperties(device_data, dst_format);
-        tiling = dst_image_state->createInfo.tiling;
-        flags = (tiling == VK_IMAGE_TILING_LINEAR ? props.linearTilingFeatures : props.optimalTilingFeatures);
-        if (VK_FORMAT_FEATURE_BLIT_DST_BIT != (flags & VK_FORMAT_FEATURE_BLIT_DST_BIT)) {
-            skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-                            HandleToUint64(cb_node->commandBuffer), VALIDATION_ERROR_184001be,
-                            "vkCmdBlitImage: destination image format %s does not support VK_FORMAT_FEATURE_BLIT_DST_BIT feature.",
-                            string_VkFormat(dst_format));
-        }
-
         if ((VK_SAMPLE_COUNT_1_BIT != src_image_state->createInfo.samples) ||
             (VK_SAMPLE_COUNT_1_BIT != dst_image_state->createInfo.samples)) {
             skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
@@ -3040,6 +3024,32 @@
                                 kVulkanObjectTypeImage, msgCode, func_name, usage_string);
 }
 
+bool ValidateImageFormatFeatureFlags(layer_data *dev_data, IMAGE_STATE const *image_state, VkFormatFeatureFlags desired,
+                                     char const *func_name, UNIQUE_VALIDATION_ERROR_CODE linear_vuid,
+                                     UNIQUE_VALIDATION_ERROR_CODE optimal_vuid) {
+    VkFormatProperties format_properties = GetFormatProperties(dev_data, image_state->createInfo.format);
+    const debug_report_data *report_data = core_validation::GetReportData(dev_data);
+    bool skip = false;
+    if (image_state->createInfo.tiling == VK_IMAGE_TILING_LINEAR) {
+        if ((format_properties.linearTilingFeatures & desired) != desired) {
+            skip |=
+                log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
+                        HandleToUint64(image_state->image), linear_vuid,
+                        "In %s, invalid linearTilingFeatures (0x%08X) for format %u used by image %" PRIx64 ".", func_name,
+                        format_properties.linearTilingFeatures, image_state->createInfo.format, HandleToUint64(image_state->image));
+        }
+    } else if (image_state->createInfo.tiling == VK_IMAGE_TILING_OPTIMAL) {
+        if ((format_properties.optimalTilingFeatures & desired) != desired) {
+            skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
+                            HandleToUint64(image_state->image), optimal_vuid,
+                            "In %s, invalid optimalTilingFeatures (0x%08X) for format %u used by image %" PRIx64 ".", func_name,
+                            format_properties.optimalTilingFeatures, image_state->createInfo.format,
+                            HandleToUint64(image_state->image));
+        }
+    }
+    return skip;
+}
+
 // Helper function to validate usage flags for buffers. For given buffer_state send actual vs. desired usage off to helper above
 // where an error will be flagged if usage is not correct
 bool ValidateBufferUsageFlags(layer_data *device_data, BUFFER_STATE const *buffer_state, VkFlags desired, bool strict,
@@ -3974,6 +3984,10 @@
                                     "vkCmdCopyImageToBuffer()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
     skip |= ValidateBufferUsageFlags(device_data, dst_buffer_state, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true,
                                      VALIDATION_ERROR_1920017e, "vkCmdCopyImageToBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT");
+    if (GetApiVersion(device_data) >= VK_API_VERSION_1_1 || GetDeviceExtensions(device_data)->vk_khr_maintenance1) {
+        skip |= ValidateImageFormatFeatureFlags(device_data, src_image_state, VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
+                                                "vkCmdCopyImageToBuffer()", VALIDATION_ERROR_19200172, VALIDATION_ERROR_19200172);
+    }
     skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyImageToBuffer()", VALIDATION_ERROR_19200017);
     bool hit_error = false;
     for (uint32_t i = 0; i < regionCount; ++i) {
@@ -4028,6 +4042,10 @@
                                      VALIDATION_ERROR_18e0015c, "vkCmdCopyBufferToImage()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
     skip |= ValidateImageUsageFlags(device_data, dst_image_state, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_18e00162,
                                     "vkCmdCopyBufferToImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT");
+    if (GetApiVersion(device_data) >= VK_API_VERSION_1_1 || GetDeviceExtensions(device_data)->vk_khr_maintenance1) {
+        skip |= ValidateImageFormatFeatureFlags(device_data, dst_image_state, VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
+                                                "vkCmdCopyBufferToImage()", VALIDATION_ERROR_18e0015e, VALIDATION_ERROR_18e0015e);
+    }
     skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyBufferToImage()", VALIDATION_ERROR_18e00017);
     bool hit_error = false;
     for (uint32_t i = 0; i < regionCount; ++i) {
diff --git a/layers/buffer_validation.h b/layers/buffer_validation.h
index 7c7df98..d7a3682 100644
--- a/layers/buffer_validation.h
+++ b/layers/buffer_validation.h
@@ -174,6 +174,10 @@
 bool ValidateImageUsageFlags(layer_data *dev_data, IMAGE_STATE const *image_state, VkFlags desired, bool strict,
                              int32_t const msgCode, char const *func_name, char const *usage_string);
 
+bool ValidateImageFormatFeatureFlags(layer_data *dev_data, IMAGE_STATE const *image_state, VkFormatFeatureFlags desired,
+                                     char const *func_name, UNIQUE_VALIDATION_ERROR_CODE linear_vuid,
+                                     UNIQUE_VALIDATION_ERROR_CODE optimal_vuid);
+
 bool ValidateBufferUsageFlags(layer_data *dev_data, BUFFER_STATE const *buffer_state, VkFlags desired, bool strict,
                               int32_t const msgCode, char const *func_name, char const *usage_string);
 
diff --git a/layers/vk_validation_error_database.txt b/layers/vk_validation_error_database.txt
index 958836e..1fb924c 100644
--- a/layers/vk_validation_error_database.txt
+++ b/layers/vk_validation_error_database.txt
@@ -1806,7 +1806,7 @@
 VALIDATION_ERROR_1860f201~^~Y~^~Unknown~^~vkCmdClearAttachments~^~VUID-vkCmdClearAttachments-pAttachments-parameter~^~core~^~The spec valid usage text states 'pAttachments must be a valid pointer to an array of attachmentCount valid VkClearAttachment structures' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdClearAttachments-pAttachments-parameter)~^~implicit
 VALIDATION_ERROR_18620e01~^~Y~^~Unknown~^~vkCmdClearAttachments~^~VUID-vkCmdClearAttachments-pRects-parameter~^~core~^~The spec valid usage text states 'pRects must be a valid pointer to an array of rectCount VkClearRect structures' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdClearAttachments-pRects-parameter)~^~implicit
 VALIDATION_ERROR_1862aa1b~^~Y~^~Unknown~^~vkCmdClearAttachments~^~VUID-vkCmdClearAttachments-rectCount-arraylength~^~core~^~The spec valid usage text states 'rectCount must be greater than 0' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdClearAttachments-rectCount-arraylength)~^~implicit
-VALIDATION_ERROR_18800002~^~N~^~Unknown~^~vkCmdClearColorImage~^~VUID-vkCmdClearColorImage-image-00001~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'image must use a format that supports VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdClearColorImage-image-00001)~^~
+VALIDATION_ERROR_18800002~^~Y~^~Unknown~^~vkCmdClearColorImage~^~VUID-vkCmdClearColorImage-image-00001~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'image must use a format that supports VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdClearColorImage-image-00001)~^~
 VALIDATION_ERROR_18800004~^~Y~^~Unknown~^~vkCmdClearColorImage~^~VUID-vkCmdClearColorImage-image-00002~^~core~^~The spec valid usage text states 'image must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdClearColorImage-image-00002)~^~
 VALIDATION_ERROR_18800006~^~Y~^~Unknown~^~vkCmdClearColorImage~^~VUID-vkCmdClearColorImage-image-00003~^~core~^~The spec valid usage text states 'If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdClearColorImage-image-00003)~^~
 VALIDATION_ERROR_18800008~^~Y~^~InvalidImageLayout~^~vkCmdClearColorImage~^~VUID-vkCmdClearColorImage-imageLayout-00004~^~core~^~The spec valid usage text states 'imageLayout must specify the layout of the image subresource ranges of image specified in pRanges at the time this command is executed on a VkDevice' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdClearColorImage-imageLayout-00004)~^~
@@ -1880,7 +1880,7 @@
 VALIDATION_ERROR_18e00158~^~Y~^~ImageBufferCopyTests~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-pRegions-00172~^~core~^~The spec valid usage text states 'The image region specified by each element of pRegions must be a region that is contained within dstImage' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyBufferToImage-pRegions-00172)~^~
 VALIDATION_ERROR_18e0015a~^~N~^~Unknown~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-pRegions-00173~^~core~^~The spec valid usage text states 'The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyBufferToImage-pRegions-00173)~^~
 VALIDATION_ERROR_18e0015c~^~Y~^~None~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-srcBuffer-00174~^~core~^~The spec valid usage text states 'srcBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyBufferToImage-srcBuffer-00174)~^~
-VALIDATION_ERROR_18e0015e~^~N~^~Unknown~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-dstImage-00175~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'dstImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyBufferToImage-dstImage-00175)~^~
+VALIDATION_ERROR_18e0015e~^~Y~^~Unknown~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-dstImage-00175~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'dstImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyBufferToImage-dstImage-00175)~^~
 VALIDATION_ERROR_18e00160~^~Y~^~Unknown~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-srcBuffer-00176~^~core~^~The spec valid usage text states 'If srcBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyBufferToImage-srcBuffer-00176)~^~
 VALIDATION_ERROR_18e00162~^~Y~^~None~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-dstImage-00177~^~core~^~The spec valid usage text states 'dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyBufferToImage-dstImage-00177)~^~
 VALIDATION_ERROR_18e00164~^~Y~^~Unknown~^~vkCmdCopyBufferToImage~^~VUID-vkCmdCopyBufferToImage-dstImage-00178~^~core~^~The spec valid usage text states 'If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyBufferToImage-dstImage-00178)~^~
@@ -1907,12 +1907,12 @@
 VALIDATION_ERROR_190000f4~^~Y~^~CopyImageSrcSizeExceeded~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-pRegions-00122~^~core~^~The spec valid usage text states 'The source region specified by each element of pRegions must be a region that is contained within srcImage' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-pRegions-00122)~^~
 VALIDATION_ERROR_190000f6~^~Y~^~CopyImageDstSizeExceeded~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-pRegions-00123~^~core~^~The spec valid usage text states 'The destination region specified by each element of pRegions must be a region that is contained within dstImage' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-pRegions-00123)~^~
 VALIDATION_ERROR_190000f8~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-pRegions-00124~^~core~^~The spec valid usage text states 'The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-pRegions-00124)~^~
-VALIDATION_ERROR_190000fa~^~N~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-srcImage-00125~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'srcImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyImage-srcImage-00125)~^~
+VALIDATION_ERROR_190000fa~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-srcImage-00125~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'srcImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyImage-srcImage-00125)~^~
 VALIDATION_ERROR_190000fc~^~Y~^~None~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-srcImage-00126~^~core~^~The spec valid usage text states 'srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-srcImage-00126)~^~
 VALIDATION_ERROR_190000fe~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-srcImage-00127~^~!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)~^~The spec valid usage text states 'If srcImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-srcImage-00127)~^~
 VALIDATION_ERROR_19000100~^~N~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-srcImageLayout-00128~^~core~^~The spec valid usage text states 'srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-srcImageLayout-00128)~^~
 VALIDATION_ERROR_19000102~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-srcImageLayout-00129~^~!(VK_KHR_shared_presentable_image)~^~The spec valid usage text states 'srcImageLayout must be VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-srcImageLayout-00129)~^~
-VALIDATION_ERROR_19000104~^~N~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-dstImage-00130~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'dstImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyImage-dstImage-00130)~^~
+VALIDATION_ERROR_19000104~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-dstImage-00130~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'dstImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyImage-dstImage-00130)~^~
 VALIDATION_ERROR_19000106~^~Y~^~None~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-dstImage-00131~^~core~^~The spec valid usage text states 'dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-dstImage-00131)~^~
 VALIDATION_ERROR_19000108~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-dstImage-00132~^~!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)~^~The spec valid usage text states 'If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-dstImage-00132)~^~
 VALIDATION_ERROR_1900010a~^~N~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-dstImageLayout-00133~^~core~^~The spec valid usage text states 'dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImage-dstImageLayout-00133)~^~
@@ -1949,7 +1949,7 @@
 VALIDATION_ERROR_1920016c~^~Y~^~ImageBufferCopyTests~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-pRegions-00182~^~core~^~The spec valid usage text states 'The image region specified by each element of pRegions must be a region that is contained within srcImage' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-pRegions-00182)~^~
 VALIDATION_ERROR_1920016e~^~Y~^~ImageBufferCopyTests~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-pRegions-00183~^~core~^~The spec valid usage text states 'dstBuffer must be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element of pRegions' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-pRegions-00183)~^~
 VALIDATION_ERROR_19200170~^~N~^~Unknown~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-pRegions-00184~^~core~^~The spec valid usage text states 'The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-pRegions-00184)~^~
-VALIDATION_ERROR_19200172~^~N~^~Unknown~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-srcImage-00185~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'srcImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00185)~^~
+VALIDATION_ERROR_19200172~^~Y~^~Unknown~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-srcImage-00185~^~(VK_VERSION_1_1,VK_KHR_maintenance1)~^~The spec valid usage text states 'srcImage must use a format that supports VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by VkFormatProperties::linearTilingFeatures (for linearly tiled images) or VkFormatProperties::optimalTilingFeatures (for optimally tiled images) - as returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00185)~^~
 VALIDATION_ERROR_19200174~^~Y~^~None~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-srcImage-00186~^~core~^~The spec valid usage text states 'srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00186)~^~
 VALIDATION_ERROR_19200176~^~Y~^~Unknown~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-srcImage-00187~^~core~^~The spec valid usage text states 'If srcImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00187)~^~
 VALIDATION_ERROR_19200178~^~Y~^~Unknown~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCopyImageToBuffer-srcImage-00188~^~core~^~The spec valid usage text states 'srcImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00188)~^~
@@ -2451,8 +2451,8 @@
 VALIDATION_ERROR_1c80020a~^~N~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-srcImageLayout-00261~^~!(VK_KHR_shared_presentable_image)~^~The spec valid usage text states 'srcImageLayout must be VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-srcImageLayout-00261)~^~
 VALIDATION_ERROR_1c80020c~^~N~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImageLayout-00262~^~core~^~The spec valid usage text states 'dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-dstImageLayout-00262)~^~
 VALIDATION_ERROR_1c80020e~^~N~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImageLayout-00263~^~!(VK_KHR_shared_presentable_image)~^~The spec valid usage text states 'dstImageLayout must be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-dstImageLayout-00263)~^~
-VALIDATION_ERROR_1c800210~^~N~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImage-00264~^~core~^~The spec valid usage text states 'If dstImage was created with tiling equal to VK_IMAGE_TILING_LINEAR, dstImage must have been created with a format that supports being a color attachment, as specified by the VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in VkFormatProperties::linearTilingFeatures returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-dstImage-00264)~^~
-VALIDATION_ERROR_1c800212~^~N~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImage-00265~^~core~^~The spec valid usage text states 'If dstImage was created with tiling equal to VK_IMAGE_TILING_OPTIMAL, dstImage must have been created with a format that supports being a color attachment, as specified by the VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in VkFormatProperties::optimalTilingFeatures returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-dstImage-00265)~^~
+VALIDATION_ERROR_1c800210~^~Y~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImage-00264~^~core~^~The spec valid usage text states 'If dstImage was created with tiling equal to VK_IMAGE_TILING_LINEAR, dstImage must have been created with a format that supports being a color attachment, as specified by the VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in VkFormatProperties::linearTilingFeatures returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-dstImage-00264)~^~
+VALIDATION_ERROR_1c800212~^~Y~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImage-00265~^~core~^~The spec valid usage text states 'If dstImage was created with tiling equal to VK_IMAGE_TILING_OPTIMAL, dstImage must have been created with a format that supports being a color attachment, as specified by the VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in VkFormatProperties::optimalTilingFeatures returned by vkGetPhysicalDeviceFormatProperties' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-dstImage-00265)~^~
 VALIDATION_ERROR_1c800ad4~^~N~^~None~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-srcImage-01386~^~core~^~The spec valid usage text states 'srcImage and dstImage must have been created with the same image format' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-vkCmdResolveImage-srcImage-01386)~^~
 VALIDATION_ERROR_1c800af0~^~N~^~None~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-srcImageLayout-01400~^~(VK_KHR_shared_presentable_image)~^~The spec valid usage text states 'srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdResolveImage-srcImageLayout-01400)~^~
 VALIDATION_ERROR_1c800af2~^~N~^~None~^~vkCmdResolveImage~^~VUID-vkCmdResolveImage-dstImageLayout-01401~^~(VK_KHR_shared_presentable_image)~^~The spec valid usage text states 'dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-vkCmdResolveImage-dstImageLayout-01401)~^~