Make lazy proxies have 2 modes for proxy/surface key management.
kSynced: Proxy and GrSurface key kept in sync.
kUnsynced: Proxy and GrSurface keys are unrelated.
This will allow cross-context image generators' lazy instantiation
callbacks to use unique keys to find any pre-existing backing GrTexture
rather than keeping an unref'ed bare pointer to the GrTexture.
Bug: skia:8927
Change-Id: Id15e2a64e8d2e56c4ce70b9399eb1d8bcea6ac9a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/204723
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp
index efa7bf0..526e99c 100644
--- a/src/gpu/GrProxyProvider.cpp
+++ b/src/gpu/GrProxyProvider.cpp
@@ -255,8 +255,8 @@
if (surfaceFlags & GrInternalSurfaceFlags::kNoPendingIO) {
resourceProviderFlags |= GrResourceProvider::Flags::kNoPendingIO;
}
- return resourceProvider->createTexture(desc, budgeted, fit, mipLevel,
- resourceProviderFlags);
+ return LazyInstantiationResult(resourceProvider->createTexture(
+ desc, budgeted, fit, mipLevel, resourceProviderFlags));
},
format, desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo, surfaceFlags, fit, budgeted);
@@ -374,8 +374,8 @@
SkASSERT(texels[i].fPixels);
}
- return resourceProvider->createTexture(desc, SkBudgeted::kYes, texels.get(),
- mipLevelCount);
+ return LazyInstantiationResult(resourceProvider->createTexture(
+ desc, SkBudgeted::kYes, texels.get(), mipLevelCount));
},
format, desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kYes, SkBackingFit::kExact,
SkBudgeted::kYes);
@@ -446,7 +446,8 @@
GrMipLevel texels;
texels.fPixels = data->data();
texels.fRowBytes = GrBytesPerPixel(desc.fConfig)*desc.fWidth;
- return resourceProvider->createTexture(desc, SkBudgeted::kYes, &texels, 1);
+ return LazyInstantiationResult(
+ resourceProvider->createTexture(desc, SkBudgeted::kYes, &texels, 1));
},
format, desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo, SkBackingFit::kExact,
SkBudgeted::kYes);