diff options
author | Brian Salomon <bsalomon@google.com> | 2017-09-23 08:31:08 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-10-09 13:33:54 +0000 |
commit | c203e65265ccf0dcf426eafa4fae97b2b99cba7d (patch) | |
tree | 38e1ce5ef2f7f1cc78fe4dfe604b97cd0ef66860 /src/gpu/GrResourceProvider.cpp | |
parent | 67ef5d76406d702e7afe4ec5b490a75d9bcaba10 (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.cpp | 27 |
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; |