@@ -644,7 +644,7 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets
644
644
// 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
645
645
// VkWriteDescriptorSetAccelerationStructureKHR, VkWriteDescriptorSetAccelerationStructureNV, or VkWriteDescriptorSetInlineUniformBlockEXT
646
646
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. accelerationStructureCount ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
648
648
649
649
core::vector<VkDescriptorBufferInfo> vk_bufferInfos (params.bufferCount );
650
650
core::vector<VkDescriptorImageInfo> vk_imageInfos (params.imageCount );
@@ -731,39 +731,21 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets
731
731
m_devf.vk .vkUpdateDescriptorSets (m_vkdev,vk_writeDescriptorSets.size (),vk_writeDescriptorSets.data (),vk_copyDescriptorSets.size (),vk_copyDescriptorSets.data ());
732
732
}
733
733
734
- void CVulkanLogicalDevice::nullifyDescriptors_impl (const std::span< const IGPUDescriptorSet::SDropDescriptorSet> drops )
734
+ void CVulkanLogicalDevice::nullifyDescriptors_impl (const SDropDescriptorSetsParams& params )
735
735
{
736
+ const auto & drops = params.drops ;
736
737
if (getEnabledFeatures ().nullDescriptor )
737
738
{
738
739
return ;
739
740
}
740
741
741
742
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. accelerationStructureCount ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
743
744
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
+ );
767
749
768
750
core::vector<uint8_t > nullDescriptors (maxSize, 0u );
769
751
0 commit comments