@@ -644,7 +644,7 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets
644644 // Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of
645645 // VkWriteDescriptorSetAccelerationStructureKHR, VkWriteDescriptorSetAccelerationStructureNV, or VkWriteDescriptorSetInlineUniformBlockEXT
646646 core::vector<VkWriteDescriptorSet> vk_writeDescriptorSets (params.writes .size (),{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,nullptr });
647- core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (MaxDescriptorSetAsWrites ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
647+ core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (params. accelerationStructureWriteCount ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
648648
649649 core::vector<VkDescriptorBufferInfo> vk_bufferInfos (params.bufferCount );
650650 core::vector<VkDescriptorImageInfo> vk_imageInfos (params.imageCount );
@@ -731,39 +731,21 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets
731731 m_devf.vk .vkUpdateDescriptorSets (m_vkdev,vk_writeDescriptorSets.size (),vk_writeDescriptorSets.data (),vk_copyDescriptorSets.size (),vk_copyDescriptorSets.data ());
732732}
733733
734- void CVulkanLogicalDevice::nullifyDescriptors_impl (const std::span< const IGPUDescriptorSet::SDropDescriptorSet> drops )
734+ void CVulkanLogicalDevice::nullifyDescriptors_impl (const SDropDescriptorSetsParams& params )
735735{
736+ const auto & drops = params.drops ;
736737 if (getEnabledFeatures ().nullDescriptor )
737738 {
738739 return ;
739740 }
740741
741742 core::vector<VkWriteDescriptorSet> vk_writeDescriptorSets (drops.size (),{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,nullptr });
742- core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (MaxDescriptorSetAsWrites ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
743+ core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (params. accelerationStructureWriteCount ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
743744
744- size_t maxSize = 0 ;
745- for (auto i = 0 ; i < drops.size (); i++)
746- {
747- const auto & write = drops[i];
748- auto descriptorType = write.dstSet ->getBindingType (write.binding );
749- size_t descriptorSize;
750- switch (asset::IDescriptor::GetTypeCategory (descriptorType))
751- {
752- case asset::IDescriptor::EC_BUFFER:
753- descriptorSize = sizeof (VkDescriptorBufferInfo);
754- break ;
755- case asset::IDescriptor::EC_IMAGE:
756- descriptorSize = sizeof (VkDescriptorImageInfo);
757- break ;
758- case asset::IDescriptor::EC_BUFFER_VIEW:
759- descriptorSize = sizeof (VkBufferView);
760- break ;
761- case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
762- descriptorSize = sizeof (VkAccelerationStructureKHR);
763- break ;
764- }
765- maxSize = core::max (maxSize, write.count * descriptorSize);
766- }
745+ size_t maxSize = core::max (
746+ core::max (params.bufferCount * sizeof (VkDescriptorBufferInfo), params.imageCount * sizeof (VkDescriptorImageInfo)),
747+ core::max (params.bufferViewCount * sizeof (VkBufferView), params.accelerationStructureCount * sizeof (VkAccelerationStructureKHR))
748+ );
767749
768750 core::vector<uint8_t > nullDescriptors (maxSize, 0u );
769751
0 commit comments