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 "vk/GrVkDefines.h"
     14 
     15 class GrVkGpu;
     16 
     17 /**
     18  * We require that all descriptor sets are of a single descriptor type. We also use a pool to only
     19  * make one type of descriptor set. Thus a single VkDescriptorPool will only allocated space for
     20  * for one type of descriptor.
     21  */
     22 class GrVkDescriptorPool : public GrVkResource {
     23 public:
     24     GrVkDescriptorPool(const GrVkGpu* gpu, VkDescriptorType type, uint32_t count);
     25 
     26     VkDescriptorPool descPool() const { return fDescPool; }
     27 
     28     void reset(const GrVkGpu* gpu);
     29 
     30     // Returns whether or not this descriptor pool could be used, assuming it gets fully reset and
     31     // not in use by another draw, to support the requested type and count.
     32     bool isCompatible(VkDescriptorType type, uint32_t count) const;
     33 
     34 #ifdef SK_TRACE_VK_RESOURCES
     35     void dumpInfo() const override {
     36         SkDebugf("GrVkDescriptorPool: %d, type %d (%d refs)\n", fDescPool, fType,
     37                  this->getRefCnt());
     38     }
     39 #endif
     40 
     41 private:
     42     void freeGPUData(const GrVkGpu* gpu) const override;
     43 
     44     VkDescriptorType     fType;
     45     uint32_t             fCount;
     46     VkDescriptorPool     fDescPool;
     47 
     48     typedef GrVkResource INHERITED;
     49 };
     50 
     51 #endif
     52