diff --git a/modules/svg/include/SkSVGFe.h b/modules/svg/include/SkSVGFe.h
index fe69712..8e4422a 100644
--- a/modules/svg/include/SkSVGFe.h
+++ b/modules/svg/include/SkSVGFe.h
@@ -21,7 +21,8 @@
         return node->tag() == SkSVGTag::kFeTurbulence || node->tag() == SkSVGTag::kFeColorMatrix ||
                node->tag() == SkSVGTag::kFeComposite || node->tag() == SkSVGTag::kFeFlood ||
                node->tag() == SkSVGTag::kFeGaussianBlur || node->tag() == SkSVGTag::kFeOffset ||
-               node->tag() == SkSVGTag::kFeBlend || node->tag() == SkSVGTag::kFeMorphology;
+               node->tag() == SkSVGTag::kFeBlend || node->tag() == SkSVGTag::kFeMorphology ||
+               node->tag() == SkSVGTag::kFeDisplacementMap;
     }
 
     sk_sp<SkImageFilter> makeImageFilter(const SkSVGRenderContext& ctx,
diff --git a/modules/svg/include/SkSVGFeDisplacementMap.h b/modules/svg/include/SkSVGFeDisplacementMap.h
new file mode 100644
index 0000000..33c98fe
--- /dev/null
+++ b/modules/svg/include/SkSVGFeDisplacementMap.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2020 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSVGFeDisplacementMap_DEFINED
+#define SkSVGFeDisplacementMap_DEFINED
+
+#include "modules/svg/include/SkSVGFe.h"
+#include "modules/svg/include/SkSVGTypes.h"
+
+class SkSVGFeDisplacementMap : public SkSVGFe {
+public:
+    using ChannelSelector = SkColorChannel;
+
+    static sk_sp<SkSVGFeDisplacementMap> Make() {
+        return sk_sp<SkSVGFeDisplacementMap>(new SkSVGFeDisplacementMap());
+    }
+
+    SkSVGColorspace resolveColorspace(const SkSVGRenderContext&,
+                                      const SkSVGFilterContext&) const final;
+
+    SVG_ATTR(In2             , SkSVGFeInputType, SkSVGFeInputType())
+    SVG_ATTR(XChannelSelector, ChannelSelector , ChannelSelector::kA)
+    SVG_ATTR(YChannelSelector, ChannelSelector , ChannelSelector::kA)
+    SVG_ATTR(Scale           , SkSVGNumberType , SkSVGNumberType(0))
+
+protected:
+    sk_sp<SkImageFilter> onMakeImageFilter(const SkSVGRenderContext&,
+                                           const SkSVGFilterContext&) const override;
+
+    std::vector<SkSVGFeInputType> getInputs() const override {
+        return {this->getIn(), this->getIn2()};
+    }
+
+    bool parseAndSetAttribute(const char*, const char*) override;
+
+private:
+    SkSVGFeDisplacementMap() : INHERITED(SkSVGTag::kFeDisplacementMap) {}
+
+    using INHERITED = SkSVGFe;
+};
+
+#endif  // SkSVGFeDisplacementMap_DEFINED
diff --git a/modules/svg/include/SkSVGNode.h b/modules/svg/include/SkSVGNode.h
index 71c161f..f7fc6c9 100644
--- a/modules/svg/include/SkSVGNode.h
+++ b/modules/svg/include/SkSVGNode.h
@@ -28,6 +28,7 @@
     kFeBlend,
     kFeColorMatrix,
     kFeComposite,
+    kFeDisplacementMap,
     kFeFlood,
     kFeGaussianBlur,
     kFeMorphology,
diff --git a/modules/svg/src/SkSVGDOM.cpp b/modules/svg/src/SkSVGDOM.cpp
index 5d8b0be..08fea1f 100644
--- a/modules/svg/src/SkSVGDOM.cpp
+++ b/modules/svg/src/SkSVGDOM.cpp
@@ -19,6 +19,7 @@
 #include "modules/svg/include/SkSVGFeBlend.h"
 #include "modules/svg/include/SkSVGFeColorMatrix.h"
 #include "modules/svg/include/SkSVGFeComposite.h"
+#include "modules/svg/include/SkSVGFeDisplacementMap.h"
 #include "modules/svg/include/SkSVGFeFlood.h"
 #include "modules/svg/include/SkSVGFeGaussianBlur.h"
 #include "modules/svg/include/SkSVGFeMorphology.h"
@@ -257,36 +258,37 @@
 };
 
 SortedDictionaryEntry<sk_sp<SkSVGNode>(*)()> gTagFactories[] = {
-    { "a"             , []() -> sk_sp<SkSVGNode> { return SkSVGG::Make();              }},
-    { "circle"        , []() -> sk_sp<SkSVGNode> { return SkSVGCircle::Make();         }},
-    { "clipPath"      , []() -> sk_sp<SkSVGNode> { return SkSVGClipPath::Make();       }},
-    { "defs"          , []() -> sk_sp<SkSVGNode> { return SkSVGDefs::Make();           }},
-    { "ellipse"       , []() -> sk_sp<SkSVGNode> { return SkSVGEllipse::Make();        }},
-    { "feBlend"       , []() -> sk_sp<SkSVGNode> { return SkSVGFeBlend::Make();        }},
-    { "feColorMatrix" , []() -> sk_sp<SkSVGNode> { return SkSVGFeColorMatrix::Make();  }},
-    { "feComposite"   , []() -> sk_sp<SkSVGNode> { return SkSVGFeComposite::Make();    }},
-    { "feFlood"       , []() -> sk_sp<SkSVGNode> { return SkSVGFeFlood::Make();        }},
-    { "feGaussianBlur", []() -> sk_sp<SkSVGNode> { return SkSVGFeGaussianBlur::Make(); }},
-    { "feMorphology"  , []() -> sk_sp<SkSVGNode> { return SkSVGFeMorphology::Make();   }},
-    { "feOffset"      , []() -> sk_sp<SkSVGNode> { return SkSVGFeOffset::Make();       }},
-    { "feTurbulence"  , []() -> sk_sp<SkSVGNode> { return SkSVGFeTurbulence::Make();   }},
-    { "filter"        , []() -> sk_sp<SkSVGNode> { return SkSVGFilter::Make();         }},
-    { "g"             , []() -> sk_sp<SkSVGNode> { return SkSVGG::Make();              }},
-    { "line"          , []() -> sk_sp<SkSVGNode> { return SkSVGLine::Make();           }},
-    { "linearGradient", []() -> sk_sp<SkSVGNode> { return SkSVGLinearGradient::Make(); }},
-    { "mask"          , []() -> sk_sp<SkSVGNode> { return SkSVGMask::Make();           }},
-    { "path"          , []() -> sk_sp<SkSVGNode> { return SkSVGPath::Make();           }},
-    { "pattern"       , []() -> sk_sp<SkSVGNode> { return SkSVGPattern::Make();        }},
-    { "polygon"       , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolygon();    }},
-    { "polyline"      , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolyline();   }},
-    { "radialGradient", []() -> sk_sp<SkSVGNode> { return SkSVGRadialGradient::Make(); }},
-    { "rect"          , []() -> sk_sp<SkSVGNode> { return SkSVGRect::Make();           }},
-    { "stop"          , []() -> sk_sp<SkSVGNode> { return SkSVGStop::Make();           }},
+    { "a"                , []() -> sk_sp<SkSVGNode> { return SkSVGG::Make();                 }},
+    { "circle"           , []() -> sk_sp<SkSVGNode> { return SkSVGCircle::Make();            }},
+    { "clipPath"         , []() -> sk_sp<SkSVGNode> { return SkSVGClipPath::Make();          }},
+    { "defs"             , []() -> sk_sp<SkSVGNode> { return SkSVGDefs::Make();              }},
+    { "ellipse"          , []() -> sk_sp<SkSVGNode> { return SkSVGEllipse::Make();           }},
+    { "feBlend"          , []() -> sk_sp<SkSVGNode> { return SkSVGFeBlend::Make();           }},
+    { "feColorMatrix"    , []() -> sk_sp<SkSVGNode> { return SkSVGFeColorMatrix::Make();     }},
+    { "feComposite"      , []() -> sk_sp<SkSVGNode> { return SkSVGFeComposite::Make();       }},
+    { "feDisplacementMap", []() -> sk_sp<SkSVGNode> { return SkSVGFeDisplacementMap::Make(); }},
+    { "feFlood"          , []() -> sk_sp<SkSVGNode> { return SkSVGFeFlood::Make();           }},
+    { "feGaussianBlur"   , []() -> sk_sp<SkSVGNode> { return SkSVGFeGaussianBlur::Make();    }},
+    { "feMorphology"     , []() -> sk_sp<SkSVGNode> { return SkSVGFeMorphology::Make();      }},
+    { "feOffset"         , []() -> sk_sp<SkSVGNode> { return SkSVGFeOffset::Make();          }},
+    { "feTurbulence"     , []() -> sk_sp<SkSVGNode> { return SkSVGFeTurbulence::Make();      }},
+    { "filter"           , []() -> sk_sp<SkSVGNode> { return SkSVGFilter::Make();            }},
+    { "g"                , []() -> sk_sp<SkSVGNode> { return SkSVGG::Make();                 }},
+    { "line"             , []() -> sk_sp<SkSVGNode> { return SkSVGLine::Make();              }},
+    { "linearGradient"   , []() -> sk_sp<SkSVGNode> { return SkSVGLinearGradient::Make();    }},
+    { "mask"             , []() -> sk_sp<SkSVGNode> { return SkSVGMask::Make();              }},
+    { "path"             , []() -> sk_sp<SkSVGNode> { return SkSVGPath::Make();              }},
+    { "pattern"          , []() -> sk_sp<SkSVGNode> { return SkSVGPattern::Make();           }},
+    { "polygon"          , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolygon();       }},
+    { "polyline"         , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolyline();      }},
+    { "radialGradient"   , []() -> sk_sp<SkSVGNode> { return SkSVGRadialGradient::Make();    }},
+    { "rect"             , []() -> sk_sp<SkSVGNode> { return SkSVGRect::Make();              }},
+    { "stop"             , []() -> sk_sp<SkSVGNode> { return SkSVGStop::Make();              }},
 //    "svg" handled explicitly
