diff options
Diffstat (limited to 'layers/descriptor_sets.cpp')
| -rw-r--r-- | layers/descriptor_sets.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp index 0c6747d6..52c0b339 100644 --- a/layers/descriptor_sets.cpp +++ b/layers/descriptor_sets.cpp @@ -24,18 +24,13 @@ #include <sstream> // Construct DescriptorSetLayout instance from given create info -cvdescriptorset::DescriptorSetLayout::DescriptorSetLayout(debug_report_data *report_data, - const VkDescriptorSetLayoutCreateInfo *p_create_info, +cvdescriptorset::DescriptorSetLayout::DescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo *p_create_info, const VkDescriptorSetLayout layout) : layout_(layout), binding_count_(p_create_info->bindingCount), descriptor_count_(0), dynamic_descriptor_count_(0) { uint32_t global_index = 0; for (uint32_t i = 0; i < binding_count_; ++i) { descriptor_count_ += p_create_info->pBindings[i].descriptorCount; - if (!binding_to_index_map_.emplace(p_create_info->pBindings[i].binding, i).second) { - log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, - reinterpret_cast<uint64_t &>(layout_), __LINE__, VALIDATION_ERROR_02345, "DS", - "duplicated binding number in VkDescriptorSetLayoutBinding. %s", validation_error_map[VALIDATION_ERROR_02345]); - } + binding_to_index_map_.emplace(p_create_info->pBindings[i].binding, i); binding_to_global_start_index_map_[p_create_info->pBindings[i].binding] = global_index; global_index += p_create_info->pBindings[i].descriptorCount ? p_create_info->pBindings[i].descriptorCount - 1 : 0; binding_to_global_end_index_map_[p_create_info->pBindings[i].binding] = global_index; @@ -53,6 +48,23 @@ cvdescriptorset::DescriptorSetLayout::DescriptorSetLayout(debug_report_data *rep } } } + +// Validate descriptor set layout create info +bool cvdescriptorset::DescriptorSetLayout::ValidateCreateInfo(debug_report_data *report_data, + const VkDescriptorSetLayoutCreateInfo *create_info) { + bool skip = false; + std::unordered_set<uint32_t> bindings; + for (uint32_t i = 0; i < create_info->bindingCount; ++i) { + if (bindings.count(create_info->pBindings[i].binding)) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, + VALIDATION_ERROR_02345, "DS", "duplicated binding number in VkDescriptorSetLayoutBinding. %s", + validation_error_map[VALIDATION_ERROR_02345]); + } + bindings.insert(create_info->pBindings[i].binding); + } + return skip; +} + // put all bindings into the given set void cvdescriptorset::DescriptorSetLayout::FillBindingSet(std::unordered_set<uint32_t> *binding_set) const { for (auto binding_index_pair : binding_to_index_map_) |
