aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
authorGravatar cdalton <cdalton@nvidia.com>2016-04-21 07:41:50 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-21 07:41:50 -0700
commitd37fe76b5101dfe6c29668f5c29e5b46e697a68d (patch)
treeec028fb7ff367ae9d80b9360e296122264f8ab82 /src/gpu
parent868060602975834c33eb33a937545c6af8ac8395 (diff)
Fix data parameter for createBuffer
Diffstat (limited to 'src/gpu')
-rw-r--r--src/gpu/GrResourceProvider.cpp45
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,