@@ -727,11 +727,11 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets
727
727
m_devf.vk .vkUpdateDescriptorSets (m_vkdev,vk_writeDescriptorSets.size (),vk_writeDescriptorSets.data (),vk_copyDescriptorSets.size (),vk_copyDescriptorSets.data ());
728
728
}
729
729
730
- void CVulkanLogicalDevice::nullifyDescriptors_impl (const std::span<const IGPUDescriptorSet::SDropDescriptorSet> drops, asset::IDescriptor::E_TYPE descriptorType )
730
+ void CVulkanLogicalDevice::nullifyDescriptors_impl (const std::span<const IGPUDescriptorSet::SDropDescriptorSet> drops)
731
731
{
732
732
if (getEnabledFeatures ().nullDescriptor )
733
733
{
734
- return
734
+ return ;
735
735
}
736
736
737
737
core::vector<VkWriteDescriptorSet> vk_writeDescriptorSets (drops.size (),{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,nullptr });
@@ -741,26 +741,27 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
741
741
for (auto i = 0 ; i < drops.size (); i++)
742
742
{
743
743
const auto & write = drops[i];
744
- maxSize = core::max (maxSize, write.count );
745
- }
746
- size_t descriptorSize;
747
- switch (asset::IDescriptor::GetTypeCategory (descriptorType))
748
- {
749
- case asset::IDescriptor::EC_BUFFER:
750
- descriptorSize = sizeof (VkDescriptorBufferInfo);
751
- break ;
752
- case asset::IDescriptor::EC_IMAGE:
753
- descriptorSize = sizeof (VkDescriptorImageInfo);
754
- break ;
755
- case asset::IDescriptor::EC_BUFFER_VIEW:
756
- descriptorSize = sizeof (VkBufferView);
757
- break ;
758
- case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
759
- descriptorSize = sizeof (VkAccelerationStructureKHR);
760
- break ;
744
+ auto descriptorType = write.dstSet ->getBindingType (write.binding );
745
+ size_t descriptorSize;
746
+ switch (asset::IDescriptor::GetTypeCategory (descriptorType))
747
+ {
748
+ case asset::IDescriptor::EC_BUFFER:
749
+ descriptorSize = sizeof (VkDescriptorBufferInfo);
750
+ break ;
751
+ case asset::IDescriptor::EC_IMAGE:
752
+ descriptorSize = sizeof (VkDescriptorImageInfo);
753
+ break ;
754
+ case asset::IDescriptor::EC_BUFFER_VIEW:
755
+ descriptorSize = sizeof (VkBufferView);
756
+ break ;
757
+ case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
758
+ descriptorSize = sizeof (VkAccelerationStructureKHR);
759
+ break ;
760
+ }
761
+ maxSize = core::max (maxSize, write.count * descriptorSize);
761
762
}
762
763
763
- core::vector<uint8_t > nullDescriptors (maxSize * descriptorSize , 0u );
764
+ core::vector<uint8_t > nullDescriptors (maxSize, 0u );
764
765
765
766
{
766
767
auto outWrite = vk_writeDescriptorSets.data ();
@@ -769,6 +770,7 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
769
770
for (auto i=0 ; i<drops.size (); i++)
770
771
{
771
772
const auto & write = drops[i];
773
+ auto descriptorType = write.dstSet ->getBindingType (write.binding );
772
774
773
775
outWrite->dstSet = static_cast <const CVulkanDescriptorSet*>(write.dstSet )->getInternalObject ();
774
776
outWrite->dstBinding = write.binding ;
0 commit comments