@@ -635,12 +635,15 @@ core::smart_refctd_ptr<IDescriptorPool> CVulkanLogicalDevice::createDescriptorPo
635
635
return nullptr ;
636
636
}
637
637
638
+ // a lot of empirical research went into defining this constant
639
+ constexpr uint32_t MaxDescriptorSetAsWrites = 69u ;
640
+
638
641
void CVulkanLogicalDevice::updateDescriptorSets_impl (const SUpdateDescriptorSetsParams& params)
639
642
{
640
643
// 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
641
644
// VkWriteDescriptorSetAccelerationStructureKHR, VkWriteDescriptorSetAccelerationStructureNV, or VkWriteDescriptorSetInlineUniformBlockEXT
642
645
core::vector<VkWriteDescriptorSet> vk_writeDescriptorSets (params.writes .size (),{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,nullptr });
643
- core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (69u ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
646
+ core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (MaxDescriptorSetAsWrites ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
644
647
645
648
core::vector<VkDescriptorBufferInfo> vk_bufferInfos (params.bufferCount );
646
649
core::vector<VkDescriptorImageInfo> vk_imageInfos (params.imageCount );
@@ -735,7 +738,7 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
735
738
}
736
739
737
740
core::vector<VkWriteDescriptorSet> vk_writeDescriptorSets (drops.size (),{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,nullptr });
738
- core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (69u ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
741
+ core::vector<VkWriteDescriptorSetAccelerationStructureKHR> vk_writeDescriptorSetAS (MaxDescriptorSetAsWrites ,{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,nullptr });
739
742
740
743
size_t maxSize = 0 ;
741
744
for (auto i = 0 ; i < drops.size (); i++)
@@ -791,6 +794,7 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
791
794
case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
792
795
outWriteAS->accelerationStructureCount = write.count ;
793
796
outWriteAS->pAccelerationStructures = reinterpret_cast <VkAccelerationStructureKHR*>(nullDescriptors.data ());
797
+ outWrite->pNext = outWriteAS++;
794
798
break ;
795
799
default :
796
800
assert (!" Invalid code path." );
0 commit comments