| Index: src/gpu/vk/GrVkUniformBuffer.cpp
|
| diff --git a/src/gpu/vk/GrVkUniformBuffer.cpp b/src/gpu/vk/GrVkUniformBuffer.cpp
|
| index 022e2e33bdd10f978d49d6b622539b74db679d19..e080bfaa3403e639cdde7d2522e96339694390f6 100644
|
| --- a/src/gpu/vk/GrVkUniformBuffer.cpp
|
| +++ b/src/gpu/vk/GrVkUniformBuffer.cpp
|
| @@ -8,24 +8,56 @@
|
| #include "GrVkUniformBuffer.h"
|
| #include "GrVkGpu.h"
|
|
|
| -
|
| -GrVkUniformBuffer* GrVkUniformBuffer::Create(GrVkGpu* gpu, size_t size, bool dynamic) {
|
| +GrVkUniformBuffer* GrVkUniformBuffer::Create(GrVkGpu* gpu, size_t size) {
|
| if (0 == size) {
|
| return nullptr;
|
| }
|
| + const GrVkResource* resource = nullptr;
|
| + if (size <= GrVkUniformBuffer::kStandardSize) {
|
| + resource = gpu->resourceProvider().findOrCreateStandardUniformBufferResource();
|
| + } else {
|
| + resource = CreateResource(gpu, size);
|
| + }
|
| + if (!resource) {
|
| + return nullptr;
|
| + }
|
| +
|
| GrVkBuffer::Desc desc;
|
| - desc.fDynamic = dynamic;
|
| + desc.fDynamic = true;
|
| desc.fType = GrVkBuffer::kUniform_Type;
|
| desc.fSizeInBytes = size;
|
| + GrVkUniformBuffer* buffer = new GrVkUniformBuffer(gpu, desc,
|
| + (const GrVkBuffer::Resource*) resource);
|
| + if (!buffer) {
|
| + // this will destroy anything we got from the resource provider,
|
| + // but this avoids a conditional
|
| + resource->unref(gpu);
|
| + }
|
| + return buffer;
|
| +}
|
|
|
| - const GrVkBuffer::Resource* bufferResource = GrVkBuffer::Create(gpu, desc);
|
| - if (!bufferResource) {
|
| +const GrVkResource* GrVkUniformBuffer::CreateResource(GrVkGpu* gpu, size_t size) {
|
| + if (0 == size) {
|
| return nullptr;
|
| }
|
| + GrVkBuffer::Desc desc;
|
| + desc.fDynamic = true;
|
| + desc.fType = GrVkBuffer::kUniform_Type;
|
| + desc.fSizeInBytes = size;
|
|
|
| - GrVkUniformBuffer* buffer = new GrVkUniformBuffer(desc, bufferResource);
|
| - if (!buffer) {
|
| - bufferResource->unref(gpu);
|
| + return GrVkBuffer::Create(gpu, desc);
|
| +}
|
| +
|
| +void GrVkUniformBuffer::release(const GrVkGpu* gpu) {
|
| + if (this->size() <= GrVkUniformBuffer::kStandardSize) {
|
| + (void)fGpu->resourceProvider().recycleStandardUniformBufferResource(this->resource());
|
| }
|
| - return buffer;
|
| -}
|
| + this->vkRelease(gpu);
|
| +}
|
| +
|
| +void GrVkUniformBuffer::abandon() {
|
| + if (this->size() <= GrVkUniformBuffer::kStandardSize) {
|
| + (void)fGpu->resourceProvider().recycleStandardUniformBufferResource(this->resource());
|
| + }
|
| + this->vkAbandon();
|
| +}
|
|
|