Use GrResourceProvider::MakeApprox for mask filter proxy sizes

This allows us to demand exact matches in size and eliminate our
dependence on absClear.

In the future we can take this a step further and offset the mask to
leave a transparent border on all sides, thereby creating a "decal"
effect.

Bug: skia:
Change-Id: I8cd02ba1365ace0ccaae250a7195f51d0c77ce8d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/242720
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/effects/GrRRectBlurEffect.fp b/src/gpu/effects/GrRRectBlurEffect.fp
index 74ad750..9974955 100644
--- a/src/gpu/effects/GrRRectBlurEffect.fp
+++ b/src/gpu/effects/GrRRectBlurEffect.fp
@@ -53,11 +53,12 @@
         sk_sp<GrTextureProxy> mask(proxyProvider->findOrCreateProxyByUniqueKey(
                 key, GrColorType::kAlpha_8, kBottomLeft_GrSurfaceOrigin));
         if (!mask) {
-            // TODO: this could be approx but the texture coords will need to be updated
-            auto rtc =
-                    context->priv().makeDeferredRenderTargetContextWithFallback(
-                                                SkBackingFit::kExact, size.fWidth,
-                                                size.fHeight, GrColorType::kAlpha_8, nullptr);
+            // TODO: this could be SkBackingFit::kApprox, but:
+            //   1) The texture coords would need to be updated.
+            //   2) We would have to use GrTextureDomain::kClamp_Mode for the GaussianBlur.
+            auto rtc = context->priv().makeDeferredRenderTargetContextWithFallback(
+                    SkBackingFit::kExact, size.fWidth, size.fHeight, GrColorType::kAlpha_8,
+                    nullptr);
             if (!rtc) {
                 return nullptr;
             }
diff --git a/src/gpu/effects/generated/GrRRectBlurEffect.h b/src/gpu/effects/generated/GrRRectBlurEffect.h
index 8b48489..e2f3dd5 100644
--- a/src/gpu/effects/generated/GrRRectBlurEffect.h
+++ b/src/gpu/effects/generated/GrRRectBlurEffect.h
@@ -54,7 +54,9 @@
         sk_sp<GrTextureProxy> mask(proxyProvider->findOrCreateProxyByUniqueKey(
                 key, GrColorType::kAlpha_8, kBottomLeft_GrSurfaceOrigin));
         if (!mask) {
-            // TODO: this could be approx but the texture coords will need to be updated
+            // TODO: this could be SkBackingFit::kApprox, but:
+            //   1) The texture coords would need to be updated.
+            //   2) We would have to use GrTextureDomain::kClamp_Mode for the GaussianBlur.
             auto rtc = context->priv().makeDeferredRenderTargetContextWithFallback(
                     SkBackingFit::kExact, size.fWidth, size.fHeight, GrColorType::kAlpha_8,
                     nullptr);