Must pass filtering to picture shader

Change-Id: I820867df80daa1594d6202cad5e8e95c060293fe
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/386838
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
diff --git a/gm/bug6643.cpp b/gm/bug6643.cpp
index 42debb5..ceebdc1 100644
--- a/gm/bug6643.cpp
+++ b/gm/bug6643.cpp
@@ -30,7 +30,8 @@
     recorder.beginRecording(200, 200)->drawPaint(p);
 
     p.setShader(recorder.finishRecordingAsPicture()->makeShader(
-                                            SkTileMode::kRepeat, SkTileMode::kRepeat));
+                                            SkTileMode::kRepeat, SkTileMode::kRepeat,
+                                            SkFilterMode::kNearest, nullptr, nullptr));
     canvas->drawColor(SK_ColorWHITE);
     canvas->drawPaint(p);
 }
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index 904a67f..c5a3e07 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -922,8 +922,8 @@
         SkMatrix m = SkMatrix::I();
         m.preRotate(45);
         return recorder.finishRecordingAsPicture()->makeShader(
-                                           SkTileMode::kRepeat,
-                                           SkTileMode::kRepeat, &m, nullptr);
+                                           SkTileMode::kRepeat, SkTileMode::kRepeat,
+                                           SkFilterMode::kNearest, &m, nullptr);
     });
 
     draw_circle_shader(canvas, 400, 150, 100, []() -> sk_sp<SkShader> {
@@ -944,7 +944,7 @@
 
         return recorder.finishRecordingAsPicture()->makeShader(
                                            SkTileMode::kRepeat,
-                                           SkTileMode::kRepeat);
+                                           SkTileMode::kRepeat, SkFilterMode::kNearest);
     });
 
     draw_circle_shader(canvas, 650, 150, 100, []() -> sk_sp<SkShader> {
diff --git a/gm/pictureshader.cpp b/gm/pictureshader.cpp
index 9306e80..db3f39c 100644
--- a/gm/pictureshader.cpp
+++ b/gm/pictureshader.cpp
@@ -163,6 +163,7 @@
 
         auto pictureShader = fPicture->makeShader(kTileConfigs[tileMode].tmx,
                                                   kTileConfigs[tileMode].tmy,
+                                                  SkFilterMode::kNearest,
                                                   fUseLocalMatrixWrapper ? nullptr : &localMatrix,
                                                   nullptr);
         paint.setShader(fUseLocalMatrixWrapper
@@ -222,70 +223,7 @@
     p.setColor(0xFFB6B6B6);  // gray
     canvas->drawPaint(p);
 
-    p.setShader(picture->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
+    p.setShader(picture->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat,
+                                    SkFilterMode::kNearest));
     canvas->drawPaint(p);
 }
-
-#ifdef SK_SUPPORT_LEGACY_SETFILTERQUALITY
-/*
-    Test picture-shader's filtering (after the tile is created.
-    The GM draws a 2x2 grid of tiled images (circle, square, X)
-
-    Column 0 should be hard-edged
-    Column 1 should be filtered
-
-    Row 0 deduces this from the paint (legacy behavior)
-    Row 1 takes this as an explicit parameter (SkFilterMode)
- */
-DEF_SIMPLE_GM(picture_shader_filter, canvas, 230, 230) {
-    auto pic = [&] {
-        SkRect r = SkRect::MakeWH(100, 100);
-        SkPictureRecorder recorder;
-        SkCanvas* c = recorder.beginRecording(r);
-        SkPaint paint;
-        paint.setStroke(true);
-        c->drawRect({5, 5, 95, 95}, paint);
-        c->drawCircle(50, 50, 30, paint);
-        c->drawLine(5, 1, 95,95, paint);
-        c->drawLine(5,95, 95, 1, paint);
-        return recorder.finishRecordingAsPicture();
-    }();
-
-    struct {
-        SkPoint         fLoc;
-        SkFilterMode    fFilter;
-        bool            fInheritFromPaint;
-
-        void setup(SkPaint* paint, sk_sp<SkPicture> pic) const {
-            SkTileMode tm = SkTileMode::kRepeat;
-            sk_sp<SkShader> sh;
-            if (fInheritFromPaint) {
-                sh = pic->makeShader(tm, tm, nullptr, nullptr);
-                paint->setFilterQuality(fFilter == SkFilterMode::kNearest ? kNone_SkFilterQuality
-                                                                          : kLow_SkFilterQuality);
-            } else {
-                sh = pic->makeShader(tm, tm, fFilter, nullptr, nullptr);
-                // the draw should ignore paint's filterquality,
-                // but we'll set it to something wacky just to be test that
-                paint->setFilterQuality(kHigh_SkFilterQuality);
-            }
-            paint->setShader(sh);
-        }
-    } recs[] = {
-        { {0, 0}, SkFilterMode::kNearest, true },
-        { {1, 0}, SkFilterMode::kLinear,  true },
-        { {0, 1}, SkFilterMode::kNearest, false },
-        { {1, 1}, SkFilterMode::kLinear,  false },
-    };
-
-    canvas->translate(10, 10);
-    canvas->scale(1.0f/3, 1.0f/3);
-    for (const auto& r : recs) {
-        SkAutoCanvasRestore acr(canvas, true);
-        canvas->translate(r.fLoc.fX * 330, r.fLoc.fY * 330);
-        SkPaint paint;
-        r.setup(&paint, pic);
-        canvas->drawRect({0, 0, 300, 300}, paint);
-    }
-}
-#endif
diff --git a/gm/pictureshadercache.cpp b/gm/pictureshadercache.cpp
index a21c276..b560a0c 100644
--- a/gm/pictureshadercache.cpp
+++ b/gm/pictureshadercache.cpp
@@ -67,7 +67,8 @@
 
     void onDraw(SkCanvas* canvas) override {
         SkPaint paint;
-        paint.setShader(fPicture->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
+        paint.setShader(fPicture->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat,
+                                             SkFilterMode::kNearest));
 
         {
             // Render in a funny color space that converts green to yellow.
diff --git a/gm/pictureshadertile.cpp b/gm/pictureshadertile.cpp
index ea2ba4d..f878c2a 100644
--- a/gm/pictureshadertile.cpp
+++ b/gm/pictureshadertile.cpp
@@ -135,7 +135,7 @@
             }
 
             fShaders[i] = pictureRef->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat,
-                                                 &localMatrix, tilePtr);
+                                                 SkFilterMode::kNearest, &localMatrix, tilePtr);
         }
     }