blob: ebbf230708d55a615d2b32c515cd3300b5ee9747 [file] [log] [blame]
Greg Daniel48cf2682016-02-22 09:11:32 -05001/*
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
15class GrVkGpu;
16
17class GrVkDescriptorPool : public GrVkResource {
18public:
19 class DescriptorTypeCounts {
20 public:
21 DescriptorTypeCounts() {
22 memset(fDescriptorTypeCount, 0, sizeof(fDescriptorTypeCount));
23 }
24
25 void setTypeCount(VkDescriptorType type, uint8_t count);
26 uint32_t 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
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
46private:
47 void freeGPUData(const GrVkGpu* gpu) const override;
48
49 DescriptorTypeCounts fTypeCounts;
50 VkDescriptorPool fDescPool;
51
52 typedef GrVkResource INHERITED;
53};
54
55
56#endif