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 15class 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 */ 22class GrVkDescriptorPool : public GrVkResource { 23public: 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 41private: 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