diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index 510d610..4794759 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -113,9 +113,6 @@
 
     ADD_TYPE(ISampler2D);
 
-    ADD_TYPE(Image2D);
-    ADD_TYPE(IImage2D);
-
     ADD_TYPE(GSampler1D);
     ADD_TYPE(GSampler2D);
     ADD_TYPE(GSampler3D);
diff --git a/src/sksl/SkSLContext.h b/src/sksl/SkSLContext.h
index a42a4cc..80ad7fb 100644
--- a/src/sksl/SkSLContext.h
+++ b/src/sksl/SkSLContext.h
@@ -78,14 +78,8 @@
     , fSampler1DArrayShadow_Type(new Type("sampler1DArrayShadow"))
     , fSampler2DArrayShadow_Type(new Type("sampler2DArrayShadow"))
     , fSamplerCubeArrayShadow_Type(new Type("samplerCubeArrayShadow"))
-
     // Related to below FIXME, gsampler*s don't currently expand to cover integer case.
     , fISampler2D_Type(new Type("isampler2D", SpvDim2D, false, false, false, true))
-
-    // FIXME express these as "gimage2D" that expand to image2D, iimage2D, and uimage2D.
-    , fImage2D_Type(new Type("image2D", SpvDim2D, false, false, false, true))
-    , fIImage2D_Type(new Type("iimage2D", SpvDim2D, false, false, false, true))
-
     // FIXME figure out what we're supposed to do with the gsampler et al. types)
     , fGSampler1D_Type(new Type("$gsampler1D", static_type(*fSampler1D_Type)))
     , fGSampler2D_Type(new Type("$gsampler2D", static_type(*fSampler2D_Type)))
@@ -201,12 +195,8 @@
     const std::unique_ptr<Type> fSampler2DArrayShadow_Type;
     const std::unique_ptr<Type> fSamplerCubeArrayShadow_Type;
 
-
     const std::unique_ptr<Type> fISampler2D_Type;
 
-    const std::unique_ptr<Type> fImage2D_Type;
-    const std::unique_ptr<Type> fIImage2D_Type;
-
     const std::unique_ptr<Type> fGSampler1D_Type;
     const std::unique_ptr<Type> fGSampler2D_Type;
     const std::unique_ptr<Type> fGSampler3D_Type;
diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp
index 1252f86..c6d2e6e 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.cpp
+++ b/src/sksl/SkSLGLSLCodeGenerator.cpp
@@ -474,12 +474,6 @@
             this->write(" = ");
             this->writeExpression(*var.fValue, kTopLevel_Precedence);
         }
-        if (!fFoundImageDecl && var.fVar->fType == *fContext.fImage2D_Type) {
-            if (fCaps.imageLoadStoreExtensionString()) {
-                fHeader << "#extension " << fCaps.imageLoadStoreExtensionString() << " : require\n";
-            }
-            fFoundImageDecl = true;
-        }
     }
     this->write(";");
 }
diff --git a/src/sksl/SkSLGLSLCodeGenerator.h b/src/sksl/SkSLGLSLCodeGenerator.h
index 16d6192..5ed6104 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.h
+++ b/src/sksl/SkSLGLSLCodeGenerator.h
@@ -169,7 +169,6 @@
     std::vector<const Type*> fWrittenStructs;
     // true if we have run into usages of dFdx / dFdy
     bool fFoundDerivatives = false;
-    bool fFoundImageDecl = false;
 };
 
 }
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index a3a88b0..154989f 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -537,12 +537,11 @@
     bool overrideCoverage = false;
     bool blendSupportAllEquations = false;
     bool pushConstant = false;
