Clients will not be able to directly set the uniqueKey on GrTextureProxies. This CL sets up the choke point for the switch over to having uniqueKeys be managed by a third party (the textureProvider).
Change-Id: I5061a970faf77ea0c4a320e021ff7c3ef90a0900
Reviewed-on: https://skia-review.googlesource.com/9140
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
/** Assigns a unique key to the texture. The texture will be findable via this key using
findTextureByUniqueKey(). If an existing texture has this key, it's key will be removed. */
void assignUniqueKeyToTexture(const GrUniqueKey& key, GrTexture* texture) {
+ SkASSERT(key.isValid());
this->assignUniqueKeyToResource(key, texture);
}
}
};
-static GrTexture* set_key_and_return(GrTexture* tex, const GrUniqueKey& key) {
+static GrTexture* set_key_and_return(GrTextureProvider* texProvider,
+ GrTexture* tex, const GrUniqueKey& key) {
if (key.isValid()) {
- tex->resourcePriv().setUniqueKey(key);
+ texProvider->assignUniqueKeyToTexture(key, tex);
}
return tex;
}
if (GrTexture* tex = generator->generateTexture(ctx, cacheInfo, fOrigin)) {
SK_HISTOGRAM_ENUMERATION("LockTexturePath", kNative_LockTexturePath,
kLockTexturePathCount);
- return set_key_and_return(tex, key);
+ return set_key_and_return(ctx->textureProvider(), tex, key);
}
}
if (tex) {
SK_HISTOGRAM_ENUMERATION("LockTexturePath", kYUV_LockTexturePath,
kLockTexturePathCount);
- return set_key_and_return(tex.release(), key);
+ return set_key_and_return(ctx->textureProvider(), tex.release(), key);
}
}
if (tex) {
SK_HISTOGRAM_ENUMERATION("LockTexturePath", kRGBA_LockTexturePath,
kLockTexturePathCount);
- return set_key_and_return(tex, key);
+ return set_key_and_return(ctx->textureProvider(), tex, key);
}
}
SK_HISTOGRAM_ENUMERATION("LockTexturePath", kFailure_LockTexturePath,
tex = GrUploadBitmapToTexture(this->context(), fBitmap);
}
if (tex && fOriginalKey.isValid()) {
- tex->resourcePriv().setUniqueKey(fOriginalKey);
+ this->context()->textureProvider()->assignUniqueKeyToTexture(fOriginalKey, tex);
GrInstallBitmapUniqueKeyInvalidator(fOriginalKey, fBitmap.pixelRef());
}
return tex;
return nullptr;
}
- tex->resourcePriv().setUniqueKey(key);
+ context->textureProvider()->assignUniqueKeyToTexture(key, tex);
add_invalidate_on_pop_message(*fStack, reducedClip.elementsGenID(), key);
return result;
return nullptr;
}
- tex->resourcePriv().setUniqueKey(key);
+ context->textureProvider()->assignUniqueKeyToTexture(key, tex);
add_invalidate_on_pop_message(*fStack, reducedClip.elementsGenID(), key);
return result;
}
// Need to try and create a new stencil
stencil = this->gpu()->createStencilAttachmentForRenderTarget(rt, width, height);
if (stencil) {
- stencil->resourcePriv().setUniqueKey(sbKey);
+ this->assignUniqueKeyToResource(sbKey, stencil);
newStencil = true;
}
}
sk_sp<GrTexture> texture;
if (useCache) {
- texture.reset(args.fContext->textureProvider()->findAndRefTextureByUniqueKey(maskKey));
+ texture.reset(fTexProvider->findAndRefTextureByUniqueKey(maskKey));
}
if (!texture) {
SkBackingFit fit = useCache ? SkBackingFit::kExact : SkBackingFit::kApprox;
return false;
}
if (useCache) {
- texture->resourcePriv().setUniqueKey(maskKey);
+ fTexProvider->assignUniqueKeyToTexture(maskKey, texture.get());
}
}
if (inverseFilled) {
GrTexture* copy = CopyOnGpu(texture, contentArea, copyParams);
if (copy) {
if (key.isValid()) {
- copy->resourcePriv().setUniqueKey(key);
+ context->textureProvider()->assignUniqueKeyToTexture(key, copy);
this->didCacheCopy(key);
}
}
if (!tex) {
tex.reset(GrUploadBitmapToTexture(context, bitmap));
if (tex && originalKey.isValid()) {
- tex->resourcePriv().setUniqueKey(originalKey);
+ context->textureProvider()->assignUniqueKeyToTexture(originalKey, tex.get());
GrInstallBitmapUniqueKeyInvalidator(originalKey, bitmap.pixelRef());
}
}