diff --git a/fuzz/Fuzz.h b/fuzz/Fuzz.h
index 31ba72a..4456a13 100644
--- a/fuzz/Fuzz.h
+++ b/fuzz/Fuzz.h
@@ -77,6 +77,12 @@
     void next(bool* b);
     void next(SkRegion* region);
 
+    bool nextBool() {
+        bool b;
+        this->next(&b);
+        return b;
+    }
+
     void nextRange(float* f, float min, float max);
 
 private:
diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp
index 3507eb2..ab0ee87 100644
--- a/fuzz/FuzzCanvas.cpp
+++ b/fuzz/FuzzCanvas.cpp
@@ -512,6 +512,20 @@
 
 static void fuzz_paint(Fuzz* fuzz, SkPaint* paint, int depth);
 
+static SkSamplingOptions next_sampling(Fuzz* fuzz) {
+    if (fuzz->nextBool()) {
+        float B, C;
+        fuzz->next(&B, &C);
+        return SkSamplingOptions({B, C});
+    } else {
+        SkFilterMode fm;
+        SkMipmapMode mm;
+        fuzz->nextEnum(&fm, SkFilterMode::kLast);
+        fuzz->nextEnum(&mm, SkMipmapMode::kLast);
+        return SkSamplingOptions(fm, mm);
+    }
+}
+
 static sk_sp<SkImageFilter> make_fuzz_imageFilter(Fuzz* fuzz, int depth) {
     if (depth <= 0) {
         return nullptr;
@@ -536,9 +550,7 @@
         case 2: {
             SkMatrix matrix;
             FuzzNiceMatrix(fuzz, &matrix);
-            SkFilterQuality quality;
-            fuzz->nextEnum(&quality, SkFilterQuality::kLast_SkFilterQuality);
-            auto sampling = SkSamplingOptions(quality);
+            const auto sampling = next_sampling(fuzz);
             sk_sp<SkImageFilter> input = make_fuzz_imageFilter(fuzz, depth - 1);
             return SkImageFilters::MatrixTransform(matrix, sampling, std::move(input));
         }
@@ -628,11 +640,8 @@
         case 10: {
             sk_sp<SkImage> image = make_fuzz_image(fuzz);
             SkRect srcRect, dstRect;
-            SkFilterQuality filterQuality;
             fuzz->next(&srcRect, &dstRect);
-            fuzz->nextEnum(&filterQuality, SkFilterQuality::kLast_SkFilterQuality);
-            return SkImageFilters::Image(std::move(image), srcRect, dstRect,
-                                         SkSamplingOptions(filterQuality));
+            return SkImageFilters::Image(std::move(image), srcRect, dstRect, next_sampling(fuzz));
         }
         case 11:
             return make_fuzz_lighting_imagefilter(fuzz, depth - 1);
diff --git a/gm/giantbitmap.cpp b/gm/giantbitmap.cpp
index 9d578c4..d2caac5 100644
--- a/gm/giantbitmap.cpp
+++ b/gm/giantbitmap.cpp
@@ -118,7 +118,7 @@
                                                                        : SkFilterMode::kNearest),
                                            m));
 
-        canvas->translate(SkIntToScalar(50), SkIntToScalar(50));
+        canvas->translate(50, 50);
 
         canvas->drawPaint(paint);
     }
diff --git a/modules/svg/src/SkSVGFeImage.cpp b/modules/svg/src/SkSVGFeImage.cpp
index 8ea195a..9767b37 100644
--- a/modules/svg/src/SkSVGFeImage.cpp
+++ b/modules/svg/src/SkSVGFeImage.cpp
@@ -5,6 +5,7 @@
  * found in the LICENSE file.
  */
 
+#include "include/core/SkSamplingOptions.h"
 #include "include/effects/SkImageFilters.h"
 #include "modules/svg/include/SkSVGFeImage.h"
 #include "modules/svg/include/SkSVGFilterContext.h"
@@ -33,8 +34,9 @@
     const SkRect srcRect = SkRect::Make(imgInfo.fImage->bounds());
     const SkRect& dstRect = imgInfo.fDst;
     // TODO: image-rendering property
-    const SkFilterQuality fq = SkFilterQuality::kMedium_SkFilterQuality;
-    auto imgfilt = SkImageFilters::Image(imgInfo.fImage, srcRect, dstRect, SkSamplingOptions(fq));
+    auto imgfilt = SkImageFilters::Image(imgInfo.fImage, srcRect, dstRect,
+                                         SkSamplingOptions(SkFilterMode::kLinear,
+                                                           SkMipmapMode::kNearest));
 
     // Aspect ratio mapping may end up drawing content outside of the filter effects region,
     // so perform an explicit crop.
