[Mesa-dev] [PATCH] mesa/tests: Delete the dispatch sanity test.

Ian Romanick idr at freedesktop.org
Fri Sep 20 14:30:34 PDT 2013


The problem that we always encountered is that functions weren't
properly put in the dispatch table.  Someone would add an extension with
five functions, and they'd only set the dispatch pointers for four of
them.  Autogenerating api_exec eliminates a lot of the potential for error.

Part of the reason we kept this after Paul's work to generate api_exec
was so that we could detect bugs when someone modifies the generator
script.  How do you propose we do that without a test?

The other part of the reason we kept this test is so that we could be
sure we didn't miss any functions when moving to a new GL version.  This
caught several bugs (that piglit and the conformance suite missed!)
while we were working on ES3.

Right now, frankly, the test is almost garbage.  The way functions are
versioned is awful.  The lack of knowledge about extensions is awful.
Every function that exists being listed but possibly commented out is awful.

And while I'm being frank... why the fuck isn't everyone's build 'make
&& make check'???  It requires epsilon extra time compared to a piglit
run.  Or is the next patch to just remove piglit too?

On 09/20/2013 02:34 PM, Kenneth Graunke wrote:
> Every time someone adds a new piece of functionality to Mesa, this test
> has to be manually updated for the new entry points.  This is a hassle,
> and no one ever remembers to do it.
> 
> I don't think there has ever been a single instance where this test has
> caught a bug - every failure has been due to the test being out of date.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/main/tests/Makefile.am         |    3 -
>  src/mesa/main/tests/dispatch_sanity.cpp | 1403 -------------------------------
>  2 files changed, 1406 deletions(-)
>  delete mode 100644 src/mesa/main/tests/dispatch_sanity.cpp
> 
> And this is how you fix 'make check'.
> 
> diff --git a/src/mesa/main/tests/Makefile.am b/src/mesa/main/tests/Makefile.am
> index 87262d5..a0fe3cf 100644
> --- a/src/mesa/main/tests/Makefile.am
> +++ b/src/mesa/main/tests/Makefile.am
> @@ -25,9 +25,6 @@ main_test_LDADD = \
>  if HAVE_SHARED_GLAPI
>  AM_CPPFLAGS += -DHAVE_SHARED_GLAPI
>  
> -main_test_SOURCES +=			\
> -	dispatch_sanity.cpp
> -
>  main_test_LDADD += \
>  	$(top_builddir)/src/mapi/shared-glapi/libglapi.la
>  else
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> deleted file mode 100644
> index bea6e96..0000000
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ /dev/null
> @@ -1,1403 +0,0 @@
> -/*
> - * Copyright © 2012 Intel Corporation
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the next
> - * paragraph) shall be included in all copies or substantial portions of the
> - * Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE.
> - */
> -
> -/**
> - * \name dispatch_sanity.cpp
> - *
> - * Verify that only set of functions that should be available in a particular
> - * API are available in that API.
> - *
> - * The list of expected functions originally came from the functions set by
> - * api_exec_es2.c.  This file no longer exists in Mesa (but api_exec_es1.c was
> - * still generated at the time this test was written).  It was the generated
> - * file that configured the dispatch table for ES2 contexts.  This test
> - * verifies that all of the functions set by the old api_exec_es2.c (with the
> - * recent addition of VAO functions) are set in the dispatch table and
> - * everything else is a NOP.
> - *
> - * When adding extensions that add new functions, this test will need to be
> - * modified to expect dispatch functions for the new extension functions.
> - */
> -
> -#include <gtest/gtest.h>
> -
> -extern "C" {
> -#include "GL/gl.h"
> -#include "GL/glext.h"
> -#include "main/compiler.h"
> -#include "main/api_exec.h"
> -#include "main/context.h"
> -#include "main/remap.h"
> -#include "main/vtxfmt.h"
> -#include "glapi/glapi.h"
> -#include "drivers/common/driverfuncs.h"
> -
> -#include "swrast/swrast.h"
> -#include "vbo/vbo.h"
> -#include "tnl/tnl.h"
> -#include "swrast_setup/swrast_setup.h"
> -
> -#ifndef GLAPIENTRYP
> -#define GLAPIENTRYP GL_APIENTRYP
> -#endif
> -
> -#include "main/dispatch.h"
> -}
> -
> -struct function {
> -   const char *name;
> -   unsigned int Version;
> -   int offset;
> -};
> -
> -extern const struct function gl_core_functions_possible[];
> -extern const struct function gles11_functions_possible[];
> -extern const struct function gles2_functions_possible[];
> -extern const struct function gles3_functions_possible[];
> -
> -class DispatchSanity_test : public ::testing::Test {
> -public:
> -   virtual void SetUp();
> -   void SetUpCtx(gl_api api, unsigned int version);
> -
> -   struct gl_config visual;
> -   struct dd_function_table driver_functions;
> -   struct gl_context share_list;
> -   struct gl_context ctx;
> -};
> -
> -void
> -DispatchSanity_test::SetUp()
> -{
> -   memset(&visual, 0, sizeof(visual));
> -   memset(&driver_functions, 0, sizeof(driver_functions));
> -   memset(&share_list, 0, sizeof(share_list));
> -   memset(&ctx, 0, sizeof(ctx));
> -
> -   _mesa_init_driver_functions(&driver_functions);
> -}
> -
> -void
> -DispatchSanity_test::SetUpCtx(gl_api api, unsigned int version)
> -{
> -   _mesa_initialize_context(&ctx,
> -                            api,
> -                            &visual,
> -                            NULL, // share_list
> -                            &driver_functions);
> -   _vbo_CreateContext(&ctx);
> -
> -   ctx.Version = version;
> -
> -   _mesa_initialize_dispatch_tables(&ctx);
> -   _mesa_initialize_vbo_vtxfmt(&ctx);
> -}
> -
> -static const char *
> -offset_to_proc_name_safe(unsigned offset)
> -{
> -   const char *name = _glapi_get_proc_name(offset);
> -   return name ? name : "???";
> -}
> -
> -/* Scan through the dispatch table and check that all the functions in
> - * _glapi_proc *table exist. When found, set their pointers in the table
> - * to _mesa_generic_nop.  */
> -static void
> -validate_functions(struct gl_context *ctx, const struct function *function_table)
> -{
> -   _glapi_proc *table = (_glapi_proc *) ctx->Exec;
> -
> -   for (unsigned i = 0; function_table[i].name != NULL; i++) {
> -      /* The context version is >= the GL version where the
> -         function was introduced. Therefore, the function cannot
> -         be set to the nop function.
> -       */
> -      bool cant_be_nop = ctx->Version >= function_table[i].Version;
> -
> -      const int offset = (function_table[i].offset != -1)
> -         ? function_table[i].offset
> -         : _glapi_get_proc_offset(function_table[i].name);
> -
> -      ASSERT_NE(-1, offset)
> -         << "Function: " << function_table[i].name;
> -      ASSERT_EQ(offset,
> -                _glapi_get_proc_offset(function_table[i].name))
> -         << "Function: " << function_table[i].name;
> -      if (cant_be_nop) {
> -         EXPECT_NE((_glapi_proc) _mesa_generic_nop, table[offset])
> -            << "Function: " << function_table[i].name
> -            << " at offset " << offset;
> -      }
> -
> -      table[offset] = (_glapi_proc) _mesa_generic_nop;
> -   }
> -}
> -
> -/* Scan through the table and ensure that there is nothing except
> - * _mesa_generic_nop (as set by validate_functions().  */
> -static void
> -validate_nops(struct gl_context *ctx)
> -{
> -   _glapi_proc *table = (_glapi_proc *) ctx->Exec;
> -
> -   const unsigned size = _glapi_get_dispatch_table_size();
> -   for (unsigned i = 0; i < size; i++) {
> -      EXPECT_EQ((_glapi_proc) _mesa_generic_nop, table[i])
> -         << "i = " << i << " (" << offset_to_proc_name_safe(i) << ")";
> -   }
> -}
> -
> -TEST_F(DispatchSanity_test, GL31_CORE)
> -{
> -   SetUpCtx(API_OPENGL_CORE, 31);
> -   validate_functions(&ctx, gl_core_functions_possible);
> -   validate_nops(&ctx);
> -}
> -
> -TEST_F(DispatchSanity_test, GLES11)
> -{
> -   SetUpCtx(API_OPENGLES, 11);
> -   validate_functions(&ctx, gles11_functions_possible);
> -   validate_nops(&ctx);
> -}
> -
> -TEST_F(DispatchSanity_test, GLES2)
> -{
> -   SetUpCtx(API_OPENGLES2, 20);
> -   validate_functions(&ctx, gles2_functions_possible);
> -   validate_nops(&ctx);
> -}
> -
> -TEST_F(DispatchSanity_test, GLES3)
> -{
> -   SetUpCtx(API_OPENGLES2, 30);
> -   validate_functions(&ctx, gles2_functions_possible);
> -   validate_functions(&ctx, gles3_functions_possible);
> -   validate_nops(&ctx);
> -}
> -
> -const struct function gl_core_functions_possible[] = {
> -   { "glCullFace", 10, -1 },
> -   { "glFrontFace", 10, -1 },
> -   { "glHint", 10, -1 },
> -   { "glLineWidth", 10, -1 },
> -   { "glPointSize", 10, -1 },
> -   { "glPolygonMode", 10, -1 },
> -   { "glScissor", 10, -1 },
> -   { "glTexParameterf", 10, -1 },
> -   { "glTexParameterfv", 10, -1 },
> -   { "glTexParameteri", 10, -1 },
> -   { "glTexParameteriv", 10, -1 },
> -   { "glTexImage1D", 10, -1 },
> -   { "glTexImage2D", 10, -1 },
> -   { "glDrawBuffer", 10, -1 },
> -   { "glClear", 10, -1 },
> -   { "glClearColor", 10, -1 },
> -   { "glClearStencil", 10, -1 },
> -   { "glClearDepth", 10, -1 },
> -   { "glStencilMask", 10, -1 },
> -   { "glColorMask", 10, -1 },
> -   { "glDepthMask", 10, -1 },
> -   { "glDisable", 10, -1 },
> -   { "glEnable", 10, -1 },
> -   { "glFinish", 10, -1 },
> -   { "glFlush", 10, -1 },
> -   { "glBlendFunc", 10, -1 },
> -   { "glLogicOp", 10, -1 },
> -   { "glStencilFunc", 10, -1 },
> -   { "glStencilOp", 10, -1 },
> -   { "glDepthFunc", 10, -1 },
> -   { "glPixelStoref", 10, -1 },
> -   { "glPixelStorei", 10, -1 },
> -   { "glReadBuffer", 10, -1 },
> -   { "glReadPixels", 10, -1 },
> -   { "glGetBooleanv", 10, -1 },
> -   { "glGetDoublev", 10, -1 },
> -   { "glGetError", 10, -1 },
> -   { "glGetFloatv", 10, -1 },
> -   { "glGetIntegerv", 10, -1 },
> -   { "glGetString", 10, -1 },
> -   { "glGetTexImage", 10, -1 },
> -   { "glGetTexParameterfv", 10, -1 },
> -   { "glGetTexParameteriv", 10, -1 },
> -   { "glGetTexLevelParameterfv", 10, -1 },
> -   { "glGetTexLevelParameteriv", 10, -1 },
> -   { "glIsEnabled", 10, -1 },
> -   { "glDepthRange", 10, -1 },
> -   { "glViewport", 10, -1 },
> -
> -   /* GL 1.1 */
> -   { "glDrawArrays", 11, -1 },
> -   { "glDrawElements", 11, -1 },
> -   { "glGetPointerv", 11, -1 },
> -   { "glPolygonOffset", 11, -1 },
> -   { "glCopyTexImage1D", 11, -1 },
> -   { "glCopyTexImage2D", 11, -1 },
> -   { "glCopyTexSubImage1D", 11, -1 },
> -   { "glCopyTexSubImage2D", 11, -1 },
> -   { "glTexSubImage1D", 11, -1 },
> -   { "glTexSubImage2D", 11, -1 },
> -   { "glBindTexture", 11, -1 },
> -   { "glDeleteTextures", 11, -1 },
> -   { "glGenTextures", 11, -1 },
> -   { "glIsTexture", 11, -1 },
> -
> -   /* GL 1.2 */
> -   { "glBlendColor", 12, -1 },
> -   { "glBlendEquation", 12, -1 },
> -   { "glDrawRangeElements", 12, -1 },
> -   { "glTexImage3D", 12, -1 },
> -   { "glTexSubImage3D", 12, -1 },
> -   { "glCopyTexSubImage3D", 12, -1 },
> -
> -   /* GL 1.3 */
> -   { "glActiveTexture", 13, -1 },
> -   { "glSampleCoverage", 13, -1 },
> -   { "glCompressedTexImage3D", 13, -1 },
> -   { "glCompressedTexImage2D", 13, -1 },
> -   { "glCompressedTexImage1D", 13, -1 },
> -   { "glCompressedTexSubImage3D", 13, -1 },
> -   { "glCompressedTexSubImage2D", 13, -1 },
> -   { "glCompressedTexSubImage1D", 13, -1 },
> -   { "glGetCompressedTexImage", 13, -1 },
> -
> -   /* GL 1.4 */
> -   { "glBlendFuncSeparate", 14, -1 },
> -   { "glMultiDrawArrays", 14, -1 },
> -   { "glMultiDrawElements", 14, -1 },
> -   { "glPointParameterf", 14, -1 },
> -   { "glPointParameterfv", 14, -1 },
> -   { "glPointParameteri", 14, -1 },
> -   { "glPointParameteriv", 14, -1 },
> -
> -   /* GL 1.5 */
> -   { "glGenQueries", 15, -1 },
> -   { "glDeleteQueries", 15, -1 },
> -   { "glIsQuery", 15, -1 },
> -   { "glBeginQuery", 15, -1 },
> -   { "glEndQuery", 15, -1 },
> -   { "glGetQueryiv", 15, -1 },
> -   { "glGetQueryObjectiv", 15, -1 },
> -   { "glGetQueryObjectuiv", 15, -1 },
> -   { "glBindBuffer", 15, -1 },
> -   { "glDeleteBuffers", 15, -1 },
> -   { "glGenBuffers", 15, -1 },
> -   { "glIsBuffer", 15, -1 },
> -   { "glBufferData", 15, -1 },
> -   { "glBufferSubData", 15, -1 },
> -   { "glGetBufferSubData", 15, -1 },
> -   { "glMapBuffer", 15, -1 },
> -   { "glUnmapBuffer", 15, -1 },
> -   { "glGetBufferParameteriv", 15, -1 },
> -   { "glGetBufferPointerv", 15, -1 },
> -
> -   /* GL 2.0 */
> -   { "glBlendEquationSeparate", 20, -1 },
> -   { "glDrawBuffers", 20, -1 },
> -   { "glStencilOpSeparate", 20, -1 },
> -   { "glStencilFuncSeparate", 20, -1 },
> -   { "glStencilMaskSeparate", 20, -1 },
> -   { "glAttachShader", 20, -1 },
> -   { "glBindAttribLocation", 20, -1 },
> -   { "glCompileShader", 20, -1 },
> -   { "glCreateProgram", 20, -1 },
> -   { "glCreateShader", 20, -1 },
> -   { "glDeleteProgram", 20, -1 },
> -   { "glDeleteShader", 20, -1 },
> -   { "glDetachShader", 20, -1 },
> -   { "glDisableVertexAttribArray", 20, -1 },
> -   { "glEnableVertexAttribArray", 20, -1 },
> -   { "glGetActiveAttrib", 20, -1 },
> -   { "glGetActiveUniform", 20, -1 },
> -   { "glGetAttachedShaders", 20, -1 },
> -   { "glGetAttribLocation", 20, -1 },
> -   { "glGetProgramiv", 20, -1 },
> -   { "glGetProgramInfoLog", 20, -1 },
> -   { "glGetShaderiv", 20, -1 },
> -   { "glGetShaderInfoLog", 20, -1 },
> -   { "glGetShaderSource", 20, -1 },
> -   { "glGetUniformLocation", 20, -1 },
> -   { "glGetUniformfv", 20, -1 },
> -   { "glGetUniformiv", 20, -1 },
> -   { "glGetVertexAttribdv", 20, -1 },
> -   { "glGetVertexAttribfv", 20, -1 },
> -   { "glGetVertexAttribiv", 20, -1 },
> -   { "glGetVertexAttribPointerv", 20, -1 },
> -   { "glIsProgram", 20, -1 },
> -   { "glIsShader", 20, -1 },
> -   { "glLinkProgram", 20, -1 },
> -   { "glShaderSource", 20, -1 },
> -   { "glUseProgram", 20, -1 },
> -   { "glUniform1f", 20, -1 },
> -   { "glUniform2f", 20, -1 },
> -   { "glUniform3f", 20, -1 },
> -   { "glUniform4f", 20, -1 },
> -   { "glUniform1i", 20, -1 },
> -   { "glUniform2i", 20, -1 },
> -   { "glUniform3i", 20, -1 },
> -   { "glUniform4i", 20, -1 },
> -   { "glUniform1fv", 20, -1 },
> -   { "glUniform2fv", 20, -1 },
> -   { "glUniform3fv", 20, -1 },
> -   { "glUniform4fv", 20, -1 },
> -   { "glUniform1iv", 20, -1 },
> -   { "glUniform2iv", 20, -1 },
> -   { "glUniform3iv", 20, -1 },
> -   { "glUniform4iv", 20, -1 },
> -   { "glUniformMatrix2fv", 20, -1 },
> -   { "glUniformMatrix3fv", 20, -1 },
> -   { "glUniformMatrix4fv", 20, -1 },
> -   { "glValidateProgram", 20, -1 },
> -   { "glVertexAttrib1d", 20, -1 },
> -   { "glVertexAttrib1dv", 20, -1 },
> -   { "glVertexAttrib1f", 20, -1 },
> -   { "glVertexAttrib1fv", 20, -1 },
> -   { "glVertexAttrib1s", 20, -1 },
> -   { "glVertexAttrib1sv", 20, -1 },
> -   { "glVertexAttrib2d", 20, -1 },
> -   { "glVertexAttrib2dv", 20, -1 },
> -   { "glVertexAttrib2f", 20, -1 },
> -   { "glVertexAttrib2fv", 20, -1 },
> -   { "glVertexAttrib2s", 20, -1 },
> -   { "glVertexAttrib2sv", 20, -1 },
> -   { "glVertexAttrib3d", 20, -1 },
> -   { "glVertexAttrib3dv", 20, -1 },
> -   { "glVertexAttrib3f", 20, -1 },
> -   { "glVertexAttrib3fv", 20, -1 },
> -   { "glVertexAttrib3s", 20, -1 },
> -   { "glVertexAttrib3sv", 20, -1 },
> -   { "glVertexAttrib4Nbv", 20, -1 },
> -   { "glVertexAttrib4Niv", 20, -1 },
> -   { "glVertexAttrib4Nsv", 20, -1 },
> -   { "glVertexAttrib4Nub", 20, -1 },
> -   { "glVertexAttrib4Nubv", 20, -1 },
> -   { "glVertexAttrib4Nuiv", 20, -1 },
> -   { "glVertexAttrib4Nusv", 20, -1 },
> -   { "glVertexAttrib4bv", 20, -1 },
> -   { "glVertexAttrib4d", 20, -1 },
> -   { "glVertexAttrib4dv", 20, -1 },
> -   { "glVertexAttrib4f", 20, -1 },
> -   { "glVertexAttrib4fv", 20, -1 },
> -   { "glVertexAttrib4iv", 20, -1 },
> -   { "glVertexAttrib4s", 20, -1 },
> -   { "glVertexAttrib4sv", 20, -1 },
> -   { "glVertexAttrib4ubv", 20, -1 },
> -   { "glVertexAttrib4uiv", 20, -1 },
> -   { "glVertexAttrib4usv", 20, -1 },
> -   { "glVertexAttribPointer", 20, -1 },
> -
> -   /* GL 2.1 */
> -   { "glUniformMatrix2x3fv", 21, -1 },
> -   { "glUniformMatrix3x2fv", 21, -1 },
> -   { "glUniformMatrix2x4fv", 21, -1 },
> -   { "glUniformMatrix4x2fv", 21, -1 },
> -   { "glUniformMatrix3x4fv", 21, -1 },
> -   { "glUniformMatrix4x3fv", 21, -1 },
> -
> -   /* GL 3.0 */
> -   { "glColorMaski", 30, -1 },
> -   { "glGetBooleani_v", 30, -1 },
> -   { "glGetIntegeri_v", 30, -1 },
> -   { "glEnablei", 30, -1 },
> -   { "glDisablei", 30, -1 },
> -   { "glIsEnabledi", 30, -1 },
> -   { "glBeginTransformFeedback", 30, -1 },
> -   { "glEndTransformFeedback", 30, -1 },
> -   { "glBindBufferRange", 30, -1 },
> -   { "glBindBufferBase", 30, -1 },
> -   { "glTransformFeedbackVaryings", 30, -1 },
> -   { "glGetTransformFeedbackVarying", 30, -1 },
> -   { "glClampColor", 30, -1 },
> -   { "glBeginConditionalRender", 30, -1 },
> -   { "glEndConditionalRender", 30, -1 },
> -   { "glVertexAttribIPointer", 30, -1 },
> -   { "glGetVertexAttribIiv", 30, -1 },
> -   { "glGetVertexAttribIuiv", 30, -1 },
> -   { "glVertexAttribI1i", 30, -1 },
> -   { "glVertexAttribI2i", 30, -1 },
> -   { "glVertexAttribI3i", 30, -1 },
> -   { "glVertexAttribI4i", 30, -1 },
> -   { "glVertexAttribI1ui", 30, -1 },
> -   { "glVertexAttribI2ui", 30, -1 },
> -   { "glVertexAttribI3ui", 30, -1 },
> -   { "glVertexAttribI4ui", 30, -1 },
> -   { "glVertexAttribI1iv", 30, -1 },
> -   { "glVertexAttribI2iv", 30, -1 },
> -   { "glVertexAttribI3iv", 30, -1 },
> -   { "glVertexAttribI4iv", 30, -1 },
> -   { "glVertexAttribI1uiv", 30, -1 },
> -   { "glVertexAttribI2uiv", 30, -1 },
> -   { "glVertexAttribI3uiv", 30, -1 },
> -   { "glVertexAttribI4uiv", 30, -1 },
> -   { "glVertexAttribI4bv", 30, -1 },
> -   { "glVertexAttribI4sv", 30, -1 },
> -   { "glVertexAttribI4ubv", 30, -1 },
> -   { "glVertexAttribI4usv", 30, -1 },
> -   { "glGetUniformuiv", 30, -1 },
> -   { "glBindFragDataLocation", 30, -1 },
> -   { "glGetFragDataLocation", 30, -1 },
> -   { "glUniform1ui", 30, -1 },
> -   { "glUniform2ui", 30, -1 },
> -   { "glUniform3ui", 30, -1 },
> -   { "glUniform4ui", 30, -1 },
> -   { "glUniform1uiv", 30, -1 },
> -   { "glUniform2uiv", 30, -1 },
> -   { "glUniform3uiv", 30, -1 },
> -   { "glUniform4uiv", 30, -1 },
> -   { "glTexParameterIiv", 30, -1 },
> -   { "glTexParameterIuiv", 30, -1 },
> -   { "glGetTexParameterIiv", 30, -1 },
> -   { "glGetTexParameterIuiv", 30, -1 },
> -   { "glClearBufferiv", 30, -1 },
> -   { "glClearBufferuiv", 30, -1 },
> -   { "glClearBufferfv", 30, -1 },
> -   { "glClearBufferfi", 30, -1 },
> -   { "glGetStringi", 30, -1 },
> -
> -   /* GL 3.1 */
> -   { "glDrawArraysInstanced", 31, -1 },
> -   { "glDrawElementsInstanced", 31, -1 },
> -   { "glTexBuffer", 31, -1 },
> -   { "glPrimitiveRestartIndex", 31, -1 },
> -
> -   /* GL_ARB_shader_objects */
> -   { "glDeleteObjectARB", 31, -1 },
> -   { "glGetHandleARB", 31, -1 },
> -   { "glDetachObjectARB", 31, -1 },
> -   { "glCreateShaderObjectARB", 31, -1 },
> -   { "glCreateProgramObjectARB", 31, -1 },
> -   { "glAttachObjectARB", 31, -1 },
> -   { "glGetObjectParameterfvARB", 31, -1 },
> -   { "glGetObjectParameterivARB", 31, -1 },
> -   { "glGetInfoLogARB", 31, -1 },
> -   { "glGetAttachedObjectsARB", 31, -1 },
> -
> -   /* GL_ARB_get_program_binary */
> -   { "glGetProgramBinary", 30, -1 },
> -   { "glProgramBinary", 30, -1 },
> -   { "glProgramParameteri", 30, -1 },
> -
> -   /* GL_EXT_transform_feedback */
> -   { "glBindBufferOffsetEXT", 31, -1 },
> -
> -   /* GL_IBM_multimode_draw_arrays */
> -   { "glMultiModeDrawArraysIBM", 31, -1 },
> -   { "glMultiModeDrawElementsIBM", 31, -1 },
> -
> -   /* GL_EXT_depth_bounds_test */
> -   { "glDepthBoundsEXT", 31, -1 },
> -
> -   /* GL_apple_object_purgeable */
> -   { "glObjectPurgeableAPPLE", 31, -1 },
> -   { "glObjectUnpurgeableAPPLE", 31, -1 },
> -   { "glGetObjectParameterivAPPLE", 31, -1 },
> -
> -   /* GL_ARB_instanced_arrays */
> -   { "glVertexAttribDivisorARB", 31, -1 },
> -
> -   /* GL_NV_texture_barrier */
> -   { "glTextureBarrierNV", 31, -1 },
> -
> -   /* GL_EXT_texture_integer */
> -   { "glClearColorIiEXT", 31, -1 },
> -   { "glClearColorIuiEXT", 31, -1 },
> -
> -   /* GL_OES_EGL_image */
> -   { "glEGLImageTargetRenderbufferStorageOES", 31, -1 },
> -   { "glEGLImageTargetTexture2DOES", 31, -1 },
> -
> -   /* GL 3.2 */
> -   { "glGetInteger64i_v", 32, -1 },
> -   { "glGetBufferParameteri64v", 32, -1 },
> -   { "glFramebufferTexture", 32, -1 },
> -
> -   /* GL_ARB_geometry_shader4 */
> -   { "glProgramParameteriARB", 32, -1 },
> -   { "glFramebufferTextureARB", 32, -1 },
> -   { "glFramebufferTextureLayerARB", 32, -1 },
> -   { "glFramebufferTextureFaceARB", 32, -1 },
> -
> -   /* GL 3.3 */
> -   { "glVertexAttribDivisor", 33, -1 },
> -
> -   /* GL 4.0 */
> -// { "glMinSampleShading", 40, -1 },                    // XXX: Add to xml
> -// { "glBlendEquationi", 40, -1 },                      // XXX: Add to xml
> -// { "glBlendEquationSeparatei", 40, -1 },              // XXX: Add to xml
> -// { "glBlendFunci", 40, -1 },                          // XXX: Add to xml
> -// { "glBlendFuncSeparatei", 40, -1 },                  // XXX: Add to xml
> -
> -   /* GL 4.3 */
> -   { "glIsRenderbuffer", 43, -1 },
> -   { "glBindRenderbuffer", 43, -1 },
> -   { "glDeleteRenderbuffers", 43, -1 },
> -   { "glGenRenderbuffers", 43, -1 },
> -   { "glRenderbufferStorage", 43, -1 },
> -   { "glGetRenderbufferParameteriv", 43, -1 },
> -   { "glIsFramebuffer", 43, -1 },
> -   { "glBindFramebuffer", 43, -1 },
> -   { "glDeleteFramebuffers", 43, -1 },
> -   { "glGenFramebuffers", 43, -1 },
> -   { "glCheckFramebufferStatus", 43, -1 },
> -   { "glFramebufferTexture1D", 43, -1 },
> -   { "glFramebufferTexture2D", 43, -1 },
> -   { "glFramebufferTexture3D", 43, -1 },
> -   { "glFramebufferRenderbuffer", 43, -1 },
> -   { "glGetFramebufferAttachmentParameteriv", 43, -1 },
> -   { "glGenerateMipmap", 43, -1 },
> -   { "glBlitFramebuffer", 43, -1 },
> -   { "glRenderbufferStorageMultisample", 43, -1 },
> -   { "glFramebufferTextureLayer", 43, -1 },
> -   { "glMapBufferRange", 43, -1 },
> -   { "glFlushMappedBufferRange", 43, -1 },
> -   { "glBindVertexArray", 43, -1 },
> -   { "glDeleteVertexArrays", 43, -1 },
> -   { "glGenVertexArrays", 43, -1 },
> -   { "glIsVertexArray", 43, -1 },
> -   { "glGetUniformIndices", 43, -1 },
> -   { "glGetActiveUniformsiv", 43, -1 },
> -   { "glGetActiveUniformName", 43, -1 },
> -   { "glGetUniformBlockIndex", 43, -1 },
> -   { "glGetActiveUniformBlockiv", 43, -1 },
> -   { "glGetActiveUniformBlockName", 43, -1 },
> -   { "glUniformBlockBinding", 43, -1 },
> -   { "glCopyBufferSubData", 43, -1 },
> -   { "glDrawElementsBaseVertex", 43, -1 },
> -   { "glDrawRangeElementsBaseVertex", 43, -1 },
> -   { "glDrawElementsInstancedBaseVertex", 43, -1 },
> -   { "glMultiDrawElementsBaseVertex", 43, -1 },
> -   { "glProvokingVertex", 43, -1 },
> -   { "glFenceSync", 43, -1 },
> -   { "glIsSync", 43, -1 },
> -   { "glDeleteSync", 43, -1 },
> -   { "glClientWaitSync", 43, -1 },
> -   { "glWaitSync", 43, -1 },
> -   { "glGetInteger64v", 43, -1 },
> -   { "glGetSynciv", 43, -1 },
> -   { "glTexImage2DMultisample", 43, -1 },
> -   { "glTexImage3DMultisample", 43, -1 },
> -   { "glGetMultisamplefv", 43, -1 },
> -   { "glSampleMaski", 43, -1 },
> -   { "glBlendEquationiARB", 43, -1 },
> -   { "glBlendEquationSeparateiARB", 43, -1 },
> -   { "glBlendFunciARB", 43, -1 },
> -   { "glBlendFuncSeparateiARB", 43, -1 },
> -// { "glMinSampleShadingARB", 43, -1 },                 // XXX: Add to xml
> -// { "glNamedStringARB", 43, -1 },                      // XXX: Add to xml
> -// { "glDeleteNamedStringARB", 43, -1 },                // XXX: Add to xml
> -// { "glCompileShaderIncludeARB", 43, -1 },             // XXX: Add to xml
> -// { "glIsNamedStringARB", 43, -1 },                    // XXX: Add to xml
> -// { "glGetNamedStringARB", 43, -1 },                   // XXX: Add to xml
> -// { "glGetNamedStringivARB", 43, -1 },                 // XXX: Add to xml
> -   { "glBindFragDataLocationIndexed", 43, -1 },
> -   { "glGetFragDataIndex", 43, -1 },
> -   { "glGenSamplers", 43, -1 },
> -   { "glDeleteSamplers", 43, -1 },
> -   { "glIsSampler", 43, -1 },
> -   { "glBindSampler", 43, -1 },
> -   { "glSamplerParameteri", 43, -1 },
> -   { "glSamplerParameteriv", 43, -1 },
> -   { "glSamplerParameterf", 43, -1 },
> -   { "glSamplerParameterfv", 43, -1 },
> -   { "glSamplerParameterIiv", 43, -1 },
> -   { "glSamplerParameterIuiv", 43, -1 },
> -   { "glGetSamplerParameteriv", 43, -1 },
> -   { "glGetSamplerParameterIiv", 43, -1 },
> -   { "glGetSamplerParameterfv", 43, -1 },
> -   { "glGetSamplerParameterIuiv", 43, -1 },
> -   { "glQueryCounter", 43, -1 },
> -   { "glGetQueryObjecti64v", 43, -1 },
> -   { "glGetQueryObjectui64v", 43, -1 },
> -   { "glVertexP2ui", 43, -1 },
> -   { "glVertexP2uiv", 43, -1 },
> -   { "glVertexP3ui", 43, -1 },
> -   { "glVertexP3uiv", 43, -1 },
> -   { "glVertexP4ui", 43, -1 },
> -   { "glVertexP4uiv", 43, -1 },
> -   { "glTexCoordP1ui", 43, -1 },
> -   { "glTexCoordP1uiv", 43, -1 },
> -   { "glTexCoordP2ui", 43, -1 },
> -   { "glTexCoordP2uiv", 43, -1 },
> -   { "glTexCoordP3ui", 43, -1 },
> -   { "glTexCoordP3uiv", 43, -1 },
> -   { "glTexCoordP4ui", 43, -1 },
> -   { "glTexCoordP4uiv", 43, -1 },
> -   { "glMultiTexCoordP1ui", 43, -1 },
> -   { "glMultiTexCoordP1uiv", 43, -1 },
> -   { "glMultiTexCoordP2ui", 43, -1 },
> -   { "glMultiTexCoordP2uiv", 43, -1 },
> -   { "glMultiTexCoordP3ui", 43, -1 },
> -   { "glMultiTexCoordP3uiv", 43, -1 },
> -   { "glMultiTexCoordP4ui", 43, -1 },
> -   { "glMultiTexCoordP4uiv", 43, -1 },
> -   { "glNormalP3ui", 43, -1 },
> -   { "glNormalP3uiv", 43, -1 },
> -   { "glColorP3ui", 43, -1 },
> -   { "glColorP3uiv", 43, -1 },
> -   { "glColorP4ui", 43, -1 },
> -   { "glColorP4uiv", 43, -1 },
> -   { "glSecondaryColorP3ui", 43, -1 },
> -   { "glSecondaryColorP3uiv", 43, -1 },
> -   { "glVertexAttribP1ui", 43, -1 },
> -   { "glVertexAttribP1uiv", 43, -1 },
> -   { "glVertexAttribP2ui", 43, -1 },
> -   { "glVertexAttribP2uiv", 43, -1 },
> -   { "glVertexAttribP3ui", 43, -1 },
> -   { "glVertexAttribP3uiv", 43, -1 },
> -   { "glVertexAttribP4ui", 43, -1 },
> -   { "glVertexAttribP4uiv", 43, -1 },
> -// { "glDrawArraysIndirect", 43, -1 },                  // XXX: Add to xml
> -// { "glDrawElementsIndirect", 43, -1 },                // XXX: Add to xml
> -// { "glUniform1d", 43, -1 },                           // XXX: Add to xml
> -// { "glUniform2d", 43, -1 },                           // XXX: Add to xml
> -// { "glUniform3d", 43, -1 },                           // XXX: Add to xml
> -// { "glUniform4d", 43, -1 },                           // XXX: Add to xml
> -// { "glUniform1dv", 43, -1 },                          // XXX: Add to xml
> -// { "glUniform2dv", 43, -1 },                          // XXX: Add to xml
> -// { "glUniform3dv", 43, -1 },                          // XXX: Add to xml
> -// { "glUniform4dv", 43, -1 },                          // XXX: Add to xml
> -// { "glUniformMatrix2dv", 43, -1 },                    // XXX: Add to xml
> -// { "glUniformMatrix3dv", 43, -1 },                    // XXX: Add to xml
> -// { "glUniformMatrix4dv", 43, -1 },                    // XXX: Add to xml
> -// { "glUniformMatrix2x3dv", 43, -1 },                  // XXX: Add to xml
> -// { "glUniformMatrix2x4dv", 43, -1 },                  // XXX: Add to xml
> -// { "glUniformMatrix3x2dv", 43, -1 },                  // XXX: Add to xml
> -// { "glUniformMatrix3x4dv", 43, -1 },                  // XXX: Add to xml
> -// { "glUniformMatrix4x2dv", 43, -1 },                  // XXX: Add to xml
> -// { "glUniformMatrix4x3dv", 43, -1 },                  // XXX: Add to xml
> -// { "glGetUniformdv", 43, -1 },                        // XXX: Add to xml
> -// { "glGetSubroutineUniformLocation", 43, -1 },        // XXX: Add to xml
> -// { "glGetSubroutineIndex", 43, -1 },                  // XXX: Add to xml
> -// { "glGetActiveSubroutineUniformiv", 43, -1 },        // XXX: Add to xml
> -// { "glGetActiveSubroutineUniformName", 43, -1 },      // XXX: Add to xml
> -// { "glGetActiveSubroutineName", 43, -1 },             // XXX: Add to xml
> -// { "glUniformSubroutinesuiv", 43, -1 },               // XXX: Add to xml
> -// { "glGetUniformSubroutineuiv", 43, -1 },             // XXX: Add to xml
> -// { "glGetProgramStageiv", 43, -1 },                   // XXX: Add to xml
> -// { "glPatchParameteri", 43, -1 },                     // XXX: Add to xml
> -// { "glPatchParameterfv", 43, -1 },                    // XXX: Add to xml
> -   { "glBindTransformFeedback", 43, -1 },
> -   { "glDeleteTransformFeedbacks", 43, -1 },
> -   { "glGenTransformFeedbacks", 43, -1 },
> -   { "glIsTransformFeedback", 43, -1 },
> -   { "glPauseTransformFeedback", 43, -1 },
> -   { "glResumeTransformFeedback", 43, -1 },
> -   { "glDrawTransformFeedback", 43, -1 },
> -   { "glDrawTransformFeedbackStream", 43, -1 },
> -   { "glBeginQueryIndexed", 43, -1 },
> -   { "glEndQueryIndexed", 43, -1 },
> -   { "glGetQueryIndexediv", 43, -1 },
> -   { "glReleaseShaderCompiler", 43, -1 },
> -   { "glShaderBinary", 43, -1 },
> -   { "glGetShaderPrecisionFormat", 43, -1 },
> -   { "glDepthRangef", 43, -1 },
> -   { "glClearDepthf", 43, -1 },
> -   { "glGetProgramBinary", 43, -1 },
> -   { "glProgramBinary", 43, -1 },
> -   { "glProgramParameteri", 43, -1 },
> -// { "glUseProgramStages", 43, -1 },                    // XXX: Add to xml
> -// { "glActiveShaderProgram", 43, -1 },                 // XXX: Add to xml
> -// { "glCreateShaderProgramv", 43, -1 },                // XXX: Add to xml
> -// { "glBindProgramPipeline", 43, -1 },                 // XXX: Add to xml
> -// { "glDeleteProgramPipelines", 43, -1 },              // XXX: Add to xml
> -// { "glGenProgramPipelines", 43, -1 },                 // XXX: Add to xml
> -// { "glIsProgramPipeline", 43, -1 },                   // XXX: Add to xml
> -// { "glGetProgramPipelineiv", 43, -1 },                // XXX: Add to xml
> -// { "glProgramUniform1i", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform1iv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform1f", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform1fv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform1d", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform1dv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform1ui", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform1uiv", 43, -1 },                  // XXX: Add to xml
> -// { "glProgramUniform2i", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform2iv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform2f", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform2fv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform2d", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform2dv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform2ui", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform2uiv", 43, -1 },                  // XXX: Add to xml
> -// { "glProgramUniform3i", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform3iv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform3f", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform3fv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform3d", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform3dv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform3ui", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform3uiv", 43, -1 },                  // XXX: Add to xml
> -// { "glProgramUniform4i", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform4iv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform4f", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform4fv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform4d", 43, -1 },                    // XXX: Add to xml
> -// { "glProgramUniform4dv", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform4ui", 43, -1 },                   // XXX: Add to xml
> -// { "glProgramUniform4uiv", 43, -1 },                  // XXX: Add to xml
> -// { "glProgramUniformMatrix2fv", 43, -1 },             // XXX: Add to xml
> -// { "glProgramUniformMatrix3fv", 43, -1 },             // XXX: Add to xml
> -// { "glProgramUniformMatrix4fv", 43, -1 },             // XXX: Add to xml
> -// { "glProgramUniformMatrix2dv", 43, -1 },             // XXX: Add to xml
> -// { "glProgramUniformMatrix3dv", 43, -1 },             // XXX: Add to xml
> -// { "glProgramUniformMatrix4dv", 43, -1 },             // XXX: Add to xml
> -// { "glProgramUniformMatrix2x3fv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix3x2fv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix2x4fv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix4x2fv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix3x4fv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix4x3fv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix2x3dv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix3x2dv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix2x4dv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix4x2dv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix3x4dv", 43, -1 },           // XXX: Add to xml
> -// { "glProgramUniformMatrix4x3dv", 43, -1 },           // XXX: Add to xml
> -// { "glValidateProgramPipeline", 43, -1 },             // XXX: Add to xml
> -// { "glGetProgramPipelineInfoLog", 43, -1 },           // XXX: Add to xml
> -// { "glVertexAttribL1d", 43, -1 },                     // XXX: Add to xml
> -// { "glVertexAttribL2d", 43, -1 },                     // XXX: Add to xml
> -// { "glVertexAttribL3d", 43, -1 },                     // XXX: Add to xml
> -// { "glVertexAttribL4d", 43, -1 },                     // XXX: Add to xml
> -// { "glVertexAttribL1dv", 43, -1 },                    // XXX: Add to xml
> -// { "glVertexAttribL2dv", 43, -1 },                    // XXX: Add to xml
> -// { "glVertexAttribL3dv", 43, -1 },                    // XXX: Add to xml
> -// { "glVertexAttribL4dv", 43, -1 },                    // XXX: Add to xml
> -// { "glVertexAttribLPointer", 43, -1 },                // XXX: Add to xml
> -// { "glGetVertexAttribLdv", 43, -1 },                  // XXX: Add to xml
> -// { "glViewportArrayv", 43, -1 },                      // XXX: Add to xml
> -// { "glViewportIndexedf", 43, -1 },                    // XXX: Add to xml
> -// { "glViewportIndexedfv", 43, -1 },                   // XXX: Add to xml
> -// { "glScissorArrayv", 43, -1 },                       // XXX: Add to xml
> -// { "glScissorIndexed", 43, -1 },                      // XXX: Add to xml
> -// { "glScissorIndexedv", 43, -1 },                     // XXX: Add to xml
> -// { "glDepthRangeArrayv", 43, -1 },                    // XXX: Add to xml
> -// { "glDepthRangeIndexed", 43, -1 },                   // XXX: Add to xml
> -// { "glGetFloati_v", 43, -1 },                         // XXX: Add to xml
> -// { "glGetDoublei_v", 43, -1 },                        // XXX: Add to xml
> -// { "glCreateSyncFromCLeventARB", 43, -1 },            // XXX: Add to xml
> -   { "glDebugMessageControlARB", 43, -1 },
> -   { "glDebugMessageInsertARB", 43, -1 },
> -   { "glDebugMessageCallbackARB", 43, -1 },
> -   { "glGetDebugMessageLogARB", 43, -1 },
> -   { "glGetGraphicsResetStatusARB", 43, -1 },
> -   { "glGetnMapdvARB", 43, -1 },
> -   { "glGetnMapfvARB", 43, -1 },
> -   { "glGetnMapivARB", 43, -1 },
> -   { "glGetnPixelMapfvARB", 43, -1 },
> -   { "glGetnPixelMapuivARB", 43, -1 },
> -   { "glGetnPixelMapusvARB", 43, -1 },
> -   { "glGetnPolygonStippleARB", 43, -1 },
> -   { "glGetnColorTableARB", 43, -1 },
> -   { "glGetnConvolutionFilterARB", 43, -1 },
> -   { "glGetnSeparableFilterARB", 43, -1 },
> -   { "glGetnHistogramARB", 43, -1 },
> -   { "glGetnMinmaxARB", 43, -1 },
> -   { "glGetnTexImageARB", 43, -1 },
> -   { "glReadnPixelsARB", 43, -1 },
> -   { "glGetnCompressedTexImageARB", 43, -1 },
> -   { "glGetnUniformfvARB", 43, -1 },
> -   { "glGetnUniformivARB", 43, -1 },
> -   { "glGetnUniformuivARB", 43, -1 },
> -   { "glGetnUniformdvARB", 43, -1 },
> -   { "glDrawArraysInstancedBaseInstance", 43, -1 },
> -   { "glDrawElementsInstancedBaseInstance", 43, -1 },
> -   { "glDrawElementsInstancedBaseVertexBaseInstance", 43, -1 },
> -   { "glDrawTransformFeedbackInstanced", 43, -1 },
> -   { "glDrawTransformFeedbackStreamInstanced", 43, -1 },
> -// { "glGetInternalformativ", 43, -1 },                 // XXX: Add to xml
> -// { "glGetActiveAtomicCounterBufferiv", 43, -1 },      // XXX: Add to xml
> -// { "glBindImageTexture", 43, -1 },                    // XXX: Add to xml
> -// { "glMemoryBarrier", 43, -1 },                       // XXX: Add to xml
> -   { "glTexStorage1D", 43, -1 },
> -   { "glTexStorage2D", 43, -1 },
> -   { "glTexStorage3D", 43, -1 },
> -   { "glTextureStorage1DEXT", 43, -1 },
> -   { "glTextureStorage2DEXT", 43, -1 },
> -   { "glTextureStorage3DEXT", 43, -1 },
> -// { "glDebugMessageControl", 43, -1 },                 // XXX: Add to xml
> -// { "glDebugMessageInsert", 43, -1 },                  // XXX: Add to xml
> -// { "glDebugMessageCallback", 43, -1 },                // XXX: Add to xml
> -// { "glGetDebugMessageLog", 43, -1 },                  // XXX: Add to xml
> -// { "glPushDebugGroup", 43, -1 },                      // XXX: Add to xml
> -// { "glPopDebugGroup", 43, -1 },                       // XXX: Add to xml
> -// { "glObjectLabel", 43, -1 },                         // XXX: Add to xml
> -// { "glGetObjectLabel", 43, -1 },                      // XXX: Add to xml
> -// { "glObjectPtrLabel", 43, -1 },                      // XXX: Add to xml
> -// { "glGetObjectPtrLabel", 43, -1 },                   // XXX: Add to xml
> -// { "glClearBufferData", 43, -1 },                     // XXX: Add to xml
> -// { "glClearBufferSubData", 43, -1 },                  // XXX: Add to xml
> -// { "glClearNamedBufferDataEXT", 43, -1 },             // XXX: Add to xml
> -// { "glClearNamedBufferSubDataEXT", 43, -1 },          // XXX: Add to xml
> -// { "glDispatchCompute", 43, -1 },                     // XXX: Add to xml
> -// { "glDispatchComputeIndirect", 43, -1 },             // XXX: Add to xml
> -// { "glCopyImageSubData", 43, -1 },                    // XXX: Add to xml
> -// { "glTextureView", 43, -1 },                         // XXX: Add to xml
> -// { "glBindVertexBuffer", 43, -1 },                    // XXX: Add to xml
> -// { "glVertexAttribFormat", 43, -1 },                  // XXX: Add to xml
> -// { "glVertexAttribIFormat", 43, -1 },                 // XXX: Add to xml
> -// { "glVertexAttribLFormat", 43, -1 },                 // XXX: Add to xml
> -// { "glVertexAttribBinding", 43, -1 },                 // XXX: Add to xml
> -// { "glVertexBindingDivisor", 43, -1 },                // XXX: Add to xml
> -// { "glVertexArrayBindVertexBufferEXT", 43, -1 },      // XXX: Add to xml
> -// { "glVertexArrayVertexAttribFormatEXT", 43, -1 },    // XXX: Add to xml
> -// { "glVertexArrayVertexAttribIFormatEXT", 43, -1 },   // XXX: Add to xml
> -// { "glVertexArrayVertexAttribLFormatEXT", 43, -1 },   // XXX: Add to xml
> -// { "glVertexArrayVertexAttribBindingEXT", 43, -1 },   // XXX: Add to xml
> -// { "glVertexArrayVertexBindingDivisorEXT", 43, -1 },  // XXX: Add to xml
> -// { "glFramebufferParameteri", 43, -1 },               // XXX: Add to xml
> -// { "glGetFramebufferParameteriv", 43, -1 },           // XXX: Add to xml
> -// { "glNamedFramebufferParameteriEXT", 43, -1 },       // XXX: Add to xml
> -// { "glGetNamedFramebufferParameterivEXT", 43, -1 },   // XXX: Add to xml
> -// { "glGetInternalformati64v", 43, -1 },               // XXX: Add to xml
> -   { "glInvalidateTexSubImage", 43, -1 },
> -   { "glInvalidateTexImage", 43, -1 },
> -   { "glInvalidateBufferSubData", 43, -1 },
> -   { "glInvalidateBufferData", 43, -1 },
> -   { "glInvalidateFramebuffer", 43, -1 },
> -   { "glInvalidateSubFramebuffer", 43, -1 },
> -// { "glMultiDrawArraysIndirect", 43, -1 },             // XXX: Add to xml
> -// { "glMultiDrawElementsIndirect", 43, -1 },           // XXX: Add to xml
> -// { "glGetProgramInterfaceiv", 43, -1 },               // XXX: Add to xml
> -// { "glGetProgramResourceIndex", 43, -1 },             // XXX: Add to xml
> -// { "glGetProgramResourceName", 43, -1 },              // XXX: Add to xml
> -// { "glGetProgramResourceiv", 43, -1 },                // XXX: Add to xml
> -// { "glGetProgramResourceLocation", 43, -1 },          // XXX: Add to xml
> -// { "glGetProgramResourceLocationIndex", 43, -1 },     // XXX: Add to xml
> -// { "glShaderStorageBlockBinding", 43, -1 },           // XXX: Add to xml
> -   { "glTexBufferRange", 43, -1 },
> -// { "glTextureBufferRangeEXT", 43, -1 },               // XXX: Add to xml
> -   { "glTexStorage2DMultisample", 43, -1 },
> -   { "glTexStorage3DMultisample", 43, -1 },
> -// { "glTextureStorage2DMultisampleEXT", 43, -1 },      // XXX: Add to xml
> -// { "glTextureStorage3DMultisampleEXT", 43, -1 },      // XXX: Add to xml
> -
> -   /* GL_ARB_internalformat_query */
> -   { "glGetInternalformativ", 30, -1 },
> -
> -   /* GL_KHR_debug */
> -   { "glPushDebugGroup", 11, -1 },
> -   { "glPopDebugGroup", 11, -1 },
> -   { "glDebugMessageCallback", 11, -1 },
> -   { "glDebugMessageControl", 11, -1 },
> -   { "glDebugMessageInsert", 11, -1 },
> -   { "glGetDebugMessageLog", 11, -1 },
> -   { "glGetObjectLabel", 11, -1 },
> -   { "glGetObjectPtrLabel", 11, -1 },
> -   { "glObjectLabel", 11, -1 },
> -   { "glObjectPtrLabel", 11, -1 },
> -
> -   { NULL, 0, -1 }
> -};
> -
> -const struct function gles11_functions_possible[] = {
> -   { "glActiveTexture", 11, _gloffset_ActiveTexture },
> -   { "glAlphaFunc", 11, _gloffset_AlphaFunc },
> -   { "glAlphaFuncx", 11, -1 },
> -   { "glBindBuffer", 11, -1 },
> -   { "glBindFramebufferOES", 11, -1 },
> -   { "glBindRenderbufferOES", 11, -1 },
> -   { "glBindTexture", 11, _gloffset_BindTexture },
> -   { "glBlendEquationOES", 11, _gloffset_BlendEquation },
> -   { "glBlendEquationSeparateOES", 11, -1 },
> -   { "glBlendFunc", 11, _gloffset_BlendFunc },
> -   { "glBlendFuncSeparateOES", 11, -1 },
> -   { "glBufferData", 11, -1 },
> -   { "glBufferSubData", 11, -1 },
> -   { "glCheckFramebufferStatusOES", 11, -1 },
> -   { "glClear", 11, _gloffset_Clear },
> -   { "glClearColor", 11, _gloffset_ClearColor },
> -   { "glClearColorx", 11, -1 },
> -   { "glClearDepthf", 11, -1 },
> -   { "glClearDepthx", 11, -1 },
> -   { "glClearStencil", 11, _gloffset_ClearStencil },
> -   { "glClientActiveTexture", 11, _gloffset_ClientActiveTexture },
> -   { "glClipPlanef", 11, -1 },
> -   { "glClipPlanex", 11, -1 },
> -   { "glColor4f", 11, _gloffset_Color4f },
> -   { "glColor4ub", 11, _gloffset_Color4ub },
> -   { "glColor4x", 11, -1 },
> -   { "glColorMask", 11, _gloffset_ColorMask },
> -   { "glColorPointer", 11, _gloffset_ColorPointer },
> -   { "glCompressedTexImage2D", 11, -1 },
> -   { "glCompressedTexSubImage2D", 11, -1 },
> -   { "glCopyTexImage2D", 11, _gloffset_CopyTexImage2D },
> -   { "glCopyTexSubImage2D", 11, _gloffset_CopyTexSubImage2D },
> -   { "glCullFace", 11, _gloffset_CullFace },
> -   { "glDeleteBuffers", 11, -1 },
> -   { "glDeleteFramebuffersOES", 11, -1 },
> -   { "glDeleteRenderbuffersOES", 11, -1 },
> -   { "glDeleteTextures", 11, _gloffset_DeleteTextures },
> -   { "glDepthFunc", 11, _gloffset_DepthFunc },
> -   { "glDepthMask", 11, _gloffset_DepthMask },
> -   { "glDepthRangef", 11, -1 },
> -   { "glDepthRangex", 11, -1 },
> -   { "glDisable", 11, _gloffset_Disable },
> -   { "glDiscardFramebufferEXT", 11, -1 },
> -   { "glDisableClientState", 11, _gloffset_DisableClientState },
> -   { "glDrawArrays", 11, _gloffset_DrawArrays },
> -   { "glDrawElements", 11, _gloffset_DrawElements },
> -   { "glDrawTexfOES", 11, -1 },
> -   { "glDrawTexfvOES", 11, -1 },
> -   { "glDrawTexiOES", 11, -1 },
> -   { "glDrawTexivOES", 11, -1 },
> -   { "glDrawTexsOES", 11, -1 },
> -   { "glDrawTexsvOES", 11, -1 },
> -   { "glDrawTexxOES", 11, -1 },
> -   { "glDrawTexxvOES", 11, -1 },
> -   { "glEGLImageTargetRenderbufferStorageOES", 11, -1 },
> -   { "glEGLImageTargetTexture2DOES", 11, -1 },
> -   { "glEnable", 11, _gloffset_Enable },
> -   { "glEnableClientState", 11, _gloffset_EnableClientState },
> -   { "glFinish", 11, _gloffset_Finish },
> -   { "glFlush", 11, _gloffset_Flush },
> -   { "glFlushMappedBufferRangeEXT", 11, -1 },
> -   { "glFogf", 11, _gloffset_Fogf },
> -   { "glFogfv", 11, _gloffset_Fogfv },
> -   { "glFogx", 11, -1 },
> -   { "glFogxv", 11, -1 },
> -   { "glFramebufferRenderbufferOES", 11, -1 },
> -   { "glFramebufferTexture2DOES", 11, -1 },
> -   { "glFrontFace", 11, _gloffset_FrontFace },
> -   { "glFrustumf", 11, -1 },
> -   { "glFrustumx", 11, -1 },
> -   { "glGenBuffers", 11, -1 },
> -   { "glGenFramebuffersOES", 11, -1 },
> -   { "glGenRenderbuffersOES", 11, -1 },
> -   { "glGenTextures", 11, _gloffset_GenTextures },
> -   { "glGenerateMipmapOES", 11, -1 },
> -   { "glGetBooleanv", 11, _gloffset_GetBooleanv },
> -   { "glGetBufferParameteriv", 11, -1 },
> -   { "glGetBufferPointervOES", 11, -1 },
> -   { "glGetClipPlanef", 11, -1 },
> -   { "glGetClipPlanex", 11, -1 },
> -   { "glGetError", 11, _gloffset_GetError },
> -   { "glGetFixedv", 11, -1 },
> -   { "glGetFloatv", 11, _gloffset_GetFloatv },
> -   { "glGetFramebufferAttachmentParameterivOES", 11, -1 },
> -   { "glGetIntegerv", 11, _gloffset_GetIntegerv },
> -   { "glGetLightfv", 11, _gloffset_GetLightfv },
> -   { "glGetLightxv", 11, -1 },
> -   { "glGetMaterialfv", 11, _gloffset_GetMaterialfv },
> -   { "glGetMaterialxv", 11, -1 },
> -   { "glGetPointerv", 11, _gloffset_GetPointerv },
> -   { "glGetRenderbufferParameterivOES", 11, -1 },
> -   { "glGetString", 11, _gloffset_GetString },
> -   { "glGetTexEnvfv", 11, _gloffset_GetTexEnvfv },
> -   { "glGetTexEnviv", 11, _gloffset_GetTexEnviv },
> -   { "glGetTexEnvxv", 11, -1 },
> -   { "glGetTexGenfvOES", 11, _gloffset_GetTexGenfv },
> -   { "glGetTexGenivOES", 11, _gloffset_GetTexGeniv },
> -   { "glGetTexGenxvOES", 11, -1 },
> -   { "glGetTexParameterfv", 11, _gloffset_GetTexParameterfv },
> -   { "glGetTexParameteriv", 11, _gloffset_GetTexParameteriv },
> -   { "glGetTexParameterxv", 11, -1 },
> -   { "glHint", 11, _gloffset_Hint },
> -   { "glIsBuffer", 11, -1 },
> -   { "glIsEnabled", 11, _gloffset_IsEnabled },
> -   { "glIsFramebufferOES", 11, -1 },
> -   { "glIsRenderbufferOES", 11, -1 },
> -   { "glIsTexture", 11, _gloffset_IsTexture },
> -   { "glLightModelf", 11, _gloffset_LightModelf },
> -   { "glLightModelfv", 11, _gloffset_LightModelfv },
> -   { "glLightModelx", 11, -1 },
> -   { "glLightModelxv", 11, -1 },
> -   { "glLightf", 11, _gloffset_Lightf },
> -   { "glLightfv", 11, _gloffset_Lightfv },
> -   { "glLightx", 11, -1 },
> -   { "glLightxv", 11, -1 },
> -   { "glLineWidth", 11, _gloffset_LineWidth },
> -   { "glLineWidthx", 11, -1 },
> -   { "glLoadIdentity", 11, _gloffset_LoadIdentity },
> -   { "glLoadMatrixf", 11, _gloffset_LoadMatrixf },
> -   { "glLoadMatrixx", 11, -1 },
> -   { "glLogicOp", 11, _gloffset_LogicOp },
> -   { "glMapBufferOES", 11, -1 },
> -   { "glMapBufferRangeEXT", 11, -1 },
> -   { "glMaterialf", 11, _gloffset_Materialf },
> -   { "glMaterialfv", 11, _gloffset_Materialfv },
> -   { "glMaterialx", 11, -1 },
> -   { "glMaterialxv", 11, -1 },
> -   { "glMatrixMode", 11, _gloffset_MatrixMode },
> -   { "glMultMatrixf", 11, _gloffset_MultMatrixf },
> -   { "glMultMatrixx", 11, -1 },
> -   { "glMultiDrawArraysEXT", 11, -1 },
> -   { "glMultiDrawElementsEXT", 11, -1 },
> -   { "glMultiTexCoord4f", 11, _gloffset_MultiTexCoord4fARB },
> -   { "glMultiTexCoord4x", 11, -1 },
> -   { "glNormal3f", 11, _gloffset_Normal3f },
> -   { "glNormal3x", 11, -1 },
> -   { "glNormalPointer", 11, _gloffset_NormalPointer },
> -   { "glOrthof", 11, -1 },
> -   { "glOrthox", 11, -1 },
> -   { "glPixelStorei", 11, _gloffset_PixelStorei },
> -   { "glPointParameterf", 11, -1 },
> -   { "glPointParameterfv", 11, -1 },
> -   { "glPointParameterx", 11, -1 },
> -   { "glPointParameterxv", 11, -1 },
> -   { "glPointSize", 11, _gloffset_PointSize },
> -   { "glPointSizePointerOES", 11, -1 },
> -   { "glPointSizex", 11, -1 },
> -   { "glPolygonOffset", 11, _gloffset_PolygonOffset },
> -   { "glPolygonOffsetx", 11, -1 },
> -   { "glPopMatrix", 11, _gloffset_PopMatrix },
> -   { "glPushMatrix", 11, _gloffset_PushMatrix },
> -   { "glQueryMatrixxOES", 11, -1 },
> -   { "glReadPixels", 11, _gloffset_ReadPixels },
> -   { "glRenderbufferStorageOES", 11, -1 },
> -   { "glRotatef", 11, _gloffset_Rotatef },
> -   { "glRotatex", 11, -1 },
> -   { "glSampleCoverage", 11, -1 },
> -   { "glSampleCoveragex", 11, -1 },
> -   { "glScalef", 11, _gloffset_Scalef },
> -   { "glScalex", 11, -1 },
> -   { "glScissor", 11, _gloffset_Scissor },
> -   { "glShadeModel", 11, _gloffset_ShadeModel },
> -   { "glStencilFunc", 11, _gloffset_StencilFunc },
> -   { "glStencilMask", 11, _gloffset_StencilMask },
> -   { "glStencilOp", 11, _gloffset_StencilOp },
> -   { "glTexCoordPointer", 11, _gloffset_TexCoordPointer },
> -   { "glTexEnvf", 11, _gloffset_TexEnvf },
> -   { "glTexEnvfv", 11, _gloffset_TexEnvfv },
> -   { "glTexEnvi", 11, _gloffset_TexEnvi },
> -   { "glTexEnviv", 11, _gloffset_TexEnviv },
> -   { "glTexEnvx", 11, -1 },
> -   { "glTexEnvxv", 11, -1 },
> -   { "glTexGenfOES", 11, _gloffset_TexGenf },
> -   { "glTexGenfvOES", 11, _gloffset_TexGenfv },
> -   { "glTexGeniOES", 11, _gloffset_TexGeni },
> -   { "glTexGenivOES", 11, _gloffset_TexGeniv },
> -   { "glTexGenxOES", 11, -1 },
> -   { "glTexGenxvOES", 11, -1 },
> -   { "glTexImage2D", 11, _gloffset_TexImage2D },
> -   { "glTexParameterf", 11, _gloffset_TexParameterf },
> -   { "glTexParameterfv", 11, _gloffset_TexParameterfv },
> -   { "glTexParameteri", 11, _gloffset_TexParameteri },
> -   { "glTexParameteriv", 11, _gloffset_TexParameteriv },
> -   { "glTexParameterx", 11, -1 },
> -   { "glTexParameterxv", 11, -1 },
> -   { "glTexSubImage2D", 11, _gloffset_TexSubImage2D },
> -   { "glTranslatef", 11, _gloffset_Translatef },
> -   { "glTranslatex", 11, -1 },
> -   { "glUnmapBufferOES", 11, -1 },
> -   { "glVertexPointer", 11, _gloffset_VertexPointer },
> -   { "glViewport", 11, _gloffset_Viewport },
> -   { NULL, 0, -1 }
> -};
> -
> -const struct function gles2_functions_possible[] = {
> -   { "glActiveTexture", 20, _gloffset_ActiveTexture },
> -   { "glAttachShader", 20, -1 },
> -   { "glBindAttribLocation", 20, -1 },
> -   { "glBindBuffer", 20, -1 },
> -   { "glBindFramebuffer", 20, -1 },
> -   { "glBindRenderbuffer", 20, -1 },
> -   { "glBindTexture", 20, _gloffset_BindTexture },
> -   { "glBindVertexArrayOES", 20, -1 },
> -   { "glBlendColor", 20, _gloffset_BlendColor },
> -   { "glBlendEquation", 20, _gloffset_BlendEquation },
> -   { "glBlendEquationSeparate", 20, -1 },
> -   { "glBlendFunc", 20, _gloffset_BlendFunc },
> -   { "glBlendFuncSeparate", 20, -1 },
> -   { "glBufferData", 20, -1 },
> -   { "glBufferSubData", 20, -1 },
> -   { "glCheckFramebufferStatus", 20, -1 },
> -   { "glClear", 20, _gloffset_Clear },
> -   { "glClearColor", 20, _gloffset_ClearColor },
> -   { "glClearDepthf", 20, -1 },
> -   { "glClearStencil", 20, _gloffset_ClearStencil },
> -   { "glColorMask", 20, _gloffset_ColorMask },
> -   { "glCompileShader", 20, -1 },
> -   { "glCompressedTexImage2D", 20, -1 },
> -   { "glCompressedTexImage3DOES", 20, -1 },
> -   { "glCompressedTexSubImage2D", 20, -1 },
> -   { "glCompressedTexSubImage3DOES", 20, -1 },
> -   { "glCopyTexImage2D", 20, _gloffset_CopyTexImage2D },
> -   { "glCopyTexSubImage2D", 20, _gloffset_CopyTexSubImage2D },
> -   { "glCopyTexSubImage3DOES", 20, _gloffset_CopyTexSubImage3D },
> -   { "glCreateProgram", 20, -1 },
> -   { "glCreateShader", 20, -1 },
> -   { "glCullFace", 20, _gloffset_CullFace },
> -   { "glDeleteBuffers", 20, -1 },
> -   { "glDeleteFramebuffers", 20, -1 },
> -   { "glDeleteProgram", 20, -1 },
> -   { "glDeleteRenderbuffers", 20, -1 },
> -   { "glDeleteShader", 20, -1 },
> -   { "glDeleteTextures", 20, _gloffset_DeleteTextures },
> -   { "glDeleteVertexArraysOES", 20, -1 },
> -   { "glDepthFunc", 20, _gloffset_DepthFunc },
> -   { "glDepthMask", 20, _gloffset_DepthMask },
> -   { "glDepthRangef", 20, -1 },
> -   { "glDetachShader", 20, -1 },
> -   { "glDisable", 20, _gloffset_Disable },
> -   { "glDiscardFramebufferEXT", 20, -1 },
> -   { "glDisableVertexAttribArray", 20, -1 },
> -   { "glDrawArrays", 20, _gloffset_DrawArrays },
> -   { "glDrawBuffersNV", 20, -1 },
> -   { "glDrawElements", 20, _gloffset_DrawElements },
> -   { "glEGLImageTargetRenderbufferStorageOES", 20, -1 },
> -   { "glEGLImageTargetTexture2DOES", 20, -1 },
> -   { "glEnable", 20, _gloffset_Enable },
> -   { "glEnableVertexAttribArray", 20, -1 },
> -   { "glFinish", 20, _gloffset_Finish },
> -   { "glFlush", 20, _gloffset_Flush },
> -   { "glFlushMappedBufferRangeEXT", 20, -1 },
> -   { "glFramebufferRenderbuffer", 20, -1 },
> -   { "glFramebufferTexture2D", 20, -1 },
> -   { "glFramebufferTexture3DOES", 20, -1 },
> -   { "glFrontFace", 20, _gloffset_FrontFace },
> -   { "glGenBuffers", 20, -1 },
> -   { "glGenFramebuffers", 20, -1 },
> -   { "glGenRenderbuffers", 20, -1 },
> -   { "glGenTextures", 20, _gloffset_GenTextures },
> -   { "glGenVertexArraysOES", 20, -1 },
> -   { "glGenerateMipmap", 20, -1 },
> -   { "glGetActiveAttrib", 20, -1 },
> -   { "glGetActiveUniform", 20, -1 },
> -   { "glGetAttachedShaders", 20, -1 },
> -   { "glGetAttribLocation", 20, -1 },
> -   { "glGetBooleanv", 20, _gloffset_GetBooleanv },
> -   { "glGetBufferParameteriv", 20, -1 },
> -   { "glGetBufferPointervOES", 20, -1 },
> -   { "glGetError", 20, _gloffset_GetError },
> -   { "glGetFloatv", 20, _gloffset_GetFloatv },
> -   { "glGetFramebufferAttachmentParameteriv", 20, -1 },
> -   { "glGetIntegerv", 20, _gloffset_GetIntegerv },
> -   { "glGetProgramInfoLog", 20, -1 },
> -   { "glGetProgramiv", 20, -1 },
> -   { "glGetRenderbufferParameteriv", 20, -1 },
> -   { "glGetShaderInfoLog", 20, -1 },
> -   { "glGetShaderPrecisionFormat", 20, -1 },
> -   { "glGetShaderSource", 20, -1 },
> -   { "glGetShaderiv", 20, -1 },
> -   { "glGetString", 20, _gloffset_GetString },
> -   { "glGetTexParameterfv", 20, _gloffset_GetTexParameterfv },
> -   { "glGetTexParameteriv", 20, _gloffset_GetTexParameteriv },
> -   { "glGetUniformLocation", 20, -1 },
> -   { "glGetUniformfv", 20, -1 },
> -   { "glGetUniformiv", 20, -1 },
> -   { "glGetVertexAttribPointerv", 20, -1 },
> -   { "glGetVertexAttribfv", 20, -1 },
> -   { "glGetVertexAttribiv", 20, -1 },
> -   { "glHint", 20, _gloffset_Hint },
> -   { "glIsBuffer", 20, -1 },
> -   { "glIsEnabled", 20, _gloffset_IsEnabled },
> -   { "glIsFramebuffer", 20, -1 },
> -   { "glIsProgram", 20, -1 },
> -   { "glIsRenderbuffer", 20, -1 },
> -   { "glIsShader", 20, -1 },
> -   { "glIsTexture", 20, _gloffset_IsTexture },
> -   { "glIsVertexArrayOES", 20, -1 },
> -   { "glLineWidth", 20, _gloffset_LineWidth },
> -   { "glLinkProgram", 20, -1 },
> -   { "glMapBufferOES", 20, -1 },
> -   { "glMapBufferRangeEXT", 20, -1 },
> -   { "glMultiDrawArraysEXT", 20, -1 },
> -   { "glMultiDrawElementsEXT", 20, -1 },
> -   { "glPixelStorei", 20, _gloffset_PixelStorei },
> -   { "glPolygonOffset", 20, _gloffset_PolygonOffset },
> -   { "glReadBufferNV", 20, _gloffset_ReadBuffer },
> -   { "glReadPixels", 20, _gloffset_ReadPixels },
> -   { "glReleaseShaderCompiler", 20, -1 },
> -   { "glRenderbufferStorage", 20, -1 },
> -   { "glSampleCoverage", 20, -1 },
> -   { "glScissor", 20, _gloffset_Scissor },
> -   { "glShaderBinary", 20, -1 },
> -   { "glShaderSource", 20, -1 },
> -   { "glStencilFunc", 20, _gloffset_StencilFunc },
> -   { "glStencilFuncSeparate", 20, -1 },
> -   { "glStencilMask", 20, _gloffset_StencilMask },
> -   { "glStencilMaskSeparate", 20, -1 },
> -   { "glStencilOp", 20, _gloffset_StencilOp },
> -   { "glStencilOpSeparate", 20, -1 },
> -   { "glTexImage2D", 20, _gloffset_TexImage2D },
> -   { "glTexImage3DOES", 20, _gloffset_TexImage3D },
> -   { "glTexParameterf", 20, _gloffset_TexParameterf },
> -   { "glTexParameterfv", 20, _gloffset_TexParameterfv },
> -   { "glTexParameteri", 20, _gloffset_TexParameteri },
> -   { "glTexParameteriv", 20, _gloffset_TexParameteriv },
> -   { "glTexSubImage2D", 20, _gloffset_TexSubImage2D },
> -   { "glTexSubImage3DOES", 20, _gloffset_TexSubImage3D },
> -   { "glUniform1f", 20, -1 },
> -   { "glUniform1fv", 20, -1 },
> -   { "glUniform1i", 20, -1 },
> -   { "glUniform1iv", 20, -1 },
> -   { "glUniform2f", 20, -1 },
> -   { "glUniform2fv", 20, -1 },
> -   { "glUniform2i", 20, -1 },
> -   { "glUniform2iv", 20, -1 },
> -   { "glUniform3f", 20, -1 },
> -   { "glUniform3fv", 20, -1 },
> -   { "glUniform3i", 20, -1 },
> -   { "glUniform3iv", 20, -1 },
> -   { "glUniform4f", 20, -1 },
> -   { "glUniform4fv", 20, -1 },
> -   { "glUniform4i", 20, -1 },
> -   { "glUniform4iv", 20, -1 },
> -   { "glUniformMatrix2fv", 20, -1 },
> -   { "glUniformMatrix3fv", 20, -1 },
> -   { "glUniformMatrix4fv", 20, -1 },
> -   { "glUnmapBufferOES", 20, -1 },
> -   { "glUseProgram", 20, -1 },
> -   { "glValidateProgram", 20, -1 },
> -   { "glVertexAttrib1f", 20, -1 },
> -   { "glVertexAttrib1fv", 20, -1 },
> -   { "glVertexAttrib2f", 20, -1 },
> -   { "glVertexAttrib2fv", 20, -1 },
> -   { "glVertexAttrib3f", 20, -1 },
> -   { "glVertexAttrib3fv", 20, -1 },
> -   { "glVertexAttrib4f", 20, -1 },
> -   { "glVertexAttrib4fv", 20, -1 },
> -   { "glVertexAttribPointer", 20, -1 },
> -   { "glViewport", 20, _gloffset_Viewport },
> -
> -   /* GL_OES_get_program_binary - Also part of OpenGL ES 3.0. */
> -   { "glGetProgramBinaryOES", 20, -1 },
> -   { "glProgramBinaryOES", 20, -1 },
> -
> -   { NULL, 0, -1 }
> -};
> -
> -const struct function gles3_functions_possible[] = {
> -   { "glBeginQuery", 30, -1 },
> -   { "glBeginTransformFeedback", 30, -1 },
> -   { "glBindBufferBase", 30, -1 },
> -   { "glBindBufferRange", 30, -1 },
> -   { "glBindSampler", 30, -1 },
> -   { "glBindTransformFeedback", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glBindVertexArray", 30, -1 },
> -   { "glBlitFramebuffer", 30, -1 },
> -   { "glClearBufferfi", 30, -1 },
> -   { "glClearBufferfv", 30, -1 },
> -   { "glClearBufferiv", 30, -1 },
> -   { "glClearBufferuiv", 30, -1 },
> -   { "glClientWaitSync", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glCompressedTexImage3D", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glCompressedTexSubImage3D", 30, -1 },
> -   { "glCopyBufferSubData", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glCopyTexSubImage3D", 30, -1 },
> -   { "glDeleteQueries", 30, -1 },
> -   { "glDeleteSamplers", 30, -1 },
> -   { "glDeleteSync", 30, -1 },
> -   { "glDeleteTransformFeedbacks", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glDeleteVertexArrays", 30, -1 },
> -   { "glDrawArraysInstanced", 30, -1 },
> -   // We check for the aliased -NV version in GLES 2
> -   // { "glDrawBuffers", 30, -1 },
> -   { "glDrawElementsInstanced", 30, -1 },
> -   { "glDrawRangeElements", 30, -1 },
> -   { "glEndQuery", 30, -1 },
> -   { "glEndTransformFeedback", 30, -1 },
> -   { "glFenceSync", 30, -1 },
> -   // We check for the aliased -EXT version in GLES 2
> -   // { "glFlushMappedBufferRange", 30, -1 },
> -   { "glFramebufferTextureLayer", 30, -1 },
> -   { "glGenQueries", 30, -1 },
> -   { "glGenSamplers", 30, -1 },
> -   { "glGenTransformFeedbacks", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glGenVertexArrays", 30, -1 },
> -   { "glGetActiveUniformBlockiv", 30, -1 },
> -   { "glGetActiveUniformBlockName", 30, -1 },
> -   { "glGetActiveUniformsiv", 30, -1 },
> -   { "glGetBufferParameteri64v", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glGetBufferPointerv", 30, -1 },
> -   { "glGetFragDataLocation", 30, -1 },
> -   { "glGetInteger64i_v", 30, -1 },
> -   { "glGetInteger64v", 30, -1 },
> -   { "glGetIntegeri_v", 30, -1 },
> -   { "glGetInternalformativ", 30, -1 },
> -   // glGetProgramBinary aliases glGetProgramBinaryOES in GLES 2
> -   { "glGetQueryiv", 30, -1 },
> -   { "glGetQueryObjectuiv", 30, -1 },
> -   { "glGetSamplerParameterfv", 30, -1 },
> -   { "glGetSamplerParameteriv", 30, -1 },
> -   { "glGetStringi", 30, -1 },
> -   { "glGetSynciv", 30, -1 },
> -   { "glGetTransformFeedbackVarying", 30, -1 },
> -   { "glGetUniformBlockIndex", 30, -1 },
> -   { "glGetUniformIndices", 30, -1 },
> -   { "glGetUniformuiv", 30, -1 },
> -   { "glGetVertexAttribIiv", 30, -1 },
> -   { "glGetVertexAttribIuiv", 30, -1 },
> -   { "glInvalidateFramebuffer", 30, -1 },
> -   { "glInvalidateSubFramebuffer", 30, -1 },
> -   { "glIsQuery", 30, -1 },
> -   { "glIsSampler", 30, -1 },
> -   { "glIsSync", 30, -1 },
> -   { "glIsTransformFeedback", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glIsVertexArray", 30, -1 },
> -   // We check for the aliased -EXT version in GLES 2
> -   // { "glMapBufferRange", 30, -1 },
> -   { "glPauseTransformFeedback", 30, -1 },
> -   // glProgramBinary aliases glProgramBinaryOES in GLES 2
> -   { "glProgramParameteri", 30, -1 },
> -   // We check for the aliased -NV version in GLES 2
> -   // { "glReadBuffer", 30, -1 },
> -   { "glRenderbufferStorageMultisample", 30, -1 },
> -   { "glResumeTransformFeedback", 30, -1 },
> -   { "glSamplerParameterf", 30, -1 },
> -   { "glSamplerParameterfv", 30, -1 },
> -   { "glSamplerParameteri", 30, -1 },
> -   { "glSamplerParameteriv", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glTexImage3D", 30, -1 },
> -   { "glTexStorage2D", 30, -1 },
> -   { "glTexStorage3D", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glTexSubImage3D", 30, -1 },
> -   { "glTransformFeedbackVaryings", 30, -1 },
> -   { "glUniform1ui", 30, -1 },
> -   { "glUniform1uiv", 30, -1 },
> -   { "glUniform2ui", 30, -1 },
> -   { "glUniform2uiv", 30, -1 },
> -   { "glUniform3ui", 30, -1 },
> -   { "glUniform3uiv", 30, -1 },
> -   { "glUniform4ui", 30, -1 },
> -   { "glUniform4uiv", 30, -1 },
> -   { "glUniformBlockBinding", 30, -1 },
> -   { "glUniformMatrix2x3fv", 30, -1 },
> -   { "glUniformMatrix2x4fv", 30, -1 },
> -   { "glUniformMatrix3x2fv", 30, -1 },
> -   { "glUniformMatrix3x4fv", 30, -1 },
> -   { "glUniformMatrix4x2fv", 30, -1 },
> -   { "glUniformMatrix4x3fv", 30, -1 },
> -   // We check for the aliased -OES version in GLES 2
> -   // { "glUnmapBuffer", 30, -1 },
> -   { "glVertexAttribDivisor", 30, -1 },
> -   { "glVertexAttribI4i", 30, -1 },
> -   { "glVertexAttribI4iv", 30, -1 },
> -   { "glVertexAttribI4ui", 30, -1 },
> -   { "glVertexAttribI4uiv", 30, -1 },
> -   { "glVertexAttribIPointer", 30, -1 },
> -   { "glWaitSync", 30, -1 },
> -   { NULL, 0, -1 }
> -};
> 



More information about the mesa-dev mailing list