Home | History | Annotate | Download | only in vk
      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:
     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 
     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