From 6f433a8b2f8bb5b5446054a46e3399896b215c04 Mon Sep 17 00:00:00 2001 From: John Zulauf Date: Tue, 6 Mar 2018 16:44:43 -0700 Subject: layers: Cleanup naming for layout compatibiity Type and variable names have been clarified for the pipeline layout array of descriptor set layouts based on reviewer feedback. Change-Id: I6b191b2121db87285f7fd50810991340c02475c4 --- layers/core_validation.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index f6b0bb34..e1feeada 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -95,9 +95,9 @@ size_t PipelineLayoutCompatDef::hash() const { hash_util::HashCombiner hc; // The set number is integral to the CompatDef's distinctiveness hc << set << push_constant_ranges.get(); - const auto &layout_layout = *layout_id.get(); + const auto &descriptor_set_layouts = *set_layouts_id.get(); for (uint32_t i = 0; i <= set; i++) { - hc << layout_layout[i].get(); + hc << descriptor_set_layouts[i].get(); } return hc.Value(); } @@ -107,12 +107,18 @@ bool PipelineLayoutCompatDef::operator==(const PipelineLayoutCompatDef &other) c return false; } - const auto &layout_layout = *layout_id.get(); - assert(set < layout_layout.size()); - const auto &other_ll = *other.layout_id.get(); - assert(set < other_ll.size()); + if (set_layouts_id == other.set_layouts_id) { + // if it's the same set_layouts_id, then *any* subset will match + return true; + } + + // They aren't exactly the same PipelineLayoutSetLayouts, so we need to check if the required subsets match + const auto &descriptor_set_layouts = *set_layouts_id.get(); + assert(set < descriptor_set_layouts.size()); + const auto &other_ds_layouts = *other.set_layouts_id.get(); + assert(set < other_ds_layouts.size()); for (uint32_t i = 0; i <= set; i++) { - if (layout_layout[i] != other_ll[i]) { + if (descriptor_set_layouts[i] != other_ds_layouts[i]) { return false; } } @@ -5446,14 +5452,14 @@ PushConstantRangesId get_canonical_id(const VkPipelineLayoutCreateInfo *info) { } // Dictionary of canoncial form of the pipeline set layout of descriptor set layouts -static DescriptorSetLayoutLayoutDict layout_layout_dict; +static PipelineLayoutSetLayoutsDict pipeline_layout_set_layouts_dict; // Dictionary of canonical form of the "compatible for set" records static PipelineLayoutCompatDict pipeline_layout_compat_dict; static PipelineLayoutCompatId get_canonical_id(const uint32_t set_index, const PushConstantRangesId pcr_id, - const DescriptorSetLayoutLayoutId ll_id) { - return pipeline_layout_compat_dict.look_up(PipelineLayoutCompatDef(set_index, pcr_id, ll_id)); + const PipelineLayoutSetLayoutsId set_layouts_id) { + return pipeline_layout_compat_dict.look_up(PipelineLayoutCompatDef(set_index, pcr_id, set_layouts_id)); } static void PostCallRecordCreatePipelineLayout(layer_data *dev_data, const VkPipelineLayoutCreateInfo *pCreateInfo, @@ -5463,20 +5469,20 @@ static void PostCallRecordCreatePipelineLayout(layer_data *dev_data, const VkPip PIPELINE_LAYOUT_NODE &plNode = dev_data->pipelineLayoutMap[*pPipelineLayout]; plNode.layout = *pPipelineLayout; plNode.set_layouts.resize(pCreateInfo->setLayoutCount); - DescriptorSetLayoutLayoutDef layout_layout(pCreateInfo->setLayoutCount); + PipelineLayoutSetLayoutsDef set_layouts(pCreateInfo->setLayoutCount); for (uint32_t i = 0; i < pCreateInfo->setLayoutCount; ++i) { plNode.set_layouts[i] = GetDescriptorSetLayout(dev_data, pCreateInfo->pSetLayouts[i]); - layout_layout[i] = plNode.set_layouts[i]->get_layout_id(); + set_layouts[i] = plNode.set_layouts[i]->get_layout_id(); } // Get canonical form IDs for the "compatible for set" contents plNode.push_constant_ranges = get_canonical_id(pCreateInfo); - auto ll_id = layout_layout_dict.look_up(layout_layout); + auto set_layouts_id = pipeline_layout_set_layouts_dict.look_up(set_layouts); plNode.compat_for_set.reserve(pCreateInfo->setLayoutCount); // Create table of "compatible for set N" cannonical forms for trivial accept validation for (uint32_t i = 0; i < pCreateInfo->setLayoutCount; ++i) { - plNode.compat_for_set.emplace_back(get_canonical_id(i, plNode.push_constant_ranges, ll_id)); + plNode.compat_for_set.emplace_back(get_canonical_id(i, plNode.push_constant_ranges, set_layouts_id)); } // Implicit unlock -- cgit v1.2.3