| /* |
| * Copyright 2016 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrVkDescriptorPool_DEFINED |
| #define GrVkDescriptorPool_DEFINED |
| |
| #include "GrVkResource.h" |
| |
| #include "vulkan/vulkan.h" |
| |
| class GrVkGpu; |
| |
| class GrVkDescriptorPool : public GrVkResource { |
| public: |
| class DescriptorTypeCounts { |
| public: |
| DescriptorTypeCounts() { |
| memset(fDescriptorTypeCount, 0, sizeof(fDescriptorTypeCount)); |
| } |
| |
| void setTypeCount(VkDescriptorType type, uint8_t count); |
| uint32_t numPoolSizes() const; |
| |
| // Determines if for each i, that.fDescriptorTypeCount[i] <= fDescriptorTypeCount[i]; |
| bool isSuperSet(const DescriptorTypeCounts& that) const; |
| private: |
| uint8_t fDescriptorTypeCount[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; |
| |
| friend class GrVkDescriptorPool; |
| }; |
| |
| explicit GrVkDescriptorPool(const GrVkGpu* gpu, const DescriptorTypeCounts& typeCounts); |
| |
| VkDescriptorPool descPool() const { return fDescPool; } |
| |
| void reset(const GrVkGpu* gpu); |
| |
| // Returns whether or not this descriptor pool could be used, assuming it gets fully reset and |
| // not in use by another draw, to support the requested typeCounts. |
| bool isCompatible(const DescriptorTypeCounts& typeCounts) const; |
| |
| private: |
| void freeGPUData(const GrVkGpu* gpu) const override; |
| |
| DescriptorTypeCounts fTypeCounts; |
| VkDescriptorPool fDescPool; |
| |
| typedef GrVkResource INHERITED; |
| }; |
| |
| |
| #endif |