@@ -243,7 +243,19 @@ void PipelineResourceSignatureGLImpl::CreateLayout(const bool IsSerialized)
243243
244244 if (m_pStaticResCache)
245245 {
246- m_pStaticResCache->Initialize (StaticResCounter, GetRawAllocator (), 0x0 , 0x0 , m_TotalInlineConstants);
246+ // Calculate the total number of static inline constants.
247+ // Only inline constant buffers with CacheOffset < StaticResCounter are static.
248+ Uint16 StaticInlineConstants = 0 ;
249+ for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
250+ {
251+ const InlineConstantBufferAttribsGL& InlineCBAttr = GetInlineConstantBuffer (i);
252+ if (InlineCBAttr.CacheOffset < StaticResCounter[BINDING_RANGE_UNIFORM_BUFFER])
253+ {
254+ StaticInlineConstants += static_cast <Uint16>(InlineCBAttr.NumConstants );
255+ }
256+ }
257+
258+ m_pStaticResCache->Initialize (StaticResCounter, GetRawAllocator (), 0x0 , 0x0 , StaticInlineConstants);
247259
248260 // Initialize inline constant buffers in the static cache.
249261 // This allows static inline constants to be set on the signature and later copied to SRBs.
@@ -256,17 +268,22 @@ void PipelineResourceSignatureGLImpl::CreateLayout(const bool IsSerialized)
256268 VERIFY_EXPR (InlineCBAttr.pBuffer );
257269 VERIFY_EXPR (InlineCBAttr.NumConstants > 0 );
258270
259- void * pInlineConstantData = m_pStaticResCache->GetInlineConstantDataPtr (InlineConstantOffset);
271+ // Only initialize inline constant buffers that are within the static cache range.
272+ // Mutable and dynamic inline constant buffers are not stored in the static cache.
273+ if (InlineCBAttr.CacheOffset < StaticResCounter[BINDING_RANGE_UNIFORM_BUFFER])
274+ {
275+ void * pInlineConstantData = m_pStaticResCache->GetInlineConstantDataPtr (InlineConstantOffset);
260276
261- m_pStaticResCache->InitInlineConstantBuffer (
262- InlineCBAttr.CacheOffset ,
263- RefCntAutoPtr<BufferGLImpl>{InlineCBAttr.pBuffer },
264- InlineCBAttr.NumConstants ,
265- pInlineConstantData);
277+ m_pStaticResCache->InitInlineConstantBuffer (
278+ InlineCBAttr.CacheOffset ,
279+ RefCntAutoPtr<BufferGLImpl>{InlineCBAttr.pBuffer },
280+ InlineCBAttr.NumConstants ,
281+ pInlineConstantData);
266282
267- InlineConstantOffset += InlineCBAttr.NumConstants ;
283+ InlineConstantOffset += InlineCBAttr.NumConstants ;
284+ }
268285 }
269- VERIFY_EXPR (InlineConstantOffset == m_TotalInlineConstants );
286+ VERIFY_EXPR (InlineConstantOffset == StaticInlineConstants );
270287 }
271288 }
272289}
0 commit comments