diff --git a/generator/opengl_loader_generator.py b/generator/opengl_loader_generator.py index ba2d47c524..db253e222d 100644 --- a/generator/opengl_loader_generator.py +++ b/generator/opengl_loader_generator.py @@ -240,10 +240,6 @@ class OpenGLLoaderGenerator(Generator): 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 @@ class OpenGLLoaderGenerator(Generator): 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 @@ class OpenGLLoaderGenerator(Generator): 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 4899c1558e..b93cacd218 100644 --- a/generator/templates/opengl/OpenGLFunctionsBase.cpp +++ b/generator/templates/opengl/OpenGLFunctionsBase.cpp @@ -47,6 +47,15 @@ MaybeError OpenGLFunctionsBase::LoadOpenGLESProcs(GetProcAddress getProc, int ma } {% 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 2150a71437..80d7beb105 100644 --- a/generator/templates/opengl/OpenGLFunctionsBase.h +++ b/generator/templates/opengl/OpenGLFunctionsBase.h @@ -32,6 +32,14 @@ namespace dawn::native::opengl { {% 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 c2063b7623..0257719981 100644 --- a/generator/templates/opengl/opengl_platform.h +++ b/generator/templates/opengl/opengl_platform.h @@ -70,4 +70,12 @@ using GLDEBUGPROCAMD = void(KHRONOS_APIENTRY*)(GLuint id, {% 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 f2f2bbcb21..49876a95f3 100644 --- a/src/dawn/native/BUILD.gn +++ b/src/dawn/native/BUILD.gn @@ -112,8 +112,6 @@ if (dawn_enable_opengl) { 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 c255cd1d3c..3a2e2fac8f 100644 --- a/src/dawn/native/CMakeLists.txt +++ b/src/dawn/native/CMakeLists.txt @@ -427,8 +427,6 @@ if (DAWN_ENABLE_OPENGL) 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"