From cbc82d73874ea1422c295d44246138a820664e91 Mon Sep 17 00:00:00 2001 From: assiduous Date: Thu, 4 Mar 2021 20:30:35 -0800 Subject: Moved static variable cache and managers to PipelineResourceSignatureBase --- .../include/EngineD3D12ImplTraits.hpp | 6 ++ .../include/PipelineResourceSignatureD3D12Impl.hpp | 6 +- .../src/PipelineResourceSignatureD3D12Impl.cpp | 72 +++++----------------- 3 files changed, 24 insertions(+), 60 deletions(-) (limited to 'Graphics/GraphicsEngineD3D12') diff --git a/Graphics/GraphicsEngineD3D12/include/EngineD3D12ImplTraits.hpp b/Graphics/GraphicsEngineD3D12/include/EngineD3D12ImplTraits.hpp index deb6d970..a2ec044c 100644 --- a/Graphics/GraphicsEngineD3D12/include/EngineD3D12ImplTraits.hpp +++ b/Graphics/GraphicsEngineD3D12/include/EngineD3D12ImplTraits.hpp @@ -74,6 +74,9 @@ class PipelineResourceSignatureD3D12Impl; class FixedBlockMemoryAllocator; +class ShaderResourceCacheD3D12; +class ShaderVariableManagerD3D12; + struct EngineD3D12ImplTraits { using RenderDeviceInterface = IRenderDeviceD3D12; @@ -117,6 +120,9 @@ struct EngineD3D12ImplTraits using BuffViewObjAllocatorType = FixedBlockMemoryAllocator; using TexViewObjAllocatorType = FixedBlockMemoryAllocator; + + using ShaderResourceCacheImplType = ShaderResourceCacheD3D12; + using ShaderVariableManagerImplType = ShaderVariableManagerD3D12; }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp index abfd1b1f..00526a16 100644 --- a/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp +++ b/Graphics/GraphicsEngineD3D12/include/PipelineResourceSignatureD3D12Impl.hpp @@ -295,10 +295,8 @@ private: void Destruct(); private: - ResourceAttribs* m_pResourceAttribs = nullptr; // [m_Desc.NumResources] - ShaderResourceCacheD3D12* m_pStaticResCache = nullptr; - ShaderVariableManagerD3D12* m_StaticVarsMgrs = nullptr; // [GetNumStaticResStages()] - ImmutableSamplerAttribs* m_ImmutableSamplers = nullptr; // [m_Desc.NumImmutableSamplers] + ResourceAttribs* m_pResourceAttribs = nullptr; // [m_Desc.NumResources] + ImmutableSamplerAttribs* m_ImmutableSamplers = nullptr; // [m_Desc.NumImmutableSamplers] RootParamsManager m_RootParams; diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp index beb3d675..b8312d1a 100644 --- a/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/PipelineResourceSignatureD3D12Impl.cpp @@ -139,38 +139,23 @@ PipelineResourceSignatureD3D12Impl::PipelineResourceSignatureD3D12Impl(IReferenc try { - FixedLinearAllocator MemPool{GetRawAllocator()}; - - // Reserve at least 1 element because m_pResourceAttribs must hold a pointer to memory - MemPool.AddSpace(std::max(1u, Desc.NumResources)); - MemPool.AddSpace(m_Desc.NumImmutableSamplers); - - ReserveSpaceForDescription(MemPool, Desc); - - const auto NumStaticResStages = GetNumStaticResStages(); - if (NumStaticResStages > 0) - { - MemPool.AddSpace(1); - MemPool.AddSpace(NumStaticResStages); - } - - MemPool.Reserve(); + auto& RawAllocator{GetRawAllocator()}; + auto MemPool = ReserveSpace(RawAllocator, Desc, + [&Desc](FixedLinearAllocator& MemPool) // + { + MemPool.AddSpace(Desc.NumResources); + MemPool.AddSpace(Desc.NumImmutableSamplers); + }); static_assert(std::is_trivially_destructible::value, "ResourceAttribs objects must be constructed to be properly destructed in case an excpetion is thrown"); - m_pResourceAttribs = MemPool.Allocate(std::max(1u, m_Desc.NumResources)); + m_pResourceAttribs = MemPool.Allocate(m_Desc.NumResources); m_ImmutableSamplers = MemPool.ConstructArray(m_Desc.NumImmutableSamplers); - // The memory is now owned by PipelineResourceSignatureD3D12Impl and will be freed by Destruct(). - auto* Ptr = MemPool.ReleaseOwnership(); - VERIFY_EXPR(Ptr == m_pResourceAttribs); - (void)Ptr; - - CopyDescription(MemPool, Desc); - StaticResCacheTblSizesArrayType StaticResCacheTblSizes = {}; AllocateRootParameters(StaticResCacheTblSizes); + const auto NumStaticResStages = GetNumStaticResStages(); if (NumStaticResStages > 0) { m_pStaticResCache = MemPool.Construct(CacheContentType::Signature); @@ -178,7 +163,7 @@ PipelineResourceSignatureD3D12Impl::PipelineResourceSignatureD3D12Impl(IReferenc // Moreover, all objects must be constructed if an exception is thrown for Destruct() method to work properly. m_StaticVarsMgrs = MemPool.ConstructArray(NumStaticResStages, std::ref(*this), std::ref(*m_pStaticResCache)); - m_pStaticResCache->Initialize(GetRawAllocator(), static_cast(StaticResCacheTblSizes.size()), StaticResCacheTblSizes.data()); + m_pStaticResCache->Initialize(RawAllocator, static_cast(StaticResCacheTblSizes.size()), StaticResCacheTblSizes.data()); constexpr SHADER_RESOURCE_VARIABLE_TYPE AllowedVarTypes[] = {SHADER_RESOURCE_VARIABLE_TYPE_STATIC}; for (Uint32 i = 0; i < m_StaticResStageIndex.size(); ++i) @@ -188,7 +173,7 @@ PipelineResourceSignatureD3D12Impl::PipelineResourceSignatureD3D12Impl(IReferenc { VERIFY_EXPR(static_cast(Idx) < NumStaticResStages); const auto ShaderType = GetShaderTypeFromPipelineIndex(i, GetPipelineType()); - m_StaticVarsMgrs[Idx].Initialize(*this, GetRawAllocator(), AllowedVarTypes, _countof(AllowedVarTypes), ShaderType); + m_StaticVarsMgrs[Idx].Initialize(*this, RawAllocator, AllowedVarTypes, _countof(AllowedVarTypes), ShaderType); } } } @@ -398,27 +383,6 @@ PipelineResourceSignatureD3D12Impl::~PipelineResourceSignatureD3D12Impl() void PipelineResourceSignatureD3D12Impl::Destruct() { - auto& RawAllocator = GetRawAllocator(); - - if (m_StaticVarsMgrs != nullptr) - { - for (auto Idx : m_StaticResStageIndex) - { - if (Idx >= 0) - { - m_StaticVarsMgrs[Idx].Destroy(RawAllocator); - m_StaticVarsMgrs[Idx].~ShaderVariableManagerD3D12(); - } - } - m_StaticVarsMgrs = nullptr; - } - - if (m_pStaticResCache != nullptr) - { - m_pStaticResCache->~ShaderResourceCacheD3D12(); - m_pStaticResCache = nullptr; - } - if (m_ImmutableSamplers != nullptr) { for (Uint32 i = 0; i < m_Desc.NumImmutableSamplers; ++i) @@ -428,11 +392,7 @@ void PipelineResourceSignatureD3D12Impl::Destruct() m_ImmutableSamplers = nullptr; } - if (void* pRawMem = m_pResourceAttribs) - { - RawAllocator.Free(pRawMem); - m_pResourceAttribs = nullptr; - } + m_pResourceAttribs = nullptr; TPipelineResourceSignatureBase::Destruct(); } @@ -471,24 +431,24 @@ void PipelineResourceSignatureD3D12Impl::CreateShaderResourceBinding(IShaderReso Uint32 PipelineResourceSignatureD3D12Impl::GetStaticVariableCount(SHADER_TYPE ShaderType) const { - return GetStaticVariableCountImpl(ShaderType, m_StaticVarsMgrs); + return GetStaticVariableCountImpl(ShaderType); } IShaderResourceVariable* PipelineResourceSignatureD3D12Impl::GetStaticVariableByName(SHADER_TYPE ShaderType, const Char* Name) { - return GetStaticVariableByNameImpl(ShaderType, Name, m_StaticVarsMgrs); + return GetStaticVariableByNameImpl(ShaderType, Name); } IShaderResourceVariable* PipelineResourceSignatureD3D12Impl::GetStaticVariableByIndex(SHADER_TYPE ShaderType, Uint32 Index) { - return GetStaticVariableByIndexImpl(ShaderType, Index, m_StaticVarsMgrs); + return GetStaticVariableByIndexImpl(ShaderType, Index); } void PipelineResourceSignatureD3D12Impl::BindStaticResources(Uint32 ShaderFlags, IResourceMapping* pResMapping, Uint32 Flags) { - BindStaticResourcesImpl(ShaderFlags, pResMapping, Flags, m_StaticVarsMgrs); + BindStaticResourcesImpl(ShaderFlags, pResMapping, Flags); } size_t PipelineResourceSignatureD3D12Impl::CalculateHash() const -- cgit v1.2.3