From ec6045e72ebf8804d8550cae98aa2e05e0a5fba1 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Wed, 21 Sep 2016 09:19:15 -0600 Subject: layers: Verify memory is bound to images used to update descriptors Fixes #663 For vkUpdateDescriptorSets() calls that include an image, verify that memory is bound to the image. --- layers/core_validation_types.h | 1 + layers/descriptor_sets.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h index 5d38a1a4..52aad3df 100644 --- a/layers/core_validation_types.h +++ b/layers/core_validation_types.h @@ -676,6 +676,7 @@ VkSwapchainKHR getSwapchainFromImage(const layer_data *, VkImage); SWAPCHAIN_NODE *getSwapchainNode(const layer_data *, VkSwapchainKHR); void invalidateCommandBuffers(std::unordered_set, VK_OBJECT); bool ValidateMemoryIsBoundToBuffer(const layer_data *, const BUFFER_NODE *, const char *); +bool ValidateMemoryIsBoundToImage(const layer_data *, const IMAGE_NODE *, const char *); void AddCommandBufferBindingSampler(GLOBAL_CB_NODE *, SAMPLER_NODE *); void AddCommandBufferBindingImage(const layer_data *, GLOBAL_CB_NODE *, IMAGE_NODE *); void AddCommandBufferBindingImageView(const layer_data *, GLOBAL_CB_NODE *, IMAGE_VIEW_STATE *); diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp index f02da6b1..e017f0e0 100644 --- a/layers/descriptor_sets.cpp +++ b/layers/descriptor_sets.cpp @@ -689,6 +689,9 @@ bool cvdescriptorset::ValidateImageUpdate(VkImageView image_view, VkImageLayout if (image_node) { format = image_node->createInfo.format; usage = image_node->createInfo.usage; + // Validate that memory is bound to image + if (ValidateMemoryIsBoundToImage(dev_data, image_node, "vkUpdateDescriptorSets()")) + return false; } else { // Also need to check the swapchains. auto swapchain = getSwapchainFromImage(dev_data, image); -- cgit v1.2.3