From 34abf2be930f2230dcb111dd69aaa2fd31be0550 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Mon, 10 Oct 2016 14:02:48 -0600 Subject: layers: Validate correct layout for STORAGE_IMAGE descriptors According to the spec "Load and store operations on storage images can only be done on images in VK_IMAGE_LAYOUT_GENERAL layout." This change flags an error if a STORAGE_IMAGE descriptor is updated with an image layout other than GENERAL. --- layers/descriptor_sets.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'layers') diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp index 4af5674b..82e693d0 100644 --- a/layers/descriptor_sets.cpp +++ b/layers/descriptor_sets.cpp @@ -796,6 +796,7 @@ bool cvdescriptorset::ValidateImageUpdate(VkImageView image_view, VkImageLayout break; } // Now validate that usage flags are correctly set for given type of update + // As we're switching per-type, if any type has specific layout requirements, check those here as well // TODO : The various image usage bit requirements are in general spec language for VkImageUsageFlags bit block in 11.3 Images // under vkCreateImage() // TODO : Need to also validate case VALIDATION_ERROR_00952 where STORAGE_IMAGE & INPUT_ATTACH types must have been created with @@ -812,6 +813,15 @@ bool cvdescriptorset::ValidateImageUpdate(VkImageView image_view, VkImageLayout case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: { if (!(usage & VK_IMAGE_USAGE_STORAGE_BIT)) { error_usage_bit = "VK_IMAGE_USAGE_STORAGE_BIT"; + } else if (VK_IMAGE_LAYOUT_GENERAL != image_layout) { + std::stringstream error_str; + // TODO : Need to create custom enum error code for this case + error_str << "ImageView (" << image_view << ") of VK_DESCRIPTOR_TYPE_STORAGE_IMAGE type is being updated with layout " + << string_VkImageLayout(image_layout) + << " but according to spec section 13.1 Descriptor Types, 'Load and store operations on storage images can " + "only be done on images in VK_IMAGE_LAYOUT_GENERAL layout.'"; + *error_msg = error_str.str(); + return false; } break; } -- cgit v1.2.3