Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: src/gpu/vk/GrVkDescriptorSetManager.h

Issue 2163673002: Setup system in Vulkan to reuse VkDescriptorSet allocations. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: nit Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/vk/GrVkDescriptorSet.cpp ('k') | src/gpu/vk/GrVkDescriptorSetManager.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef GrVkDescriptorSetManager_DEFINED
9 #define GrVkDescriptorSetManager_DEFINED
10
11 #include "GrResourceHandle.h"
12 #include "GrVkDescriptorPool.h"
13 #include "SkRefCnt.h"
14 #include "SkTArray.h"
15 #include "vk/GrVkDefines.h"
16
17 class GrVkDescriptorSet;
18 class GrVkGpu;
19
20 /**
21 * This class handles the allocation of descriptor sets for a given VkDescriptor SetLayout. It will
22 * try to reuse previously allocated descriptor sets if they are no longer in us e by other objects.
23 */
24 class GrVkDescriptorSetManager {
25 public:
26 GR_DEFINE_RESOURCE_HANDLE_CLASS(Handle);
27
28 GrVkDescriptorSetManager(GrVkGpu* gpu,
29 VkDescriptorSetLayout layout,
30 VkDescriptorType,
31 uint32_t samplerCount);
32 ~GrVkDescriptorSetManager() {}
33
34 void abandon();
35 void release(const GrVkGpu* gpu);
36
37 const GrVkDescriptorSet* getDescriptorSet(GrVkGpu* gpu, const Handle& handle );
38
39 void recycleDescriptorSet(const GrVkDescriptorSet*);
40
41 int isCompatible(uint32_t numSamplers) const { return numSamplers == fNumSam plerBindings; }
42
43 private:
44 struct DescriptorPoolManager {
45 DescriptorPoolManager(VkDescriptorSetLayout layout, VkDescriptorType typ e,
46 uint32_t samplerCount, GrVkGpu* gpu)
47 : fDescLayout(layout)
48 , fDescType(type)
49 , fCurrentDescriptorCount(0)
50 , fPool(nullptr) {
51 if (VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER == type) {
52 fDescCountPerSet = kNumUniformDescPerSet;
53 } else {
54 SkASSERT(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER);
55 fDescCountPerSet = samplerCount;
56 }
57
58 SkASSERT(fDescCountPerSet < kStartNumDescriptors);
59 fMaxDescriptors = kStartNumDescriptors;
60 SkASSERT(fMaxDescriptors > 0);
61 this->getNewPool(gpu);
62 }
63
64 ~DescriptorPoolManager() {
65 SkASSERT(!fDescLayout);
66 SkASSERT(!fPool);
67 }
68
69 void getNewDescriptorSet(GrVkGpu* gpu, VkDescriptorSet* ds);
70
71 void freeGPUResources(const GrVkGpu* gpu);
72 void abandonGPUResources();
73
74 VkDescriptorSetLayout fDescLayout; // Not owned by this class
75 VkDescriptorType fDescType;
76 uint32_t fDescCountPerSet;
77 uint32_t fMaxDescriptors;
78 uint32_t fCurrentDescriptorCount;
79 GrVkDescriptorPool* fPool;
80
81 private:
82 enum {
83 kNumUniformDescPerSet = 2,
84 kMaxDescriptors = 1024,
85 kStartNumDescriptors = 16, // must be less than kMaxUniformDescripto rs
86 };
87
88 void getNewPool(GrVkGpu* gpu);
89 };
90
91 DescriptorPoolManager fPoolManager;
92 SkTArray<const GrVkDescriptorSet*> fFreeSets;
93 // If the number of bindings is 0 we assume this is for uniform buffers
94 uint32_t fNumSamplerBindings;
95 };
96
97 #endif
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkDescriptorSet.cpp ('k') | src/gpu/vk/GrVkDescriptorSetManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698