Dawn: Break dependency on ANGLE

Fixed: dawn:1715
Change-Id: I6d7965a9a73c42a2aca59b03379aa68aea1695c8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/124460
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
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"