diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp
index 14c2a5b..222504c 100644
--- a/src/core/SkSpecialImage.cpp
+++ b/src/core/SkSpecialImage.cpp
@@ -55,7 +55,8 @@
     virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0;
 
     virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageFilter::OutputProperties& outProps,
-                                                  const SkISize& size, SkAlphaType at) const = 0;
+                                                  const SkISize& size, SkAlphaType at,
+                                                  const SkSurfaceProps* = nullptr) const = 0;
 
     virtual sk_sp<SkImage> onAsImage(const SkIRect* subset) const = 0;
 
@@ -152,8 +153,9 @@
 #endif
 
 sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageFilter::OutputProperties& outProps,
-                                                    const SkISize& size, SkAlphaType at) const {
-    return as_SIB(this)->onMakeSurface(outProps, size, at);
+                                                    const SkISize& size, SkAlphaType at,
+                                                    const SkSurfaceProps* props) const {
+    return as_SIB(this)->onMakeSurface(outProps, size, at, props);
 }
 
 sk_sp<SkSurface> SkSpecialImage::makeTightSurface(const SkImageFilter::OutputProperties& outProps,
@@ -255,7 +257,8 @@
 #define RASTER_IMAGE_FILTERS_SUPPORT_SRGB_AND_F16 0
 
     sk_sp<SkSpecialSurface> onMakeSurface(const SkImageFilter::OutputProperties& outProps,
-                                          const SkISize& size, SkAlphaType at) const override {
+                                          const SkISize& size, SkAlphaType at,
+                                          const SkSurfaceProps* props) const override {
 #if RASTER_IMAGE_FILTERS_SUPPORT_SRGB_AND_F16
         SkColorSpace* colorSpace = outProps.colorSpace();
 #else
@@ -265,7 +268,7 @@
             ? kRGBA_F16_SkColorType : kN32_SkColorType;
         SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), colorType, at,
                                              sk_ref_sp(colorSpace));
-        return SkSpecialSurface::MakeRaster(info, nullptr);
+        return SkSpecialSurface::MakeRaster(info, props);
     }
 
     sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const override {
@@ -428,14 +431,16 @@
     }
 
     sk_sp<SkSpecialSurface> onMakeSurface(const SkImageFilter::OutputProperties& outProps,
-                                          const SkISize& size, SkAlphaType at) const override {
+                                          const SkISize& size, SkAlphaType at,
+                                          const SkSurfaceProps* props) const override {
         if (!fContext) {
             return nullptr;
         }
 
         return SkSpecialSurface::MakeRenderTarget(
             fContext, size.width(), size.height(),
-            SkColorType2GrPixelConfig(outProps.colorType()), sk_ref_sp(outProps.colorSpace()));
+            SkColorType2GrPixelConfig(outProps.colorType()), sk_ref_sp(outProps.colorSpace()),
+            props);
     }
 
     sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const override {
diff --git a/src/core/SkSpecialImage.h b/src/core/SkSpecialImage.h
index d694fa2..48284598 100644
--- a/src/core/SkSpecialImage.h
+++ b/src/core/SkSpecialImage.h
@@ -91,7 +91,8 @@
      */
     sk_sp<SkSpecialSurface> makeSurface(const SkImageFilter::OutputProperties& outProps,
                                         const SkISize& size,
-                                        SkAlphaType at = kPremul_SkAlphaType) const;
+                                        SkAlphaType at = kPremul_SkAlphaType,
+                                        const SkSurfaceProps* props = nullptr) const;
 
     /**
      * Create a new surface with a backend that is compatible with this special image.
diff --git a/src/core/SkSpecialSurface.cpp b/src/core/SkSpecialSurface.cpp
index f7cddcd..a45b40b 100644
--- a/src/core/SkSpecialSurface.cpp
+++ b/src/core/SkSpecialSurface.cpp
@@ -166,14 +166,16 @@
 sk_sp<SkSpecialSurface> SkSpecialSurface::MakeRenderTarget(GrContext* context,
                                                            int width, int height,
                                                            GrPixelConfig config,
-                                                           sk_sp<SkColorSpace> colorSpace) {
+                                                           sk_sp<SkColorSpace> colorSpace,
+                                                           const SkSurfaceProps* props) {
     if (!context) {
         return nullptr;
     }
 
     sk_sp<GrRenderTargetContext> renderTargetContext(
         context->contextPriv().makeDeferredRenderTargetContext(
-                SkBackingFit::kApprox, width, height, config, std::move(colorSpace)));
+                SkBackingFit::kApprox, width, height, config, std::move(colorSpace), 1,
+                GrMipMapped::kNo, kBottomLeft_GrSurfaceOrigin, props));
     if (!renderTargetContext) {
         return nullptr;
     }
diff --git a/src/core/SkSpecialSurface.h b/src/core/SkSpecialSurface.h
index 2c138a3..b04b28d 100644
--- a/src/core/SkSpecialSurface.h
+++ b/src/core/SkSpecialSurface.h
@@ -62,7 +62,8 @@
     static sk_sp<SkSpecialSurface> MakeRenderTarget(GrContext*,
                                                     int width, int height,
                                                     GrPixelConfig config,
-                                                    sk_sp<SkColorSpace> colorSpace);
+                                                    sk_sp<SkColorSpace> colorSpace,
+                                                    const SkSurfaceProps* = nullptr);
 #endif
 
     /**
diff --git a/src/effects/imagefilters/SkPictureImageFilter.cpp b/src/effects/imagefilters/SkPictureImageFilter.cpp
index b9c298d..a25dee5 100644
--- a/src/effects/imagefilters/SkPictureImageFilter.cpp
+++ b/src/effects/imagefilters/SkPictureImageFilter.cpp
@@ -99,11 +99,17 @@
 
     SkASSERT(!bounds.isEmpty());
 
-    sk_sp<SkSpecialSurface> surf(source->makeSurface(ctx.outputProperties(), bounds.size()));
+    // Given the standard usage of the picture image filter (i.e., to render content at a fixed
+    // resolution that, most likely, differs from the screen's) disable LCD text.
+    SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
+    sk_sp<SkSpecialSurface> surf(source->makeSurface(ctx.outputProperties(), bounds.size(),
+                                                     kPremul_SkAlphaType, &props));
     if (!surf) {
         return nullptr;
     }
 
+    SkASSERT(kUnknown_SkPixelGeometry == surf->props().pixelGeometry());
+
     SkCanvas* canvas = surf->getCanvas();
     SkASSERT(canvas);
     canvas->clear(0x0);
