Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Side by Side Diff: src/gpu/vk/GrVkResourceProvider.cpp

Issue 2159333002: Recycle small uniform buffers. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "GrVkResourceProvider.h" 8 #include "GrVkResourceProvider.h"
9 9
10 #include "GrTextureParams.h" 10 #include "GrTextureParams.h"
11 #include "GrVkCommandBuffer.h" 11 #include "GrVkCommandBuffer.h"
12 #include "GrVkPipeline.h" 12 #include "GrVkPipeline.h"
13 #include "GrVkRenderTarget.h" 13 #include "GrVkRenderTarget.h"
14 #include "GrVkSampler.h" 14 #include "GrVkSampler.h"
15 #include "GrVkUniformBuffer.h"
15 #include "GrVkUtil.h" 16 #include "GrVkUtil.h"
16 17
17 #ifdef SK_TRACE_VK_RESOURCES 18 #ifdef SK_TRACE_VK_RESOURCES
18 GrVkResource::Trace GrVkResource::fTrace; 19 GrVkResource::Trace GrVkResource::fTrace;
19 uint32_t GrVkResource::fKeyCounter = 0; 20 uint32_t GrVkResource::fKeyCounter = 0;
20 #endif 21 #endif
21 22
22 GrVkResourceProvider::GrVkResourceProvider(GrVkGpu* gpu) 23 GrVkResourceProvider::GrVkResourceProvider(GrVkGpu* gpu)
23 : fGpu(gpu) 24 : fGpu(gpu)
24 , fPipelineCache(VK_NULL_HANDLE) 25 , fPipelineCache(VK_NULL_HANDLE)
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 cmdBuffer = GrVkSecondaryCommandBuffer::Create(fGpu, fGpu->cmdPool()); 259 cmdBuffer = GrVkSecondaryCommandBuffer::Create(fGpu, fGpu->cmdPool());
259 } 260 }
260 return cmdBuffer; 261 return cmdBuffer;
261 } 262 }
262 263
263 void GrVkResourceProvider::recycleSecondaryCommandBuffer(GrVkSecondaryCommandBuf fer* cb) { 264 void GrVkResourceProvider::recycleSecondaryCommandBuffer(GrVkSecondaryCommandBuf fer* cb) {
264 cb->reset(fGpu); 265 cb->reset(fGpu);
265 fAvailableSecondaryCommandBuffers.push_back(cb); 266 fAvailableSecondaryCommandBuffers.push_back(cb);
266 } 267 }
267 268
269 const GrVkResource* GrVkResourceProvider::findOrCreateStandardUniformBufferResou rce() {
270 const GrVkResource* resource = nullptr;
271 int count = fAvailableUniformBufferResources.count();
272 if (count > 0) {
273 resource = fAvailableUniformBufferResources[count - 1];
274 fAvailableUniformBufferResources.removeShuffle(count - 1);
275 } else {
276 resource = GrVkUniformBuffer::CreateResource(fGpu, GrVkUniformBuffer::kS tandardSize);
277 }
278 return resource;
279 }
280
281 void GrVkResourceProvider::recycleStandardUniformBufferResource(const GrVkResour ce* resource) {
282 resource->ref();
283 fAvailableUniformBufferResources.push_back(resource);
284 }
285
268 void GrVkResourceProvider::destroyResources() { 286 void GrVkResourceProvider::destroyResources() {
269 // release our active command buffers 287 // release our active command buffers
270 for (int i = 0; i < fActiveCommandBuffers.count(); ++i) { 288 for (int i = 0; i < fActiveCommandBuffers.count(); ++i) {
271 SkASSERT(fActiveCommandBuffers[i]->finished(fGpu)); 289 SkASSERT(fActiveCommandBuffers[i]->finished(fGpu));
272 SkASSERT(fActiveCommandBuffers[i]->unique()); 290 SkASSERT(fActiveCommandBuffers[i]->unique());
273 fActiveCommandBuffers[i]->reset(fGpu); 291 fActiveCommandBuffers[i]->reset(fGpu);
274 fActiveCommandBuffers[i]->unref(fGpu); 292 fActiveCommandBuffers[i]->unref(fGpu);
275 } 293 }
276 fActiveCommandBuffers.reset(); 294 fActiveCommandBuffers.reset();
277 // release our available command buffers 295 // release our available command buffers
(...skipping 29 matching lines...) Expand all
307 GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineCache(fGpu->device(), fPipeli neCache, nullptr)); 325 GR_VK_CALL(fGpu->vkInterface(), DestroyPipelineCache(fGpu->device(), fPipeli neCache, nullptr));
308 fPipelineCache = VK_NULL_HANDLE; 326 fPipelineCache = VK_NULL_HANDLE;
309 327
310 if (fUniformDescLayout) { 328 if (fUniformDescLayout) {
311 GR_VK_CALL(fGpu->vkInterface(), DestroyDescriptorSetLayout(fGpu->device( ), 329 GR_VK_CALL(fGpu->vkInterface(), DestroyDescriptorSetLayout(fGpu->device( ),
312 fUniformDescL ayout, 330 fUniformDescL ayout,
313 nullptr)); 331 nullptr));
314 fUniformDescLayout = VK_NULL_HANDLE; 332 fUniformDescLayout = VK_NULL_HANDLE;
315 } 333 }
316 fUniformDescPool->unref(fGpu); 334 fUniformDescPool->unref(fGpu);
335
336 // release our uniform buffers
egdaniel 2016/07/19 20:48:37 do you need an abandon form of this?
337 for (int i = 0; i < fAvailableUniformBufferResources.count(); ++i) {
338 SkASSERT(fAvailableUniformBufferResources[i]->unique());
339 fAvailableUniformBufferResources[i]->unref(fGpu);
340 }
341 fAvailableUniformBufferResources.reset();
317 } 342 }
318 343
319 void GrVkResourceProvider::abandonResources() { 344 void GrVkResourceProvider::abandonResources() {
320 // release our active command buffers 345 // release our active command buffers
321 for (int i = 0; i < fActiveCommandBuffers.count(); ++i) { 346 for (int i = 0; i < fActiveCommandBuffers.count(); ++i) {
322 SkASSERT(fActiveCommandBuffers[i]->finished(fGpu)); 347 SkASSERT(fActiveCommandBuffers[i]->finished(fGpu));
323 SkASSERT(fActiveCommandBuffers[i]->unique()); 348 SkASSERT(fActiveCommandBuffers[i]->unique());
324 fActiveCommandBuffers[i]->unrefAndAbandon(); 349 fActiveCommandBuffers[i]->unrefAndAbandon();
325 } 350 }
326 fActiveCommandBuffers.reset(); 351 fActiveCommandBuffers.reset();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 } 431 }
407 432
408 void GrVkResourceProvider::CompatibleRenderPassSet::abandonResources() { 433 void GrVkResourceProvider::CompatibleRenderPassSet::abandonResources() {
409 for (int i = 0; i < fRenderPasses.count(); ++i) { 434 for (int i = 0; i < fRenderPasses.count(); ++i) {
410 if (fRenderPasses[i]) { 435 if (fRenderPasses[i]) {
411 fRenderPasses[i]->unrefAndAbandon(); 436 fRenderPasses[i]->unrefAndAbandon();
412 fRenderPasses[i] = nullptr; 437 fRenderPasses[i] = nullptr;
413 } 438 }
414 } 439 }
415 } 440 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698