summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineOpenGL
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2021-03-10 05:47:39 +0000
committerassiduous <assiduous@diligentgraphics.com>2021-03-19 00:38:19 +0000
commitfa545a9faeaf884dc1b1bf53bedb2046025bb0a8 (patch)
tree78b9182aa90158adbcbd5d21ca7c108f4904ed7d /Graphics/GraphicsEngineOpenGL
parentRenamed Texture*_OGL to Texture*_GL (diff)
downloadDiligentCore-fa545a9faeaf884dc1b1bf53bedb2046025bb0a8.tar.gz
DiligentCore-fa545a9faeaf884dc1b1bf53bedb2046025bb0a8.zip
Unified PRS hash calculation
Diffstat (limited to 'Graphics/GraphicsEngineOpenGL')
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/PipelineResourceAttribsGL.hpp15
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp2
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp37
3 files changed, 19 insertions, 35 deletions
diff --git a/Graphics/GraphicsEngineOpenGL/include/PipelineResourceAttribsGL.hpp b/Graphics/GraphicsEngineOpenGL/include/PipelineResourceAttribsGL.hpp
index 9130f0fa..b668411c 100644
--- a/Graphics/GraphicsEngineOpenGL/include/PipelineResourceAttribsGL.hpp
+++ b/Graphics/GraphicsEngineOpenGL/include/PipelineResourceAttribsGL.hpp
@@ -32,6 +32,7 @@
#include "BasicTypes.h"
#include "DebugUtilities.hpp"
+#include "HashUtils.hpp"
namespace Diligent
{
@@ -77,6 +78,20 @@ public:
{
return ImtblSamplerAssigned != 0;
}
+
+ bool IsCompatibleWith(const PipelineResourceAttribsGL& rhs) const
+ {
+ // Ignore sampler index.
+ // clang-format off
+ return CacheOffset == rhs.CacheOffset &&
+ ImtblSamplerAssigned == rhs.ImtblSamplerAssigned;
+ // clang-format on
+ }
+
+ size_t GetHash() const
+ {
+ return ComputeHash(CacheOffset, ImtblSamplerAssigned);
+ }
};
} // namespace Diligent
diff --git a/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp b/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp
index d4e159ae..db8f0246 100644
--- a/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp
+++ b/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp
@@ -152,8 +152,6 @@ private:
void Destruct();
- size_t CalculateHash() const;
-
private:
TBindings m_BindingCount = {};
diff --git a/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp
index f48f82e5..8df6dccf 100644
--- a/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp
@@ -32,22 +32,6 @@
namespace Diligent
{
-namespace
-{
-
-inline bool ResourcesCompatible(const PipelineResourceSignatureGLImpl::ResourceAttribs& lhs,
- const PipelineResourceSignatureGLImpl::ResourceAttribs& rhs)
-{
- // Ignore sampler index.
- // clang-format off
- return lhs.CacheOffset == rhs.CacheOffset &&
- lhs.ImtblSamplerAssigned == rhs.ImtblSamplerAssigned;
- // clang-format on
-}
-
-} // namespace
-
-
const char* GetBindingRangeName(BINDING_RANGE Range)
{
static_assert(BINDING_RANGE_COUNT == 4, "Please update the switch below to handle the new shader resource range");
@@ -139,7 +123,7 @@ PipelineResourceSignatureGLImpl::PipelineResourceSignatureGLImpl(IReferenceCount
m_SRBMemAllocator.Initialize(m_Desc.SRBAllocationGranularity, GetNumActiveShaderStages(), ShaderVariableDataSizes.data(), 1, &CacheMemorySize);
}
- m_Hash = CalculateHash();
+ CalculateHash();
}
catch (...)
{
@@ -209,21 +193,6 @@ void PipelineResourceSignatureGLImpl::CreateLayout()
}
}
-size_t PipelineResourceSignatureGLImpl::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.CacheOffset);
- }
-
- return Hash;
-}
-
PipelineResourceSignatureGLImpl::~PipelineResourceSignatureGLImpl()
{
Destruct();
@@ -529,7 +498,9 @@ bool PipelineResourceSignatureGLImpl::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;
}