@@ -635,12 +635,15 @@ core::smart_refctd_ptr<IDescriptorPool> CVulkanLogicalDevice::createDescriptorPo
635635 return nullptr ;
636636}
637637
638+ // a lot of empirical research went into defining this constant
639+ constexpr uint32_t MaxDescriptorSetAsWrites = 69u ;
640+
638641void CVulkanLogicalDevice::updateDescriptorSets_impl (const SUpdateDescriptorSetsParams& params)
639642{
640643 // 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
641644 // VkWriteDescriptorSetAccelerationStructureKHR, VkWriteDescriptorSetAccelerationStructureNV, or VkWriteDescriptorSetInlineUniformBlockEXT
642645 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 });
644647
645648 core::vector<VkDescriptorBufferInfo> vk_bufferInfos (params.bufferCount );
646649 core::vector<VkDescriptorImageInfo> vk_imageInfos (params.imageCount );
@@ -735,7 +738,7 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
735738 }
736739
737740 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 });
739742
740743 size_t maxSize = 0 ;
741744 for (auto i = 0 ; i < drops.size (); i++)
@@ -791,6 +794,7 @@ void CVulkanLogicalDevice::nullifyDescriptors_impl(const std::span<const IGPUDes
791794 case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
792795 outWriteAS->accelerationStructureCount = write.count ;
793796 outWriteAS->pAccelerationStructures = reinterpret_cast <VkAccelerationStructureKHR*>(nullDescriptors.data ());
797+ outWrite->pNext = outWriteAS++;
794798 break ;
795799 default :
796800 assert (!" Invalid code path." );
0 commit comments