aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCort Stratton <cort@google.com>2018-05-01 20:18:06 -0400
committerCort <1944792+cdwfs@users.noreply.github.com>2018-05-11 14:17:21 -0400
commit3e4ef15ea959b2af2ae3ab0424bd937df2fcf743 (patch)
treec3b98f255380033ffd68467060b821c255f715fb
parenta02bd090ecc3a36283c615420fc2e63691253f95 (diff)
downloadusermoji-3e4ef15ea959b2af2ae3ab0424bd937df2fcf743.tar.xz
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
-rw-r--r--layers/buffer_validation.cpp106
-rw-r--r--layers/buffer_validation.h4
-rw-r--r--layers/vk_validation_error_database.txt14
3 files changed, 73 insertions, 51 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp
index 217217cf..66ae6725 100644
--- a/layers/buffer_validation.cpp
+++ b/layers/buffer_validation.cpp
@@ -1070,6 +1070,10 @@ bool PreCallValidateCmdClearColorImage(layer_data *dev_data, VkCommandBuffer com
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 @@ bool PreCallValidateCmdClearDepthStencilImage(layer_data *device_data, VkCommand
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 @@ bool PreCallValidateCmdClearDepthStencilImage(layer_data *device_data, VkCommand
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 @@ bool PreCallValidateCmdCopyImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod
"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 @@ bool PreCallValidateCmdResolveImage(layer_data *device_data, GLOBAL_CB_NODE *cb_
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 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod
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 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod
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 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod
"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 @@ bool ValidateImageUsageFlags(layer_data *device_data, IMAGE_STATE const *image_s
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 @@ bool PreCallValidateCmdCopyImageToBuffer(layer_data *device_data, VkImageLayout
"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 @@ bool PreCallValidateCmdCopyBufferToImage(layer_data *device_data, VkImageLayout
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 7c7df98e..d7a3682e 100644
--- a/layers/buffer_validation.h
+++ b/layers/buffer_validation.h
@@ -174,6 +174,10 @@ bool ValidateMapImageLayouts(core_validation::layer_data *dev_data, VkDevice dev
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 958836eb..1fb924cd 100644
--- a/layers/vk_validation_error_database.txt
+++ b/layers/vk_validation_error_database.txt
@@ -1806,7 +1806,7 @@ VALIDATION_ERROR_18602415~^~Y~^~Unknown~^~vkCmdClearAttachments~^~VUID-vkCmdClea
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_18e00156~^~Y~^~ImageBufferCopyTests~^~vkCmdCopyBufferToImage~^~
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_19000017~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-vkCmdCopyImage-r
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_19200017~^~Y~^~Unknown~^~vkCmdCopyImageToBuffer~^~VUID-vkCmdCop
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_1c800208~^~N~^~Unknown~^~vkCmdResolveImage~^~VUID-vkCmdResolveI
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)~^~