Setup system in Vulkan to reuse VkDescriptorSet allocations.

This CL uses the new system for uniform buffers. In a follow up CL I will
add support for samplers.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2163673002

Review-Url: https://codereview.chromium.org/2163673002
diff --git a/src/gpu/vk/GrVkDescriptorSet.h b/src/gpu/vk/GrVkDescriptorSet.h
new file mode 100644
index 0000000..69e2d44
--- /dev/null
+++ b/src/gpu/vk/GrVkDescriptorSet.h
@@ -0,0 +1,44 @@
+/*
+* 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 GrVkDescriptorSet_DEFINED
+#define GrVkDescriptorSet_DEFINED
+
+#include "GrVkDescriptorSetManager.h"
+#include "GrVkResource.h"
+#include "vk/GrVkDefines.h"
+
+class GrVkDescriptorPool;
+class GrVkGpu;
+
+class GrVkDescriptorSet : public GrVkRecycledResource {
+public:
+    GrVkDescriptorSet(VkDescriptorSet descSet,
+                      GrVkDescriptorPool* pool,
+                      GrVkDescriptorSetManager::Handle handle);
+
+    ~GrVkDescriptorSet() override {}
+
+    VkDescriptorSet descriptorSet() const { return fDescSet; }
+
+#ifdef SK_TRACE_VK_RESOURCES
+    void dumpInfo() const override {
+        SkDebugf("GrVkDescriptorSet: %d (%d refs)\n", fDescSet, this->getRefCnt());
+    }
+#endif
+
+private:
+    void freeGPUData(const GrVkGpu* gpu) const override;
+    void abandonSubResources() const override;
+    void onRecycle(GrVkGpu* gpu) const override;
+
+    VkDescriptorSet                          fDescSet;
+    SkDEBUGCODE(mutable) GrVkDescriptorPool* fPool;
+    GrVkDescriptorSetManager::Handle         fHandle;
+};
+
+#endif