diff --git a/generator/opengl_loader_generator.py b/generator/opengl_loader_generator.py
index ba2d47c..db253e2 100644
--- a/generator/opengl_loader_generator.py
+++ b/generator/opengl_loader_generator.py
@@ -240,10 +240,6 @@
                             required=True,
                             type=str,
                             help='The Khronos gl.xml to use.')
-        parser.add_argument('--gl-angle-ext-xml',
-                            required=True,
-                            type=str,
-                            help='The ANGLE gl_angle_ext.xml to use.')
         parser.add_argument(
             '--supported-extensions',
             required=True,
@@ -254,24 +250,14 @@
 
     def get_file_renders(self, args):
         supported_extensions = []
-        supported_angle_extensions = []
         with open(args.supported_extensions) as f:
             supported_extensions_json = json.loads(f.read())
             supported_extensions = supported_extensions_json[
                 'supported_extensions']
-            supported_angle_extensions = supported_extensions_json[
-                'supported_angle_extensions']
 
         params = compute_params(
             etree.parse(args.gl_xml).getroot(), supported_extensions)
 
-        angle_params = compute_params(
-            etree.parse(args.gl_angle_ext_xml).getroot(),
-            supported_angle_extensions)
-
-        for key, value in params.items():
-            params[key] += angle_params[key]
-
         return [
             FileRender(
                 'opengl/OpenGLFunctionsBase.cpp',
@@ -288,7 +274,6 @@
     def get_dependencies(self, args):
         return [
             os.path.abspath(args.gl_xml),
-            os.path.abspath(args.gl_angle_ext_xml),
             os.path.abspath(args.supported_extensions)
         ]
 
diff --git a/generator/templates/opengl/OpenGLFunctionsBase.cpp b/generator/templates/opengl/OpenGLFunctionsBase.cpp
index 4899c15..b93cacd 100644
--- a/generator/templates/opengl/OpenGLFunctionsBase.cpp
+++ b/generator/templates/opengl/OpenGLFunctionsBase.cpp
@@ -47,6 +47,15 @@
         }
     {% endfor %}
 
+    // GL_ANGLE_base_vertex_base_instance
+    // See crbug.com/dawn/1715 for why this is embedded
+    if (IsGLExtensionSupported("GL_ANGLE_base_vertex_base_instance")) {
+        DAWN_TRY(LoadProc(getProc, &DrawArraysInstancedBaseInstanceANGLE, "glDrawArraysInstancedBaseInstanceANGLE"));
+        DAWN_TRY(LoadProc(getProc, &DrawElementsInstancedBaseVertexBaseInstanceANGLE, "glDrawElementsInstancedBaseVertexBaseInstanceANGLE"));
+        DAWN_TRY(LoadProc(getProc, &MultiDrawArraysInstancedBaseInstanceANGLE, "glMultiDrawArraysInstancedBaseInstanceANGLE"));
+        DAWN_TRY(LoadProc(getProc, &MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE, "glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE"));
+    }
+
     return {};
 }
 
diff --git a/generator/templates/opengl/OpenGLFunctionsBase.h b/generator/templates/opengl/OpenGLFunctionsBase.h
index 2150a71..80d7beb 100644
--- a/generator/templates/opengl/OpenGLFunctionsBase.h
+++ b/generator/templates/opengl/OpenGLFunctionsBase.h
@@ -32,6 +32,14 @@
             {% endfor %}
 
         {% endfor%}
+
+        // GL_ANGLE_base_vertex_base_instance
+        // See crbug.com/dawn/1715 for why this is embedded
+        PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEANGLEPROC DrawArraysInstancedBaseInstanceANGLE = nullptr;
+        PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEANGLEPROC DrawElementsInstancedBaseVertexBaseInstanceANGLE = nullptr;
+        PFNGLMULTIDRAWARRAYSINSTANCEDBASEINSTANCEANGLEPROC MultiDrawArraysInstancedBaseInstanceANGLE = nullptr;
+        PFNGLMULTIDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEANGLEPROC MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE = nullptr;
+
         bool IsGLExtensionSupported(const char* extension) const;
 
       protected:
diff --git a/generator/templates/opengl/opengl_platform.h b/generator/templates/opengl/opengl_platform.h
index c2063b7..0257719 100644
--- a/generator/templates/opengl/opengl_platform.h
+++ b/generator/templates/opengl/opengl_platform.h
@@ -70,4 +70,12 @@
     {% endfor %}
 
 {% endfor%}
+
+// GL_ANGLE_base_vertex_base_instance
+// See crbug.com/dawn/1715 for why this is embedded
+using PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEANGLEPROC = void(KHRONOS_APIENTRY *)(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount, GLuint baseInstance);
+using PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEANGLEPROC = void(KHRONOS_APIENTRY *)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei instanceCount, GLint baseVertex, GLuint baseInstance);
+using PFNGLMULTIDRAWARRAYSINSTANCEDBASEINSTANCEANGLEPROC = void(KHRONOS_APIENTRY *)(GLenum mode, const GLint * firsts, const GLsizei * counts, const GLsizei * instanceCounts, const GLuint * baseInstances, GLsizei drawcount);
+using PFNGLMULTIDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEANGLEPROC = void(KHRONOS_APIENTRY *)(GLenum mode, const GLsizei * counts, GLenum type, const GLvoid *const* indices, const GLsizei * instanceCounts, const GLint * baseVertices, const GLuint * baseInstances, GLsizei drawcount);
+
 #undef DAWN_GL_APIENTRY
diff --git a/src/dawn/native/BUILD.gn b/src/dawn/native/BUILD.gn
index f2f2bbc..49876a9 100644
--- a/src/dawn/native/BUILD.gn
+++ b/src/dawn/native/BUILD.gn
@@ -112,8 +112,6 @@
     args = [
       "--gl-xml",
       rebase_path("${dawn_root}/third_party/khronos/gl.xml", root_build_dir),
-      "--gl-angle-ext-xml",
-      rebase_path("${dawn_angle_dir}/scripts/gl_angle_ext.xml", root_build_dir),
       "--supported-extensions",
       rebase_path("opengl/supported_extensions.json", root_build_dir),
     ]
diff --git a/src/dawn/native/CMakeLists.txt b/src/dawn/native/CMakeLists.txt
index c255cd1..3a2e2fa 100644
--- a/src/dawn/native/CMakeLists.txt
+++ b/src/dawn/native/CMakeLists.txt
@@ -427,8 +427,6 @@
         PRINT_NAME "OpenGL function loader"
         ARGS "--gl-xml"
              "${Dawn_SOURCE_DIR}/third_party/khronos/gl.xml"
-             "--gl-angle-ext-xml"
-             "${Dawn_SOURCE_DIR}/third_party/angle/scripts/gl_angle_ext.xml"
              "--supported-extensions"
              "${Dawn_SOURCE_DIR}/src/dawn/native/opengl/supported_extensions.json"
         RESULT_VARIABLE "DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES"
