aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrOnFlushResourceProvider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrOnFlushResourceProvider.cpp')
-rw-r--r--src/gpu/GrOnFlushResourceProvider.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/gpu/GrOnFlushResourceProvider.cpp b/src/gpu/GrOnFlushResourceProvider.cpp
index 4ca773f000..d5fd3110ca 100644
--- a/src/gpu/GrOnFlushResourceProvider.cpp
+++ b/src/gpu/GrOnFlushResourceProvider.cpp
@@ -72,6 +72,22 @@ sk_sp<GrBuffer> GrOnFlushResourceProvider::makeBuffer(GrBufferType intendedType,
data));
}
+sk_sp<GrBuffer> GrOnFlushResourceProvider::findOrMakeStaticBuffer(const GrUniqueKey& key,
+ GrBufferType intendedType,
+ size_t size, const void* data) {
+ GrResourceProvider* rp = fDrawingMgr->getContext()->resourceProvider();
+ sk_sp<GrBuffer> buffer(rp->findAndRefTByUniqueKey<GrBuffer>(key));
+ if (!buffer) {
+ buffer.reset(rp->createBuffer(size, intendedType, kStatic_GrAccessPattern, 0, data));
+ if (!buffer) {
+ return nullptr;
+ }
+ SkASSERT(buffer->sizeInBytes() == size); // rp shouldn't bin and/or cache static buffers.
+ buffer->resourcePriv().setUniqueKey(key);
+ }
+ return buffer;
+}
+
const GrCaps* GrOnFlushResourceProvider::caps() const {
return fDrawingMgr->getContext()->caps();
}