From be111b45e6801baaedf86fa90570f362f1cf89d0 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Mon, 22 Aug 2016 10:10:43 -0600 Subject: layers: Update descriptor binding to use an ordered map When dealing with dynamic offsets, the binding numbers, and array indices within a binding, are all sequential. This is according to the spec "Descriptor Set Binding" section which states, "...entries are ordered by the binding numbers in the descriptor set layouts; and within a binding array, elements are in order." This means when processing the binding numbers to validate the dynamic offsets at draw time, we should do so in order to make sure that the sequential dynamic offset index correctly correlates with the dynamic offset being processed. --- layers/descriptor_sets.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'layers/descriptor_sets.cpp') diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp index c47cb50f..c7b39f7c 100644 --- a/layers/descriptor_sets.cpp +++ b/layers/descriptor_sets.cpp @@ -343,7 +343,7 @@ bool cvdescriptorset::DescriptorSet::IsCompatible(const DescriptorSetLayout *lay // This includes validating that all descriptors in the given bindings are updated, // that any update buffers are valid, and that any dynamic offsets are within the bounds of their buffers. // Return true if state is acceptable, or false and write an error message into error string -bool cvdescriptorset::DescriptorSet::ValidateDrawState(const std::unordered_map &bindings, +bool cvdescriptorset::DescriptorSet::ValidateDrawState(const std::map &bindings, const std::vector &dynamic_offsets, std::string *error) const { auto dyn_offset_index = 0; for (auto binding_pair : bindings) { @@ -469,7 +469,7 @@ bool cvdescriptorset::DescriptorSet::ValidateDrawState(const std::unordered_map< } // For given bindings, place any update buffers or images into the passed-in unordered_sets -uint32_t cvdescriptorset::DescriptorSet::GetStorageUpdates(const std::unordered_map &bindings, +uint32_t cvdescriptorset::DescriptorSet::GetStorageUpdates(const std::map &bindings, std::unordered_set *buffer_set, std::unordered_set *image_set) const { auto num_updates = 0; -- cgit v1.2.3