@@ -1005,10 +1005,7 @@ bool PipelineResourceSignatureVkImpl::DvpValidateCommittedResource(const DeviceC
10051005 // Skip dynamic allocation verification for inline constant buffers.
10061006 // These are internal buffers managed by the signature and are updated
10071007 // via UpdateInlineConstantBuffers() before each draw/dispatch.
1008- // The Dynamic Buffer ID may be reused after PSO recreation (e.g., from cache),
1009- // which would cause false validation failures.
1010- const bool IsInlineConstantBuffer = (ResDesc.Flags & PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS) != 0 ;
1011- if (!IsInlineConstantBuffer)
1008+ if ((ResDesc.Flags & PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS) == 0 )
10121009 {
10131010 pDeviceCtx->DvpVerifyDynamicAllocation (pBufferVk);
10141011 }
@@ -1130,35 +1127,28 @@ void PipelineResourceSignatureVkImpl::UpdateInlineConstantBuffers(const ShaderRe
11301127 DeviceContextVkImpl& Ctx,
11311128 Uint32 PushConstantResIndex) const
11321129{
1133- // Determine the cache type based on the resource cache content
1134- // SRB caches use SRBCacheOffset, static caches use StaticCacheOffset
1135- const ResourceCacheContentType CacheType = ResourceCache.GetContentType ();
1136-
1130+ VERIFY (ResourceCache.GetContentType () == ResourceCacheContentType::SRB,
1131+ " Inline constant buffers can be updated only in SRB resource caches" );
1132+ constexpr ResourceCacheContentType CacheType = ResourceCacheContentType::SRB;
11371133 for (Uint32 i = 0 ; i < m_NumInlineConstantBuffers; ++i)
11381134 {
1139- const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
1140- const Uint32 DataSize = InlineCBAttr.NumConstants * sizeof (Uint32);
1141- const ResourceAttribs& Attr = GetResourceAttribs (InlineCBAttr.ResIndex );
1142- const Uint32 CacheOffset = Attr.CacheOffset (CacheType);
1143- const void * pInlineConstantData = ResourceCache.GetInlineConstantData (Attr.DescrSet , CacheOffset);
1144- VERIFY_EXPR (pInlineConstantData != nullptr );
1145-
1146- // Skip push constants - they are handled directly by CommitPushConstants
1135+ const InlineConstantBufferAttribsVk& InlineCBAttr = m_InlineConstantBuffers[i];
1136+ // Skip native push constants - they are handled directly by CommitPushConstants
11471137 if (InlineCBAttr.ResIndex == PushConstantResIndex)
11481138 continue ;
11491139
1150- // For emulated inline constants, get the shared buffer from the Signature
1151- // All SRBs share this buffer (similar to D3D11 backend)
1152- BufferVkImpl* pBuffer = InlineCBAttr.pBuffer .RawPtr ();
1140+ const Uint32 DataSize = InlineCBAttr.NumConstants * sizeof (Uint32);
1141+ const ResourceAttribs& Attr = GetResourceAttribs (InlineCBAttr.ResIndex );
1142+ const Uint32 CacheOffset = Attr.CacheOffset (CacheType);
1143+ const void * pInlineConstantData = ResourceCache.GetInlineConstantData (Attr.DescrSet , CacheOffset);
1144+ VERIFY_EXPR (pInlineConstantData != nullptr );
1145+ VERIFY_EXPR (InlineCBAttr.pBuffer );
11531146
1154- if (pBuffer)
1155- {
1156- // Map the shared buffer and copy the data
1157- void * pMappedData = nullptr ;
1158- Ctx.MapBuffer (pBuffer, MAP_WRITE, MAP_FLAG_DISCARD, pMappedData);
1159- memcpy (pMappedData, pInlineConstantData, DataSize);
1160- Ctx.UnmapBuffer (pBuffer, MAP_WRITE);
1161- }
1147+ // Map the shared buffer and copy the data
1148+ void * pMappedData = nullptr ;
1149+ Ctx.MapBuffer (InlineCBAttr.pBuffer , MAP_WRITE, MAP_FLAG_DISCARD, pMappedData);
1150+ memcpy (pMappedData, pInlineConstantData, DataSize);
1151+ Ctx.UnmapBuffer (InlineCBAttr.pBuffer , MAP_WRITE);
11621152 }
11631153}
11641154
0 commit comments