Skip to content

Commit cbe779b

Browse files
committed
Fix PipelineResourceSignatureVkImpl::UpdateInlineConstantBuffers not updating dynamic buffer correctly.
1 parent 0309087 commit cbe779b

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ class ShaderResourceCacheVk : public ShaderResourceCacheBase
258258
Uint32 NumConstants);
259259

260260
// Gets the inline constant data pointer from the resource cache
261-
const void* GetInlineConstantData(Uint32 DescrSetIndex, Uint32 BindingIndex) const;
261+
const void* GetInlineConstantData(Uint32 DescrSetIndex, Uint32 CacheOffset) const;
262262

263263
// Initialize inline constant buffer in the resource cache
264264
void InitializeInlineConstantBuffer(Uint32 DescrSetIndex,

Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,10 @@ PipelineResourceSignatureInternalDataVk PipelineResourceSignatureVkImpl::GetInte
13241324
void PipelineResourceSignatureVkImpl::UpdateInlineConstantBuffers(const ShaderResourceCacheVk& ResourceCache,
13251325
DeviceContextVkImpl& Ctx) const
13261326
{
1327+
// Determine the cache type based on the resource cache content
1328+
// SRB caches use SRBCacheOffset, static caches use StaticCacheOffset
1329+
const ResourceCacheContentType CacheType = ResourceCache.GetContentType();
1330+
13271331
Uint32 PushConstantBufferIdx = 0;
13281332
for (Uint32 i = 0; i < m_NumInlineConstantBuffers; ++i)
13291333
{
@@ -1347,8 +1351,11 @@ void PipelineResourceSignatureVkImpl::UpdateInlineConstantBuffers(const ShaderRe
13471351

13481352
if (InlineCBAttr.pBuffer)
13491353
{
1350-
// For emulated inline constants, get data from the resource cache
1351-
const void* pInlineConstantData = ResourceCache.GetInlineConstantData(InlineCBAttr.DescrSet, InlineCBAttr.BindingIndex);
1354+
// For emulated inline constants, get data from the resource cache using the correct CacheOffset
1355+
// Similar to D3D11 backend which uses BindPoints to locate the resource
1356+
const ResourceAttribs& Attr = GetResourceAttribs(InlineCBAttr.ResIndex);
1357+
const Uint32 CacheOffset = Attr.CacheOffset(CacheType);
1358+
const void* pInlineConstantData = ResourceCache.GetInlineConstantData(Attr.DescrSet, CacheOffset);
13521359
VERIFY_EXPR(pInlineConstantData != nullptr);
13531360

13541361
// Map the buffer and copy the data

Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -971,17 +971,15 @@ void ShaderResourceCacheVk::SetInlineConstants(Uint32 DescrSetIndex,
971971
memcpy(pDstConstants + FirstConstant, pConstants, NumConstants * sizeof(Uint32));
972972
}
973973

974-
const void* ShaderResourceCacheVk::GetInlineConstantData(Uint32 DescrSetIndex, Uint32 BindingIndex) const
974+
const void* ShaderResourceCacheVk::GetInlineConstantData(Uint32 DescrSetIndex, Uint32 CacheOffset) const
975975
{
976976
const DescriptorSet& DescrSet = GetDescriptorSet(DescrSetIndex);
977977

978-
VERIFY(BindingIndex < DescrSet.GetSize(), "BindingIndex out of bounds");
978+
VERIFY(CacheOffset < DescrSet.GetSize(), "CacheOffset out of bounds");
979979

980-
const Resource& Res = DescrSet.GetResource(BindingIndex);
980+
const Resource& Res = DescrSet.GetResource(CacheOffset);
981981
if (Res.pInlineConstantData != nullptr)
982982
{
983-
// For now, we assume binding index matches the resource index for inline constants
984-
// This may need adjustment based on actual binding layout
985983
return Res.pInlineConstantData;
986984
}
987985

0 commit comments

Comments
 (0)