NAP
descriptorsetcache.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7  // Internal includes
8 #include "vk_mem_alloc.h"
9 #include "renderutils.h"
10 
11 // External Includes
12 #include <vector>
13 #include <list>
14 #include <array>
15 #include <utility/dllexport.h>
16 #include <vulkan/vulkan_core.h>
17 
18 namespace nap
19 {
20  // Forward Declares
21  class UniformBufferObject;
22  class SamplerInstance;
23  class RenderService;
24  class DescriptorSetAllocator;
25 
30  {
31  VkDescriptorSetLayout mLayout;
32  VkDescriptorSet mSet;
33  std::vector<BufferData> mBuffers;
34 
35  const std::vector<BufferData>& getBuffers() const { return mBuffers; }
36  };
37 
48  class NAPAPI DescriptorSetCache final
49  {
50  public:
51  DescriptorSetCache(RenderService& renderService, VkDescriptorSetLayout layout, DescriptorSetAllocator& descriptorSetAllocator);
53 
63  const DescriptorSet& acquire(const std::vector<UniformBufferObject>& uniformBufferObjects, int numStorageBufferObjects, int numSamplers);
64 
69  void release(int frameIndex);
70 
71  private:
72  using DescriptorSetList = std::list<DescriptorSet>;
73  using DescriptorSetFrameList = std::vector<DescriptorSetList>;
74 
75  RenderService* mRenderService;
76  DescriptorSetAllocator* mDescriptorSetAllocator;
77  VkDescriptorSetLayout mLayout;
78  DescriptorSetList mFreeList;
79  DescriptorSetFrameList mUsedList;
80  };
81 
82 } // nap
nap::DescriptorSetCache
Definition: descriptorsetcache.h:48
nap::DescriptorSet::mLayout
VkDescriptorSetLayout mLayout
Definition: descriptorsetcache.h:31
nap::DescriptorSet::getBuffers
const std::vector< BufferData > & getBuffers() const
Definition: descriptorsetcache.h:35
nap::DescriptorSetAllocator
Definition: descriptorsetallocator.h:26
nap::RenderService
Definition: renderservice.h:275
nap::DescriptorSet::mSet
VkDescriptorSet mSet
Definition: descriptorsetcache.h:32
nap::DescriptorSet
Definition: descriptorsetcache.h:29
nap
Definition: templateapp.h:17
nap::DescriptorSet::mBuffers
std::vector< BufferData > mBuffers
Definition: descriptorsetcache.h:33