diff options
Diffstat (limited to 'layers/buffer_validation.cpp')
| -rw-r--r-- | layers/buffer_validation.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index 15ca2f8c..50763760 100644 --- a/layers/buffer_validation.cpp +++ b/layers/buffer_validation.cpp @@ -1010,8 +1010,8 @@ bool PreCallValidateCmdClearColorImage(layer_data *dev_data, VkCommandBuffer com 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()"); } @@ -1055,7 +1055,7 @@ bool PreCallValidateCmdClearDepthStencilImage(layer_data *device_data, VkCommand 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()"); @@ -3006,8 +3006,7 @@ bool ValidateImageAspectMask(layer_data *device_data, VkImage image, VkFormat fo 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; @@ -3043,13 +3042,14 @@ bool ValidateImageSubresourceRange(const layer_data *device_data, const IMAGE_ST } // 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, @@ -3095,8 +3095,8 @@ bool PreCallValidateCreateImageView(layer_data *device_data, const VkImageViewCr // 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; |
