Skip to content

Commit 5ff7779

Browse files
Render State Cache: use unique ID instead of the pointer as a key for reloadable shader/pipeline hash maps
1 parent c2fde50 commit 5ff7779

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

Graphics/GraphicsTools/src/RenderStateCache.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ class RenderStateCacheImpl final : public ObjectBase<IRenderStateCache>
400400
{
401401
std::lock_guard<std::mutex> Guard{m_ReloadableShadersMtx};
402402

403-
auto it = m_ReloadableShaders.find(pShader);
403+
auto it = m_ReloadableShaders.find(pShader->GetUniqueID());
404404
if (it == m_ReloadableShaders.end())
405405
return {};
406406

@@ -457,14 +457,14 @@ class RenderStateCacheImpl final : public ObjectBase<IRenderStateCache>
457457
std::mutex m_ShadersMtx;
458458
std::unordered_map<XXH128Hash, RefCntWeakPtr<IShader>> m_Shaders;
459459

460-
std::mutex m_ReloadableShadersMtx;
461-
std::unordered_map<IShader*, RefCntWeakPtr<IShader>> m_ReloadableShaders;
460+
std::mutex m_ReloadableShadersMtx;
461+
std::unordered_map<UniqueIdentifier, RefCntWeakPtr<IShader>> m_ReloadableShaders;
462462

463463
std::mutex m_PipelinesMtx;
464464
std::unordered_map<XXH128Hash, RefCntWeakPtr<IPipelineState>> m_Pipelines;
465465

466-
std::mutex m_ReloadablePipelinesMtx;
467-
std::unordered_map<IPipelineState*, RefCntWeakPtr<IPipelineState>> m_ReloadablePipelines;
466+
std::mutex m_ReloadablePipelinesMtx;
467+
std::unordered_map<UniqueIdentifier, RefCntWeakPtr<IPipelineState>> m_ReloadablePipelines;
468468
};
469469

470470
static size_t ComputeDeviceAttribsHash(IRenderDevice* pDevice)
@@ -582,7 +582,7 @@ bool RenderStateCacheImpl::CreateShader(const ShaderCreateInfo& ShaderCI,
582582
{
583583
std::lock_guard<std::mutex> Guard{m_ReloadableShadersMtx};
584584

585-
auto it = m_ReloadableShaders.find(pShader);
585+
auto it = m_ReloadableShaders.find(pShader->GetUniqueID());
586586
if (it != m_ReloadableShaders.end())
587587
{
588588
if (auto pReloadableShader = it->second.Lock())
@@ -615,7 +615,7 @@ bool RenderStateCacheImpl::CreateShader(const ShaderCreateInfo& ShaderCI,
615615
ReloadableShader::Create(this, pShader, _ShaderCI, ppShader);
616616

617617
std::lock_guard<std::mutex> Guard{m_ReloadableShadersMtx};
618-
m_ReloadableShaders.emplace(pShader, RefCntWeakPtr<IShader>{*ppShader});
618+
m_ReloadableShaders.emplace(pShader->GetUniqueID(), RefCntWeakPtr<IShader>{*ppShader});
619619
}
620620
}
621621
else
@@ -1050,7 +1050,7 @@ bool RenderStateCacheImpl::CreatePipelineState(const CreateInfoType& PSOCreateIn
10501050
{
10511051
std::lock_guard<std::mutex> Guard{m_ReloadablePipelinesMtx};
10521052

1053-
auto it = m_ReloadablePipelines.find(pPSO);
1053+
auto it = m_ReloadablePipelines.find(pPSO->GetUniqueID());
10541054
if (it != m_ReloadablePipelines.end())
10551055
{
10561056
if (auto pReloadablePSO = it->second.Lock())
@@ -1065,7 +1065,7 @@ bool RenderStateCacheImpl::CreatePipelineState(const CreateInfoType& PSOCreateIn
10651065
ReloadablePipelineState::Create(this, pPSO, PSOCreateInfo, ppPipelineState);
10661066

10671067
std::lock_guard<std::mutex> Guard{m_ReloadablePipelinesMtx};
1068-
m_ReloadablePipelines.emplace(pPSO, RefCntWeakPtr<IPipelineState>(*ppPipelineState));
1068+
m_ReloadablePipelines.emplace(pPSO->GetUniqueID(), RefCntWeakPtr<IPipelineState>(*ppPipelineState));
10691069
}
10701070
}
10711071
else

0 commit comments

Comments
 (0)