diff --git a/include/gpu/gl/GrGLInterface.h b/include/gpu/gl/GrGLInterface.h
index 014e51f..7732c03 100644
--- a/include/gpu/gl/GrGLInterface.h
+++ b/include/gpu/gl/GrGLInterface.h
@@ -325,10 +325,6 @@
 
         /* EXT_window_rectangles */
         GrGLFunction<GrGLWindowRectanglesFn> fWindowRectangles;
-
-        /* EGL functions */
-        GrGLFunction<GrEGLCreateImageFn> fEGLCreateImage;
-        GrGLFunction<GrEGLDestroyImageFn> fEGLDestroyImage;
     } fFunctions;
 
 #if GR_TEST_UTILS
diff --git a/src/gpu/gl/GrGLAssembleGLESInterfaceAutogen.cpp b/src/gpu/gl/GrGLAssembleGLESInterfaceAutogen.cpp
index 73aacc1..41411dc 100644
--- a/src/gpu/gl/GrGLAssembleGLESInterfaceAutogen.cpp
+++ b/src/gpu/gl/GrGLAssembleGLESInterfaceAutogen.cpp
@@ -416,14 +416,6 @@
         GET_PROC_SUFFIX(WindowRectangles, EXT);
     }
 
-    if (extensions.has("EGL_KHR_image")) {
-        GET_EGL_PROC_SUFFIX(CreateImage, KHR);
-        GET_EGL_PROC_SUFFIX(DestroyImage, KHR);
-    } else if (extensions.has("EGL_KHR_image_base")) {
-        GET_EGL_PROC_SUFFIX(CreateImage, KHR);
-        GET_EGL_PROC_SUFFIX(DestroyImage, KHR);
-    }
-
     if (glVer >= GR_GL_VER(3,0)) {
         GET_PROC(ClientWaitSync);
         GET_PROC(DeleteSync);
diff --git a/src/gpu/gl/GrGLAssembleGLInterfaceAutogen.cpp b/src/gpu/gl/GrGLAssembleGLInterfaceAutogen.cpp
index b39d9d9..f47b3b0 100644
--- a/src/gpu/gl/GrGLAssembleGLInterfaceAutogen.cpp
+++ b/src/gpu/gl/GrGLAssembleGLInterfaceAutogen.cpp
@@ -394,14 +394,6 @@
         GET_PROC_SUFFIX(WindowRectangles, EXT);
     }
 
