From bdbca67b0e03baec3b9dd803e803d267210e892b Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Mon, 4 Mar 2019 23:19:07 -0800 Subject: Added ShaderFlags parameter to IPipelineState::BindStaticResources --- Graphics/GraphicsEngine/interface/PipelineState.h | 4 +++- Graphics/GraphicsEngine/interface/ShaderResourceBinding.h | 4 ++-- Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.h | 2 +- Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp | 6 ++++-- Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.h | 2 +- .../GraphicsEngineD3D12/include/ShaderResourceLayoutD3D12.h | 2 ++ Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp | 6 ++++-- Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.h | 2 +- Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h | 5 +++++ Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp | 10 +++++++--- 10 files changed, 30 insertions(+), 13 deletions(-) (limited to 'Graphics') 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); + } } } -- cgit v1.2.3