• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 GrVkDescriptorPool_DEFINED
9 #define GrVkDescriptorPool_DEFINED
10 
11 #include "GrVkResource.h"
12 
13 #include "vulkan/vulkan.h"
14 
15 class GrVkGpu;
16 
17 class GrVkDescriptorPool : public GrVkResource {
18 public:
19     class DescriptorTypeCounts {
20     public:
DescriptorTypeCounts()21         DescriptorTypeCounts() {
22             memset(fDescriptorTypeCount, 0, sizeof(fDescriptorTypeCount));
23         }
24 
25         void setTypeCount(VkDescriptorType type, uint8_t count);
26         int numPoolSizes() const;
27 
28         // Determines if for each i, that.fDescriptorTypeCount[i] <= fDescriptorTypeCount[i];
29         bool isSuperSet(const DescriptorTypeCounts& that) const;
30     private:
31         uint8_t fDescriptorTypeCount[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
32 
33         friend class GrVkDescriptorPool;
34     };
35 
36     explicit GrVkDescriptorPool(const GrVkGpu* gpu, const DescriptorTypeCounts& typeCounts);
37 
descPool()38     VkDescriptorPool descPool() const { return fDescPool; }
39 
40     void reset(const GrVkGpu* gpu);
41 
42     // Returns whether or not this descriptor pool could be used, assuming it gets fully reset and
43     // not in use by another draw, to support the requested typeCounts.
44     bool isCompatible(const DescriptorTypeCounts& typeCounts) const;
45 
46 private:
47     void freeGPUData(const GrVkGpu* gpu) const override;
48 
49     DescriptorTypeCounts fTypeCounts;
50     VkDescriptorPool     fDescPool;
51 
52     typedef GrVkResource INHERITED;
53 };
54 
55 #endif
56