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) + "]";
- skip |= ValidateImageSubresourceRange(dev_data, image_state, nullptr, pRanges[i], "vkCmdClearColorImage",
- param_name.c_str());
+ skip |=
+ ValidateImageSubresourceRange(dev_data, image_state, false, pRanges[i], "vkCmdClearColorImage", param_name.c_str());
skip |= ValidateImageAttributes(dev_data, image_state, pRanges[i]);
skip |= VerifyClearImageLayout(dev_data, cb_node, image_state, pRanges[i], imageLayout, "vkCmdClearColorImage()");
}
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) + "]";
- skip |= ValidateImageSubresourceRange(device_data, image_state, nullptr, pRanges[i], "vkCmdClearDepthStencilImage",
+ skip |= ValidateImageSubresourceRange(device_data, image_state, false, pRanges[i], "vkCmdClearDepthStencilImage",
param_name.c_str());
skip |=
VerifyClearImageLayout(device_data, cb_node, image_state, pRanges[i], imageLayout, "vkCmdClearDepthStencilImage()");
return skip;
}
-bool ValidateImageSubresourceRange(const layer_data *device_data, const IMAGE_STATE *image_state,
- const VkImageViewCreateInfo *image_view_create_info,
+bool ValidateImageSubresourceRange(const layer_data *device_data, const IMAGE_STATE *image_state, const bool is_imageview_2d_array,
const VkImageSubresourceRange &subresourceRange, const char *cmd_name, const char *param_name) {
const debug_report_data *report_data = core_validation::GetReportData(device_data);
bool skip = false;
}
// Validate array layers
- bool is_3D_to_2D_map = image_view_create_info && GetDeviceExtensions(device_data)->vk_khr_maintenance1 &&
- image_state->createInfo.imageType == VK_IMAGE_TYPE_3D &&
- image_view_create_info->viewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY;
+ bool is_khr_maintenance1 = GetDeviceExtensions(device_data)->vk_khr_maintenance1;
+ bool is_3D_to_2D_map = is_khr_maintenance1 && image_state->createInfo.imageType == VK_IMAGE_TYPE_3D && is_imageview_2d_array;
const auto image_layer_count = is_3D_to_2D_map ? image_state->createInfo.extent.depth : image_state->createInfo.arrayLayers;
const auto image_layer_count_var_name = is_3D_to_2D_map ? "extent.depth" : "arrayLayers";
- const auto invalid_layer_code = is_3D_to_2D_map ? VALIDATION_ERROR_0a800800 : VALIDATION_ERROR_0a800802;
+
+ const auto invalid_layer_code =
+ is_khr_maintenance1 ? (is_3D_to_2D_map ? VALIDATION_ERROR_0a800800 : VALIDATION_ERROR_0a800802) : VALIDATION_ERROR_0a8007fe;
if (subresourceRange.layerCount == 0) {
skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
// If this isn't a sparse image, it needs to have memory backing it at CreateImageView time
skip |= ValidateMemoryIsBoundToImage(device_data, image_state, "vkCreateImageView()", VALIDATION_ERROR_0ac007f8);
// Checks imported from image layer
- skip |= ValidateImageSubresourceRange(device_data, image_state, create_info, create_info->subresourceRange,
- "vkCreateImageView", "pCreateInfo->subresourceRange");
+ skip |= ValidateImageSubresourceRange(device_data, image_state, create_info->viewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+ create_info->subresourceRange, "vkCreateImageView", "pCreateInfo->subresourceRange");
VkImageCreateFlags image_flags = image_state->createInfo.flags;
VkFormat image_format = image_state->createInfo.format;
VALIDATION_ERROR_0a600154~^~Y~^~CopyImageTypeExtentMismatch~^~vkCmdCopyImage~^~VUID-VkImageSubresourceLayers-baseArrayLayer-00170~^~core~^~The spec valid usage text states '(baseArrayLayer + layerCount) must be less than or equal to the arrayLayers specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceLayers-baseArrayLayer-00170)~^~
VALIDATION_ERROR_0a600c01~^~Y~^~Unknown~^~vkCmdCopyImage~^~VUID-VkImageSubresourceLayers-aspectMask-parameter~^~core~^~The spec valid usage text states 'aspectMask must be a valid combination of VkImageAspectFlagBits values' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceLayers-aspectMask-parameter)~^~implicit
VALIDATION_ERROR_0a600c03~^~N~^~Unknown~^~vkCmdCopyImage~^~VUID-VkImageSubresourceLayers-aspectMask-requiredbitmask~^~core~^~The spec valid usage text states 'aspectMask must not be 0' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceLayers-aspectMask-requiredbitmask)~^~implicit
-VALIDATION_ERROR_0a8007fc~^~Y~^~ImageViewSubresourceRangeTests,InvalidBarriers,ClearColorImageWithBadRange,ClearDepthStencilWithBadRange~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-levelCount-01022~^~core~^~The spec valid usage text states 'If levelCount is not VK_REMAINING_MIP_LEVELS, levelCount must be non-zero and (baseMipLevel + levelCount) must be less than or equal to the mipLevels specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceRange-levelCount-01022)~^~
-VALIDATION_ERROR_0a8007fe~^~N~^~None~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-layerCount-01023~^~!(VK_KHR_maintenance1)~^~The spec valid usage text states 'If layerCount is not VK_REMAINING_ARRAY_LAYERS, layerCount must be non-zero and (baseArrayLayer + layerCount) must be less than or equal to the arrayLayers specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceRange-layerCount-01023)~^~
+VALIDATION_ERROR_0a8007fc~^~Y~^~ImageViewSubresourceRangeTests,InvalidBarriers,ClearColorImageWithBadRange,ClearDepthStencilWithBadRange,ClearColorImageWithValidRange,ClearDepthStencilWithValidRange~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-levelCount-01022~^~core~^~The spec valid usage text states 'If levelCount is not VK_REMAINING_MIP_LEVELS, levelCount must be non-zero and (baseMipLevel + levelCount) must be less than or equal to the mipLevels specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceRange-levelCount-01022)~^~
+VALIDATION_ERROR_0a8007fe~^~Y~^~ImageViewSubresourceRangeTests,InvalidBarriers,ClearColorImageWithBadRange,ClearDepthStencilWithBadRange,ClearColorImageWithValidRange,ClearDepthStencilWithValidRange~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-layerCount-01023~^~!(VK_KHR_maintenance1)~^~The spec valid usage text states 'If layerCount is not VK_REMAINING_ARRAY_LAYERS, layerCount must be non-zero and (baseArrayLayer + layerCount) must be less than or equal to the arrayLayers specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceRange-layerCount-01023)~^~
VALIDATION_ERROR_0a800800~^~Y~^~None~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-imageType-01024~^~(VK_KHR_maintenance1)~^~The spec valid usage text states 'If the imageType specified in VkImageCreateInfo when the image was created was VK_IMAGE_TYPE_3D and the image view is created with the viewType of VkImageViewCreateInfo set to VK_IMAGE_VIEW_TYPE_2D_ARRAY then layerCount must be VK_REMAINING_ARRAY_LAYERS, or layerCount must be non-zero and (baseArrayLayer + layerCount) must be less than or equal to the extent.depth specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-VkImageSubresourceRange-imageType-01024)~^~
-VALIDATION_ERROR_0a800802~^~Y~^~ImageViewSubresourceRangeTests,InvalidBarriers,ClearColorImageWithBadRange,ClearDepthStencilWithBadRange~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-imageType-01025~^~(VK_KHR_maintenance1)~^~The spec valid usage text states 'If the imageType specified in VkImageCreateInfo when the image was created was not VK_IMAGE_TYPE_3D or the image view is not created with the viewType of VkImageViewCreateInfo set to VK_IMAGE_VIEW_TYPE_2D_ARRAY then layerCount must be VK_REMAINING_ARRAY_LAYERS, or layerCount must be non-zero and (baseArrayLayer + layerCount) must be less than or equal to the arrayLayers specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-VkImageSubresourceRange-imageType-01025)~^~
+VALIDATION_ERROR_0a800802~^~Y~^~None~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-imageType-01025~^~(VK_KHR_maintenance1)~^~The spec valid usage text states 'If the imageType specified in VkImageCreateInfo when the image was created was not VK_IMAGE_TYPE_3D or the image view is not created with the viewType of VkImageViewCreateInfo set to VK_IMAGE_VIEW_TYPE_2D_ARRAY then layerCount must be VK_REMAINING_ARRAY_LAYERS, or layerCount must be non-zero and (baseArrayLayer + layerCount) must be less than or equal to the arrayLayers specified in VkImageCreateInfo when the image was created' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-VkImageSubresourceRange-imageType-01025)~^~
VALIDATION_ERROR_0a800c01~^~N~^~Unknown~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-aspectMask-parameter~^~core~^~The spec valid usage text states 'aspectMask must be a valid combination of VkImageAspectFlagBits values' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceRange-aspectMask-parameter)~^~implicit
VALIDATION_ERROR_0a800c03~^~N~^~Unknown~^~vkCreateImageView~^~VUID-VkImageSubresourceRange-aspectMask-requiredbitmask~^~core~^~The spec valid usage text states 'aspectMask must not be 0' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSubresourceRange-aspectMask-requiredbitmask)~^~implicit
VALIDATION_ERROR_0aa007c6~^~N~^~Unknown~^~vkCreateImage~^~VUID-VkImageSwapchainCreateInfoKHX-swapchain-00995~^~core~^~The spec valid usage text states 'If swapchain is not VK_NULL_HANDLE, the fields of VkImageCreateInfo must match the implied image creation parameters of the swapchain' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageSwapchainCreateInfoKHX-swapchain-00995)~^~