@@ -487,57 +487,37 @@ class CVulkanLogicalDevice final : public ILogicalDevice
487
487
vk_writeDescriptorSets[i].descriptorType = getVkDescriptorTypeFromDescriptorType (pDescriptorWrites[i].descriptorType );
488
488
vk_writeDescriptorSets[i].descriptorCount = pDescriptorWrites[i].count ;
489
489
490
- assert ( pDescriptorWrites[i].info [ 0 ]. desc ) ;
490
+ const auto bindingWriteCount = pDescriptorWrites[i].count ;
491
491
492
492
switch (pDescriptorWrites[i].info ->desc ->getTypeCategory ())
493
493
{
494
494
case asset::IDescriptor::EC_BUFFER:
495
495
{
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
-
501
496
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);
504
498
} break ;
505
499
506
500
case asset::IDescriptor::EC_IMAGE:
507
501
{
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
-
516
502
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);
519
504
} break ;
520
505
521
506
case asset::IDescriptor::EC_BUFFER_VIEW:
522
507
{
523
- VkBufferView dummyBufferView = static_cast <const CVulkanBufferView*>(pDescriptorWrites[i].info [0 ].desc .get ())->getInternalObject ();
524
-
525
508
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);
528
510
} break ;
529
511
530
512
case asset::IDescriptor::EC_ACCELERATION_STRUCTURE:
531
513
{
532
514
auto & writeAS = vk_writeDescriptorSetAS[i];
533
515
writeAS = { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR, nullptr };
534
- writeAS.accelerationStructureCount = pDescriptorWrites[i].count ;
535
-
516
+ writeAS.accelerationStructureCount = bindingWriteCount;
536
517
vk_writeDescriptorSets[i].pNext = &writeAS;
537
518
538
519
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);
541
521
} break ;
542
522
543
523
default :
0 commit comments