-    ASTLayout::Format format = ASTLayout::Format::kUnspecified;
     if (this->peek().fKind == Token::LAYOUT) {
         this->nextToken();
         if (!this->expect(Token::LPAREN, "'('")) {
             return ASTLayout(location, binding, index, set, builtin, originUpperLeft,
-                             overrideCoverage, blendSupportAllEquations, pushConstant, format);
+                             overrideCoverage, blendSupportAllEquations, pushConstant);
         }
         for (;;) {
             Token t = this->nextToken();
@@ -564,8 +563,6 @@
                 blendSupportAllEquations = true;
             } else if (t.fText == "push_constant") {
                 pushConstant = true;
-            } else if (ASTLayout::ReadFormat(t.fText, &format)) {
-               // AST::ReadFormat stored the result in 'format'.
             } else {
                 this->error(t.fPosition, ("'" + t.fText + 
                                           "' is not a valid layout qualifier").c_str());
@@ -580,7 +577,7 @@
         }
     }
     return ASTLayout(location, binding, index, set, builtin, originUpperLeft, overrideCoverage,
-                     blendSupportAllEquations, pushConstant, format);
+                     blendSupportAllEquations, pushConstant);
 }
 
 /* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP | MEDIUMP | HIGHP | FLAT | NOPERSPECTIVE)* */
diff --git a/src/sksl/ast/SkSLASTLayout.h b/src/sksl/ast/SkSLASTLayout.h
index e7bfd12..2aec31e 100644
--- a/src/sksl/ast/SkSLASTLayout.h
+++ b/src/sksl/ast/SkSLASTLayout.h
@@ -19,68 +19,9 @@
  * layout (location = 0) int x;
  */
 struct ASTLayout : public ASTNode {
-    // These are used by images in GLSL. We only support a subset of what GL supports.
-    enum class Format {
-        kUnspecified = -1,
-        kRGBA32F,
-        kR32F,
-        kRGBA16F,
-        kR16F,
-        kRGBA8,
-        kR8,
-        kRGBA8I,
-        kR8I,
-    };
-
-    static const char* FormatToStr(Format format) {
-        switch (format) {
-            case Format::kUnspecified:  return "";
-            case Format::kRGBA32F:      return "rgba32f";
-            case Format::kR32F:         return "r32f";
-            case Format::kRGBA16F:      return "rgba16f";
-            case Format::kR16F:         return "r16f";
-            case Format::kRGBA8:        return "rgba8";
-            case Format::kR8:           return "r8";
-            case Format::kRGBA8I:       return "rgba8i";
-            case Format::kR8I:          return "r8i";
-        }
-        SkFAIL("Unexpected format");
-        return "";
-    }
-
-    static bool ReadFormat(std::string str, Format* format) {
-        if (str == "rgba32f") {
-            *format = Format::kRGBA32F;
-            return true;
-        } else if (str == "r32f") {
-            *format = Format::kR32F;
-            return true;
-        } else if (str == "rgba16f") {
-            *format = Format::kRGBA16F;
-            return true;
-        } else if (str == "r16f") {
-            *format = Format::kR16F;
-            return true;
-        } else if (str == "rgba8") {
-            *format = Format::kRGBA8;
-            return true;
-        } else if (str == "r8") {
-            *format = Format::kR8;
-            return true;
-        } else if (str == "rgba8i") {
-            *format = Format::kRGBA8I;
-            return true;
-        } else if (str == "r8i") {
-            *format = Format::kR8I;
-            return true;
-        }
-        return false;
-    }
-
     // For int parameters, a -1 means no value
     ASTLayout(int location, int binding, int index, int set, int builtin, bool originUpperLeft,
-              bool overrideCoverage, bool blendSupportAllEquations, bool pushConstant,
-              Format format)
+              bool overrideCoverage, bool blendSupportAllEquations, bool pushConstant)
     : fLocation(location)
     , fBinding(binding)
     , fIndex(index)
@@ -89,8 +30,7 @@
     , fOriginUpperLeft(originUpperLeft)
     , fOverrideCoverage(overrideCoverage)
     , fBlendSupportAllEquations(blendSupportAllEquations)
-    , fPushConstant(pushConstant)
-    , fFormat(format) {}
+    , fPushConstant(pushConstant) {}
 
     std::string description() const {
         std::string result;
@@ -131,10 +71,6 @@
             result += separator + "push_constant";
             separator = ", ";
         }
