diff options
author | 2016-04-21 07:41:50 -0700 | |
---|---|---|
committer | 2016-04-21 07:41:50 -0700 | |
commit | d37fe76b5101dfe6c29668f5c29e5b46e697a68d (patch) | |
tree | ec028fb7ff367ae9d80b9360e296122264f8ab82 /src/gpu | |
parent | 868060602975834c33eb33a937545c6af8ac8395 (diff) |
Fix data parameter for createBuffer
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1911703002
Review URL: https://codereview.chromium.org/1911703002
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrResourceProvider.cpp | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp index 9a2fff3141..f57d7eb796 100644 --- a/src/gpu/GrResourceProvider.cpp +++ b/src/gpu/GrResourceProvider.cpp @@ -96,29 +96,34 @@ GrBuffer* GrResourceProvider::createBuffer(size_t size, GrBufferType intendedTyp if (this->isAbandoned()) { return nullptr; } + if (kDynamic_GrAccessPattern != accessPattern) { + return this->gpu()->createBuffer(size, intendedType, accessPattern, data); + } - if (kDynamic_GrAccessPattern == accessPattern) { - // bin by pow2 with a reasonable min - static const uint32_t MIN_SIZE = 1 << 12; - size = SkTMax(MIN_SIZE, GrNextPow2(SkToUInt(size))); - - GrScratchKey key; - GrBuffer::ComputeScratchKeyForDynamicBuffer(size, intendedType, &key); - uint32_t scratchFlags = 0; - if (flags & kNoPendingIO_Flag) { - scratchFlags = GrResourceCache::kRequireNoPendingIO_ScratchFlag; - } else { - scratchFlags = GrResourceCache::kPreferNoPendingIO_ScratchFlag; - } - GrGpuResource* resource = this->cache()->findAndRefScratchResource(key, size, scratchFlags); - if (GrBuffer* buffer = static_cast<GrBuffer*>(resource)) { - if (data) { - buffer->updateData(data, size); - } - return buffer; + // bin by pow2 with a reasonable min + static const uint32_t MIN_SIZE = 1 << 12; + size_t allocSize = SkTMax(MIN_SIZE, GrNextPow2(SkToUInt(size))); + + GrScratchKey key; + GrBuffer::ComputeScratchKeyForDynamicBuffer(allocSize, intendedType, &key); + uint32_t scratchFlags = 0; + if (flags & kNoPendingIO_Flag) { + scratchFlags = GrResourceCache::kRequireNoPendingIO_ScratchFlag; + } else { + scratchFlags = GrResourceCache::kPreferNoPendingIO_ScratchFlag; + } + GrBuffer* buffer = static_cast<GrBuffer*>( + this->cache()->findAndRefScratchResource(key, allocSize, scratchFlags)); + if (!buffer) { + buffer = this->gpu()->createBuffer(allocSize, intendedType, kDynamic_GrAccessPattern); + if (!buffer) { + return nullptr; } } - return this->gpu()->createBuffer(size, intendedType, accessPattern, data); + if (data) { + buffer->updateData(data, size); + } + return buffer; } GrBatchAtlas* GrResourceProvider::createAtlas(GrPixelConfig config, |