diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2021-01-27 02:43:23 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-01-27 02:43:23 +0000 |
| commit | 2304b80ad16a9ec86151aa60d54793c5e5365331 (patch) | |
| tree | 7abf3a56c3915414cb81cffcfa15aa677b26baf9 /Graphics/GraphicsEngine | |
| parent | Optimized PipelineResourceSignatureVkImpl::CommitDynamicResources by storing ... (diff) | |
| download | DiligentCore-2304b80ad16a9ec86151aa60d54793c5e5365331.tar.gz DiligentCore-2304b80ad16a9ec86151aa60d54793c5e5365331.zip | |
Moved CreateShaderResourceBinding, GetStaticVariableByName, GetStaticVariableByIndex, GetStaticVariableCount and BindStaticResources from PipelineStateVkImpl back to PipelineStateBase
Diffstat (limited to 'Graphics/GraphicsEngine')
| -rw-r--r-- | Graphics/GraphicsEngine/include/PipelineStateBase.hpp | 65 |
1 files changed, 65 insertions, 0 deletions
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<HashMapStringKey, Uint32, HashMapStringKey::Hasher>; |
