@@ -487,57 +487,37 @@ class CVulkanLogicalDevice final : public ILogicalDevice
487487 vk_writeDescriptorSets[i].descriptorType = getVkDescriptorTypeFromDescriptorType (pDescriptorWrites[i].descriptorType );
488488 vk_writeDescriptorSets[i].descriptorCount = pDescriptorWrites[i].count ;
489489
490- assert ( pDescriptorWrites[i].info [ 0 ]. desc ) ;
490+ const auto bindingWriteCount = pDescriptorWrites[i].count ;
491491
492492 switch (pDescriptorWrites[i].info ->desc ->getTypeCategory ())
493493 {
494494 case asset::IDescriptor::EC_BUFFER:
495495 {
496- VkDescriptorBufferInfo dummyInfo = {};
497- dummyInfo.buffer = static_cast <const CVulkanBuffer*>(pDescriptorWrites[i].info [0 ].desc .get ())->getInternalObject ();
498- dummyInfo.offset = pDescriptorWrites[i].info [0 ].info .buffer .offset ;
499- dummyInfo.range = pDescriptorWrites[i].info [0 ].info .buffer .size ;
500-
501496 vk_writeDescriptorSets[i].pBufferInfo = reinterpret_cast <VkDescriptorBufferInfo*>(vk_bufferInfos.size ());
502- for (uint32_t j = 0u ; j < pDescriptorWrites[i].count ; ++j)
503- vk_bufferInfos.push_back (dummyInfo);
497+ vk_bufferInfos.resize (vk_bufferInfos.size () + bindingWriteCount);
504498 } break ;
505499
506500 case asset::IDescriptor::EC_IMAGE:
507501 {
508- const auto & firstDescWriteImageInfo = pDescriptorWrites[i].info [0 ].info .image ;
509-
510- VkDescriptorImageInfo dummyInfo = { VK_NULL_HANDLE };
511- if (firstDescWriteImageInfo.sampler && (firstDescWriteImageInfo.sampler ->getAPIType () == EAT_VULKAN))
512- dummyInfo.sampler = static_cast <const CVulkanSampler*>(firstDescWriteImageInfo.sampler .get ())->getInternalObject ();
513- dummyInfo.imageView = static_cast <const CVulkanImageView*>(pDescriptorWrites[i].info [0 ].desc .get ())->getInternalObject ();
514- dummyInfo.imageLayout = static_cast <VkImageLayout>(pDescriptorWrites[i].info [0 ].info .image .imageLayout );
515-
516502 vk_writeDescriptorSets[i].pImageInfo = reinterpret_cast <VkDescriptorImageInfo*>(vk_imageInfos.size ());
517- for (uint32_t j = 0u ; j < pDescriptorWrites[i].count ; ++j)
518- vk_imageInfos.push_back (dummyInfo);
503+ vk_imageInfos.resize (vk_imageInfos.size () + bindingWriteCount);
519504 } break ;
520505
521506 case asset::IDescriptor::EC_BUFFER_VIEW:
522507 {
523- VkBufferView dummyBufferView = static_cast <const CVulkanBufferView*>(pDescriptorWrites[i].info [0 ].desc .get ())->getInternalObject ();
524-
525508 vk_writeDescriptorSets[i].pTexelBufferView = reinterpret_cast <VkBufferView*>(vk_bufferViews.size ());
526- for (uint32_t j = 0u ; j < pDescriptorWrites[i].count ; ++j)
527- vk_bufferViews.push_back (dummyBufferView);
509+ vk_bufferViews.resize (vk_bufferViews.size () + bindingWriteCount);
528510 } break ;
529511
530512 case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
531513 {
532514 auto & writeAS = vk_writeDescriptorSetAS[i];
533515 writeAS = { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR, nullptr };
534- writeAS.accelerationStructureCount = pDescriptorWrites[i].count ;
535-
516+ writeAS.accelerationStructureCount = bindingWriteCount;
536517 vk_writeDescriptorSets[i].pNext = &writeAS;
537518
538519 writeAS.pAccelerationStructures = reinterpret_cast <VkAccelerationStructureKHR*>(vk_accelerationStructures.size ());
539- for (uint32_t j = 0u ; j < pDescriptorWrites[i].count ; ++j)
540- vk_accelerationStructures.push_back ({});
520+ vk_accelerationStructures.resize (vk_accelerationStructures.size () + bindingWriteCount);
541521 } break ;
542522
543523 default :
0 commit comments