| /* |
| * 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 }, |
| { "glBlendEquationi", 40, -1 }, |
| { "glBlendEquationSeparatei", 40, -1 }, |
| { "glBlendFunci", 40, -1 }, |
| { "glBlendFuncSeparatei", 40, -1 }, |
| |
| /* 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 }, |
| { "glDrawElementsIndirect", 43, -1 }, |
| // { "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 }, |
| { "glActiveShaderProgram", 43, -1 }, |
| { "glCreateShaderProgramv", 43, -1 }, |
| { "glBindProgramPipeline", 43, -1 }, |
| { "glDeleteProgramPipelines", 43, -1 }, |
| { "glGenProgramPipelines", 43, -1 }, |
| { "glIsProgramPipeline", 43, -1 }, |
| { "glGetProgramPipelineiv", 43, -1 }, |
| { "glProgramUniform1i", 43, -1 }, |
| { "glProgramUniform1iv", 43, -1 }, |
| { "glProgramUniform1f", 43, -1 }, |
| { "glProgramUniform1fv", 43, -1 }, |
| // { "glProgramUniform1d", 43, -1 }, // XXX: Add to xml |
| // { "glProgramUniform1dv", 43, -1 }, // XXX: Add to xml |
| { "glProgramUniform1ui", 43, -1 }, |
| { "glProgramUniform1uiv", 43, -1 }, |
| { "glProgramUniform2i", 43, -1 }, |
| { "glProgramUniform2iv", 43, -1 }, |
| { "glProgramUniform2f", 43, -1 }, |
| { "glProgramUniform2fv", 43, -1 }, |
| // { "glProgramUniform2d", 43, -1 }, // XXX: Add to xml |
| // { "glProgramUniform2dv", 43, -1 }, // XXX: Add to xml |
| { "glProgramUniform2ui", 43, -1 }, |
| { "glProgramUniform2uiv", 43, -1 }, |
| { "glProgramUniform3i", 43, -1 }, |
| { "glProgramUniform3iv", 43, -1 }, |
| { "glProgramUniform3f", 43, -1 }, |
| { "glProgramUniform3fv", 43, -1 }, |
| // { "glProgramUniform3d", 43, -1 }, // XXX: Add to xml |
| // { "glProgramUniform3dv", 43, -1 }, // XXX: Add to xml |
| { "glProgramUniform3ui", 43, -1 }, |
| { "glProgramUniform3uiv", 43, -1 }, |
| { "glProgramUniform4i", 43, -1 }, |
| { "glProgramUniform4iv", 43, -1 }, |
| { "glProgramUniform4f", 43, -1 }, |
| { "glProgramUniform4fv", 43, -1 }, |
| // { "glProgramUniform4d", 43, -1 }, // XXX: Add to xml |
| // { "glProgramUniform4dv", 43, -1 }, // XXX: Add to xml |
| { "glProgramUniform4ui", 43, -1 }, |
| { "glProgramUniform4uiv", 43, -1 }, |
| { "glProgramUniformMatrix2fv", 43, -1 }, |
| { "glProgramUniformMatrix3fv", 43, -1 }, |
| { "glProgramUniformMatrix4fv", 43, -1 }, |
| // { "glProgramUniformMatrix2dv", 43, -1 }, // XXX: Add to xml |
| // { "glProgramUniformMatrix3dv", 43, -1 }, // XXX: Add to xml |
| // { "glProgramUniformMatrix4dv", 43, -1 }, // XXX: Add to xml |
| { "glProgramUniformMatrix2x3fv", 43, -1 }, |
| { "glProgramUniformMatrix3x2fv", 43, -1 }, |
| { "glProgramUniformMatrix2x4fv", 43, -1 }, |
| { "glProgramUniformMatrix4x2fv", 43, -1 }, |
| { "glProgramUniformMatrix3x4fv", 43, -1 }, |
| { "glProgramUniformMatrix4x3fv", 43, -1 }, |
| // { "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 }, |
| { "glGetProgramPipelineInfoLog", 43, -1 }, |
| // { "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 }, |
| { "glViewportIndexedf", 43, -1 }, |
| { "glViewportIndexedfv", 43, -1 }, |
| { "glScissorArrayv", 43, -1 }, |
| { "glScissorIndexed", 43, -1 }, |
| { "glScissorIndexedv", 43, -1 }, |
| { "glDepthRangeArrayv", 43, -1 }, |
| { "glDepthRangeIndexed", 43, -1 }, |
| { "glGetFloati_v", 43, -1 }, |
| { "glGetDoublei_v", 43, -1 }, |
| // { "glCreateSyncFromCLeventARB", 43, -1 }, // XXX: Add to xml |
| { "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 }, |
| { "glBindImageTexture", 43, -1 }, |
| { "glMemoryBarrier", 43, -1 }, |
| { "glTexStorage1D", 43, -1 }, |
| { "glTexStorage2D", 43, -1 }, |
| { "glTexStorage3D", 43, -1 }, |
| { "glTextureStorage1DEXT", 43, -1 }, |
| { "glTextureStorage2DEXT", 43, -1 }, |
| { "glTextureStorage3DEXT", 43, -1 }, |
| { "glClearBufferData", 43, -1 }, |
| { "glClearBufferSubData", 43, -1 }, |
| // { "glClearNamedBufferDataEXT", 43, -1 }, // XXX: Add to xml |
| // { "glClearNamedBufferSubDataEXT", 43, -1 }, // XXX: Add to xml |
| { "glDispatchCompute", 43, -1 }, |
| { "glDispatchComputeIndirect", 43, -1 }, |
| { "glCopyImageSubData", 43, -1 }, |
| { "glTextureView", 43, -1 }, |
| { "glBindVertexBuffer", 43, -1 }, |
| { "glVertexAttribFormat", 43, -1 }, |
| { "glVertexAttribIFormat", 43, -1 }, |
| { "glVertexAttribLFormat", 43, -1 }, |
| { "glVertexAttribBinding", 43, -1 }, |
| { "glVertexBindingDivisor", 43, -1 }, |
| // { "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 }, |
| { "glMultiDrawElementsIndirect", 43, -1 }, |
| // { "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_ARB_multi_bind */ |
| { "glBindBuffersBase", 44, -1 }, |
| { "glBindBuffersRange", 44, -1 }, |
| { "glBindTextures", 44, -1 }, |
| { "glBindSamplers", 44, -1 }, |
| { "glBindImageTextures", 44, -1 }, |
| { "glBindVertexBuffers", 44, -1 }, |
| |
| /* GL_KHR_debug/GL_ARB_debug_output */ |
| { "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 }, |
| /* aliased versions checked above */ |
| //{ "glDebugMessageControlARB", 11, -1 }, |
| //{ "glDebugMessageInsertARB", 11, -1 }, |
| //{ "glDebugMessageCallbackARB", 11, -1 }, |
| //{ "glGetDebugMessageLogARB", 11, -1 }, |
| |
| /* GL_AMD_performance_monitor */ |
| { "glGetPerfMonitorGroupsAMD", 11, -1 }, |
| { "glGetPerfMonitorCountersAMD", 11, -1 }, |
| { "glGetPerfMonitorGroupStringAMD", 11, -1 }, |
| { "glGetPerfMonitorCounterStringAMD", 11, -1 }, |
| { "glGetPerfMonitorCounterInfoAMD", 11, -1 }, |
| { "glGenPerfMonitorsAMD", 11, -1 }, |
| { "glDeletePerfMonitorsAMD", 11, -1 }, |
| { "glSelectPerfMonitorCountersAMD", 11, -1 }, |
| { "glBeginPerfMonitorAMD", 11, -1 }, |
| { "glEndPerfMonitorAMD", 11, -1 }, |
| { "glGetPerfMonitorCounterDataAMD", 11, -1 }, |
| |
| /* GL_INTEL_performance_query */ |
| { "glGetFirstPerfQueryIdINTEL", 30, -1 }, |
| { "glGetNextPerfQueryIdINTEL", 30, -1 }, |
| { "glGetPerfQueryIdByNameINTEL", 30, -1 }, |
| { "glGetPerfQueryInfoINTEL", 30, -1 }, |
| { "glGetPerfCounterInfoINTEL", 30, -1 }, |
| { "glCreatePerfQueryINTEL", 30, -1 }, |
| { "glDeletePerfQueryINTEL", 30, -1 }, |
| { "glBeginPerfQueryINTEL", 30, -1 }, |
| { "glEndPerfQueryINTEL", 30, -1 }, |
| { "glGetPerfQueryDataINTEL", 30, -1 }, |
| |
| /* GL_NV_vdpau_interop */ |
| { "glVDPAUInitNV", 11, -1 }, |
| { "glVDPAUFiniNV", 11, -1 }, |
| { "glVDPAURegisterVideoSurfaceNV", 11, -1 }, |
| { "glVDPAURegisterOutputSurfaceNV", 11, -1 }, |
| { "glVDPAUIsSurfaceNV", 11, -1 }, |
| { "glVDPAUUnregisterSurfaceNV", 11, -1 }, |
| { "glVDPAUGetSurfaceivNV", 11, -1 }, |
| { "glVDPAUSurfaceAccessNV", 11, -1 }, |
| { "glVDPAUMapSurfacesNV", 11, -1 }, |
| { "glVDPAUUnmapSurfacesNV", 11, -1 }, |
| |
| /* GL_ARB_buffer_storage */ |
| { "glBufferStorage", 43, -1 }, |
| |
| /* GL_ARB_clear_texture */ |
| { "glClearTexImage", 13, -1 }, |
| { "glClearTexSubImage", 13, -1 }, |
| |
| /* GL_ARB_clip_control */ |
| { "glClipControl", 45, -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 }, |
| |
| /* GL_EXT_separate_shader_objects - Also part of OpenGL ES 3.1. */ |
| { "glProgramParameteriEXT", 20, -1 }, |
| { "glUseProgramStagesEXT", 20, -1 }, |
| { "glActiveShaderProgramEXT", 20, -1 }, |
| { "glCreateShaderProgramvEXT", 20, -1 }, |
| { "glBindProgramPipelineEXT", 20, -1 }, |
| { "glDeleteProgramPipelinesEXT", 20, -1 }, |
| { "glGenProgramPipelinesEXT", 20, -1 }, |
| { "glIsProgramPipelineEXT", 20, -1 }, |
| { "glGetProgramPipelineivEXT", 20, -1 }, |
| { "glProgramUniform1iEXT", 20, -1 }, |
| { "glProgramUniform1ivEXT", 20, -1 }, |
| { "glProgramUniform1fEXT", 20, -1 }, |
| { "glProgramUniform1fvEXT", 20, -1 }, |
| { "glProgramUniform2iEXT", 20, -1 }, |
| { "glProgramUniform2ivEXT", 20, -1 }, |
| { "glProgramUniform2fEXT", 20, -1 }, |
| { "glProgramUniform2fvEXT", 20, -1 }, |
| { "glProgramUniform3iEXT", 20, -1 }, |
| { "glProgramUniform3ivEXT", 20, -1 }, |
| { "glProgramUniform3fEXT", 20, -1 }, |
| { "glProgramUniform3fvEXT", 20, -1 }, |
| { "glProgramUniform4iEXT", 20, -1 }, |
| { "glProgramUniform4ivEXT", 20, -1 }, |
| { "glProgramUniform4fEXT", 20, -1 }, |
| { "glProgramUniform4fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix2fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix3fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix4fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix2x3fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix3x2fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix2x4fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix4x2fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix3x4fvEXT", 20, -1 }, |
| { "glProgramUniformMatrix4x3fvEXT", 20, -1 }, |
| { "glValidateProgramPipelineEXT", 20, -1 }, |
| { "glGetProgramPipelineInfoLogEXT", 20, -1 }, |
| |
| /* GL_INTEL_performance_query */ |
| { "glGetFirstPerfQueryIdINTEL", 20, -1 }, |
| { "glGetNextPerfQueryIdINTEL", 20, -1 }, |
| { "glGetPerfQueryIdByNameINTEL", 20, -1 }, |
| { "glGetPerfQueryInfoINTEL", 20, -1 }, |
| { "glGetPerfCounterInfoINTEL", 20, -1 }, |
| { "glCreatePerfQueryINTEL", 20, -1 }, |
| { "glDeletePerfQueryINTEL", 20, -1 }, |
| { "glBeginPerfQueryINTEL", 20, -1 }, |
| { "glEndPerfQueryINTEL", 20, -1 }, |
| { "glGetPerfQueryDataINTEL", 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 aliases glProgramParameteriEXT in GLES 2 |
| // 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 }, |
| |
| /* GL_EXT_separate_shader_objects - Also part of OpenGL ES 3.1. */ |
| { "glProgramUniform1uiEXT", 30, -1 }, |
| { "glProgramUniform1uivEXT", 30, -1 }, |
| { "glProgramUniform2uiEXT", 30, -1 }, |
| { "glProgramUniform2uivEXT", 30, -1 }, |
| { "glProgramUniform3uiEXT", 30, -1 }, |
| { "glProgramUniform3uivEXT", 30, -1 }, |
| { "glProgramUniform4uiEXT", 30, -1 }, |
| { "glProgramUniform4uivEXT", 30, -1 }, |
| |
| { NULL, 0, -1 } |
| }; |