diff options
| author | Dave Houlton <daveh@lunarg.com> | 2017-05-26 15:01:46 -0600 |
|---|---|---|
| committer | Dave Houlton <daveh@lunarg.com> | 2017-05-31 12:34:16 -0600 |
| commit | 08f6754dcf2a746e475513b4a05ff81e27e22a7b (patch) | |
| tree | 49e1cec402aac864a1de79d92bbc6a46fcd61ba2 | |
| parent | fc65382dec74298fdac4a6609558a6f9727d316a (diff) | |
| download | usermoji-08f6754dcf2a746e475513b4a05ff81e27e22a7b.tar.xz | |
layers: Add VU offset checks to BlitImage
Added 10 VU checks to CmdBlitImage around the offset values in the
VkImageBlit struct. Cleaned up a few tests that were tripping
these checks inadvertently. Added BlitImageOffsets test.
Also updated the appended error message number to match the new
8-char hex format.
Change-Id: I75d319cce6bbe96e8686e0bad3c4a0d58922b7a4
| -rw-r--r-- | layers/buffer_validation.cpp | 120 | ||||
| -rw-r--r-- | layers/vk_validation_error_database.txt | 20 |
2 files changed, 119 insertions, 21 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index e372ea3d..64ccc494 100644 --- a/layers/buffer_validation.cpp +++ b/layers/buffer_validation.cpp @@ -2218,38 +2218,38 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod // TODO: Need to validate image layouts, which will include layout validation for shared presentable images for (uint32_t i = 0; i < regionCount; i++) { + VkImageBlit rgn = pRegions[i]; + // Warn for zero-sized regions - if ((pRegions[i].srcOffsets[0].x == pRegions[i].srcOffsets[1].x) || - (pRegions[i].srcOffsets[0].y == pRegions[i].srcOffsets[1].y) || - (pRegions[i].srcOffsets[0].z == pRegions[i].srcOffsets[1].z)) { + if ((rgn.srcOffsets[0].x == rgn.srcOffsets[1].x) || (rgn.srcOffsets[0].y == rgn.srcOffsets[1].y) || + (rgn.srcOffsets[0].z == rgn.srcOffsets[1].z)) { std::stringstream ss; ss << "vkCmdBlitImage: pRegions[" << i << "].srcOffsets specify a zero-volume area."; skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(cb_node->commandBuffer), __LINE__, DRAWSTATE_INVALID_EXTENTS, "IMAGE", "%s", ss.str().c_str()); } - if ((pRegions[i].dstOffsets[0].x == pRegions[i].dstOffsets[1].x) || - (pRegions[i].dstOffsets[0].y == pRegions[i].dstOffsets[1].y) || - (pRegions[i].dstOffsets[0].z == pRegions[i].dstOffsets[1].z)) { + if ((rgn.dstOffsets[0].x == rgn.dstOffsets[1].x) || (rgn.dstOffsets[0].y == rgn.dstOffsets[1].y) || + (rgn.dstOffsets[0].z == rgn.dstOffsets[1].z)) { std::stringstream ss; ss << "vkCmdBlitImage: pRegions[" << i << "].dstOffsets specify a zero-volume area."; skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(cb_node->commandBuffer), __LINE__, DRAWSTATE_INVALID_EXTENTS, "IMAGE", "%s", ss.str().c_str()); } - if (pRegions[i].srcSubresource.layerCount == 0) { + if (rgn.srcSubresource.layerCount == 0) { char const str[] = "vkCmdBlitImage: number of layers in source subresource is zero"; skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT, "IMAGE", str); } - if (pRegions[i].dstSubresource.layerCount == 0) { + if (rgn.dstSubresource.layerCount == 0) { char const str[] = "vkCmdBlitImage: number of layers in destination subresource is zero"; skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT, "IMAGE", str); } // Check that src/dst layercounts match - if (pRegions[i].srcSubresource.layerCount != pRegions[i].dstSubresource.layerCount) { + if (rgn.srcSubresource.layerCount != rgn.dstSubresource.layerCount) { skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001de, "IMAGE", @@ -2257,12 +2257,108 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod i, validation_error_map[VALIDATION_ERROR_09a001de]); } - if (pRegions[i].srcSubresource.aspectMask != pRegions[i].dstSubresource.aspectMask) { + if (rgn.srcSubresource.aspectMask != rgn.dstSubresource.aspectMask) { skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001dc, "IMAGE", "vkCmdBlitImage: aspectMask members for pRegion[%d] do not match. %s", i, validation_error_map[VALIDATION_ERROR_09a001dc]); } + + // Validate source image offsets + VkExtent3D src_extent = GetImageSubresourceExtent(src_image_state, &(rgn.srcSubresource)); + if (VK_IMAGE_TYPE_1D == src_image_state->createInfo.imageType) { + if ((0 != rgn.srcOffsets[0].y) || (1 != rgn.srcOffsets[1].y)) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001ea, "IMAGE", + "vkCmdBlitImage: region [%d], source image of type VK_IMAGE_TYPE_1D with srcOffset[].y values " + "of (%1d, %1d). These must be (0, 1). %s", + i, rgn.srcOffsets[0].y, rgn.srcOffsets[1].y, validation_error_map[VALIDATION_ERROR_09a001ea]); + } + } + + if ((VK_IMAGE_TYPE_1D == src_image_state->createInfo.imageType) || + (VK_IMAGE_TYPE_2D == src_image_state->createInfo.imageType)) { + if ((0 != rgn.srcOffsets[0].z) || (1 != rgn.srcOffsets[1].z)) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001ee, "IMAGE", + "vkCmdBlitImage: region [%d], source image of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D with " + "srcOffset[].z values of (%1d, %1d). These must be (0, 1). %s", + i, rgn.srcOffsets[0].z, rgn.srcOffsets[1].z, validation_error_map[VALIDATION_ERROR_09a001ee]); + } + } + + if ((rgn.srcOffsets[0].x < 0) || (rgn.srcOffsets[0].x > static_cast<int32_t>(src_extent.width)) || + (rgn.srcOffsets[1].x < 0) || (rgn.srcOffsets[1].x > static_cast<int32_t>(src_extent.width))) { + skip |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001e6, "IMAGE", + "vkCmdBlitImage: region [%d] srcOffset[].x values (%1d, %1d) exceed srcSubresource width extent (%1d). %s", i, + rgn.srcOffsets[0].x, rgn.srcOffsets[1].x, src_extent.width, validation_error_map[VALIDATION_ERROR_09a001e6]); + } + if ((rgn.srcOffsets[0].y < 0) || (rgn.srcOffsets[0].y > static_cast<int32_t>(src_extent.height)) || + (rgn.srcOffsets[1].y < 0) || (rgn.srcOffsets[1].y > static_cast<int32_t>(src_extent.height))) { + skip |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001e8, "IMAGE", + "vkCmdBlitImage: region [%d] srcOffset[].y values (%1d, %1d) exceed srcSubresource height extent (%1d). %s", i, + rgn.srcOffsets[0].y, rgn.srcOffsets[1].y, src_extent.height, validation_error_map[VALIDATION_ERROR_09a001e8]); + } + if ((rgn.srcOffsets[0].z < 0) || (rgn.srcOffsets[0].z > static_cast<int32_t>(src_extent.depth)) || + (rgn.srcOffsets[1].z < 0) || (rgn.srcOffsets[1].z > static_cast<int32_t>(src_extent.depth))) { + skip |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001ec, "IMAGE", + "vkCmdBlitImage: region [%d] srcOffset[].z values (%1d, %1d) exceed srcSubresource depth extent (%1d). %s", i, + rgn.srcOffsets[0].z, rgn.srcOffsets[1].z, src_extent.depth, validation_error_map[VALIDATION_ERROR_09a001ec]); + } + + // Validate dest image offsets + VkExtent3D dst_extent = GetImageSubresourceExtent(dst_image_state, &(rgn.dstSubresource)); + if (VK_IMAGE_TYPE_1D == dst_image_state->createInfo.imageType) { + if ((0 != rgn.dstOffsets[0].y) || (1 != rgn.dstOffsets[1].y)) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001f4, "IMAGE", + "vkCmdBlitImage: region [%d], dest image of type VK_IMAGE_TYPE_1D with dstOffset[].y values of " + "(%1d, %1d). These must be (0, 1). %s", + i, rgn.dstOffsets[0].y, rgn.dstOffsets[1].y, validation_error_map[VALIDATION_ERROR_09a001f4]); + } + } + + if ((VK_IMAGE_TYPE_1D == dst_image_state->createInfo.imageType) || + (VK_IMAGE_TYPE_2D == dst_image_state->createInfo.imageType)) { + if ((0 != rgn.dstOffsets[0].z) || (1 != rgn.dstOffsets[1].z)) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001f8, "IMAGE", + "vkCmdBlitImage: region [%d], dest image of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D with " + "dstOffset[].z values of (%1d, %1d). These must be (0, 1). %s", + i, rgn.dstOffsets[0].z, rgn.dstOffsets[1].z, validation_error_map[VALIDATION_ERROR_09a001f8]); + } + } + + if ((rgn.dstOffsets[0].x < 0) || (rgn.dstOffsets[0].x > static_cast<int32_t>(dst_extent.width)) || + (rgn.dstOffsets[1].x < 0) || (rgn.dstOffsets[1].x > static_cast<int32_t>(dst_extent.width))) { + skip |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001f0, "IMAGE", + "vkCmdBlitImage: region [%d] dstOffset[].x values (%1d, %1d) exceed dstSubresource width extent (%1d). %s", i, + rgn.dstOffsets[0].x, rgn.dstOffsets[1].x, dst_extent.width, validation_error_map[VALIDATION_ERROR_09a001f0]); + } + if ((rgn.dstOffsets[0].y < 0) || (rgn.dstOffsets[0].y > static_cast<int32_t>(dst_extent.height)) || + (rgn.dstOffsets[1].y < 0) || (rgn.dstOffsets[1].y > static_cast<int32_t>(dst_extent.height))) { + skip |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001f2, "IMAGE", + "vkCmdBlitImage: region [%d] dstOffset[].y values (%1d, %1d) exceed dstSubresource height extent (%1d). %s", i, + rgn.dstOffsets[0].y, rgn.dstOffsets[1].y, dst_extent.height, validation_error_map[VALIDATION_ERROR_09a001f2]); + } + if ((rgn.dstOffsets[0].z < 0) || (rgn.dstOffsets[0].z > static_cast<int32_t>(dst_extent.depth)) || + (rgn.dstOffsets[1].z < 0) || (rgn.dstOffsets[1].z > static_cast<int32_t>(dst_extent.depth))) { + skip |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_09a001f6, "IMAGE", + "vkCmdBlitImage: region [%d] dstOffset[].z values (%1d, %1d) exceed dstSubresource depth extent (%1d). %s", i, + rgn.dstOffsets[0].z, rgn.dstOffsets[1].z, dst_extent.depth, validation_error_map[VALIDATION_ERROR_09a001f6]); + } } VkFormat src_format = src_image_state->createInfo.format; @@ -2303,6 +2399,7 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod ss.str().c_str(), validation_error_map[VALIDATION_ERROR_184001ce]); } +#if 0 // TODO: Cannot find VU statements or spec language for these in CmdBlitImage. Verify or remove. for (uint32_t i = 0; i < regionCount; i++) { VkImageAspectFlags srcAspect = pRegions[i].srcSubresource.aspectMask; @@ -2336,7 +2433,8 @@ bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_nod } } } - } +#endif + } // Depth/Stencil // Validate filter if (FormatIsDepthOrStencil(src_format) && (filter != VK_FILTER_NEAREST)) { diff --git a/layers/vk_validation_error_database.txt b/layers/vk_validation_error_database.txt index b0f4cd04..e95d845f 100644 --- a/layers/vk_validation_error_database.txt +++ b/layers/vk_validation_error_database.txt @@ -546,16 +546,16 @@ VALIDATION_ERROR_09a001de~^~Y~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-laye VALIDATION_ERROR_09a001e0~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcImage-00240~^~core~^~The spec valid usage text states 'If either of the calling command's srcImage or dstImage parameters are of VkImageType VK_IMAGE_TYPE_3D, the baseArrayLayer and layerCount members of both srcSubresource and dstSubresource must be 0 and 1, respectively' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcImage-00240)~^~ VALIDATION_ERROR_09a001e2~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-aspectMask-00241~^~core~^~The spec valid usage text states 'The aspectMask member of srcSubresource must specify aspects present in the calling command's srcImage' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-aspectMask-00241)~^~ VALIDATION_ERROR_09a001e4~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-aspectMask-00242~^~core~^~The spec valid usage text states 'The aspectMask member of dstSubresource must specify aspects present in the calling command's dstImage' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-aspectMask-00242)~^~ -VALIDATION_ERROR_09a001e6~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcOffset-00243~^~core~^~The spec valid usage text states 'srcOffset[0].x and srcOffset[1].x must both be greater than or equal to 0 and less than or equal to the source image subresource width' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcOffset-00243)~^~ -VALIDATION_ERROR_09a001e8~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcOffset-00244~^~core~^~The spec valid usage text states 'srcOffset[0].y and srcOffset[1].y must both be greater than or equal to 0 and less than or equal to the source image subresource height' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcOffset-00244)~^~ -VALIDATION_ERROR_09a001ea~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcImage-00245~^~core~^~The spec valid usage text states 'If the calling command's srcImage is of type VK_IMAGE_TYPE_1D, then srcOffset[0].y must be 0 and srcOffset[1].y must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcImage-00245)~^~ -VALIDATION_ERROR_09a001ec~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcOffset-00246~^~core~^~The spec valid usage text states 'srcOffset[0].z and srcOffset[1].z must both be greater than or equal to 0 and less than or equal to the source image subresource depth' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcOffset-00246)~^~ -VALIDATION_ERROR_09a001ee~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcImage-00247~^~core~^~The spec valid usage text states 'If the calling command's srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then srcOffset[0].z must be 0 and srcOffset[1].z must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcImage-00247)~^~ -VALIDATION_ERROR_09a001f0~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstOffset-00248~^~core~^~The spec valid usage text states 'dstOffset[0].x and dstOffset[1].x must both be greater than or equal to 0 and less than or equal to the destination image subresource width' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstOffset-00248)~^~ -VALIDATION_ERROR_09a001f2~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstOffset-00249~^~core~^~The spec valid usage text states 'dstOffset[0].y and dstOffset[1].y must both be greater than or equal to 0 and less than or equal to the destination image subresource height' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstOffset-00249)~^~ -VALIDATION_ERROR_09a001f4~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstImage-00250~^~core~^~The spec valid usage text states 'If the calling command's dstImage is of type VK_IMAGE_TYPE_1D, then dstOffset[0].y must be 0 and dstOffset[1].y must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstImage-00250)~^~ -VALIDATION_ERROR_09a001f6~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstOffset-00251~^~core~^~The spec valid usage text states 'dstOffset[0].z and dstOffset[1].z must both be greater than or equal to 0 and less than or equal to the destination image subresource depth' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstOffset-00251)~^~ -VALIDATION_ERROR_09a001f8~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstImage-00252~^~core~^~The spec valid usage text states 'If the calling command's dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then dstOffset[0].z must be 0 and dstOffset[1].z must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstImage-00252)~^~ +VALIDATION_ERROR_09a001e6~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcOffset-00243~^~core~^~The spec valid usage text states 'srcOffset[0].x and srcOffset[1].x must both be greater than or equal to 0 and less than or equal to the source image subresource width' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcOffset-00243)~^~ +VALIDATION_ERROR_09a001e8~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcOffset-00244~^~core~^~The spec valid usage text states 'srcOffset[0].y and srcOffset[1].y must both be greater than or equal to 0 and less than or equal to the source image subresource height' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcOffset-00244)~^~ +VALIDATION_ERROR_09a001ea~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcImage-00245~^~core~^~The spec valid usage text states 'If the calling command's srcImage is of type VK_IMAGE_TYPE_1D, then srcOffset[0].y must be 0 and srcOffset[1].y must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcImage-00245)~^~ +VALIDATION_ERROR_09a001ec~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcOffset-00246~^~core~^~The spec valid usage text states 'srcOffset[0].z and srcOffset[1].z must both be greater than or equal to 0 and less than or equal to the source image subresource depth' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcOffset-00246)~^~ +VALIDATION_ERROR_09a001ee~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcImage-00247~^~core~^~The spec valid usage text states 'If the calling command's srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then srcOffset[0].z must be 0 and srcOffset[1].z must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcImage-00247)~^~ +VALIDATION_ERROR_09a001f0~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstOffset-00248~^~core~^~The spec valid usage text states 'dstOffset[0].x and dstOffset[1].x must both be greater than or equal to 0 and less than or equal to the destination image subresource width' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstOffset-00248)~^~ +VALIDATION_ERROR_09a001f2~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstOffset-00249~^~core~^~The spec valid usage text states 'dstOffset[0].y and dstOffset[1].y must both be greater than or equal to 0 and less than or equal to the destination image subresource height' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstOffset-00249)~^~ +VALIDATION_ERROR_09a001f4~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstImage-00250~^~core~^~The spec valid usage text states 'If the calling command's dstImage is of type VK_IMAGE_TYPE_1D, then dstOffset[0].y must be 0 and dstOffset[1].y must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstImage-00250)~^~ +VALIDATION_ERROR_09a001f6~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstOffset-00251~^~core~^~The spec valid usage text states 'dstOffset[0].z and dstOffset[1].z must both be greater than or equal to 0 and less than or equal to the destination image subresource depth' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstOffset-00251)~^~ +VALIDATION_ERROR_09a001f8~^~Y~^~BlitImageOffsets~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstImage-00252~^~core~^~The spec valid usage text states 'If the calling command's dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then dstOffset[0].z must be 0 and dstOffset[1].z must be 1.' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstImage-00252)~^~ VALIDATION_ERROR_09a07a01~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-dstSubresource-parameter~^~core~^~The spec valid usage text states 'dstSubresource must be a valid VkImageSubresourceLayers structure' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-dstSubresource-parameter)~^~implicit VALIDATION_ERROR_09a2d601~^~N~^~Unknown~^~vkCmdBlitImage~^~VUID-VkImageBlit-srcSubresource-parameter~^~core~^~The spec valid usage text states 'srcSubresource must be a valid VkImageSubresourceLayers structure' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageBlit-srcSubresource-parameter)~^~implicit VALIDATION_ERROR_09c00112~^~Y~^~CopyImageAspectMismatch~^~vkCmdCopyImage~^~VUID-VkImageCopy-aspectMask-00137~^~core~^~The spec valid usage text states 'The aspectMask member of srcSubresource and dstSubresource must match' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageCopy-aspectMask-00137)~^~ |
