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