Index: src/gpu/vk/GrVkResourceProvider.h |
diff --git a/src/gpu/vk/GrVkResourceProvider.h b/src/gpu/vk/GrVkResourceProvider.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..245062ea8df4827f69713b115373063ecd3400ac |
--- /dev/null |
+++ b/src/gpu/vk/GrVkResourceProvider.h |
@@ -0,0 +1,77 @@ |
+/* |
+* 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 GrVkResourceProvider_DEFINED |
+#define GrVkResourceProvider_DEFINED |
+ |
+#include "GrVkDescriptorPool.h" |
+#include "GrVkResource.h" |
+#include "GrVkUtil.h" |
+#include "SkTArray.h" |
+ |
+#include "vulkan/vulkan.h" |
+ |
+class GrPipeline; |
+class GrPrimitiveProcessor; |
+class GrVkCommandBuffer; |
+class GrVkGpu; |
+class GrVkPipeline; |
+class GrVkRenderPass; |
+class GrVkRenderTarget; |
+ |
+class GrVkResourceProvider { |
+public: |
+ GrVkResourceProvider(GrVkGpu* gpu); |
+ ~GrVkResourceProvider(); |
+ |
+ GrVkPipeline* createPipeline(const GrPipeline& pipeline, |
+ const GrPrimitiveProcessor& primProc, |
+ VkPipelineShaderStageCreateInfo* shaderStageInfo, |
+ int shaderStageCount, |
+ GrPrimitiveType primitiveType, |
+ const GrVkRenderPass& renderPass, |
+ VkPipelineLayout layout); |
+ |
+ // Finds or creates a simple render pass that matches the target, increments the refcount, |
+ // and returns. |
+ const GrVkRenderPass* findOrCreateCompatibleRenderPass(const GrVkRenderTarget& target); |
+ |
+ GrVkCommandBuffer* createCommandBuffer(); |
+ void checkCommandBuffers(); |
+ |
+ // Finds or creates a compatible GrVkDescriptorPool for the requested DescriptorTypeCount. |
+ // The refcount is incremented and a pointer returned. |
+ // TODO: Currently this will just create a descriptor pool without holding onto a ref itself |
+ // so we currently do not reuse them. Rquires knowing if another draw is currently using |
+ // the GrVkDescriptorPool, the ability to reset pools, and the ability to purge pools out |
+ // of our cache of GrVkDescriptorPools. |
+ GrVkDescriptorPool* findOrCreateCompatibleDescriptorPool( |
+ const GrVkDescriptorPool::DescriptorTypeCounts& typeCounts); |
+ |
+ // Destroy any cached resources. To be called before destroying the VkDevice. |
+ // The assumption is that all queues are idle and all command buffers are finished. |
+ // For resource tracing to work properly, this should be called after unrefing all other |
+ // resource usages. |
+ void destroyResources(); |
+ |
+ // Abandon any cached resources. To be used when the context/VkDevice is lost. |
+ // For resource tracing to work properly, this should be called after unrefing all other |
+ // resource usages. |
+ void abandonResources(); |
+ |
+private: |
+ GrVkGpu* fGpu; |
+ |
+ // Array of RenderPasses that only have a single color attachment, optional stencil attachment, |
+ // optional resolve attachment, and only one subpass |
+ SkSTArray<4, GrVkRenderPass*> fSimpleRenderPasses; |
+ |
+ // Array of CommandBuffers that are currently in flight |
+ SkSTArray<4, GrVkCommandBuffer*> fActiveCommandBuffers; |
+}; |
+ |
+#endif |