pipeline_helper: Simplify descriptor objects initialization

This commit is contained in:
ReinUsesLisp 2021-04-11 20:57:37 -03:00 committed by ameerj
parent 415c7e46ed
commit a33014022e
1 changed files with 25 additions and 33 deletions

View File

@ -85,25 +85,16 @@ public:
} }
void Add(const Shader::Info& info, VkShaderStageFlags stage) { void Add(const Shader::Info& info, VkShaderStageFlags stage) {
for ([[maybe_unused]] const auto& desc : info.constant_buffer_descriptors) { Add(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, stage, info.constant_buffer_descriptors.size());
Add(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, stage); Add(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stage, info.storage_buffers_descriptors.size());
} Add(VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, stage, info.texture_buffer_descriptors.size());
for ([[maybe_unused]] const auto& desc : info.storage_buffers_descriptors) { Add(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, stage, info.texture_descriptors.size());
Add(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stage); Add(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, stage, info.image_descriptors.size());
}
for ([[maybe_unused]] const auto& desc : info.texture_buffer_descriptors) {
Add(VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, stage);
}
for ([[maybe_unused]] const auto& desc : info.texture_descriptors) {
Add(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, stage);
}
for ([[maybe_unused]] const auto& desc : info.image_descriptors) {
Add(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, stage);
}
} }
private: private:
void Add(VkDescriptorType type, VkShaderStageFlags stage) { void Add(VkDescriptorType type, VkShaderStageFlags stage, size_t num) {
for (size_t i = 0; i < num; ++i) {
bindings.push_back({ bindings.push_back({
.binding = binding, .binding = binding,
.descriptorType = type, .descriptorType = type,
@ -111,7 +102,7 @@ private:
.stageFlags = stage, .stageFlags = stage,
.pImmutableSamplers = nullptr, .pImmutableSamplers = nullptr,
}); });
entries.push_back(VkDescriptorUpdateTemplateEntryKHR{ entries.push_back({
.dstBinding = binding, .dstBinding = binding,
.dstArrayElement = 0, .dstArrayElement = 0,
.descriptorCount = 1, .descriptorCount = 1,
@ -122,6 +113,7 @@ private:
++binding; ++binding;
offset += sizeof(DescriptorUpdateEntry); offset += sizeof(DescriptorUpdateEntry);
} }
}
const vk::Device* device{}; const vk::Device* device{};
boost::container::small_vector<VkDescriptorSetLayoutBinding, 32> bindings; boost::container::small_vector<VkDescriptorSetLayoutBinding, 32> bindings;