From e9e91dde4e39b085f11d0dc9688c6b63d0410b41 Mon Sep 17 00:00:00 2001 From: Chris Dalton Date: Fri, 14 Jul 2017 08:48:57 -0600 Subject: Add "findOrMakeStaticBuffer" to GrOnFlushResourceProvider Bug: skia: Change-Id: If381c91f40566e6630799ea9985c48e2b738596e Reviewed-on: https://skia-review.googlesource.com/23420 Reviewed-by: Robert Phillips Commit-Queue: Robert Phillips Commit-Queue: Chris Dalton --- src/gpu/GrOnFlushResourceProvider.cpp | 16 ++++++++++++++++ src/gpu/GrOnFlushResourceProvider.h | 4 ++++ 2 files changed, 20 insertions(+) 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 GrOnFlushResourceProvider::makeBuffer(GrBufferType intendedType, data)); } +sk_sp GrOnFlushResourceProvider::findOrMakeStaticBuffer(const GrUniqueKey& key, + GrBufferType intendedType, + size_t size, const void* data) { + GrResourceProvider* rp = fDrawingMgr->getContext()->resourceProvider(); + sk_sp buffer(rp->findAndRefTByUniqueKey(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(); } diff --git a/src/gpu/GrOnFlushResourceProvider.h b/src/gpu/GrOnFlushResourceProvider.h index fdf34fe40a..e2c0b73075 100644 --- a/src/gpu/GrOnFlushResourceProvider.h +++ b/src/gpu/GrOnFlushResourceProvider.h @@ -71,6 +71,10 @@ public: // Creates a GPU buffer with a "dynamic" access pattern. sk_sp makeBuffer(GrBufferType, size_t, const void* data = nullptr); + // Either finds and refs, or creates a static GPU buffer with the given data. + sk_sp findOrMakeStaticBuffer(const GrUniqueKey&, GrBufferType, + size_t, const void* data); + const GrCaps* caps() const; private: -- cgit v1.2.3