layers: Add descriptor sets to CB_INVALID tracking
This is start of a series intended to enable CB_INVALID tracking for
descriptor sets. Much of the tracking is already in place in the
special-purpose uniqueBoundSets data struct, so I'll be migrating
the tracking from that struct to the more general-purpose
object_bindings set.
diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp
index 1d568f4..d9eb277 100644
--- a/layers/descriptor_sets.cpp
+++ b/layers/descriptor_sets.cpp
@@ -320,12 +320,6 @@
cvdescriptorset::DescriptorSet::~DescriptorSet() {
InvalidateBoundCmdBuffers();
- // Remove link to any cmd buffers
- for (auto cb : cb_bindings) {
- for (uint32_t i=0; i<VK_PIPELINE_BIND_POINT_RANGE_SIZE; ++i) {
- cb->lastBound[i].uniqueBoundSets.erase(this);
- }
- }
}
@@ -630,6 +624,16 @@
InvalidateBoundCmdBuffers();
}
+void cvdescriptorset::DescriptorSet::BindCommandBuffer(GLOBAL_CB_NODE *cb_node) {
+ // bind cb to this descriptor set
+ cb_bindings.insert(cb_node);
+ // Add bindings for descriptor set and individual objects in the set
+ cb_node->object_bindings.insert({reinterpret_cast<uint64_t &>(set_), VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT});
+ // TODO : Can bind individual objects from within each descriptor : buffers/images and their views, samplers & memory
+ // The trick is we should only bind the objects actually "in use" by the cmd buffer, meaning that we need to
+ // check active descriptor slots based on last bound state for this CB
+}
+
cvdescriptorset::SamplerDescriptor::SamplerDescriptor() : sampler_(VK_NULL_HANDLE), immutable_(false) {
updated = false;
descriptor_class = PlainSampler;