aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrResourceProvider.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-09-23 08:31:08 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-09 13:33:54 +0000
commitc203e65265ccf0dcf426eafa4fae97b2b99cba7d (patch)
tree38e1ce5ef2f7f1cc78fe4dfe604b97cd0ef66860 /src/gpu/GrResourceProvider.cpp
parent67ef5d76406d702e7afe4ec5b490a75d9bcaba10 (diff)
Disable GL buffer mapping on TSAN/Mac.
Also reverts 65e706379657d64371012c2e95ccf1354d741145 which disabled buffer mapping in GrResourceProvider::createPatternedIndexBuffer. Bug: skia:7058 Change-Id: I6816abe53251e1cd8e92eae41b8cdbe45218a341 Reviewed-on: https://skia-review.googlesource.com/50100 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrResourceProvider.cpp')
-rw-r--r--src/gpu/GrResourceProvider.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp
index d50bb01f86..d68a5e6701 100644
--- a/src/gpu/GrResourceProvider.cpp
+++ b/src/gpu/GrResourceProvider.cpp
@@ -330,13 +330,17 @@ const GrBuffer* GrResourceProvider::createPatternedIndexBuffer(const uint16_t* p
size_t bufferSize = patternSize * reps * sizeof(uint16_t);
// This is typically used in GrMeshDrawOps, so we assume kNoPendingIO.
- GrBuffer* buffer = this->createBuffer(bufferSize, kIndex_GrBufferType, kStatic_GrAccessPattern,
- kNoPendingIO_Flag);
+ sk_sp<GrBuffer> buffer(this->createBuffer(bufferSize, kIndex_GrBufferType,
+ kStatic_GrAccessPattern, kNoPendingIO_Flag));
if (!buffer) {
return nullptr;
}
-
- SkAutoTArray<uint16_t> data(reps * patternSize);
+ uint16_t* data = (uint16_t*) buffer->map();
+ SkAutoTArray<uint16_t> temp;
+ if (!data) {
+ temp.reset(reps * patternSize);
+ data = temp.get();
+ }
for (int i = 0; i < reps; ++i) {
int baseIdx = i * patternSize;
uint16_t baseVert = (uint16_t)(i * vertCount);
@@ -344,14 +348,15 @@ const GrBuffer* GrResourceProvider::createPatternedIndexBuffer(const uint16_t* p
data[baseIdx+j] = baseVert + pattern[j];
}
}
-
- if (!buffer->updateData(data.get(), bufferSize)) {
- buffer->unref();
- return nullptr;
+ if (temp.get()) {
+ if (!buffer->updateData(data, bufferSize)) {
+ return nullptr;
+ }
+ } else {
+ buffer->unmap();
}
-
- this->assignUniqueKeyToResource(key, buffer);
- return buffer;
+ this->assignUniqueKeyToResource(key, buffer.get());
+ return buffer.release();
}
static constexpr int kMaxQuads = 1 << 12; // max possible: (1 << 14) - 1;