layers: Clean up no memory bound checks
When memory is freed make sure to clear bindings in associated objects.
Also clean up reporting of no memory bound errors. Old assumption was that
no memory had every been bound, but it's also possible to hit such errors
if the bound memory was freed prior to operation of interest.
In descriptor error cases where no memory is bound, add a final error string
as clarification since descriptor errors are built up of multiple strings
with details from each function call in the tree.
diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp
index e017f0e..d7ca025 100644
--- a/layers/descriptor_sets.cpp
+++ b/layers/descriptor_sets.cpp
@@ -690,8 +690,10 @@
format = image_node->createInfo.format;
usage = image_node->createInfo.usage;
// Validate that memory is bound to image
- if (ValidateMemoryIsBoundToImage(dev_data, image_node, "vkUpdateDescriptorSets()"))
+ if (ValidateMemoryIsBoundToImage(dev_data, image_node, "vkUpdateDescriptorSets()")) {
+ *error = "No memory bound to image.";
return false;
+ }
} else {
// Also need to check the swapchains.
auto swapchain = getSwapchainFromImage(dev_data, image);
@@ -1184,8 +1186,10 @@
*error = error_str.str();
return false;
}
- if (ValidateMemoryIsBoundToBuffer(device_data_, buffer_node, "vkUpdateDescriptorSets()"))
+ if (ValidateMemoryIsBoundToBuffer(device_data_, buffer_node, "vkUpdateDescriptorSets()")) {
+ *error = "No memory bound to buffer.";
return false;
+ }
// Verify usage bits
if (!ValidateBufferUsage(buffer_node, type, error)) {
// error will have been updated by ValidateBufferUsage()