MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ update_descriptor_images()

void MayaFlux::Portal::Graphics::ShaderFoundry::update_descriptor_images ( std::span< const DescriptorImageWrite >  writes)

Update several image descriptor slots in one Vulkan call.

Equivalent to calling update_descriptor_image or update_descriptor_storage_image once per entry, except every entry is submitted through a single vkUpdateDescriptorSets call. An entry naming an unknown descriptor_set_id is skipped. A call with an empty span does nothing.

Parameters
writesSlots to update.

Definition at line 874 of file ShaderFoundry.cpp.

875{
876 if (writes.empty()) {
877 return;
878 }
879
880 std::vector<vk::DescriptorImageInfo> image_infos;
881 image_infos.reserve(writes.size());
882 std::vector<vk::WriteDescriptorSet> descriptor_writes;
883 descriptor_writes.reserve(writes.size());
884
885 for (const auto& w : writes) {
886 auto it = m_descriptor_sets.find(w.descriptor_set_id);
887 if (it == m_descriptor_sets.end()) {
888 continue;
889 }
890
891 vk::DescriptorImageInfo info;
892 info.imageView = w.image_view;
893 info.sampler = w.sampler;
894 info.imageLayout = w.layout;
895 image_infos.push_back(info);
896
897 vk::WriteDescriptorSet write;
898 write.dstSet = it->second.descriptor_set;
899 write.dstBinding = w.binding;
900 write.dstArrayElement = 0;
901 write.descriptorCount = 1;
902 write.descriptorType = w.type;
903 write.pImageInfo = &image_infos.back();
904 descriptor_writes.push_back(write);
905 }
906
907 if (!descriptor_writes.empty()) {
908 get_device().updateDescriptorSets(
909 static_cast<uint32_t>(descriptor_writes.size()), descriptor_writes.data(), 0, nullptr);
910 }
911}
vk::Device get_device() const
Get logical device handle.
std::unordered_map< DescriptorSetID, DescriptorSetState > m_descriptor_sets

References get_device(), and m_descriptor_sets.

+ Here is the call graph for this function: