From 371f0b105779366a74008b2da43bf1286c0752f0 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Wed, 15 Jun 2016 13:03:58 -0600 Subject: layers: GH644 Validate DS image aspect bit restriction If a DS image is used in a descriptor, regardless of the underlying image layout, we need to validate that BOTH DEPTH and STENCIL aspect bits are NOT set. Only one of the two bits is allowed. --- layers/descriptor_sets.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'layers/descriptor_sets.cpp') diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp index f8bd9cc8..9f3b239d 100644 --- a/layers/descriptor_sets.cpp +++ b/layers/descriptor_sets.cpp @@ -665,7 +665,23 @@ bool cvdescriptorset::ValidateImageUpdate(VkImageView image_view, VkImageLayout } break; default: - // anything to check for other layouts? + // For other layouts if the source is ds image, both aspect bits must not be set + if (ds) { + if (aspect_mask & VK_IMAGE_ASPECT_DEPTH_BIT) { + if (aspect_mask & VK_IMAGE_ASPECT_STENCIL_BIT) { + // both must NOT be set + std::stringstream error_str; + error_str << "ImageView (" << image_view << ") has layout " << string_VkImageLayout(image_layout) + << " and is using depth/stencil image of format " << string_VkFormat(format) + << " but it has both STENCIL and DEPTH aspects set, which is illegal. When using a depth/stencil " + "image in a descriptor set, please only set either VK_IMAGE_ASPECT_DEPTH_BIT or " + "VK_IMAGE_ASPECT_STENCIL_BIT depending on whether it will be used for depth reads or stencil " + "reads respectively."; + *error = error_str.str(); + return false; + } + } + } break; } // Now validate that usage flags are correctly set for given type of update -- cgit v1.2.3