summaryrefslogtreecommitdiffstats
path: root/Graphics
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2021-03-08 04:06:24 +0000
committerassiduous <assiduous@diligentgraphics.com>2021-03-19 00:38:17 +0000
commit228f25373ba2f1678ddcccba101c43a4612e1919 (patch)
tree0ddaaa757b527c25cc42610de5570f8a5eca6ccc /Graphics
parentVk backend: reorganized headers; removed PRS methods implemented in PipelineR... (diff)
downloadDiligentCore-228f25373ba2f1678ddcccba101c43a4612e1919.tar.gz
DiligentCore-228f25373ba2f1678ddcccba101c43a4612e1919.zip
Unified implementation of InitializeStaticSRBResources in D3D12, Vk and GL backends
Diffstat (limited to 'Graphics')
-rw-r--r--Graphics/GraphicsEngine/include/PipelineResourceSignatureBase.hpp48
-rw-r--r--Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp2
-rw-r--r--Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp10
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp5
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp10
-rw-r--r--Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp10
7 files changed, 26 insertions, 61 deletions
diff --git a/Graphics/GraphicsEngine/include/PipelineResourceSignatureBase.hpp b/Graphics/GraphicsEngine/include/PipelineResourceSignatureBase.hpp
index 72423b51..ce849246 100644
--- a/Graphics/GraphicsEngine/include/PipelineResourceSignatureBase.hpp
+++ b/Graphics/GraphicsEngine/include/PipelineResourceSignatureBase.hpp
@@ -242,6 +242,31 @@ public:
pResBindingImpl->QueryInterface(IID_ShaderResourceBinding, reinterpret_cast<IObject**>(ppShaderResourceBinding));
}
+ /// Implementation of IPipelineResourceSignature::InitializeStaticSRBResources.
+ virtual void DILIGENT_CALL_TYPE InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const override final
+ {
+ DEV_CHECK_ERR(pSRB != nullptr, "SRB must not be null");
+
+ auto* const pSRBImpl = ValidatedCast<ShaderResourceBindingImplType>(pSRB);
+ if (pSRBImpl->StaticResourcesInitialized())
+ {
+ LOG_WARNING_MESSAGE("Static resources have already been initialized in this shader resource binding object.");
+ return;
+ }
+
+ const auto* const pThisImpl = static_cast<const PipelineResourceSignatureImplType*>(this);
+#ifdef DILIGENT_DEVELOPMENT
+ {
+ const auto* pSRBSignature = pSRBImpl->GetPipelineResourceSignature();
+ DEV_CHECK_ERR(pSRBSignature->IsCompatibleWith(pThisImpl), "Shader resource binding is not compatible with resource signature '", pThisImpl->m_Desc.Name, "'.");
+ }
+#endif
+
+ auto& ResourceCache = pSRBImpl->GetResourceCache();
+ pThisImpl->CopyStaticResources(ResourceCache);
+
+ pSRBImpl->SetStaticResourcesInitialized();
+ }
size_t GetHash() const { return m_Hash; }
@@ -488,29 +513,6 @@ protected:
#endif
}
- template <typename SRBImplType, typename InitResourcesHandler>
- void InitializeStaticSRBResourcesImpl(SRBImplType* pSRB, InitResourcesHandler Handler) const
- {
- DEV_CHECK_ERR(pSRB != nullptr, "SRB must not be null");
- if (pSRB->StaticResourcesInitialized())
- {
- LOG_WARNING_MESSAGE("Static resources have already been initialized in this shader resource binding object.");
- return;
- }
-
- const auto* const pSRBSignature = pSRB->GetPipelineResourceSignature();
-#ifdef DILIGENT_DEVELOPMENT
- if (!pSRBSignature->IsCompatibleWith(this))
- {
- LOG_ERROR_MESSAGE("Shader resource binding is not compatible with resource signature '", this->m_Desc.Name, "'.");
- }
-#endif
-
- Handler(pSRB);
-
- pSRB->SetStaticResourcesInitialized();
- }
-
// Finds a sampler that is assigned to texture Tex, when combined texture samplers are used.
// Returns an index of the sampler in m_Desc.Resources array, or InvalidSamplerValue if there is
// no such sampler, or if combined samplers are not used.
diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp
index fba59c35..854d23a7 100644
--- a/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp
+++ b/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp
@@ -139,8 +139,6 @@ public:
return IsCompatibleWith(*ValidatedCast<const PipelineResourceSignatureD3D12Impl>(pPRS));
}
- virtual void DILIGENT_CALL_TYPE InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const override final;
-
bool IsCompatibleWith(const PipelineResourceSignatureD3D12Impl& Other) const;
SRBMemoryAllocator& GetSRBMemoryAllocator()
diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp
index 698151d4..18ee2a01 100644
--- a/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp
@@ -440,16 +440,6 @@ void PipelineResourceSignatureD3D12Impl::InitSRBResourceCache(ShaderResourceCach
ResourceCache.Initialize(CacheMemAllocator, m_pDevice, m_RootParams);
}
-void PipelineResourceSignatureD3D12Impl::InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const
-{
- InitializeStaticSRBResourcesImpl(ValidatedCast<ShaderResourceBindingD3D12Impl>(pSRB),
- [&](ShaderResourceBindingD3D12Impl* pSRBD3D12) //
- {
- CopyStaticResources(pSRBD3D12->GetResourceCache());
- } //
- );
-}
-
void PipelineResourceSignatureD3D12Impl::CopyStaticResources(ShaderResourceCacheD3D12& DstResourceCache) const
{
if (m_pStaticResCache == nullptr)
diff --git a/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp b/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp
index c96e627f..271429ed 100644
--- a/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp
+++ b/Graphics/GraphicsEngineOpenGL/include/PipelineResourceSignatureGLImpl.hpp
@@ -109,9 +109,6 @@ public:
return IsCompatibleWith(*ValidatedCast<const PipelineResourceSignatureGLImpl>(pPRS));
}
- /// Implementation of IPipelineResourceSignature::InitializeStaticSRBResources.
- virtual void DILIGENT_CALL_TYPE InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const override final;
-
bool IsCompatibleWith(const PipelineResourceSignatureGLImpl& Other) const;
bool IsIncompatibleWith(const PipelineResourceSignatureGLImpl& Other) const
@@ -137,10 +134,10 @@ public:
const char* PSOName) const;
#endif
-private:
// Copies static resources from the static resource cache to the destination cache
void CopyStaticResources(ShaderResourceCacheGL& ResourceCache) const;
+private:
void CreateLayouts();
void Destruct();
diff --git a/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp
index 264f30e1..d5380fb3 100644
--- a/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/PipelineResourceSignatureGLImpl.cpp
@@ -419,16 +419,6 @@ void PipelineResourceSignatureGLImpl::ApplyBindings(GLObjectWrappers::GLProgramO
State.SetProgram(GLObjectWrappers::GLProgramObj::Null());
}
-void PipelineResourceSignatureGLImpl::InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const
-{
- InitializeStaticSRBResourcesImpl(ValidatedCast<ShaderResourceBindingGLImpl>(pSRB),
- [&](ShaderResourceBindingGLImpl* pSRBGL) //
- {
- CopyStaticResources(pSRBGL->GetResourceCache());
- } //
- );
-}
-
void PipelineResourceSignatureGLImpl::CopyStaticResources(ShaderResourceCacheGL& DstResourceCache) const
{
if (m_pStaticResCache == nullptr)
diff --git a/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp
index d41c4c5e..35a91067 100644
--- a/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/PipelineResourceSignatureVkImpl.hpp
@@ -126,8 +126,6 @@ public:
return IsCompatibleWith(*ValidatedCast<const PipelineResourceSignatureVkImpl>(pPRS));
}
- virtual void DILIGENT_CALL_TYPE InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const override final;
-
SRBMemoryAllocator& GetSRBMemoryAllocator()
{
return m_SRBMemAllocator;
diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp
index 66502634..e896d9b7 100644
--- a/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp
@@ -659,16 +659,6 @@ void PipelineResourceSignatureVkImpl::InitSRBResourceCache(ShaderResourceCacheVk
}
}
-void PipelineResourceSignatureVkImpl::InitializeStaticSRBResources(IShaderResourceBinding* pSRB) const
-{
- InitializeStaticSRBResourcesImpl(ValidatedCast<ShaderResourceBindingVkImpl>(pSRB),
- [&](ShaderResourceBindingVkImpl* pSRBVk) //
- {
- CopyStaticResources(pSRBVk->GetResourceCache());
- } //
- );
-}
-
void PipelineResourceSignatureVkImpl::CopyStaticResources(ShaderResourceCacheVk& DstResourceCache) const
{
if (!HasDescriptorSet(DESCRIPTOR_SET_ID_STATIC_MUTABLE) || m_pStaticResCache == nullptr)