diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2021-03-06 07:00:47 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-03-19 00:38:16 +0000 |
| commit | 72d2e4a6482150ee61b3124de546af1ec5a0bf38 (patch) | |
| tree | f33e4b9bc627519b0d6e9755c902e6945a4a93b6 /Graphics/GraphicsEngineD3D12 | |
| parent | Reworked FenceGLImpl to use std::atomic (diff) | |
| download | DiligentCore-72d2e4a6482150ee61b3124de546af1ec5a0bf38.tar.gz DiligentCore-72d2e4a6482150ee61b3124de546af1ec5a0bf38.zip | |
Moved GetResourceAttribution() function to PipelineStateBase to eliminate duplication
Diffstat (limited to 'Graphics/GraphicsEngineD3D12')
3 files changed, 6 insertions, 69 deletions
diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp index 84d9dccd..4c0f954b 100644 --- a/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp +++ b/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp @@ -64,7 +64,11 @@ public: virtual Uint32 DILIGENT_CALL_TYPE GetResourceSignatureCount() const override final { return m_RootSig->GetSignatureCount(); } /// Implementation of IPipelineState::GetResourceSignature() in Direct3D12 backend. - virtual IPipelineResourceSignature* DILIGENT_CALL_TYPE GetResourceSignature(Uint32 Index) const override final { return GetSignature(Index); } + virtual PipelineResourceSignatureD3D12Impl* DILIGENT_CALL_TYPE GetResourceSignature(Uint32 Index) const override final + { + VERIFY_EXPR(Index < GetResourceSignatureCount()); + return m_ResourceSignatures[Index]; + } /// Implementation of IPipelineStateD3D12::GetD3D12PipelineState(). virtual ID3D12PipelineState* DILIGENT_CALL_TYPE GetD3D12PipelineState() const override final { return static_cast<ID3D12PipelineState*>(m_pd3d12PSO.p); } @@ -77,12 +81,6 @@ public: const RootSignatureD3D12& GetRootSignature() const { return *m_RootSig; } - PipelineResourceSignatureD3D12Impl* GetSignature(Uint32 index) const - { - VERIFY_EXPR(index < GetResourceSignatureCount()); - return m_ResourceSignatures[index]; - } - #ifdef DILIGENT_DEVELOPMENT void DvpVerifySRBResources(ShaderResourceBindingD3D12Impl* pSRBs[], Uint32 NumSRBs) const; #endif @@ -121,44 +119,6 @@ private: void Destruct(); - struct ResourceAttribution - { - static constexpr Uint32 InvalidSignatureIndex = ~0u; - static constexpr Uint32 InvalidResourceIndex = PipelineResourceSignatureD3D12Impl::InvalidResourceIndex; - static constexpr Uint32 InvalidSamplerIndex = InvalidImmutableSamplerIndex; - - const PipelineResourceSignatureD3D12Impl* pSignature = nullptr; - - Uint32 SignatureIndex = InvalidSignatureIndex; - Uint32 ResourceIndex = InvalidResourceIndex; - Uint32 ImmutableSamplerIndex = InvalidSamplerIndex; - - ResourceAttribution() noexcept {} - ResourceAttribution(const PipelineResourceSignatureD3D12Impl* _pSignature, - Uint32 _SignatureIndex, - Uint32 _ResourceIndex, - Uint32 _ImmutableSamplerIndex = InvalidResourceIndex) noexcept : - pSignature{_pSignature}, - SignatureIndex{_SignatureIndex}, - ResourceIndex{_ResourceIndex}, - ImmutableSamplerIndex{_ImmutableSamplerIndex} - { - VERIFY_EXPR(pSignature == nullptr || pSignature->GetDesc().BindingIndex == SignatureIndex); - VERIFY_EXPR((ResourceIndex == InvalidResourceIndex) || (ImmutableSamplerIndex == InvalidSamplerIndex)); - } - - explicit operator bool() const - { - return SignatureIndex != InvalidSignatureIndex && (ResourceIndex != InvalidResourceIndex || ImmutableSamplerIndex != InvalidSamplerIndex); - } - - bool IsImmutableSampler() const - { - return operator bool() && ImmutableSamplerIndex != InvalidSamplerIndex; - } - }; - ResourceAttribution GetResourceAttribution(const char* Name, SHADER_TYPE Stage) const; - void ValidateShaderResources(const ShaderD3D12Impl* pShader, const LocalRootSignatureD3D12* pLocalRootSig); private: diff --git a/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp index b9a0f91e..864919d2 100644 --- a/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp @@ -240,7 +240,7 @@ void DeviceContextD3D12Impl::SetPipelineState(IPipelineState* pPipelineState) for (Uint32 i = 0, SignCount = pPipelineStateD3D12->GetResourceSignatureCount(); i < SignCount; ++i) { - const auto* pSignature = pPipelineStateD3D12->GetSignature(i); + const auto* pSignature = pPipelineStateD3D12->GetResourceSignature(i); if (pSignature != nullptr) RootInfo.ActiveSRBMask |= 1u << i; } diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp index fa70ddc6..f27d39dc 100644 --- a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp @@ -660,29 +660,6 @@ void PipelineStateD3D12Impl::InitRootSignature(const PipelineStateCreateInfo& Cr } } - -PipelineStateD3D12Impl::ResourceAttribution PipelineStateD3D12Impl::GetResourceAttribution(const char* Name, SHADER_TYPE Stage) const -{ - const auto SignCount = GetResourceSignatureCount(); - for (Uint32 sign = 0; sign < SignCount; ++sign) - { - const auto* const pSignature = GetSignature(sign); - if (pSignature == nullptr) - continue; - - const auto ResIndex = pSignature->FindResource(Stage, Name); - if (ResIndex != ResourceAttribution::InvalidResourceIndex) - return ResourceAttribution{pSignature, sign, ResIndex}; - else - { - const auto ImtblSamIndex = pSignature->FindImmutableSampler(Stage, Name); - if (ImtblSamIndex != ResourceAttribution::InvalidSamplerIndex) - return ResourceAttribution{pSignature, sign, ResourceAttribution::InvalidResourceIndex, ImtblSamIndex}; - } - } - return ResourceAttribution{}; -} - void PipelineStateD3D12Impl::ValidateShaderResources(const ShaderD3D12Impl* pShader, const LocalRootSignatureD3D12* pLocalRootSig) { const auto& pShaderResources = pShader->GetShaderResources(); |
