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