@@ -639,23 +639,23 @@ void PipelineResourceSignatureVkImpl::CommitDynamicResources(const ShaderResourc
639639 auto AccelStructIt = DescrAccelStructArr.begin ();
640640 auto WriteDescrSetIt = WriteDescrSetArr.begin ();
641641
642- const auto DynamicSetIdx = GetDescriptorSetIndex<DESCRIPTOR_SET_ID_DYNAMIC>();
643- const auto & SetResources = ResourceCache.GetDescriptorSet (DynamicSetIdx);
644- const auto & LogicalDevice = GetDevice ()->GetLogicalDevice ();
645- const auto DynResIdxRange = GetResourceIndexRange (SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC);
642+ const Uint32 DynamicSetIdx = GetDescriptorSetIndex<DESCRIPTOR_SET_ID_DYNAMIC>();
643+ const ShaderResourceCacheVk::DescriptorSet & SetResources = ResourceCache.GetDescriptorSet (DynamicSetIdx);
644+ const VulkanUtilities::VulkanLogicalDevice & LogicalDevice = GetDevice ()->GetLogicalDevice ();
645+ const std::pair<Uint32, Uint32> DynResIdxRange = GetResourceIndexRange (SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC);
646646
647- constexpr auto CacheType = ResourceCacheContentType::SRB;
647+ constexpr ResourceCacheContentType CacheType = ResourceCacheContentType::SRB;
648648
649649 for (Uint32 ResIdx = DynResIdxRange.first , ArrElem = 0 ; ResIdx < DynResIdxRange.second ;)
650650 {
651- const auto & Attr = GetResourceAttribs (ResIdx);
652- const auto CacheOffset = Attr.CacheOffset (CacheType);
653- const auto ArraySize = Attr.ArraySize ;
654- const auto DescrType = Attr.GetDescriptorType ();
651+ const PipelineResourceAttribsType & Attr = GetResourceAttribs (ResIdx);
652+ const Uint32 CacheOffset = Attr.CacheOffset (CacheType);
653+ const Uint32 ArraySize = Attr.ArraySize ;
654+ const DescriptorType DescrType = Attr.GetDescriptorType ();
655655
656656#ifdef DILIGENT_DEBUG
657657 {
658- const auto & Res = GetResourceDesc (ResIdx);
658+ const PipelineResourceDesc & Res = GetResourceDesc (ResIdx);
659659 VERIFY_EXPR (ArraySize == GetResourceDesc (ResIdx).ArraySize );
660660 VERIFY_EXPR (Res.VarType == SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC);
661661 }
@@ -672,12 +672,17 @@ void PipelineResourceSignatureVkImpl::CommitDynamicResources(const ShaderResourc
672672 // The type of the descriptor also controls which array the descriptors are taken from. (13.2.4)
673673 WriteDescrSetIt->descriptorType = DescriptorTypeToVkDescriptorType (DescrType);
674674 WriteDescrSetIt->descriptorCount = 0 ;
675+ // Zero-initialize array pointers as some implementations (e.g. Android Emulator) still check them even
676+ // if they are not used.
677+ WriteDescrSetIt->pImageInfo = nullptr ;
678+ WriteDescrSetIt->pBufferInfo = nullptr ;
679+ WriteDescrSetIt->pTexelBufferView = nullptr ;
675680
676681 auto WriteArrayElements = [&](auto DescrType, auto & DescrIt, const auto & DescrArr) //
677682 {
678683 while (ArrElem < ArraySize && DescrIt != DescrArr.end ())
679684 {
680- if (const auto & CachedRes = SetResources.GetResource (CacheOffset + (ArrElem++)))
685+ if (const ShaderResourceCacheVk::Resource & CachedRes = SetResources.GetResource (CacheOffset + (ArrElem++)))
681686 {
682687 *DescrIt = CachedRes.GetDescriptorWriteInfo <DescrType>();
683688 ++DescrIt;
@@ -774,7 +779,7 @@ void PipelineResourceSignatureVkImpl::CommitDynamicResources(const ShaderResourc
774779 AccelStructIt == DescrAccelStructArr.end () ||
775780 WriteDescrSetIt == WriteDescrSetArr.end ())
776781 {
777- auto DescrWriteCount = static_cast <Uint32>(std::distance (WriteDescrSetArr.begin (), WriteDescrSetIt));
782+ Uint32 DescrWriteCount = static_cast <Uint32>(std::distance (WriteDescrSetArr.begin (), WriteDescrSetIt));
778783 if (DescrWriteCount > 0 )
779784 LogicalDevice.UpdateDescriptorSets (DescrWriteCount, WriteDescrSetArr.data (), 0 , nullptr );
780785
@@ -786,7 +791,7 @@ void PipelineResourceSignatureVkImpl::CommitDynamicResources(const ShaderResourc
786791 }
787792 }
788793
789- auto DescrWriteCount = static_cast <Uint32>(std::distance (WriteDescrSetArr.begin (), WriteDescrSetIt));
794+ Uint32 DescrWriteCount = static_cast <Uint32>(std::distance (WriteDescrSetArr.begin (), WriteDescrSetIt));
790795 if (DescrWriteCount > 0 )
791796 LogicalDevice.UpdateDescriptorSets (DescrWriteCount, WriteDescrSetArr.data (), 0 , nullptr );
792797}
0 commit comments