always use shader based tile modes for blurs in reduced shader mode

Bug: skia:11844
Change-Id: I7a02a4848ed81f16b05df0729070660faf8fce86
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/399744
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
index e075aec..5078fec 100644
--- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
+++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
@@ -170,18 +170,33 @@
     if (is_zero_sigma) {
         halfWidth = 0;
     }
-    if (pixelDomain) {
+    // It's pretty common to blur a subset of an input texture. In reduced shader mode we always
+    // apply the wrap mode in the shader.
+    bool alwaysUseShaderTileMode = caps.reducedShaderMode();
+    if (pixelDomain && !alwaysUseShaderTileMode) {
         // Inset because we expect to be invoked at pixel centers.
         SkRect domain = SkRect::Make(*pixelDomain).makeInset(0.5, 0.5f);
         switch (dir) {
             case Direction::kX: domain.outset(halfWidth, 0); break;
             case Direction::kY: domain.outset(0, halfWidth); break;
         }
-        child = GrTextureEffect::MakeSubset(std::move(view), alphaType, SkMatrix::I(), sampler,
-                                            SkRect::Make(subset), domain, caps);
+        child = GrTextureEffect::MakeSubset(std::move(view),
+                                            alphaType,
+                                            SkMatrix::I(),
+                                            sampler,
+                                            SkRect::Make(subset),
+                                            domain,
+                                            caps,
+                                            GrTextureEffect::kDefaultBorder);
     } else {
-        child = GrTextureEffect::MakeSubset(std::move(view), alphaType, SkMatrix::I(), sampler,
-                                            SkRect::Make(subset), caps);
+        child = GrTextureEffect::MakeSubset(std::move(view),
+                                            alphaType,
+                                            SkMatrix::I(),
+                                            sampler,
+                                            SkRect::Make(subset),
+                                            caps,
+                                            GrTextureEffect::kDefaultBorder,
+                                            alwaysUseShaderTileMode);
     }
 
     if (is_zero_sigma) {