summaryrefslogtreecommitdiffstats
path: root/Graphics
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-03-05 07:19:07 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-03-05 07:19:07 +0000
commitbdbca67b0e03baec3b9dd803e803d267210e892b (patch)
treeaa20e56029a30178360cd1b17f0c817f9d590daf /Graphics
parentUpdated GL engine factory headers and structures (diff)
downloadDiligentCore-bdbca67b0e03baec3b9dd803e803d267210e892b.tar.gz
DiligentCore-bdbca67b0e03baec3b9dd803e803d267210e892b.zip
Added ShaderFlags parameter to IPipelineState::BindStaticResources
Diffstat (limited to 'Graphics')
-rw-r--r--Graphics/GraphicsEngine/interface/PipelineState.h4
-rw-r--r--Graphics/GraphicsEngine/interface/ShaderResourceBinding.h4
-rw-r--r--Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.h2
-rw-r--r--Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp6
-rw-r--r--Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.h2
-rw-r--r--Graphics/GraphicsEngineD3D12/include/ShaderResourceLayoutD3D12.h2
-rw-r--r--Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp6
-rw-r--r--Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.h2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h5
-rw-r--r--Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp10
10 files changed, 30 insertions, 13 deletions
diff --git a/Graphics/GraphicsEngine/interface/PipelineState.h b/Graphics/GraphicsEngine/interface/PipelineState.h
index 0f6efcf6..f562a2cd 100644
--- a/Graphics/GraphicsEngine/interface/PipelineState.h
+++ b/Graphics/GraphicsEngine/interface/PipelineState.h
@@ -251,9 +251,11 @@ public:
/// Binds resources for all shaders in the pipeline state
+ /// \param [in] ShaderFlags - Flags that specify shader stages, for which resources will be bound.
+ /// Any combination of Diligent::SHADER_TYPE may be used.
/// \param [in] pResourceMapping - Pointer to the resource mapping interface.
/// \param [in] Flags - Additional flags. See Diligent::BIND_SHADER_RESOURCES_FLAGS.
- virtual void BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags) = 0;
+ virtual void BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags) = 0;
/// Returns the number of static shader resource variables.
diff --git a/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h b/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h
index d2523685..0afaa1f1 100644
--- a/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h
+++ b/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h
@@ -56,8 +56,8 @@ public:
/// Binds mutable and dynamice resources using the resource mapping
- /// \param [in] ShaderFlags - Flags for the shader stages, for which resources will be bound.
- /// Any combination of Diligent::SHADER_TYPE may be specified.
+ /// \param [in] ShaderFlags - Flags that specify shader stages, for which resources will be bound.
+ /// Any combination of Diligent::SHADER_TYPE may be used.
/// \param [in] pResMapping - Shader resource mapping, where required resources will be looked up
/// \param [in] Flags - Additional flags. See Diligent::BIND_SHADER_RESOURCES_FLAGS.
virtual void BindResources(Uint32 ShaderFlags, IResourceMapping* pResMapping, Uint32 Flags) = 0;
diff --git a/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.h b/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.h
index 81e03ca2..c56d8479 100644
--- a/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.h
+++ b/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.h
@@ -51,7 +51,7 @@ public:
virtual void QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface)override final;
- virtual void BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags)override final;
+ virtual void BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags)override final;
virtual Uint32 GetStaticVariableCount(SHADER_TYPE ShaderType) const override final;
diff --git a/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp b/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp
index 84bc1ef5..d9cc1c21 100644
--- a/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp
@@ -322,11 +322,13 @@ ID3D11ComputeShader* PipelineStateD3D11Impl::GetD3D11ComputeShader()
}
-void PipelineStateD3D11Impl::BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags)
+void PipelineStateD3D11Impl::BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags)
{
for (Uint32 s=0; s < m_NumShaders; ++s)
{
- m_pStaticResourceLayouts[s].BindResources(pResourceMapping, Flags, m_pStaticResourceCaches[s]);
+ auto& StaticResLayout = m_pStaticResourceLayouts[s];
+ if ( (ShaderFlags & StaticResLayout.GetShaderType()) != 0 )
+ StaticResLayout.BindResources(pResourceMapping, Flags, m_pStaticResourceCaches[s]);
}
}
diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.h b/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.h
index 64dfdc2b..fa51b6d0 100644
--- a/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.h
+++ b/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.h
@@ -50,7 +50,7 @@ public:
virtual void QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface)override final;
- virtual void BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags)override final;
+ virtual void BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags)override final;
virtual Uint32 GetStaticVariableCount(SHADER_TYPE ShaderType) const override final;
diff --git a/Graphics/GraphicsEngineD3D12/include/ShaderResourceLayoutD3D12.h b/Graphics/GraphicsEngineD3D12/include/ShaderResourceLayoutD3D12.h
index 26ed260e..35ddfbc7 100644
--- a/Graphics/GraphicsEngineD3D12/include/ShaderResourceLayoutD3D12.h
+++ b/Graphics/GraphicsEngineD3D12/include/ShaderResourceLayoutD3D12.h
@@ -252,6 +252,8 @@ public:
}
const bool IsUsingSeparateSamplers() const {return !m_pResources->IsUsingCombinedTextureSamplers();}
+
+ SHADER_TYPE GetShaderType() const {return m_pResources->GetShaderType();}
private:
const D3D12Resource& GetAssignedSampler(const D3D12Resource& TexSrv)const;
diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp
index 91835158..46530860 100644
--- a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp
@@ -442,11 +442,13 @@ bool PipelineStateD3D12Impl::dbgContainsShaderResources()const
return false;
}
-void PipelineStateD3D12Impl::BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags)
+void PipelineStateD3D12Impl::BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags)
{
for (Uint32 s=0; s < m_NumShaders; ++s)
{
- m_pStaticVarManagers[s].BindResources(pResourceMapping, Flags);
+ auto ShaderType = GetStaticShaderResLayout(s).GetShaderType();
+ if ((ShaderFlags & ShaderType) != 0)
+ m_pStaticVarManagers[s].BindResources(pResourceMapping, Flags);
}
}
diff --git a/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.h b/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.h
index d03066fe..e9be63a3 100644
--- a/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.h
+++ b/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.h
@@ -66,7 +66,7 @@ public:
virtual VkPipeline GetVkPipeline() const override final { return m_Pipeline; }
- virtual void BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags)override final;
+ virtual void BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags)override final;
virtual Uint32 GetStaticVariableCount(SHADER_TYPE ShaderType) const override final;
diff --git a/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h b/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h
index 729997f9..8f7d2940 100644
--- a/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h
+++ b/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h
@@ -285,6 +285,11 @@ public:
return m_pResources->GetShaderName();
}
+ SHADER_TYPE GetShaderType()const
+ {
+ return m_pResources->GetShaderType();
+ }
+
const VkResource& GetResource(SHADER_RESOURCE_VARIABLE_TYPE VarType, Uint32 r)const
{
VERIFY_EXPR( r < m_NumResources[VarType] );
diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
index f28b2068..776db721 100644
--- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
@@ -618,12 +618,16 @@ void PipelineStateVkImpl::CommitAndTransitionShaderResources(IShaderResourceBind
}
}
-void PipelineStateVkImpl::BindStaticResources(IResourceMapping* pResourceMapping, Uint32 Flags)
+void PipelineStateVkImpl::BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags)
{
for (Uint32 s=0; s < m_NumShaders; ++s)
{
- auto& StaticVarMgr = GetStaticVarMgr(s);
- StaticVarMgr.BindResources(pResourceMapping, Flags);
+ auto ShaderType = GetStaticShaderResLayout(s).GetShaderType();
+ if ((ShaderType & ShaderFlags) != 0)
+ {
+ auto& StaticVarMgr = GetStaticVarMgr(s);
+ StaticVarMgr.BindResources(pResourceMapping, Flags);
+ }
}
}