OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrVkResourceProvider_DEFINED | 8 #ifndef GrVkResourceProvider_DEFINED |
9 #define GrVkResourceProvider_DEFINED | 9 #define GrVkResourceProvider_DEFINED |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 class GrPipeline; | 26 class GrPipeline; |
27 class GrPrimitiveProcessor; | 27 class GrPrimitiveProcessor; |
28 class GrTextureParams; | 28 class GrTextureParams; |
29 class GrVkGpu; | 29 class GrVkGpu; |
30 class GrVkPipeline; | 30 class GrVkPipeline; |
31 class GrVkPrimaryCommandBuffer; | 31 class GrVkPrimaryCommandBuffer; |
32 class GrVkRenderTarget; | 32 class GrVkRenderTarget; |
33 class GrVkSampler; | 33 class GrVkSampler; |
34 class GrVkSecondaryCommandBuffer; | 34 class GrVkSecondaryCommandBuffer; |
| 35 class GrVkUniformHandler; |
35 | 36 |
36 class GrVkResourceProvider { | 37 class GrVkResourceProvider { |
37 public: | 38 public: |
38 GrVkResourceProvider(GrVkGpu* gpu); | 39 GrVkResourceProvider(GrVkGpu* gpu); |
39 ~GrVkResourceProvider(); | 40 ~GrVkResourceProvider(); |
40 | 41 |
41 // Set up any initial vk objects | 42 // Set up any initial vk objects |
42 void init(); | 43 void init(); |
43 | 44 |
44 GrVkPipeline* createPipeline(const GrPipeline& pipeline, | 45 GrVkPipeline* createPipeline(const GrPipeline& pipeline, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 | 95 |
95 // Finds or creates a compatible GrVkSampler based on the GrTextureParams. | 96 // Finds or creates a compatible GrVkSampler based on the GrTextureParams. |
96 // The refcount is incremented and a pointer returned. | 97 // The refcount is incremented and a pointer returned. |
97 GrVkSampler* findOrCreateCompatibleSampler(const GrTextureParams&, uint32_t
mipLevels); | 98 GrVkSampler* findOrCreateCompatibleSampler(const GrTextureParams&, uint32_t
mipLevels); |
98 | 99 |
99 sk_sp<GrVkPipelineState> findOrCreateCompatiblePipelineState(const GrPipelin
e&, | 100 sk_sp<GrVkPipelineState> findOrCreateCompatiblePipelineState(const GrPipelin
e&, |
100 const GrPrimiti
veProcessor&, | 101 const GrPrimiti
veProcessor&, |
101 GrPrimitiveType
, | 102 GrPrimitiveType
, |
102 const GrVkRende
rPass& renderPass); | 103 const GrVkRende
rPass& renderPass); |
103 | 104 |
104 // Returns a handle which the GrVkResourceProvider uses to know which compat
ible | 105 void getSamplerDescriptorSetHandle(const GrVkUniformHandler&, |
105 // GrVkDescriptorSetManager to use when getting or recycling a GrVkDescripto
rSet. Passing in a | 106 GrVkDescriptorSetManager::Handle* handle)
; |
106 // value of 0 for numSamplers is used to signal this is for the uniform desc
riptor set. | 107 |
107 void getDescSetHandle(uint32_t numSamplers, VkDescriptorSetLayout layout, | 108 // Returns the compatible VkDescriptorSetLayout to use for uniform buffers.
The caller does not |
108 GrVkDescriptorSetManager::Handle* handle); | 109 // own the VkDescriptorSetLayout and thus should not delete it. This functio
n should be used |
| 110 // when the caller needs the layout to create a VkPipelineLayout. |
| 111 VkDescriptorSetLayout getUniformDSLayout() const; |
| 112 |
| 113 // Returns the compatible VkDescriptorSetLayout to use for a specific sample
r handle. The caller |
| 114 // does not own the VkDescriptorSetLayout and thus should not delete it. Thi
s function should be |
| 115 // used when the caller needs the layout to create a VkPipelineLayout. |
| 116 VkDescriptorSetLayout getSamplerDSLayout(const GrVkDescriptorSetManager::Han
dle&) const; |
109 | 117 |
110 // Returns a GrVkDescriptorSet that can be used for uniform buffers. The GrV
kDescriptorSet | 118 // Returns a GrVkDescriptorSet that can be used for uniform buffers. The GrV
kDescriptorSet |
111 // is already reffed for the caller. | 119 // is already reffed for the caller. |
112 const GrVkDescriptorSet* getUniformDescriptorSet(); | 120 const GrVkDescriptorSet* getUniformDescriptorSet(); |
113 | 121 |
114 // Returns a GrVkDescriptorSet that can be used for sampler descriptors that
are compatible with | 122 // Returns a GrVkDescriptorSet that can be used for sampler descriptors that
are compatible with |
115 // the GrVkDescriptorSetManager::Handle passed int.. The GrVkDescriptorSet i
s already reffed for | 123 // the GrVkDescriptorSetManager::Handle passed in. The GrVkDescriptorSet is
already reffed for |
116 // the caller. | 124 // the caller. |
117 // TODO: Move samplers in GrVkPipelineState to use the GrVkResourceProvider
to allocate | |
118 // descriptor sets from. | |
119 const GrVkDescriptorSet* getSamplerDescriptorSet(const GrVkDescriptorSetMana
ger::Handle&); | 125 const GrVkDescriptorSet* getSamplerDescriptorSet(const GrVkDescriptorSetMana
ger::Handle&); |
120 | 126 |
121 // Returns the compatible VkDescriptorSetLayout to use for uniform buffers.
The caller does not | |
122 // own the VkDescriptorSetLayout and thus should not delete it. This functio
n should be used | |
123 // when the caller needs the layout to create a VkPipelineLayout. | |
124 VkDescriptorSetLayout getUniDSLayout() const { return fUniformDescLayout; } | |
125 | 127 |
126 // Signals that the descriptor set passed it, which is compatible with the p
assed in handle, | 128 // Signals that the descriptor set passed it, which is compatible with the p
assed in handle, |
127 // can be reused by the next allocation request. | 129 // can be reused by the next allocation request. |
128 void recycleDescriptorSet(const GrVkDescriptorSet* descSet, | 130 void recycleDescriptorSet(const GrVkDescriptorSet* descSet, |
129 const GrVkDescriptorSetManager::Handle&); | 131 const GrVkDescriptorSetManager::Handle&); |
130 | 132 |
131 // Creates or finds free uniform buffer resources of size GrVkUniformBuffer:
:kStandardSize. | 133 // Creates or finds free uniform buffer resources of size GrVkUniformBuffer:
:kStandardSize. |
132 // Anything larger will need to be created and released by the client. | 134 // Anything larger will need to be created and released by the client. |
133 const GrVkResource* findOrCreateStandardUniformBufferResource(); | 135 const GrVkResource* findOrCreateStandardUniformBufferResource(); |
134 | 136 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 const GrVkRenderPass::LoadStoreOps& stenci
lOps); | 211 const GrVkRenderPass::LoadStoreOps& stenci
lOps); |
210 | 212 |
211 void releaseResources(const GrVkGpu* gpu); | 213 void releaseResources(const GrVkGpu* gpu); |
212 void abandonResources(); | 214 void abandonResources(); |
213 | 215 |
214 private: | 216 private: |
215 SkSTArray<4, GrVkRenderPass*> fRenderPasses; | 217 SkSTArray<4, GrVkRenderPass*> fRenderPasses; |
216 int fLastReturnedIndex; | 218 int fLastReturnedIndex; |
217 }; | 219 }; |
218 | 220 |
219 // Initialiaze the vkDescriptorSetLayout used for allocating new uniform buf
fer descritpor sets. | |
220 void initUniformDescObjects(); | |
221 | |
222 GrVkGpu* fGpu; | 221 GrVkGpu* fGpu; |
223 | 222 |
224 // Central cache for creating pipelines | 223 // Central cache for creating pipelines |
225 VkPipelineCache fPipelineCache; | 224 VkPipelineCache fPipelineCache; |
226 | 225 |
227 SkSTArray<4, CompatibleRenderPassSet> fRenderPassArray; | 226 SkSTArray<4, CompatibleRenderPassSet> fRenderPassArray; |
228 | 227 |
229 // Array of PrimaryCommandBuffers that are currently in flight | 228 // Array of PrimaryCommandBuffers that are currently in flight |
230 SkSTArray<4, GrVkPrimaryCommandBuffer*> fActiveCommandBuffers; | 229 SkSTArray<4, GrVkPrimaryCommandBuffer*, true> fActiveCommandBuffers; |
231 // Array of available primary command buffers that are not in flight | 230 // Array of available primary command buffers that are not in flight |
232 SkSTArray<4, GrVkPrimaryCommandBuffer*> fAvailableCommandBuffers; | 231 SkSTArray<4, GrVkPrimaryCommandBuffer*, true> fAvailableCommandBuffers; |
233 | 232 |
234 // Array of available secondary command buffers | 233 // Array of available secondary command buffers |
235 SkSTArray<16, GrVkSecondaryCommandBuffer*> fAvailableSecondaryCommandBuffers
; | 234 SkSTArray<16, GrVkSecondaryCommandBuffer*, true> fAvailableSecondaryCommandB
uffers; |
236 | 235 |
237 // Array of available uniform buffer resources | 236 // Array of available uniform buffer resources |
238 SkSTArray<16, const GrVkResource*> fAvailableUniformBufferResources; | 237 SkSTArray<16, const GrVkResource*, true> fAvailableUniformBufferResources; |
239 | 238 |
240 // Stores GrVkSampler objects that we've already created so we can reuse the
m across multiple | 239 // Stores GrVkSampler objects that we've already created so we can reuse the
m across multiple |
241 // GrVkPipelineStates | 240 // GrVkPipelineStates |
242 SkTDynamicHash<GrVkSampler, uint16_t> fSamplers; | 241 SkTDynamicHash<GrVkSampler, uint16_t> fSamplers; |
243 | 242 |
244 // Cache of GrVkPipelineStates | 243 // Cache of GrVkPipelineStates |
245 PipelineStateCache* fPipelineStateCache; | 244 PipelineStateCache* fPipelineStateCache; |
246 | 245 |
247 SkSTArray<4, GrVkDescriptorSetManager> fDescriptorSetManagers; | 246 SkSTArray<4, GrVkDescriptorSetManager, true> fDescriptorSetManagers; |
248 | 247 |
249 GrVkDescriptorSetManager::Handle fUniformDSHandle; | 248 GrVkDescriptorSetManager::Handle fUniformDSHandle; |
250 | |
251 // Current pool to allocate uniform descriptor sets from | |
252 VkDescriptorSetLayout fUniformDescLayout; | |
253 //Curent number of uniform descriptors allocated from the pool | |
254 int fCurrentUniformDescCount; | |
255 int fCurrMaxUniDescriptors; | |
256 | |
257 enum { | |
258 kMaxUniformDescriptors = 1024, | |
259 kNumUniformDescPerSet = 2, | |
260 kStartNumUniformDescriptors = 16, // must be less than kMaxUniformDescri
ptors | |
261 }; | |
262 }; | 249 }; |
263 | 250 |
264 #endif | 251 #endif |
OLD | NEW |