Update YUVA mipmap generation path to take a GrRecordingContext
Again, SkImage-derived objects will only have native access to an image context. Passing in a recording context captures when the mipmaps will be generated.
Change-Id: I025845ee4ea6bd97aa6001c1de316e394e7c5817
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/197768
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrImageTextureMaker.cpp b/src/gpu/GrImageTextureMaker.cpp
index c1f7a20..a6ec45b 100644
--- a/src/gpu/GrImageTextureMaker.cpp
+++ b/src/gpu/GrImageTextureMaker.cpp
@@ -108,7 +108,8 @@
// Check to see if the client has given us pre-mipped textures or we can generate them
// If not, fall back to bilerp
GrSamplerState::Filter filter = *filterOrNullForBicubic;
- if (GrSamplerState::Filter::kMipMap == filter && !fImage->setupMipmapsForPlanes()) {
+ if (GrSamplerState::Filter::kMipMap == filter &&
+ !fImage->setupMipmapsForPlanes(this->context())) {
filter = GrSamplerState::Filter::kBilerp;
}
diff --git a/src/image/SkImage_GpuYUVA.cpp b/src/image/SkImage_GpuYUVA.cpp
index a0b29eb..fe3eb92 100644
--- a/src/image/SkImage_GpuYUVA.cpp
+++ b/src/image/SkImage_GpuYUVA.cpp
@@ -80,7 +80,11 @@
fAlphaType, fTargetColorSpace ? fTargetColorSpace : fColorSpace);
}
-bool SkImage_GpuYUVA::setupMipmapsForPlanes() const {
+bool SkImage_GpuYUVA::setupMipmapsForPlanes(GrRecordingContext* context) const {
+ if (!context || !fContext->priv().matches(context)) {
+ return false;
+ }
+
for (int i = 0; i < fNumProxies; ++i) {
GrTextureProducer::CopyParams copyParams;
int mipCount = SkMipMap::ComputeLevelCount(fProxies[i]->width(), fProxies[i]->height());
@@ -88,7 +92,7 @@
fProxies[i].get(),
GrSamplerState::Filter::kMipMap,
©Params)) {
- auto mippedProxy = GrCopyBaseMipMapToTextureProxy(fContext.get(), fProxies[i].get());
+ auto mippedProxy = GrCopyBaseMipMapToTextureProxy(context, fProxies[i].get());
if (!mippedProxy) {
return false;
}
@@ -149,7 +153,7 @@
}
// need to generate mips for the proxy
- if (auto mippedProxy = GrCopyBaseMipMapToTextureProxy(fContext.get(), proxy.get())) {
+ if (auto mippedProxy = GrCopyBaseMipMapToTextureProxy(context, proxy.get())) {
fRGBProxy = mippedProxy;
return mippedProxy;
}
diff --git a/src/image/SkImage_GpuYUVA.h b/src/image/SkImage_GpuYUVA.h
index ef09c90..33bea53 100644
--- a/src/image/SkImage_GpuYUVA.h
+++ b/src/image/SkImage_GpuYUVA.h
@@ -53,7 +53,7 @@
return true;
}
- bool setupMipmapsForPlanes() const;
+ bool setupMipmapsForPlanes(GrRecordingContext*) const;
// Returns a ref-ed texture proxy with miplevels
sk_sp<GrTextureProxy> asMippedTextureProxyRef(GrRecordingContext*) const;