-        if (fFormat != Format::kUnspecified) {
-            result += separator + FormatToStr(fFormat);
-            separator = ", ";
-        }
         if (result.length() > 0) {
             result = "layout (" + result + ")";
         }
@@ -150,7 +86,6 @@
     const bool fOverrideCoverage;
     const bool fBlendSupportAllEquations;
     const bool fPushConstant;
-    const Format fFormat;
 };
 
 } // namespace
diff --git a/src/sksl/ir/SkSLLayout.h b/src/sksl/ir/SkSLLayout.h
index ef2f8c2..dfa3967 100644
--- a/src/sksl/ir/SkSLLayout.h
+++ b/src/sksl/ir/SkSLLayout.h
@@ -25,12 +25,10 @@
     , fOriginUpperLeft(layout.fOriginUpperLeft)
     , fOverrideCoverage(layout.fOverrideCoverage)
     , fBlendSupportAllEquations(layout.fBlendSupportAllEquations)
-    , fPushConstant(layout.fPushConstant)
-    , fFormat(layout.fFormat) {}
+    , fPushConstant(layout.fPushConstant) {}
 
     Layout(int location, int binding, int index, int set, int builtin, bool originUpperLeft,
-           bool overrideCoverage, bool blendSupportAllEquations, bool pushconstant,
-           ASTLayout::Format format)
+           bool overrideCoverage, bool blendSupportAllEquations, bool pushconstant)
     : fLocation(location)
     , fBinding(binding)
     , fIndex(index)
@@ -39,8 +37,7 @@
     , fOriginUpperLeft(originUpperLeft)
     , fOverrideCoverage(overrideCoverage)
     , fBlendSupportAllEquations(blendSupportAllEquations)
-    , fPushConstant(pushconstant)
-    , fFormat(format) {}
+    , fPushConstant(pushconstant) {}
 
     Layout() 
     : fLocation(-1)
@@ -51,8 +48,7 @@
     , fOriginUpperLeft(false)
     , fOverrideCoverage(false)
     , fBlendSupportAllEquations(false)
-    , fPushConstant(false)
-    , fFormat(ASTLayout::Format::kUnspecified) {}
+    , fPushConstant(false) {}
 
     std::string description() const {
         std::string result;
@@ -93,10 +89,6 @@
             result += separator + "push_constant";
             separator = ", ";
         }
-        if (ASTLayout::Format::kUnspecified != fFormat) {
-            result += separator + ASTLayout::FormatToStr(fFormat);
-            separator = ", ";
-        }
         if (result.length() > 0) {
             result = "layout (" + result + ")";
         }
@@ -111,8 +103,7 @@
                fBuiltin                  == other.fBuiltin &&
                fOriginUpperLeft          == other.fOriginUpperLeft &&
                fOverrideCoverage         == other.fOverrideCoverage &&
-               fBlendSupportAllEquations == other.fBlendSupportAllEquations &&
-               fFormat                   == other.fFormat;
+               fBlendSupportAllEquations == other.fBlendSupportAllEquations;
     }
 
     bool operator!=(const Layout& other) const {
@@ -129,7 +120,6 @@
     bool fOverrideCoverage;
     bool fBlendSupportAllEquations;
     bool fPushConstant;
-    ASTLayout::Format fFormat;
 };
 
 } // namespace
diff --git a/src/sksl/sksl.include b/src/sksl/sksl.include
index 83c6aed..6458a15 100644
--- a/src/sksl/sksl.include
+++ b/src/sksl/sksl.include
@@ -537,10 +537,8 @@
 uint atomicCompSwap(inout uint mem, uint compare, uint data);
 int atomicCompSwap(inout int mem, int compare, int data);
 */
-// section 8.12 Additional Image Functions will go here if and when we add
-// support for them
-vec4 imageLoad(image2D image, ivec2 P);
-ivec4 imageLoad(iimage2D image, ivec2 P);
+// section 8.12 Image Functions will go here if and when we add support for them
+
 $genType dFdx($genType p);
 $genType dFdy($genType p);
 float interpolateAtSample(float interpolant, int sample);
