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/GraphicsEngineVulkan | |
| parent | Renamed Texture*_OGL to Texture*_GL (diff) | |
| download | DiligentCore-fa545a9faeaf884dc1b1bf53bedb2046025bb0a8.tar.gz DiligentCore-fa545a9faeaf884dc1b1bf53bedb2046025bb0a8.zip | |
Unified PRS hash calculation
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
3 files changed, 22 insertions, 33 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/PipelineResourceAttribsVk.hpp b/Graphics/GraphicsEngineVulkan/include/PipelineResourceAttribsVk.hpp index a597cb54..34a19796 100644 --- a/Graphics/GraphicsEngineVulkan/include/PipelineResourceAttribsVk.hpp +++ b/Graphics/GraphicsEngineVulkan/include/PipelineResourceAttribsVk.hpp @@ -34,6 +34,7 @@ #include "ShaderResourceCacheCommon.hpp" #include "PrivateConstants.h" #include "DebugUtilities.hpp" +#include "HashUtils.hpp" namespace Diligent { @@ -142,6 +143,23 @@ public: { return SamplerInd != InvalidSamplerInd; } + + bool IsCompatibleWith(const PipelineResourceAttribsVk& rhs) const + { + // Ignore sampler index and cache offsets. + // clang-format off + return BindingIndex == rhs.BindingIndex && + ArraySize == rhs.ArraySize && + DescrType == rhs.DescrType && + DescrSet == rhs.DescrSet && + ImtblSamplerAssigned == rhs.ImtblSamplerAssigned; + // clang-format on + } + + size_t GetHash() const + { + return ComputeHash(BindingIndex, ArraySize, DescrType, DescrSet, ImtblSamplerAssigned); + } }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp index 9d4633f6..80b6c2f2 100644 --- a/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp +++ b/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp @@ -194,8 +194,6 @@ private: void CreateSetLayouts(); - size_t CalculateHash() const; - static inline CACHE_GROUP GetResourceCacheGroup(const PipelineResourceDesc& Res); static inline DESCRIPTOR_SET_ID VarTypeToDescriptorSetId(SHADER_RESOURCE_VARIABLE_TYPE VarType); diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp index 421bbe26..36f72f89 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp @@ -44,19 +44,6 @@ namespace Diligent namespace { -inline bool ResourcesCompatible(const PipelineResourceSignatureVkImpl::ResourceAttribs& lhs, - const PipelineResourceSignatureVkImpl::ResourceAttribs& rhs) -{ - // Ignore sampler index and cache offsets. - // clang-format off - return lhs.BindingIndex == rhs.BindingIndex && - lhs.ArraySize == rhs.ArraySize && - lhs.DescrType == rhs.DescrType && - lhs.DescrSet == rhs.DescrSet && - lhs.ImtblSamplerAssigned == rhs.ImtblSamplerAssigned; - // clang-format on -} - inline VkDescriptorType GetVkDescriptorType(DescriptorType Type) { static_assert(static_cast<Uint32>(DescriptorType::Count) == 15, "Please update the switch below to handle the new descriptor type"); @@ -270,7 +257,7 @@ PipelineResourceSignatureVkImpl::PipelineResourceSignatureVkImpl(IReferenceCount } } - m_Hash = CalculateHash(); + CalculateHash(); } catch (...) { @@ -552,22 +539,6 @@ void PipelineResourceSignatureVkImpl::CreateSetLayouts() VERIFY_EXPR(NumSets == GetNumDescriptorSets()); } -size_t PipelineResourceSignatureVkImpl::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, static_cast<Uint32>(Attr.GetDescriptorType()), Attr.BindingIndex, Attr.DescrType, - Attr.DescrSet, Attr.IsImmutableSamplerAssigned(), Attr.SRBCacheOffset); - } - - return Hash; -} - PipelineResourceSignatureVkImpl::~PipelineResourceSignatureVkImpl() { Destruct(); @@ -610,7 +581,9 @@ bool PipelineResourceSignatureVkImpl::IsCompatibleWith(const PipelineResourceSig 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; } |
