summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-05-26 20:16:06 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-05-26 20:16:06 +0000
commit35250f4217e3fcf5cb9d64fc15a0acf359bf0283 (patch)
tree7ae2216e7d2add500e9928855a6c1719d08b2083 /Graphics/GraphicsEngineVulkan
parentReworked Vulkan shader resource layout: separated variables from layout resou... (diff)
downloadDiligentCore-35250f4217e3fcf5cb9d64fc15a0acf359bf0283.tar.gz
DiligentCore-35250f4217e3fcf5cb9d64fc15a0acf359bf0283.zip
Some minor updates to ShaderResourceCacheVk
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/include/ShaderResourceCacheVk.h57
-rw-r--r--Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp19
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");