-    if (extensions.has("EGL_KHR_image")) {
-        GET_EGL_PROC_SUFFIX(CreateImage, KHR);
-        GET_EGL_PROC_SUFFIX(DestroyImage, KHR);
-    } else if (extensions.has("EGL_KHR_image_base")) {
-        GET_EGL_PROC_SUFFIX(CreateImage, KHR);
-        GET_EGL_PROC_SUFFIX(DestroyImage, KHR);
-    }
-
     if (glVer >= GR_GL_VER(3,2)) {
         GET_PROC(ClientWaitSync);
         GET_PROC(DeleteSync);
diff --git a/src/gpu/gl/GrGLInterfaceAutogen.cpp b/src/gpu/gl/GrGLInterfaceAutogen.cpp
index c2c8a5e..f9ec236 100644
--- a/src/gpu/gl/GrGLInterfaceAutogen.cpp
+++ b/src/gpu/gl/GrGLInterfaceAutogen.cpp
@@ -581,18 +581,6 @@
     }
 
     if ((GR_IS_GR_GL(fStandard) && (
-          fExtensions.has("EGL_KHR_image") ||
-          fExtensions.has("EGL_KHR_image_base"))) ||
-       (GR_IS_GR_GL_ES(fStandard) && (
-          fExtensions.has("EGL_KHR_image") ||
-          fExtensions.has("EGL_KHR_image_base")))) {
-        if (!fFunctions.fEGLCreateImage ||
-            !fFunctions.fEGLDestroyImage) {
-            RETURN_FALSE_INTERFACE;
-        }
-    }
-
-    if ((GR_IS_GR_GL(fStandard) && (
           (glVer >= GR_GL_VER(3,2)) ||
           fExtensions.has("GL_ARB_sync"))) ||
        (GR_IS_GR_GL_ES(fStandard) && (
diff --git a/tools/gpu/gl/angle/GLTestContext_angle.cpp b/tools/gpu/gl/angle/GLTestContext_angle.cpp
index d553b49..3d58809 100644
--- a/tools/gpu/gl/angle/GLTestContext_angle.cpp
+++ b/tools/gpu/gl/angle/GLTestContext_angle.cpp
@@ -296,21 +296,15 @@
     if (!this->gl()->hasExtension("EGL_KHR_gl_texture_2D_image")) {
         return GR_EGL_NO_IMAGE;
     }
-    GrEGLImage img;
-    GrEGLint attribs[] = { GR_EGL_GL_TEXTURE_LEVEL, 0,
-                           GR_EGL_IMAGE_PRESERVED, GR_EGL_TRUE,
-                           GR_EGL_NONE };
+    EGLAttrib attribs[] = { GR_EGL_GL_TEXTURE_LEVEL, 0,
+                            GR_EGL_IMAGE_PRESERVED, GR_EGL_TRUE,
+                            GR_EGL_NONE };
     // 64 bit cast is to shut Visual C++ up about casting 32 bit value to a pointer.
     GrEGLClientBuffer clientBuffer = reinterpret_cast<GrEGLClientBuffer>((uint64_t)texID);
-    GR_GL_CALL_RET(this->gl(), img,
-                   EGLCreateImage(fDisplay, fContext, GR_EGL_GL_TEXTURE_2D, clientBuffer,
-                                  attribs));
-    return img;
+    return eglCreateImage(fDisplay, fContext, GR_EGL_GL_TEXTURE_2D, clientBuffer, attribs);
 }
 
-void ANGLEGLContext::destroyEGLImage(GrEGLImage image) const {
-    GR_GL_CALL(this->gl(), EGLDestroyImage(fDisplay, image));
-}
+void ANGLEGLContext::destroyEGLImage(GrEGLImage image) const { eglDestroyImage(fDisplay, image); }
 
 GrGLuint ANGLEGLContext::eglImageToExternalTexture(GrEGLImage image) const {
     GrGLClearErr(this->gl());
diff --git a/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp b/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp
index aefcc35..4abc20b 100644
--- a/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp
+++ b/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp
@@ -8,6 +8,8 @@
 #include "tools/gpu/gl/GLTestContext.h"
 
 #define GL_GLEXT_PROTOTYPES
+#define EGL_EGLEXT_PROTOTYPES
+
 #include <GLES2/gl2.h>
 
 #include <EGL/egl.h>
@@ -243,16 +245,13 @@
     if (!this->gl()->hasExtension("EGL_KHR_gl_texture_2D_image")) {
         return GR_EGL_NO_IMAGE;
     }
-    GrEGLImage img;
-    GrEGLint attribs[] = { GR_EGL_GL_TEXTURE_LEVEL, 0, GR_EGL_NONE };
+    EGLint attribs[] = { GR_EGL_GL_TEXTURE_LEVEL, 0, GR_EGL_NONE };
     GrEGLClientBuffer clientBuffer = reinterpret_cast<GrEGLClientBuffer>(texID);
-    GR_GL_CALL_RET(this->gl(), img,
-                   EGLCreateImage(fDisplay, fContext, GR_EGL_GL_TEXTURE_2D, clientBuffer, attribs));
-    return img;
+    return eglCreateImageKHR(fDisplay, fContext, GR_EGL_GL_TEXTURE_2D, clientBuffer, attribs);
 }
 
 void EGLGLTestContext::destroyEGLImage(GrEGLImage image) const {
-    GR_GL_CALL(this->gl(), EGLDestroyImage(fDisplay, image));
+    eglDestroyImageKHR(fDisplay, image);
 }
 
 GrGLuint EGLGLTestContext::eglImageToExternalTexture(GrEGLImage image) const {
diff --git a/tools/gpu/gl/interface/gen_interface.go b/tools/gpu/gl/interface/gen_interface.go
index 17b8e02..6eb94a5 100644
--- a/tools/gpu/gl/interface/gen_interface.go
+++ b/tools/gpu/gl/interface/gen_interface.go
@@ -54,7 +54,6 @@
 	TestOnlyFunctions []string `json:"test_functions"`
 
 	Required bool `json:"required"`
-	EGLProc  bool `json:"egl_proc"`
 }
 
 // Requirement lists how we know if a function exists. Extension is the
@@ -126,7 +125,6 @@
 		if len(reqs) == 0 {
 			continue
 		}
-		isEGL := feature.EGLProc
 		// blocks holds all the if blocks generated - it will be joined with else
 		// after and appended to content
 		blocks := []string{}
@@ -150,13 +148,13 @@
 			// sort for determinism
 			sort.Strings(feature.Functions)
 			for _, function := range feature.Functions {
-				block = assembleFunction(block, ifExpr, function, isEGL, req)
+				block = assembleFunction(block, ifExpr, function, req)
 			}
 			sort.Strings(feature.TestOnlyFunctions)
 			if len(feature.TestOnlyFunctions) > 0 {
 				block += "#if GR_TEST_UTILS\n"
 				for _, function := range feature.TestOnlyFunctions {
-					block = assembleFunction(block, ifExpr, function, isEGL, req)
+					block = assembleFunction(block, ifExpr, function, req)
 				}
 				block += "#endif\n"
 			}
@@ -198,7 +196,7 @@
 // assembleFunction is a little helper that will add a function to the interface
 // using an appropriate macro (e.g. if the function is added)
 // with an extension.
-func assembleFunction(block, ifExpr, function string, isEGL bool, req Requirement) string {
+func assembleFunction(block, ifExpr, function string, req Requirement) string {
 	if ifExpr != "" {
 		// extra tab for being in an if statement
 		block += SPACER
@@ -213,9 +211,7 @@
 	if req.SuffixOverride != nil {
 		suffix = *req.SuffixOverride
 	}
-	if isEGL {
-		block = addLine(block, fmt.Sprintf("GET_EGL_PROC_SUFFIX(%s, %s);", function, suffix))
-	} else if req.Extension == CORE_FEATURE || suffix == "" {
+	if req.Extension == CORE_FEATURE || suffix == "" {
 		block = addLine(block, fmt.Sprintf("GET_PROC(%s);", function))
 	} else if req.Extension != "" {
 		block = addLine(block, fmt.Sprintf("GET_PROC_SUFFIX(%s, %s);", function, suffix))
@@ -255,10 +251,9 @@
 // driveSuffix returns the suffix of the function associated with the given
 // extension.
 func deriveSuffix(ext string) string {
-	// Some extensions begin with GL_ or EGL_ and then have the actual
+	// Some extensions begin with GL_ and then have the actual
 	// extension like KHR, EXT etc.
 	ext = strings.TrimPrefix(ext, "GL_")
-	ext = strings.TrimPrefix(ext, "EGL_")
 	return strings.Split(ext, "_")[0]
 }
 
@@ -359,22 +354,14 @@
 		if in(function, feature.OptionalFunctions) {
 			continue
 		}
-		if feature.EGLProc {
-			checks = append(checks, "!fFunctions.fEGL"+function)
-		} else {
-			checks = append(checks, "!fFunctions.f"+function)
-		}
+		checks = append(checks, "!fFunctions.f"+function)
 	}
 	testOnly := []string{}
 	for _, function := range feature.TestOnlyFunctions {
 		if in(function, feature.OptionalFunctions) {
 			continue
 		}
-		if feature.EGLProc {
-			testOnly = append(testOnly, "!fFunctions.fEGL"+function)
-		} else {
-			testOnly = append(testOnly, "!fFunctions.f"+function)
-		}
+		testOnly = append(testOnly, "!fFunctions.f"+function)
 	}
 	for _, hcf := range feature.HardCodeFunctions {
 		checks = append(checks, "!fFunctions."+hcf.PtrName)
diff --git a/tools/gpu/gl/interface/interface.json5 b/tools/gpu/gl/interface/interface.json5
index 731712e..410ae34 100644
--- a/tools/gpu/gl/interface/interface.json5
+++ b/tools/gpu/gl/interface/interface.json5
@@ -540,19 +540,6 @@
   },
 
   {
-    "GL":    [{"ext": "EGL_KHR_image"},
-              {"ext": "EGL_KHR_image_base"}],
-    "GLES":  [{"ext": "EGL_KHR_image"},
-              {"ext": "EGL_KHR_image_base"}],
-    "WebGL": null,
-
-    "functions": [
-      "CreateImage", "DestroyImage",
-    ],
-    "egl_proc": true
-  },
-
-  {
     "GL":    [{"min_version": [3, 2], "ext": "<core>"},
               {/*    else if      */  "ext": "GL_ARB_sync"}],
     "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
