Skip to content

Commit f8d2a37

Browse files
PipelineResourceSignatureVkImpl: simplify UpdateInlineConstantBuffers
1 parent 23c49fa commit f8d2a37

1 file changed

Lines changed: 17 additions & 27 deletions

File tree

Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp

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

Comments
 (0)