@@ -682,30 +682,18 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
682682 ResourceCache.MarkHasInlineConstants ();
683683
684684 // Count push constant buffers, emulated inline constant buffers, and calculate total memory size
685- Uint32 NumPushConstantBuffers = 0 ;
686- Uint32 NumEmulatedInlineConstantCBs = 0 ;
687685 Uint32 TotalInlineConstantSize = 0 ;
688686 for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
689687 {
690688 const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
691689 TotalInlineConstantSize += InlineCBAttr.NumConstants * sizeof (Uint32);
692- if (InlineCBAttr.IsPushConstant )
693- ++NumPushConstantBuffers;
694- else
695- ++NumEmulatedInlineConstantCBs;
696690 }
697691
698- // Initialize push constant data pointers array in the resource cache
699- if (NumPushConstantBuffers > 0 )
700- {
701- ResourceCache.InitializePushConstantDataPtrs (NumPushConstantBuffers);
702- }
692+ // Initialize push constant data pointers array in the resource cache, use ResIndex to access actual PushConstantDataPtr later.
693+ ResourceCache.InitializePushConstantDataPtrs (TotalResources);
703694
704- // Initialize inline constant buffers array in the resource cache
705- if (NumEmulatedInlineConstantCBs > 0 )
706- {
707- ResourceCache.InitializeInlineConstantBuffers (NumEmulatedInlineConstantCBs);
708- }
695+ // Initialize inline constant buffers array in the resource cache, use ResIndex to access actual InlineConstantBuffer later.
696+ ResourceCache.InitializeInlineConstantBuffers (TotalResources);
709697
710698 // Allocate memory for all inline constants
711699 void * pInlineConstantMemory = nullptr ;
@@ -720,8 +708,6 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
720708
721709 // Assign memory to each inline constant buffer and create per-SRB buffers
722710 Uint8* pCurrentDataPtr = static_cast <Uint8*>(pInlineConstantMemory);
723- Uint32 PushConstantBufferIdx = 0 ;
724- Uint32 EmulatedInlineConstantIdx = 0 ;
725711 for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
726712 {
727713 const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
@@ -731,7 +717,7 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
731717 {
732718 // For push constants, store the data pointer in the resource cache
733719 // Each SRB has its own copy of push constant data
734- ResourceCache.SetPushConstantDataPtr (PushConstantBufferIdx++ , pCurrentDataPtr);
720+ ResourceCache.SetPushConstantDataPtr (InlineCBAttr. ResIndex , pCurrentDataPtr);
735721 pCurrentDataPtr += DataSize;
736722 }
737723 else
@@ -761,10 +747,9 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
761747 RefCntAutoPtr<IBuffer> pBuffer;
762748 m_pDevice->CreateBuffer (CBDesc, nullptr , &pBuffer);
763749 VERIFY_EXPR (pBuffer);
764- ResourceCache.SetInlineConstantBuffer (EmulatedInlineConstantIdx , RefCntAutoPtr<BufferVkImpl>{pBuffer, IID_BufferVk});
750+ ResourceCache.SetInlineConstantBuffer (InlineCBAttr. ResIndex , RefCntAutoPtr<BufferVkImpl>{pBuffer, IID_BufferVk});
765751 }
766752
767- ++EmulatedInlineConstantIdx;
768753 pCurrentDataPtr += DataSize;
769754 }
770755 }
@@ -788,7 +773,6 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
788773
789774 // Bind internal inline constant buffers to the resource cache
790775 // This must be done after descriptor set allocation so that descriptor writes work correctly
791- Uint32 EmulatedInlineConstantIdx = 0 ;
792776 for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
793777 {
794778 const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
@@ -798,9 +782,7 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
798782 continue ;
799783
800784 // Get the per-SRB buffer from the resource cache
801- BufferVkImpl* pBuffer = ResourceCache.GetInlineConstantBuffer (EmulatedInlineConstantIdx);
802- ++EmulatedInlineConstantIdx;
803-
785+ BufferVkImpl* pBuffer = ResourceCache.GetInlineConstantBuffer (InlineCBAttr.ResIndex );
804786 if (!pBuffer)
805787 continue ;
806788
@@ -851,8 +833,7 @@ void PipelineResourceSignatureVkImpl::CopyStaticResources(ShaderResourceCacheVk&
851833 // Handle STATIC push constants first - copy data from Signature's static cache to SRB's cache
852834 // Each SRB has its own copy of push constant data
853835 const auto ResIdxRange = GetResourceIndexRange (SHADER_RESOURCE_VARIABLE_TYPE_STATIC);
854- Uint32 DstPushConstantBufferIdx = 0 ;
855- Uint32 SrcPushConstantBufferIdx = 0 ;
836+
856837 for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
857838 {
858839 const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
@@ -863,19 +844,17 @@ void PipelineResourceSignatureVkImpl::CopyStaticResources(ShaderResourceCacheVk&
863844 if (ResDesc.VarType == SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
864845 {
865846 // Get source data from Signature's static resource cache
866- const void * pSrcData = m_pStaticResCache ? m_pStaticResCache->GetPushConstantDataPtr (SrcPushConstantBufferIdx) : nullptr ;
867- ++SrcPushConstantBufferIdx;
847+ const void * pSrcData = m_pStaticResCache ? m_pStaticResCache->GetPushConstantDataPtr (InlineCBAttr.ResIndex ) : nullptr ;
868848
869849 // Get destination data pointer from SRB's resource cache
870- void * pDstData = DstResourceCache.GetPushConstantDataPtr (DstPushConstantBufferIdx );
850+ void * pDstData = DstResourceCache.GetPushConstantDataPtr (InlineCBAttr. ResIndex );
871851
872852 if (pSrcData != nullptr && pDstData != nullptr )
873853 {
874854 const Uint32 DataSize = InlineCBAttr.NumConstants * sizeof (Uint32);
875855 memcpy (pDstData, pSrcData, DataSize);
876856 }
877857 }
878- ++DstPushConstantBufferIdx;
879858 }
880859
881860 if (!HasDescriptorSet (DESCRIPTOR_SET_ID_STATIC_MUTABLE) || m_pStaticResCache == nullptr )
@@ -1366,8 +1345,6 @@ void PipelineResourceSignatureVkImpl::UpdateInlineConstantBuffers(const ShaderRe
13661345 // SRB caches use SRBCacheOffset, static caches use StaticCacheOffset
13671346 const ResourceCacheContentType CacheType = ResourceCache.GetContentType ();
13681347
1369- Uint32 PushConstantBufferIdx = 0 ;
1370- Uint32 EmulatedInlineConstantIdx = 0 ;
13711348 for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
13721349 {
13731350 const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
@@ -1377,20 +1354,17 @@ void PipelineResourceSignatureVkImpl::UpdateInlineConstantBuffers(const ShaderRe
13771354 {
13781355 // For true push constants, get data from the SRB's resource cache
13791356 // Each SRB has its own copy of push constant data
1380- const void * pInlineConstantData = ResourceCache.GetPushConstantDataPtr (PushConstantBufferIdx );
1357+ const void * pInlineConstantData = ResourceCache.GetPushConstantDataPtr (InlineCBAttr. ResIndex );
13811358 VERIFY_EXPR (pInlineConstantData != nullptr );
13821359
1383- ++PushConstantBufferIdx;
1384-
13851360 // Copy data to the device context's push constants buffer
13861361 // This will be submitted via vkCmdPushConstants before draw/dispatch
13871362 Ctx.SetPushConstants (pInlineConstantData, 0 , DataSize);
13881363 continue ;
13891364 }
13901365
13911366 // For emulated inline constants, get the per-SRB buffer from the resource cache
1392- BufferVkImpl* pBuffer = ResourceCache.GetInlineConstantBuffer (EmulatedInlineConstantIdx);
1393- ++EmulatedInlineConstantIdx;
1367+ BufferVkImpl* pBuffer = ResourceCache.GetInlineConstantBuffer (InlineCBAttr.ResIndex );
13941368
13951369 if (pBuffer)
13961370 {
0 commit comments