layers: Add binding between cmd buffer and bufferView
authorTobin Ehlis <tobine@google.com>
Wed, 28 Sep 2016 13:12:28 +0000 (07:12 -0600)
committerTobin Ehlis <tobine@google.com>
Wed, 28 Sep 2016 23:41:14 +0000 (17:41 -0600)
For a texel descriptor update, add binding between bufferView and the
command buffer as well as between underlying buffer and command buffer.

layers/core_validation.cpp
layers/core_validation_types.h
layers/descriptor_sets.cpp

index bf6d957..1cc6887 100644 (file)
@@ -621,6 +621,19 @@ void AddCommandBufferBindingBuffer(const layer_data *dev_data, GLOBAL_CB_NODE *c
     buff_node->cb_bindings.insert(cb_node);
 }
 
+// Create binding link between given buffer view node and its buffer with command buffer node
+void AddCommandBufferBindingBufferView(const layer_data *dev_data, GLOBAL_CB_NODE *cb_node, BUFFER_VIEW_STATE *view_state) {
+    // First add bindings for bufferView
+    view_state->cb_bindings.insert(cb_node);
+    cb_node->object_bindings.insert(
+        {reinterpret_cast<uint64_t &>(view_state->buffer_view), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT});
+    auto buffer_node = getBufferNode(dev_data, view_state->create_info.buffer);
+    // Add bindings for buffer within bufferView
+    if (buffer_node) {
+        AddCommandBufferBindingBuffer(dev_data, cb_node, buffer_node);
+    }
+}
+
 // For every mem obj bound to particular CB, free bindings related to that CB
 static void clear_cmd_buf_and_mem_references(layer_data *dev_data, GLOBAL_CB_NODE *pCBNode) {
     if (pCBNode) {
index fcd81cc..05f05f2 100644 (file)
@@ -636,6 +636,7 @@ 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 *);
 void AddCommandBufferBindingBuffer(const layer_data *, GLOBAL_CB_NODE *, BUFFER_NODE *);
+void AddCommandBufferBindingBufferView(const layer_data *, GLOBAL_CB_NODE *, BUFFER_VIEW_STATE *);
 }
 
 #endif // CORE_VALIDATION_TYPES_H_
index d08a110..45fa3e0 100644 (file)
@@ -975,9 +975,7 @@ void cvdescriptorset::TexelDescriptor::CopyUpdate(const Descriptor *src) {
 void cvdescriptorset::TexelDescriptor::BindCommandBuffer(const core_validation::layer_data *dev_data, GLOBAL_CB_NODE *cb_node) {
     auto bv_state = getBufferViewState(dev_data, buffer_view_);
     if (bv_state) {
-        auto buffer_node = getBufferNode(dev_data, bv_state->create_info.buffer);
-        if (buffer_node)
-            core_validation::AddCommandBufferBindingBuffer(dev_data, cb_node, buffer_node);
+        core_validation::AddCommandBufferBindingBufferView(dev_data, cb_node, bv_state);
     }
 }