aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrResourceCache.h
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-09-26 12:49:26 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-26 17:11:21 +0000
commitcd871401114f402e72420ccd49edecee2532b0e6 (patch)
treea323510790f271cc2e0a85487ab52cbc7ffc9339 /src/gpu/GrResourceCache.h
parent98a6216b18b57c2f7a0d58f542c60503686aed69 (diff)
Add ability to remove unique key from proxy and underlying surface.
Bug: skia: Change-Id: I66b891ce9ca35906fdbddb36f565b35b25825112 Reviewed-on: https://skia-review.googlesource.com/51240 Commit-Queue: Greg Daniel <egdaniel@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrResourceCache.h')
-rw-r--r--src/gpu/GrResourceCache.h38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/gpu/GrResourceCache.h b/src/gpu/GrResourceCache.h
index 96323be73c..771196c81c 100644
--- a/src/gpu/GrResourceCache.h
+++ b/src/gpu/GrResourceCache.h
@@ -160,8 +160,9 @@ public:
///////////////////////////////////////////////////////////////////////////
// TextureProxies & GrUniqueKeys
//
- // The two GrResourceCache methods assignUniqueKeyToProxy and findProxyByUniqueKey drive
- // the behavior of uniqueKeys on proxies.
+ // The four GrResourceCache methods assignUniqueKeyToProxy, adoptUniqueKeyFromSurface,
+ // findPorxyByUniqueKey, and findOrCreateProxyByUniqueKey drive the behavior of uniqueKeys on
+ // proxies.
//
// assignUniqueKeyToProxy does the following:
// if the proxy is wrapped, it sets the texture & proxy keys & adds the proxy to the hash
@@ -174,8 +175,16 @@ public:
// determines that the key will never be used again but, in that case, the proxy should
// never receive another key.
//
+ // adoptUniqueKeyFromSurface does the following:
+ // takes in a GrSurface which must have a valid unique key. It sets the proxy's key to match
+ // the surface and adds the proxy to the hash.
+ //
// findProxyByUniqueKey does the following:
- // first looks in the UniqueKeyProxy hash table to see if there is already a proxy w/ the key
+ // looks in the UniqueKeyProxy hash table to see if there is already a proxy w/ the key and
+ // returns the proxy. If it fails it will return null.
+ //
+ // findOrCreateProxyByUniqueKey does the following:
+ // first calls findProxyByUniqueKey to see if a proxy already exists with the key
// failing that it looks in the ResourceCache to see there is a texture with that key
// if so, it will wrap the texture in a proxy, add the proxy to the hash and return it
// failing that it will return null
@@ -185,12 +194,26 @@ public:
*/
void assignUniqueKeyToProxy(const GrUniqueKey&, GrTextureProxy*);
+ /*
+ * Sets the unique key of the provided proxy to the unique key of the surface. The surface must
+ * have a valid unique key.
+ */
+ void adoptUniqueKeyFromSurface(GrTextureProxy* proxy, const GrSurface*);
+
/**
- * Find a texture proxy that is associated with the provided unique key.
+ * Find a texture proxy that is associated with the provided unique key. It will not look for a
+ * GrSurface that has the unique key.
*/
sk_sp<GrTextureProxy> findProxyByUniqueKey(const GrUniqueKey&, GrSurfaceOrigin);
/**
+ * Find a texture proxy that is associated with the provided unique key. If not proxy is found,
+ * try to find a resources that is associated with the unique key and create a proxy that wraps
+ * it.
+ */
+ sk_sp<GrTextureProxy> findOrCreateProxyByUniqueKey(const GrUniqueKey&, GrSurfaceOrigin);
+
+ /**
* Either the proxy attached to the unique key is being deleted (in which case we
* don't want it cluttering up the hash table) or the client has indicated that
* it will never refer to the unique key again. In either case, remove the key
@@ -200,6 +223,13 @@ public:
void processInvalidProxyUniqueKey(const GrUniqueKey&);
/**
+ * Same as above, but you must pass in a GrTextureProxy to save having to search for it. The
+ * GrUniqueKey of the proxy must be valid and it must match the passed in key. This function
+ * also gives the option to invalidate the GrUniqueKey on the underlying GrTexture.
+ */
+ void processInvalidProxyUniqueKey(const GrUniqueKey&, GrTextureProxy*, bool invalidateSurface);
+
+ /**
* Query whether a unique key exists in the cache.
*/
bool hasUniqueKey(const GrUniqueKey& key) const {