From 2304b80ad16a9ec86151aa60d54793c5e5365331 Mon Sep 17 00:00:00 2001 From: assiduous Date: Tue, 26 Jan 2021 18:43:23 -0800 Subject: Moved CreateShaderResourceBinding, GetStaticVariableByName, GetStaticVariableByIndex, GetStaticVariableCount and BindStaticResources from PipelineStateVkImpl back to PipelineStateBase --- .../GraphicsEngine/include/PipelineStateBase.hpp | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'Graphics/GraphicsEngine') diff --git a/Graphics/GraphicsEngine/include/PipelineStateBase.hpp b/Graphics/GraphicsEngine/include/PipelineStateBase.hpp index 5e60f613..42e60feb 100644 --- a/Graphics/GraphicsEngine/include/PipelineStateBase.hpp +++ b/Graphics/GraphicsEngine/include/PipelineStateBase.hpp @@ -259,6 +259,71 @@ public: UNEXPECTED("Can't find shader group '", Name, "'."); } + virtual void DILIGENT_CALL_TYPE CreateShaderResourceBinding(IShaderResourceBinding** ppShaderResourceBinding, + bool InitStaticResources) override final + { + *ppShaderResourceBinding = nullptr; + + if (this->GetResourceSignatureCount() != 1) + { + LOG_ERROR_MESSAGE("PipelineState::CreateShaderResourceBinding is only allowed for pipelines that use a single " + "resource signature. Use IPipelineResourceSignature::CreateShaderResourceBinding instead."); + return; + } + + return this->GetResourceSignature(0)->CreateShaderResourceBinding(ppShaderResourceBinding, InitStaticResources); + } + + virtual IShaderResourceVariable* DILIGENT_CALL_TYPE GetStaticVariableByName(SHADER_TYPE ShaderType, + const Char* Name) override final + { + if (this->GetResourceSignatureCount() != 1) + { + LOG_ERROR_MESSAGE("PipelineState::CreateShaderResourceBinding is only allowed for pipelines that use a single " + "resource signature. Use IPipelineResourceSignature::GetStaticVariableByName instead."); + return nullptr; + } + + return this->GetResourceSignature(0)->GetStaticVariableByName(ShaderType, Name); + } + + virtual IShaderResourceVariable* DILIGENT_CALL_TYPE GetStaticVariableByIndex(SHADER_TYPE ShaderType, + Uint32 Index) override final + { + if (this->GetResourceSignatureCount() != 1) + { + LOG_ERROR_MESSAGE("PipelineState::GetStaticVariableByIndex is only allowed for pipelines that use a single " + "resource signature. Use IPipelineResourceSignature::GetStaticVariableByIndex instead."); + return nullptr; + } + + return this->GetResourceSignature(0)->GetStaticVariableByIndex(ShaderType, Index); + } + + virtual Uint32 DILIGENT_CALL_TYPE GetStaticVariableCount(SHADER_TYPE ShaderType) const override final + { + if (this->GetResourceSignatureCount() != 1) + { + LOG_ERROR_MESSAGE("PipelineState::GetStaticVariableCount is only allowed for pipelines that use a single " + "resource signature. Use IPipelineResourceSignature::GetStaticVariableCount instead."); + return 0; + } + + return this->GetResourceSignature(0)->GetStaticVariableCount(ShaderType); + } + + virtual void DILIGENT_CALL_TYPE BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResourceMapping, Uint32 Flags) override final + { + if (this->GetResourceSignatureCount() != 1) + { + LOG_ERROR_MESSAGE("PipelineState::BindStaticResources is only allowed for pipelines that use a single " + "resource signature. Use IPipelineResourceSignature::BindStaticResources instead."); + return; + } + + return this->GetResourceSignature(0)->BindStaticResources(ShaderFlags, pResourceMapping, Flags); + } + protected: using TNameToGroupIndexMap = std::unordered_map; -- cgit v1.2.3