diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2021-03-10 05:47:39 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-03-19 00:38:19 +0000 |
| commit | fa545a9faeaf884dc1b1bf53bedb2046025bb0a8 (patch) | |
| tree | 78b9182aa90158adbcbd5d21ca7c108f4904ed7d /Graphics/GraphicsEngineD3D12 | |
| parent | Renamed Texture*_OGL to Texture*_GL (diff) | |
| download | DiligentCore-fa545a9faeaf884dc1b1bf53bedb2046025bb0a8.tar.gz DiligentCore-fa545a9faeaf884dc1b1bf53bedb2046025bb0a8.zip | |
Unified PRS hash calculation
Diffstat (limited to 'Graphics/GraphicsEngineD3D12')
3 files changed, 23 insertions, 34 deletions
diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineResourceAttribsD3D12.hpp b/Graphics/GraphicsEngineD3D12/include/PipelineResourceAttribsD3D12.hpp index 7f7daad5..5d497c79 100644 --- a/Graphics/GraphicsEngineD3D12/include/PipelineResourceAttribsD3D12.hpp +++ b/Graphics/GraphicsEngineD3D12/include/PipelineResourceAttribsD3D12.hpp @@ -34,6 +34,7 @@ #include "PrivateConstants.h" #include "ShaderResourceCacheCommon.hpp" #include "DebugUtilities.hpp" +#include "HashUtils.hpp" namespace Diligent { @@ -130,6 +131,24 @@ public: GetD3D12RootParamType() == D3D12_ROOT_PARAMETER_TYPE_SRV || GetD3D12RootParamType() == D3D12_ROOT_PARAMETER_TYPE_UAV); } + + bool IsCompatibleWith(const PipelineResourceAttribsD3D12& rhs) const + { + // Ignore sampler index, signature root index & offset. + // clang-format off + return Register == rhs.Register && + Space == rhs.Space && + SRBRootIndex == rhs.SRBRootIndex && + SRBOffsetFromTableStart == rhs.SRBOffsetFromTableStart && + ImtblSamplerAssigned == rhs.ImtblSamplerAssigned && + RootParamType == rhs.RootParamType; + // clang-format on + } + + size_t GetHash() const + { + return ComputeHash(Register, Space, SRBRootIndex, SRBOffsetFromTableStart, ImtblSamplerAssigned, RootParamType); + } }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp index 497c57c3..3340de6c 100644 --- a/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp +++ b/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp @@ -192,8 +192,6 @@ private: using StaticResCacheTblSizesArrayType = std::array<Uint32, D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER + 1>; void AllocateRootParameters(StaticResCacheTblSizesArrayType& StaticResCacheTblSizes); - size_t CalculateHash() const; - void Destruct(); private: diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp index 3375cf2c..b9edc267 100644 --- a/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp @@ -47,20 +47,6 @@ namespace Diligent namespace { -inline bool ResourcesCompatible(const PipelineResourceSignatureD3D12Impl::ResourceAttribs& lhs, - const PipelineResourceSignatureD3D12Impl::ResourceAttribs& rhs) -{ - // Ignore sampler index, signature root index & offset. - // clang-format off - return lhs.Register == rhs.Register && - lhs.Space == rhs.Space && - lhs.SRBRootIndex == rhs.SRBRootIndex && - lhs.SRBOffsetFromTableStart == rhs.SRBOffsetFromTableStart && - lhs.ImtblSamplerAssigned == rhs.ImtblSamplerAssigned && - lhs.RootParamType == rhs.RootParamType; - // clang-format on -} - void ValidatePipelineResourceSignatureDescD3D12(const PipelineResourceSignatureDesc& Desc) noexcept(false) { { @@ -192,7 +178,7 @@ PipelineResourceSignatureD3D12Impl::PipelineResourceSignatureD3D12Impl(IReferenc m_SRBMemAllocator.Initialize(m_Desc.SRBAllocationGranularity, GetNumActiveShaderStages(), ShaderVariableDataSizes.data(), 1, &CacheMemorySize.TotalSize); } - m_Hash = CalculateHash(); + CalculateHash(); } catch (...) { @@ -404,29 +390,15 @@ bool PipelineResourceSignatureD3D12Impl::IsCompatibleWith(const PipelineResource VERIFY_EXPR(ResCount == Other.GetTotalResourceCount()); for (Uint32 r = 0; r < ResCount; ++r) { - if (!ResourcesCompatible(GetResourceAttribs(r), Other.GetResourceAttribs(r))) + const auto& Res = GetResourceAttribs(r); + const auto& OtherRes = Other.GetResourceAttribs(r); + if (!Res.IsCompatibleWith(OtherRes)) return false; } return true; } -size_t PipelineResourceSignatureD3D12Impl::CalculateHash() const -{ - if (m_Desc.NumResources == 0 && m_Desc.NumImmutableSamplers == 0) - return 0; - - auto Hash = CalculatePipelineResourceSignatureDescHash(m_Desc); - for (Uint32 i = 0; i < m_Desc.NumResources; ++i) - { - const auto& Attr = m_pResourceAttribs[i]; - HashCombine(Hash, Attr.Register, Attr.Space, Attr.SRBRootIndex, Attr.SRBOffsetFromTableStart, - Attr.RootParamType, Attr.IsImmutableSamplerAssigned()); - } - - return Hash; -} - void PipelineResourceSignatureD3D12Impl::InitSRBResourceCache(ShaderResourceCacheD3D12& ResourceCache) { ResourceCache.Initialize(m_SRBMemAllocator.GetResourceCacheDataAllocator(0), m_pDevice, m_RootParams); |
