diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-05-26 20:16:06 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-05-26 20:16:06 +0000 |
| commit | 35250f4217e3fcf5cb9d64fc15a0acf359bf0283 (patch) | |
| tree | 7ae2216e7d2add500e9928855a6c1719d08b2083 /Graphics/GraphicsEngineVulkan | |
| parent | Reworked Vulkan shader resource layout: separated variables from layout resou... (diff) | |
| download | DiligentCore-35250f4217e3fcf5cb9d64fc15a0acf359bf0283.tar.gz DiligentCore-35250f4217e3fcf5cb9d64fc15a0acf359bf0283.zip | |
Some minor updates to ShaderResourceCacheVk
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.h | 57 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp | 19 |
2 files changed, 34 insertions, 42 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.h b/Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.h index c5f22aee..b2afd1c2 100644 --- a/Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.h +++ b/Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.h @@ -28,33 +28,26 @@ // Shader resource cache stores Vk resources in a continuous chunk of memory: // -// -// ______________________________________________________________ -// m_pMemory | m_pResources, m_NumResources == m | -// | | | -// V | V +// |Vulkan Descriptor Set| +// A ____________________________________________________________ +// m_pMemory | | m_pResources, m_NumResources == m | +// | m_DescriptorSetAllocation| | | +// V | | V // | DescriptorSet[0] | .... | DescriptorSet[Ns-1] | Res[0] | ... | Res[n-1] | .... | Res[0] | ... | Res[m-1] | -// | A \ -// | | \ -// |__________________________________________________| \RefCntAutoPtr -// m_pResources, m_NumResources == n \_________ -// | Object | -// --------- +// | | A \ +// | | | \ +// | |________________________________________________| \RefCntAutoPtr +// | m_pResources, m_NumResources == n \_________ +// | | Object | +// | m_DescriptorSetAllocation --------- +// V +// |Vulkan Descriptor Set| // // Ns = m_NumSets // // -// For static and mutable variable types, the cache is also assigned decriptor set -// -// -// | VkDescriptorSet | -// A -// | -// | -// | DescriptorSet[0] | DescriptorSet[1] | -// -// -// Dynamic resources are not VkDescriptorSet +// Descriptor set for static and mutable resources is assigned during cache initialization +// Descriptor set for dynamic resources is assigned at every draw call #include "DescriptorPoolManager.h" #include "SPIRVShaderResources.h" @@ -64,6 +57,7 @@ namespace Diligent class DeviceContextVkImpl; +// sizeof(ShaderResourceCacheVk) == 24 (x64, msvc, Release) class ShaderResourceCacheVk { public: @@ -81,11 +75,17 @@ public: { } + ShaderResourceCacheVk (const ShaderResourceCacheVk&) = delete; + ShaderResourceCacheVk (ShaderResourceCacheVk&&) = delete; + ShaderResourceCacheVk& operator = (const ShaderResourceCacheVk&) = delete; + ShaderResourceCacheVk& operator = (ShaderResourceCacheVk&&) = delete; + ~ShaderResourceCacheVk(); void InitializeSets(IMemoryAllocator &MemAllocator, Uint32 NumSets, Uint32 SetSizes[]); void InitializeResources(Uint32 Set, Uint32 Offset, Uint32 ArraySize, SPIRVShaderResourceAttribs::ResourceType Type); + // sizeof(Resource) == 24 (x64, msvc, Release) struct Resource { Resource(const Resource&) = delete; @@ -103,12 +103,13 @@ public: VkDescriptorImageInfo GetSamplerDescriptorWriteInfo() const; }; + // sizeof(DescriptorSet) == 40 (x64, msvc, Release) class DescriptorSet { public: DescriptorSet(Uint32 NumResources, Resource *pResources) : - m_NumResources(NumResources), - m_pResources(pResources) + m_NumResources (NumResources), + m_pResources (pResources) {} inline Resource& GetResource(Uint32 CacheOffset) @@ -136,8 +137,8 @@ public: } const Uint32 m_NumResources = 0; + private: - Resource* const m_pResources = nullptr; DescriptorPoolAllocation m_DescriptorSetAllocation; }; @@ -164,11 +165,7 @@ public: void TransitionResources(DeviceContextVkImpl *pCtxVkImpl); private: - ShaderResourceCacheVk (const ShaderResourceCacheVk&) = delete; - ShaderResourceCacheVk (ShaderResourceCacheVk&&) = delete; - ShaderResourceCacheVk& operator = (const ShaderResourceCacheVk&) = delete; - ShaderResourceCacheVk& operator = (ShaderResourceCacheVk&&) = delete; - + IMemoryAllocator* m_pAllocator = nullptr; void* m_pMemory = nullptr; Uint32 m_NumSets = 0; diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp index 83dd4a71..342fbc72 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp @@ -37,18 +37,13 @@ namespace Diligent void ShaderResourceCacheVk::InitializeSets(IMemoryAllocator &MemAllocator, Uint32 NumSets, Uint32 SetSizes[]) { // Memory layout: - // ______________________________________________________________ - // m_pMemory | m_pResources, m_NumResources == m | - // | | | - // V | V - // | DescriptorSet[0] | .... | DescriptorSet[Ns-1] | Res[0] | ... | Res[n-1] | .... | Res[0] | ... | Res[m-1] | - // | A \ - // | | \ - // |__________________________________________________| \RefCntAutoPtr - // m_pResources, m_NumResources == n \_________ - // | Object | - // --------- - // + // + // m_pMemory + // | + // V + // || DescriptorSet[0] | .... | DescriptorSet[Ns-1] | Res[0] | ... | Res[n-1] | .... | Res[0] | ... | Res[m-1] || + // + // // Ns = m_NumSets VERIFY(m_pAllocator == nullptr && m_pMemory == nullptr, "Cache already initialized"); |
