diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-03-09 16:24:13 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-03-13 08:53:38 -0600 |
| commit | b8ccfc4270a34e192b567ab47258d611abb1d542 (patch) | |
| tree | e11e7540b188430abafd7efcbdd3a223fc2f7e3c /layers/core_validation.cpp | |
| parent | ca9aef52017e074544f718ef9095c22efff347c2 (diff) | |
| download | usermoji-b8ccfc4270a34e192b567ab47258d611abb1d542.tar.xz | |
layers: Move desc set helper to descriptorset module
Change-Id: I695cf51b6fa27df7585582f545c0077efb9fd432
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 73 |
1 files changed, 5 insertions, 68 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 8d7cb016..c0243f86 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -11453,78 +11453,16 @@ VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(VkDevice device, dev_data->dispatch_table.DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator); } -void PostCallRecordUpdateDescriptorSetWithTemplateKHR(layer_data *device_data, VkDescriptorSet descriptorSet, - VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void *pData) { +// PostCallRecord* handles recording state updates following call down chain to UpdateDescriptorSetsWithTemplate() +static void PostCallRecordUpdateDescriptorSetWithTemplateKHR(layer_data *device_data, VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, + const void *pData) { auto const template_map_entry = device_data->desc_template_map.find(descriptorUpdateTemplate); if (template_map_entry == device_data->desc_template_map.end()) { assert(0); } - auto const &create_info = template_map_entry->second->create_info; - - // Create a vector of write structs - std::vector<VkWriteDescriptorSet> desc_writes; - auto layout_obj = GetDescriptorSetLayout(device_data, create_info.descriptorSetLayout); - - // Create a WriteDescriptorSet struct for each template update entry - for (uint32_t i = 0; i < create_info.descriptorUpdateEntryCount; i++) { - auto binding_count = layout_obj->GetDescriptorCountFromBinding(create_info.pDescriptorUpdateEntries[i].dstBinding); - auto binding_being_updated = create_info.pDescriptorUpdateEntries[i].dstBinding; - auto dst_array_element = create_info.pDescriptorUpdateEntries[i].dstArrayElement; - - for (uint32_t j = 0; j < create_info.pDescriptorUpdateEntries[i].descriptorCount; j++) { - desc_writes.emplace_back(); - auto &write_entry = desc_writes.back(); - - size_t offset = create_info.pDescriptorUpdateEntries[i].offset + j * create_info.pDescriptorUpdateEntries[i].stride; - char *update_entry = (char *)(pData) + offset; - - if (dst_array_element >= binding_count) { - dst_array_element = 0; - // Move to next binding having a non-zero binding count - do { - binding_being_updated++; - binding_count = layout_obj->GetDescriptorCountFromBinding(binding_being_updated); - } while (binding_count == 0); - } - - write_entry.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; - write_entry.pNext = NULL; - write_entry.dstSet = descriptorSet; - write_entry.dstBinding = binding_being_updated; - write_entry.dstArrayElement = dst_array_element; - write_entry.descriptorCount = 1; - write_entry.descriptorType = create_info.pDescriptorUpdateEntries[i].descriptorType; - - switch (create_info.pDescriptorUpdateEntries[i].descriptorType) { - case VK_DESCRIPTOR_TYPE_SAMPLER: - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - write_entry.pImageInfo = reinterpret_cast<VkDescriptorImageInfo *>(update_entry); - break; - - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - write_entry.pBufferInfo = reinterpret_cast<VkDescriptorBufferInfo *>(update_entry); - break; - - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - write_entry.pTexelBufferView = reinterpret_cast<VkBufferView *>(update_entry); - break; - default: - assert(0); - break; - } - dst_array_element++; - } - } - cvdescriptorset::PerformUpdateDescriptorSets(device_data, static_cast<uint32_t>(desc_writes.size()), desc_writes.data(), 0, - NULL); + cvdescriptorset::PerformUpdateDescriptorSetsWithTemplateKHR(device_data, descriptorSet, template_map_entry->second, pData); } VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(VkDevice device, VkDescriptorSet descriptorSet, @@ -11534,7 +11472,6 @@ VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(VkDevice device, V device_data->dispatch_table.UpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData); PostCallRecordUpdateDescriptorSetWithTemplateKHR(device_data, descriptorSet, descriptorUpdateTemplate, pData); - } VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer commandBuffer, |
