@@ -727,11 +727,11 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets
727727 m_devf.vk .vkUpdateDescriptorSets (m_vkdev,vk_writeDescriptorSets.size (),vk_writeDescriptorSets.data (),vk_copyDescriptorSets.size (),vk_copyDescriptorSets.data ());
728728}
729729
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)
731731{
732732 if (getEnabledFeatures ().nullDescriptor )
733733 {
734- return
734+ return ;
735735 }
736736
737737 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
741741 for (auto i = 0 ; i < drops.size (); i++)
742742 {
743743 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);
761762 }
762763
763- core::vector<uint8_t > nullDescriptors (maxSize * descriptorSize , 0u );
764+ core::vector<uint8_t > nullDescriptors (maxSize, 0u );
764765
765766 {
766767 auto outWrite = vk_writeDescriptorSets.data ();
@@ -769,6 +770,7 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
769770 for (auto i=0 ; i<drops.size (); i++)
770771 {
771772 const auto & write = drops[i];
773+ auto descriptorType = write.dstSet ->getBindingType (write.binding );
772774
773775 outWrite->dstSet = static_cast <const CVulkanDescriptorSet*>(write.dstSet )->getInternalObject ();
774776 outWrite->dstBinding = write.binding ;
0 commit comments