Skip to content

Commit 5a675bd

Browse files
committed
Fix: Only initialize static inline constants in static cache
1 parent dc10f3f commit 5a675bd

1 file changed

Lines changed: 26 additions & 9 deletions

File tree

Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)