-    { "text"          , []() -> sk_sp<SkSVGNode> { return SkSVGText::Make();           }},
-    { "textPath"      , []() -> sk_sp<SkSVGNode> { return SkSVGTextPath::Make();       }},
-    { "tspan"         , []() -> sk_sp<SkSVGNode> { return SkSVGTSpan::Make();          }},
-    { "use"           , []() -> sk_sp<SkSVGNode> { return SkSVGUse::Make();            }},
+    { "text"             , []() -> sk_sp<SkSVGNode> { return SkSVGText::Make();              }},
+    { "textPath"         , []() -> sk_sp<SkSVGNode> { return SkSVGTextPath::Make();          }},
+    { "tspan"            , []() -> sk_sp<SkSVGNode> { return SkSVGTSpan::Make();             }},
+    { "use"              , []() -> sk_sp<SkSVGNode> { return SkSVGUse::Make();               }},
 };
 
 struct ConstructionContext {
diff --git a/modules/svg/src/SkSVGFeDisplacementMap.cpp b/modules/svg/src/SkSVGFeDisplacementMap.cpp
new file mode 100644
index 0000000..966faa5
--- /dev/null
+++ b/modules/svg/src/SkSVGFeDisplacementMap.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2020 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "include/effects/SkImageFilters.h"
+#include "modules/svg/include/SkSVGAttributeParser.h"
+#include "modules/svg/include/SkSVGFeDisplacementMap.h"
+#include "modules/svg/include/SkSVGFilterContext.h"
+#include "modules/svg/include/SkSVGRenderContext.h"
+#include "modules/svg/include/SkSVGValue.h"
+
+bool SkSVGFeDisplacementMap::parseAndSetAttribute(const char* name, const char* value) {
+    return INHERITED::parseAndSetAttribute(name, value) ||
+           this->setIn2(SkSVGAttributeParser::parse<SkSVGFeInputType>("in2", name, value)) ||
+           this->setXChannelSelector(
+                   SkSVGAttributeParser::parse<SkSVGFeDisplacementMap::ChannelSelector>(
+                           "xChannelSelector", name, value)) ||
+           this->setYChannelSelector(
+                   SkSVGAttributeParser::parse<SkSVGFeDisplacementMap::ChannelSelector>(
+                           "yChannelSelector", name, value)) ||
+           this->setScale(SkSVGAttributeParser::parse<SkSVGNumberType>("scale", name, value));
+}
+
+sk_sp<SkImageFilter> SkSVGFeDisplacementMap::onMakeImageFilter(
+        const SkSVGRenderContext& ctx, const SkSVGFilterContext& fctx) const {
+    const SkRect cropRect = this->resolveFilterSubregion(ctx, fctx);
+    const SkSVGColorspace colorspace = this->resolveColorspace(ctx, fctx);
+
+    // According to spec https://www.w3.org/TR/SVG11/filters.html#feDisplacementMapElement,
+    // the 'in' source image must remain in its current colorspace.
+    sk_sp<SkImageFilter> in = fctx.resolveInput(ctx, this->getIn());
+    sk_sp<SkImageFilter> in2 = fctx.resolveInput(ctx, this->getIn2(), colorspace);
+
+    SkScalar scale = fScale;
+    if (fctx.primitiveUnits().type() == SkSVGObjectBoundingBoxUnits::Type::kObjectBoundingBox) {
+        SkASSERT(ctx.node());
+        const SkRect objBounds = ctx.node()->objectBoundingBox(ctx);
+        const SkSVGLengthContext lctx({objBounds.width(), objBounds.height()});
+        scale = lctx.resolve(SkSVGLength(scale, SkSVGLength::Unit::kPercentage),
+                             SkSVGLengthContext::LengthType::kOther);
+    }
+
+    return SkImageFilters::DisplacementMap(
+            fXChannelSelector, fYChannelSelector, scale, in2, in, cropRect);
+}
+
+SkSVGColorspace SkSVGFeDisplacementMap::resolveColorspace(const SkSVGRenderContext& ctx,
+                                                          const SkSVGFilterContext& fctx) const {
+    // According to spec https://www.w3.org/TR/SVG11/filters.html#feDisplacementMapElement,
+    // the 'in' source image must remain in its current colorspace, which means the colorspace of
+    // this FE node is the same as the input.
+    return fctx.resolveInputColorspace(ctx, this->getIn());
+}
+
+template <>
+bool SkSVGAttributeParser::parse<SkSVGFeDisplacementMap::ChannelSelector>(
+        SkSVGFeDisplacementMap::ChannelSelector* channel) {
+    static constexpr std::tuple<const char*, SkSVGFeDisplacementMap::ChannelSelector> gMap[] = {
+            { "R", SkSVGFeDisplacementMap::ChannelSelector::kR },
+            { "G", SkSVGFeDisplacementMap::ChannelSelector::kG },
+            { "B", SkSVGFeDisplacementMap::ChannelSelector::kB },
+            { "A", SkSVGFeDisplacementMap::ChannelSelector::kA },
+    };
+
+    return this->parseEnumMap(gMap, channel) && this->parseEOSToken();
+}
diff --git a/modules/svg/svg.gni b/modules/svg/svg.gni
index b9b7a84..0d677dd 100644
--- a/modules/svg/svg.gni
+++ b/modules/svg/svg.gni
@@ -20,6 +20,7 @@
   "$_include/SkSVGFeBlend.h",
   "$_include/SkSVGFeColorMatrix.h",
   "$_include/SkSVGFeComposite.h",
+  "$_include/SkSVGFeDisplacementMap.h",
   "$_include/SkSVGFeFlood.h",
   "$_include/SkSVGFeGaussianBlur.h",
   "$_include/SkSVGFeMorphology.h",
@@ -63,6 +64,7 @@
   "$_src/SkSVGFeBlend.cpp",
   "$_src/SkSVGFeColorMatrix.cpp",
   "$_src/SkSVGFeComposite.cpp",
+  "$_src/SkSVGFeDisplacementMap.cpp",
   "$_src/SkSVGFeFlood.cpp",
   "$_src/SkSVGFeGaussianBlur.cpp",
   "$_src/SkSVGFeMorphology.cpp",
