dispatch_sanity.cpp revision 848b8605
1/* 2 * Copyright © 2012 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24/** 25 * \name dispatch_sanity.cpp 26 * 27 * Verify that only set of functions that should be available in a particular 28 * API are available in that API. 29 * 30 * The list of expected functions originally came from the functions set by 31 * api_exec_es2.c. This file no longer exists in Mesa (but api_exec_es1.c was 32 * still generated at the time this test was written). It was the generated 33 * file that configured the dispatch table for ES2 contexts. This test 34 * verifies that all of the functions set by the old api_exec_es2.c (with the 35 * recent addition of VAO functions) are set in the dispatch table and 36 * everything else is a NOP. 37 * 38 * When adding extensions that add new functions, this test will need to be 39 * modified to expect dispatch functions for the new extension functions. 40 */ 41 42#include <gtest/gtest.h> 43 44extern "C" { 45#include "GL/gl.h" 46#include "GL/glext.h" 47#include "main/compiler.h" 48#include "main/api_exec.h" 49#include "main/context.h" 50#include "main/remap.h" 51#include "main/vtxfmt.h" 52#include "glapi/glapi.h" 53#include "drivers/common/driverfuncs.h" 54 55#include "swrast/swrast.h" 56#include "vbo/vbo.h" 57#include "tnl/tnl.h" 58#include "swrast_setup/swrast_setup.h" 59 60#ifndef GLAPIENTRYP 61#define GLAPIENTRYP GL_APIENTRYP 62#endif 63 64#include "main/dispatch.h" 65} 66 67struct function { 68 const char *name; 69 unsigned int Version; 70 int offset; 71}; 72 73extern const struct function gl_core_functions_possible[]; 74extern const struct function gles11_functions_possible[]; 75extern const struct function gles2_functions_possible[]; 76extern const struct function gles3_functions_possible[]; 77 78class DispatchSanity_test : public ::testing::Test { 79public: 80 virtual void SetUp(); 81 void SetUpCtx(gl_api api, unsigned int version); 82 83 struct gl_config visual; 84 struct dd_function_table driver_functions; 85 struct gl_context share_list; 86 struct gl_context ctx; 87}; 88 89void 90DispatchSanity_test::SetUp() 91{ 92 memset(&visual, 0, sizeof(visual)); 93 memset(&driver_functions, 0, sizeof(driver_functions)); 94 memset(&share_list, 0, sizeof(share_list)); 95 memset(&ctx, 0, sizeof(ctx)); 96 97 _mesa_init_driver_functions(&driver_functions); 98} 99 100void 101DispatchSanity_test::SetUpCtx(gl_api api, unsigned int version) 102{ 103 _mesa_initialize_context(&ctx, 104 api, 105 &visual, 106 NULL, // share_list 107 &driver_functions); 108 _vbo_CreateContext(&ctx); 109 110 ctx.Version = version; 111 112 _mesa_initialize_dispatch_tables(&ctx); 113 _mesa_initialize_vbo_vtxfmt(&ctx); 114} 115 116static const char * 117offset_to_proc_name_safe(unsigned offset) 118{ 119 const char *name = _glapi_get_proc_name(offset); 120 return name ? name : "???"; 121} 122 123/* Scan through the dispatch table and check that all the functions in 124 * _glapi_proc *table exist. When found, set their pointers in the table 125 * to _mesa_generic_nop. */ 126static void 127validate_functions(struct gl_context *ctx, const struct function *function_table) 128{ 129 _glapi_proc *table = (_glapi_proc *) ctx->Exec; 130 131 for (unsigned i = 0; function_table[i].name != NULL; i++) { 132 /* The context version is >= the GL version where the 133 function was introduced. Therefore, the function cannot 134 be set to the nop function. 135 */ 136 bool cant_be_nop = ctx->Version >= function_table[i].Version; 137 138 const int offset = (function_table[i].offset != -1) 139 ? function_table[i].offset 140 : _glapi_get_proc_offset(function_table[i].name); 141 142 ASSERT_NE(-1, offset) 143 << "Function: " << function_table[i].name; 144 ASSERT_EQ(offset, 145 _glapi_get_proc_offset(function_table[i].name)) 146 << "Function: " << function_table[i].name; 147 if (cant_be_nop) { 148 EXPECT_NE((_glapi_proc) _mesa_generic_nop, table[offset]) 149 << "Function: " << function_table[i].name 150 << " at offset " << offset; 151 } 152 153 table[offset] = (_glapi_proc) _mesa_generic_nop; 154 } 155} 156 157/* Scan through the table and ensure that there is nothing except 158 * _mesa_generic_nop (as set by validate_functions(). */ 159static void 160validate_nops(struct gl_context *ctx) 161{ 162 _glapi_proc *table = (_glapi_proc *) ctx->Exec; 163 164 const unsigned size = _glapi_get_dispatch_table_size(); 165 for (unsigned i = 0; i < size; i++) { 166 EXPECT_EQ((_glapi_proc) _mesa_generic_nop, table[i]) 167 << "i = " << i << " (" << offset_to_proc_name_safe(i) << ")"; 168 } 169} 170 171TEST_F(DispatchSanity_test, GL31_CORE) 172{ 173 SetUpCtx(API_OPENGL_CORE, 31); 174 validate_functions(&ctx, gl_core_functions_possible); 175 validate_nops(&ctx); 176} 177 178TEST_F(DispatchSanity_test, GLES11) 179{ 180 SetUpCtx(API_OPENGLES, 11); 181 validate_functions(&ctx, gles11_functions_possible); 182 validate_nops(&ctx); 183} 184 185TEST_F(DispatchSanity_test, GLES2) 186{ 187 SetUpCtx(API_OPENGLES2, 20); 188 validate_functions(&ctx, gles2_functions_possible); 189 validate_nops(&ctx); 190} 191 192TEST_F(DispatchSanity_test, GLES3) 193{ 194 SetUpCtx(API_OPENGLES2, 30); 195 validate_functions(&ctx, gles2_functions_possible); 196 validate_functions(&ctx, gles3_functions_possible); 197 validate_nops(&ctx); 198} 199 200const struct function gl_core_functions_possible[] = { 201 { "glCullFace", 10, -1 }, 202 { "glFrontFace", 10, -1 }, 203 { "glHint", 10, -1 }, 204 { "glLineWidth", 10, -1 }, 205 { "glPointSize", 10, -1 }, 206 { "glPolygonMode", 10, -1 }, 207 { "glScissor", 10, -1 }, 208 { "glTexParameterf", 10, -1 }, 209 { "glTexParameterfv", 10, -1 }, 210 { "glTexParameteri", 10, -1 }, 211 { "glTexParameteriv", 10, -1 }, 212 { "glTexImage1D", 10, -1 }, 213 { "glTexImage2D", 10, -1 }, 214 { "glDrawBuffer", 10, -1 }, 215 { "glClear", 10, -1 }, 216 { "glClearColor", 10, -1 }, 217 { "glClearStencil", 10, -1 }, 218 { "glClearDepth", 10, -1 }, 219 { "glStencilMask", 10, -1 }, 220 { "glColorMask", 10, -1 }, 221 { "glDepthMask", 10, -1 }, 222 { "glDisable", 10, -1 }, 223 { "glEnable", 10, -1 }, 224 { "glFinish", 10, -1 }, 225 { "glFlush", 10, -1 }, 226 { "glBlendFunc", 10, -1 }, 227 { "glLogicOp", 10, -1 }, 228 { "glStencilFunc", 10, -1 }, 229 { "glStencilOp", 10, -1 }, 230 { "glDepthFunc", 10, -1 }, 231 { "glPixelStoref", 10, -1 }, 232 { "glPixelStorei", 10, -1 }, 233 { "glReadBuffer", 10, -1 }, 234 { "glReadPixels", 10, -1 }, 235 { "glGetBooleanv", 10, -1 }, 236 { "glGetDoublev", 10, -1 }, 237 { "glGetError", 10, -1 }, 238 { "glGetFloatv", 10, -1 }, 239 { "glGetIntegerv", 10, -1 }, 240 { "glGetString", 10, -1 }, 241 { "glGetTexImage", 10, -1 }, 242 { "glGetTexParameterfv", 10, -1 }, 243 { "glGetTexParameteriv", 10, -1 }, 244 { "glGetTexLevelParameterfv", 10, -1 }, 245 { "glGetTexLevelParameteriv", 10, -1 }, 246 { "glIsEnabled", 10, -1 }, 247 { "glDepthRange", 10, -1 }, 248 { "glViewport", 10, -1 }, 249 250 /* GL 1.1 */ 251 { "glDrawArrays", 11, -1 }, 252 { "glDrawElements", 11, -1 }, 253 { "glGetPointerv", 11, -1 }, 254 { "glPolygonOffset", 11, -1 }, 255 { "glCopyTexImage1D", 11, -1 }, 256 { "glCopyTexImage2D", 11, -1 }, 257 { "glCopyTexSubImage1D", 11, -1 }, 258 { "glCopyTexSubImage2D", 11, -1 }, 259 { "glTexSubImage1D", 11, -1 }, 260 { "glTexSubImage2D", 11, -1 }, 261 { "glBindTexture", 11, -1 }, 262 { "glDeleteTextures", 11, -1 }, 263 { "glGenTextures", 11, -1 }, 264 { "glIsTexture", 11, -1 }, 265 266 /* GL 1.2 */ 267 { "glBlendColor", 12, -1 }, 268 { "glBlendEquation", 12, -1 }, 269 { "glDrawRangeElements", 12, -1 }, 270 { "glTexImage3D", 12, -1 }, 271 { "glTexSubImage3D", 12, -1 }, 272 { "glCopyTexSubImage3D", 12, -1 }, 273 274 /* GL 1.3 */ 275 { "glActiveTexture", 13, -1 }, 276 { "glSampleCoverage", 13, -1 }, 277 { "glCompressedTexImage3D", 13, -1 }, 278 { "glCompressedTexImage2D", 13, -1 }, 279 { "glCompressedTexImage1D", 13, -1 }, 280 { "glCompressedTexSubImage3D", 13, -1 }, 281 { "glCompressedTexSubImage2D", 13, -1 }, 282 { "glCompressedTexSubImage1D", 13, -1 }, 283 { "glGetCompressedTexImage", 13, -1 }, 284 285 /* GL 1.4 */ 286 { "glBlendFuncSeparate", 14, -1 }, 287 { "glMultiDrawArrays", 14, -1 }, 288 { "glMultiDrawElements", 14, -1 }, 289 { "glPointParameterf", 14, -1 }, 290 { "glPointParameterfv", 14, -1 }, 291 { "glPointParameteri", 14, -1 }, 292 { "glPointParameteriv", 14, -1 }, 293 294 /* GL 1.5 */ 295 { "glGenQueries", 15, -1 }, 296 { "glDeleteQueries", 15, -1 }, 297 { "glIsQuery", 15, -1 }, 298 { "glBeginQuery", 15, -1 }, 299 { "glEndQuery", 15, -1 }, 300 { "glGetQueryiv", 15, -1 }, 301 { "glGetQueryObjectiv", 15, -1 }, 302 { "glGetQueryObjectuiv", 15, -1 }, 303 { "glBindBuffer", 15, -1 }, 304 { "glDeleteBuffers", 15, -1 }, 305 { "glGenBuffers", 15, -1 }, 306 { "glIsBuffer", 15, -1 }, 307 { "glBufferData", 15, -1 }, 308 { "glBufferSubData", 15, -1 }, 309 { "glGetBufferSubData", 15, -1 }, 310 { "glMapBuffer", 15, -1 }, 311 { "glUnmapBuffer", 15, -1 }, 312 { "glGetBufferParameteriv", 15, -1 }, 313 { "glGetBufferPointerv", 15, -1 }, 314 315 /* GL 2.0 */ 316 { "glBlendEquationSeparate", 20, -1 }, 317 { "glDrawBuffers", 20, -1 }, 318 { "glStencilOpSeparate", 20, -1 }, 319 { "glStencilFuncSeparate", 20, -1 }, 320 { "glStencilMaskSeparate", 20, -1 }, 321 { "glAttachShader", 20, -1 }, 322 { "glBindAttribLocation", 20, -1 }, 323 { "glCompileShader", 20, -1 }, 324 { "glCreateProgram", 20, -1 }, 325 { "glCreateShader", 20, -1 }, 326 { "glDeleteProgram", 20, -1 }, 327 { "glDeleteShader", 20, -1 }, 328 { "glDetachShader", 20, -1 }, 329 { "glDisableVertexAttribArray", 20, -1 }, 330 { "glEnableVertexAttribArray", 20, -1 }, 331 { "glGetActiveAttrib", 20, -1 }, 332 { "glGetActiveUniform", 20, -1 }, 333 { "glGetAttachedShaders", 20, -1 }, 334 { "glGetAttribLocation", 20, -1 }, 335 { "glGetProgramiv", 20, -1 }, 336 { "glGetProgramInfoLog", 20, -1 }, 337 { "glGetShaderiv", 20, -1 }, 338 { "glGetShaderInfoLog", 20, -1 }, 339 { "glGetShaderSource", 20, -1 }, 340 { "glGetUniformLocation", 20, -1 }, 341 { "glGetUniformfv", 20, -1 }, 342 { "glGetUniformiv", 20, -1 }, 343 { "glGetVertexAttribdv", 20, -1 }, 344 { "glGetVertexAttribfv", 20, -1 }, 345 { "glGetVertexAttribiv", 20, -1 }, 346 { "glGetVertexAttribPointerv", 20, -1 }, 347 { "glIsProgram", 20, -1 }, 348 { "glIsShader", 20, -1 }, 349 { "glLinkProgram", 20, -1 }, 350 { "glShaderSource", 20, -1 }, 351 { "glUseProgram", 20, -1 }, 352 { "glUniform1f", 20, -1 }, 353 { "glUniform2f", 20, -1 }, 354 { "glUniform3f", 20, -1 }, 355 { "glUniform4f", 20, -1 }, 356 { "glUniform1i", 20, -1 }, 357 { "glUniform2i", 20, -1 }, 358 { "glUniform3i", 20, -1 }, 359 { "glUniform4i", 20, -1 }, 360 { "glUniform1fv", 20, -1 }, 361 { "glUniform2fv", 20, -1 }, 362 { "glUniform3fv", 20, -1 }, 363 { "glUniform4fv", 20, -1 }, 364 { "glUniform1iv", 20, -1 }, 365 { "glUniform2iv", 20, -1 }, 366 { "glUniform3iv", 20, -1 }, 367 { "glUniform4iv", 20, -1 }, 368 { "glUniformMatrix2fv", 20, -1 }, 369 { "glUniformMatrix3fv", 20, -1 }, 370 { "glUniformMatrix4fv", 20, -1 }, 371 { "glValidateProgram", 20, -1 }, 372 { "glVertexAttrib1d", 20, -1 }, 373 { "glVertexAttrib1dv", 20, -1 }, 374 { "glVertexAttrib1f", 20, -1 }, 375 { "glVertexAttrib1fv", 20, -1 }, 376 { "glVertexAttrib1s", 20, -1 }, 377 { "glVertexAttrib1sv", 20, -1 }, 378 { "glVertexAttrib2d", 20, -1 }, 379 { "glVertexAttrib2dv", 20, -1 }, 380 { "glVertexAttrib2f", 20, -1 }, 381 { "glVertexAttrib2fv", 20, -1 }, 382 { "glVertexAttrib2s", 20, -1 }, 383 { "glVertexAttrib2sv", 20, -1 }, 384 { "glVertexAttrib3d", 20, -1 }, 385 { "glVertexAttrib3dv", 20, -1 }, 386 { "glVertexAttrib3f", 20, -1 }, 387 { "glVertexAttrib3fv", 20, -1 }, 388 { "glVertexAttrib3s", 20, -1 }, 389 { "glVertexAttrib3sv", 20, -1 }, 390 { "glVertexAttrib4Nbv", 20, -1 }, 391 { "glVertexAttrib4Niv", 20, -1 }, 392 { "glVertexAttrib4Nsv", 20, -1 }, 393 { "glVertexAttrib4Nub", 20, -1 }, 394 { "glVertexAttrib4Nubv", 20, -1 }, 395 { "glVertexAttrib4Nuiv", 20, -1 }, 396 { "glVertexAttrib4Nusv", 20, -1 }, 397 { "glVertexAttrib4bv", 20, -1 }, 398 { "glVertexAttrib4d", 20, -1 }, 399 { "glVertexAttrib4dv", 20, -1 }, 400 { "glVertexAttrib4f", 20, -1 }, 401 { "glVertexAttrib4fv", 20, -1 }, 402 { "glVertexAttrib4iv", 20, -1 }, 403 { "glVertexAttrib4s", 20, -1 }, 404 { "glVertexAttrib4sv", 20, -1 }, 405 { "glVertexAttrib4ubv", 20, -1 }, 406 { "glVertexAttrib4uiv", 20, -1 }, 407 { "glVertexAttrib4usv", 20, -1 }, 408 { "glVertexAttribPointer", 20, -1 }, 409 410 /* GL 2.1 */ 411 { "glUniformMatrix2x3fv", 21, -1 }, 412 { "glUniformMatrix3x2fv", 21, -1 }, 413 { "glUniformMatrix2x4fv", 21, -1 }, 414 { "glUniformMatrix4x2fv", 21, -1 }, 415 { "glUniformMatrix3x4fv", 21, -1 }, 416 { "glUniformMatrix4x3fv", 21, -1 }, 417 418 /* GL 3.0 */ 419 { "glColorMaski", 30, -1 }, 420 { "glGetBooleani_v", 30, -1 }, 421 { "glGetIntegeri_v", 30, -1 }, 422 { "glEnablei", 30, -1 }, 423 { "glDisablei", 30, -1 }, 424 { "glIsEnabledi", 30, -1 }, 425 { "glBeginTransformFeedback", 30, -1 }, 426 { "glEndTransformFeedback", 30, -1 }, 427 { "glBindBufferRange", 30, -1 }, 428 { "glBindBufferBase", 30, -1 }, 429 { "glTransformFeedbackVaryings", 30, -1 }, 430 { "glGetTransformFeedbackVarying", 30, -1 }, 431 { "glClampColor", 30, -1 }, 432 { "glBeginConditionalRender", 30, -1 }, 433 { "glEndConditionalRender", 30, -1 }, 434 { "glVertexAttribIPointer", 30, -1 }, 435 { "glGetVertexAttribIiv", 30, -1 }, 436 { "glGetVertexAttribIuiv", 30, -1 }, 437 { "glVertexAttribI1i", 30, -1 }, 438 { "glVertexAttribI2i", 30, -1 }, 439 { "glVertexAttribI3i", 30, -1 }, 440 { "glVertexAttribI4i", 30, -1 }, 441 { "glVertexAttribI1ui", 30, -1 }, 442 { "glVertexAttribI2ui", 30, -1 }, 443 { "glVertexAttribI3ui", 30, -1 }, 444 { "glVertexAttribI4ui", 30, -1 }, 445 { "glVertexAttribI1iv", 30, -1 }, 446 { "glVertexAttribI2iv", 30, -1 }, 447 { "glVertexAttribI3iv", 30, -1 }, 448 { "glVertexAttribI4iv", 30, -1 }, 449 { "glVertexAttribI1uiv", 30, -1 }, 450 { "glVertexAttribI2uiv", 30, -1 }, 451 { "glVertexAttribI3uiv", 30, -1 }, 452 { "glVertexAttribI4uiv", 30, -1 }, 453 { "glVertexAttribI4bv", 30, -1 }, 454 { "glVertexAttribI4sv", 30, -1 }, 455 { "glVertexAttribI4ubv", 30, -1 }, 456 { "glVertexAttribI4usv", 30, -1 }, 457 { "glGetUniformuiv", 30, -1 }, 458 { "glBindFragDataLocation", 30, -1 }, 459 { "glGetFragDataLocation", 30, -1 }, 460 { "glUniform1ui", 30, -1 }, 461 { "glUniform2ui", 30, -1 }, 462 { "glUniform3ui", 30, -1 }, 463 { "glUniform4ui", 30, -1 }, 464 { "glUniform1uiv", 30, -1 }, 465 { "glUniform2uiv", 30, -1 }, 466 { "glUniform3uiv", 30, -1 }, 467 { "glUniform4uiv", 30, -1 }, 468 { "glTexParameterIiv", 30, -1 }, 469 { "glTexParameterIuiv", 30, -1 }, 470 { "glGetTexParameterIiv", 30, -1 }, 471 { "glGetTexParameterIuiv", 30, -1 }, 472 { "glClearBufferiv", 30, -1 }, 473 { "glClearBufferuiv", 30, -1 }, 474 { "glClearBufferfv", 30, -1 }, 475 { "glClearBufferfi", 30, -1 }, 476 { "glGetStringi", 30, -1 }, 477 478 /* GL 3.1 */ 479 { "glDrawArraysInstanced", 31, -1 }, 480 { "glDrawElementsInstanced", 31, -1 }, 481 { "glTexBuffer", 31, -1 }, 482 { "glPrimitiveRestartIndex", 31, -1 }, 483 484 /* GL_ARB_shader_objects */ 485 { "glDeleteObjectARB", 31, -1 }, 486 { "glGetHandleARB", 31, -1 }, 487 { "glDetachObjectARB", 31, -1 }, 488 { "glCreateShaderObjectARB", 31, -1 }, 489 { "glCreateProgramObjectARB", 31, -1 }, 490 { "glAttachObjectARB", 31, -1 }, 491 { "glGetObjectParameterfvARB", 31, -1 }, 492 { "glGetObjectParameterivARB", 31, -1 }, 493 { "glGetInfoLogARB", 31, -1 }, 494 { "glGetAttachedObjectsARB", 31, -1 }, 495 496 /* GL_ARB_get_program_binary */ 497 { "glGetProgramBinary", 30, -1 }, 498 { "glProgramBinary", 30, -1 }, 499 { "glProgramParameteri", 30, -1 }, 500 501 /* GL_EXT_transform_feedback */ 502 { "glBindBufferOffsetEXT", 31, -1 }, 503 504 /* GL_IBM_multimode_draw_arrays */ 505 { "glMultiModeDrawArraysIBM", 31, -1 }, 506 { "glMultiModeDrawElementsIBM", 31, -1 }, 507 508 /* GL_EXT_depth_bounds_test */ 509 { "glDepthBoundsEXT", 31, -1 }, 510 511 /* GL_apple_object_purgeable */ 512 { "glObjectPurgeableAPPLE", 31, -1 }, 513 { "glObjectUnpurgeableAPPLE", 31, -1 }, 514 { "glGetObjectParameterivAPPLE", 31, -1 }, 515 516 /* GL_ARB_instanced_arrays */ 517 { "glVertexAttribDivisorARB", 31, -1 }, 518 519 /* GL_NV_texture_barrier */ 520 { "glTextureBarrierNV", 31, -1 }, 521 522 /* GL_EXT_texture_integer */ 523 { "glClearColorIiEXT", 31, -1 }, 524 { "glClearColorIuiEXT", 31, -1 }, 525 526 /* GL_OES_EGL_image */ 527 { "glEGLImageTargetRenderbufferStorageOES", 31, -1 }, 528 { "glEGLImageTargetTexture2DOES", 31, -1 }, 529 530 /* GL 3.2 */ 531 { "glGetInteger64i_v", 32, -1 }, 532 { "glGetBufferParameteri64v", 32, -1 }, 533 { "glFramebufferTexture", 32, -1 }, 534 535 /* GL_ARB_geometry_shader4 */ 536 { "glProgramParameteriARB", 32, -1 }, 537 { "glFramebufferTextureARB", 32, -1 }, 538 { "glFramebufferTextureLayerARB", 32, -1 }, 539 { "glFramebufferTextureFaceARB", 32, -1 }, 540 541 /* GL 3.3 */ 542 { "glVertexAttribDivisor", 33, -1 }, 543 544 /* GL 4.0 */ 545 { "glMinSampleShading", 40, -1 }, 546 { "glBlendEquationi", 40, -1 }, 547 { "glBlendEquationSeparatei", 40, -1 }, 548 { "glBlendFunci", 40, -1 }, 549 { "glBlendFuncSeparatei", 40, -1 }, 550 551 /* GL 4.3 */ 552 { "glIsRenderbuffer", 43, -1 }, 553 { "glBindRenderbuffer", 43, -1 }, 554 { "glDeleteRenderbuffers", 43, -1 }, 555 { "glGenRenderbuffers", 43, -1 }, 556 { "glRenderbufferStorage", 43, -1 }, 557 { "glGetRenderbufferParameteriv", 43, -1 }, 558 { "glIsFramebuffer", 43, -1 }, 559 { "glBindFramebuffer", 43, -1 }, 560 { "glDeleteFramebuffers", 43, -1 }, 561 { "glGenFramebuffers", 43, -1 }, 562 { "glCheckFramebufferStatus", 43, -1 }, 563 { "glFramebufferTexture1D", 43, -1 }, 564 { "glFramebufferTexture2D", 43, -1 }, 565 { "glFramebufferTexture3D", 43, -1 }, 566 { "glFramebufferRenderbuffer", 43, -1 }, 567 { "glGetFramebufferAttachmentParameteriv", 43, -1 }, 568 { "glGenerateMipmap", 43, -1 }, 569 { "glBlitFramebuffer", 43, -1 }, 570 { "glRenderbufferStorageMultisample", 43, -1 }, 571 { "glFramebufferTextureLayer", 43, -1 }, 572 { "glMapBufferRange", 43, -1 }, 573 { "glFlushMappedBufferRange", 43, -1 }, 574 { "glBindVertexArray", 43, -1 }, 575 { "glDeleteVertexArrays", 43, -1 }, 576 { "glGenVertexArrays", 43, -1 }, 577 { "glIsVertexArray", 43, -1 }, 578 { "glGetUniformIndices", 43, -1 }, 579 { "glGetActiveUniformsiv", 43, -1 }, 580 { "glGetActiveUniformName", 43, -1 }, 581 { "glGetUniformBlockIndex", 43, -1 }, 582 { "glGetActiveUniformBlockiv", 43, -1 }, 583 { "glGetActiveUniformBlockName", 43, -1 }, 584 { "glUniformBlockBinding", 43, -1 }, 585 { "glCopyBufferSubData", 43, -1 }, 586 { "glDrawElementsBaseVertex", 43, -1 }, 587 { "glDrawRangeElementsBaseVertex", 43, -1 }, 588 { "glDrawElementsInstancedBaseVertex", 43, -1 }, 589 { "glMultiDrawElementsBaseVertex", 43, -1 }, 590 { "glProvokingVertex", 43, -1 }, 591 { "glFenceSync", 43, -1 }, 592 { "glIsSync", 43, -1 }, 593 { "glDeleteSync", 43, -1 }, 594 { "glClientWaitSync", 43, -1 }, 595 { "glWaitSync", 43, -1 }, 596 { "glGetInteger64v", 43, -1 }, 597 { "glGetSynciv", 43, -1 }, 598 { "glTexImage2DMultisample", 43, -1 }, 599 { "glTexImage3DMultisample", 43, -1 }, 600 { "glGetMultisamplefv", 43, -1 }, 601 { "glSampleMaski", 43, -1 }, 602 { "glBlendEquationiARB", 43, -1 }, 603 { "glBlendEquationSeparateiARB", 43, -1 }, 604 { "glBlendFunciARB", 43, -1 }, 605 { "glBlendFuncSeparateiARB", 43, -1 }, 606 { "glMinSampleShadingARB", 43, -1 }, // XXX: Add to xml 607// { "glNamedStringARB", 43, -1 }, // XXX: Add to xml 608// { "glDeleteNamedStringARB", 43, -1 }, // XXX: Add to xml 609// { "glCompileShaderIncludeARB", 43, -1 }, // XXX: Add to xml 610// { "glIsNamedStringARB", 43, -1 }, // XXX: Add to xml 611// { "glGetNamedStringARB", 43, -1 }, // XXX: Add to xml 612// { "glGetNamedStringivARB", 43, -1 }, // XXX: Add to xml 613 { "glBindFragDataLocationIndexed", 43, -1 }, 614 { "glGetFragDataIndex", 43, -1 }, 615 { "glGenSamplers", 43, -1 }, 616 { "glDeleteSamplers", 43, -1 }, 617 { "glIsSampler", 43, -1 }, 618 { "glBindSampler", 43, -1 }, 619 { "glSamplerParameteri", 43, -1 }, 620 { "glSamplerParameteriv", 43, -1 }, 621 { "glSamplerParameterf", 43, -1 }, 622 { "glSamplerParameterfv", 43, -1 }, 623 { "glSamplerParameterIiv", 43, -1 }, 624 { "glSamplerParameterIuiv", 43, -1 }, 625 { "glGetSamplerParameteriv", 43, -1 }, 626 { "glGetSamplerParameterIiv", 43, -1 }, 627 { "glGetSamplerParameterfv", 43, -1 }, 628 { "glGetSamplerParameterIuiv", 43, -1 }, 629 { "glQueryCounter", 43, -1 }, 630 { "glGetQueryObjecti64v", 43, -1 }, 631 { "glGetQueryObjectui64v", 43, -1 }, 632 { "glVertexP2ui", 43, -1 }, 633 { "glVertexP2uiv", 43, -1 }, 634 { "glVertexP3ui", 43, -1 }, 635 { "glVertexP3uiv", 43, -1 }, 636 { "glVertexP4ui", 43, -1 }, 637 { "glVertexP4uiv", 43, -1 }, 638 { "glTexCoordP1ui", 43, -1 }, 639 { "glTexCoordP1uiv", 43, -1 }, 640 { "glTexCoordP2ui", 43, -1 }, 641 { "glTexCoordP2uiv", 43, -1 }, 642 { "glTexCoordP3ui", 43, -1 }, 643 { "glTexCoordP3uiv", 43, -1 }, 644 { "glTexCoordP4ui", 43, -1 }, 645 { "glTexCoordP4uiv", 43, -1 }, 646 { "glMultiTexCoordP1ui", 43, -1 }, 647 { "glMultiTexCoordP1uiv", 43, -1 }, 648 { "glMultiTexCoordP2ui", 43, -1 }, 649 { "glMultiTexCoordP2uiv", 43, -1 }, 650 { "glMultiTexCoordP3ui", 43, -1 }, 651 { "glMultiTexCoordP3uiv", 43, -1 }, 652 { "glMultiTexCoordP4ui", 43, -1 }, 653 { "glMultiTexCoordP4uiv", 43, -1 }, 654 { "glNormalP3ui", 43, -1 }, 655 { "glNormalP3uiv", 43, -1 }, 656 { "glColorP3ui", 43, -1 }, 657 { "glColorP3uiv", 43, -1 }, 658 { "glColorP4ui", 43, -1 }, 659 { "glColorP4uiv", 43, -1 }, 660 { "glSecondaryColorP3ui", 43, -1 }, 661 { "glSecondaryColorP3uiv", 43, -1 }, 662 { "glVertexAttribP1ui", 43, -1 }, 663 { "glVertexAttribP1uiv", 43, -1 }, 664 { "glVertexAttribP2ui", 43, -1 }, 665 { "glVertexAttribP2uiv", 43, -1 }, 666 { "glVertexAttribP3ui", 43, -1 }, 667 { "glVertexAttribP3uiv", 43, -1 }, 668 { "glVertexAttribP4ui", 43, -1 }, 669 { "glVertexAttribP4uiv", 43, -1 }, 670 { "glDrawArraysIndirect", 43, -1 }, 671 { "glDrawElementsIndirect", 43, -1 }, 672// { "glUniform1d", 43, -1 }, // XXX: Add to xml 673// { "glUniform2d", 43, -1 }, // XXX: Add to xml 674// { "glUniform3d", 43, -1 }, // XXX: Add to xml 675// { "glUniform4d", 43, -1 }, // XXX: Add to xml 676// { "glUniform1dv", 43, -1 }, // XXX: Add to xml 677// { "glUniform2dv", 43, -1 }, // XXX: Add to xml 678// { "glUniform3dv", 43, -1 }, // XXX: Add to xml 679// { "glUniform4dv", 43, -1 }, // XXX: Add to xml 680// { "glUniformMatrix2dv", 43, -1 }, // XXX: Add to xml 681// { "glUniformMatrix3dv", 43, -1 }, // XXX: Add to xml 682// { "glUniformMatrix4dv", 43, -1 }, // XXX: Add to xml 683// { "glUniformMatrix2x3dv", 43, -1 }, // XXX: Add to xml 684// { "glUniformMatrix2x4dv", 43, -1 }, // XXX: Add to xml 685// { "glUniformMatrix3x2dv", 43, -1 }, // XXX: Add to xml 686// { "glUniformMatrix3x4dv", 43, -1 }, // XXX: Add to xml 687// { "glUniformMatrix4x2dv", 43, -1 }, // XXX: Add to xml 688// { "glUniformMatrix4x3dv", 43, -1 }, // XXX: Add to xml 689// { "glGetUniformdv", 43, -1 }, // XXX: Add to xml 690// { "glGetSubroutineUniformLocation", 43, -1 }, // XXX: Add to xml 691// { "glGetSubroutineIndex", 43, -1 }, // XXX: Add to xml 692// { "glGetActiveSubroutineUniformiv", 43, -1 }, // XXX: Add to xml 693// { "glGetActiveSubroutineUniformName", 43, -1 }, // XXX: Add to xml 694// { "glGetActiveSubroutineName", 43, -1 }, // XXX: Add to xml 695// { "glUniformSubroutinesuiv", 43, -1 }, // XXX: Add to xml 696// { "glGetUniformSubroutineuiv", 43, -1 }, // XXX: Add to xml 697// { "glGetProgramStageiv", 43, -1 }, // XXX: Add to xml 698// { "glPatchParameteri", 43, -1 }, // XXX: Add to xml 699// { "glPatchParameterfv", 43, -1 }, // XXX: Add to xml 700 { "glBindTransformFeedback", 43, -1 }, 701 { "glDeleteTransformFeedbacks", 43, -1 }, 702 { "glGenTransformFeedbacks", 43, -1 }, 703 { "glIsTransformFeedback", 43, -1 }, 704 { "glPauseTransformFeedback", 43, -1 }, 705 { "glResumeTransformFeedback", 43, -1 }, 706 { "glDrawTransformFeedback", 43, -1 }, 707 { "glDrawTransformFeedbackStream", 43, -1 }, 708 { "glBeginQueryIndexed", 43, -1 }, 709 { "glEndQueryIndexed", 43, -1 }, 710 { "glGetQueryIndexediv", 43, -1 }, 711 { "glReleaseShaderCompiler", 43, -1 }, 712 { "glShaderBinary", 43, -1 }, 713 { "glGetShaderPrecisionFormat", 43, -1 }, 714 { "glDepthRangef", 43, -1 }, 715 { "glClearDepthf", 43, -1 }, 716 { "glGetProgramBinary", 43, -1 }, 717 { "glProgramBinary", 43, -1 }, 718 { "glProgramParameteri", 43, -1 }, 719 { "glUseProgramStages", 43, -1 }, 720 { "glActiveShaderProgram", 43, -1 }, 721 { "glCreateShaderProgramv", 43, -1 }, 722 { "glBindProgramPipeline", 43, -1 }, 723 { "glDeleteProgramPipelines", 43, -1 }, 724 { "glGenProgramPipelines", 43, -1 }, 725 { "glIsProgramPipeline", 43, -1 }, 726 { "glGetProgramPipelineiv", 43, -1 }, 727 { "glProgramUniform1i", 43, -1 }, 728 { "glProgramUniform1iv", 43, -1 }, 729 { "glProgramUniform1f", 43, -1 }, 730 { "glProgramUniform1fv", 43, -1 }, 731// { "glProgramUniform1d", 43, -1 }, // XXX: Add to xml 732// { "glProgramUniform1dv", 43, -1 }, // XXX: Add to xml 733 { "glProgramUniform1ui", 43, -1 }, 734 { "glProgramUniform1uiv", 43, -1 }, 735 { "glProgramUniform2i", 43, -1 }, 736 { "glProgramUniform2iv", 43, -1 }, 737 { "glProgramUniform2f", 43, -1 }, 738 { "glProgramUniform2fv", 43, -1 }, 739// { "glProgramUniform2d", 43, -1 }, // XXX: Add to xml 740// { "glProgramUniform2dv", 43, -1 }, // XXX: Add to xml 741 { "glProgramUniform2ui", 43, -1 }, 742 { "glProgramUniform2uiv", 43, -1 }, 743 { "glProgramUniform3i", 43, -1 }, 744 { "glProgramUniform3iv", 43, -1 }, 745 { "glProgramUniform3f", 43, -1 }, 746 { "glProgramUniform3fv", 43, -1 }, 747// { "glProgramUniform3d", 43, -1 }, // XXX: Add to xml 748// { "glProgramUniform3dv", 43, -1 }, // XXX: Add to xml 749 { "glProgramUniform3ui", 43, -1 }, 750 { "glProgramUniform3uiv", 43, -1 }, 751 { "glProgramUniform4i", 43, -1 }, 752 { "glProgramUniform4iv", 43, -1 }, 753 { "glProgramUniform4f", 43, -1 }, 754 { "glProgramUniform4fv", 43, -1 }, 755// { "glProgramUniform4d", 43, -1 }, // XXX: Add to xml 756// { "glProgramUniform4dv", 43, -1 }, // XXX: Add to xml 757 { "glProgramUniform4ui", 43, -1 }, 758 { "glProgramUniform4uiv", 43, -1 }, 759 { "glProgramUniformMatrix2fv", 43, -1 }, 760 { "glProgramUniformMatrix3fv", 43, -1 }, 761 { "glProgramUniformMatrix4fv", 43, -1 }, 762// { "glProgramUniformMatrix2dv", 43, -1 }, // XXX: Add to xml 763// { "glProgramUniformMatrix3dv", 43, -1 }, // XXX: Add to xml 764// { "glProgramUniformMatrix4dv", 43, -1 }, // XXX: Add to xml 765 { "glProgramUniformMatrix2x3fv", 43, -1 }, 766 { "glProgramUniformMatrix3x2fv", 43, -1 }, 767 { "glProgramUniformMatrix2x4fv", 43, -1 }, 768 { "glProgramUniformMatrix4x2fv", 43, -1 }, 769 { "glProgramUniformMatrix3x4fv", 43, -1 }, 770 { "glProgramUniformMatrix4x3fv", 43, -1 }, 771// { "glProgramUniformMatrix2x3dv", 43, -1 }, // XXX: Add to xml 772// { "glProgramUniformMatrix3x2dv", 43, -1 }, // XXX: Add to xml 773// { "glProgramUniformMatrix2x4dv", 43, -1 }, // XXX: Add to xml 774// { "glProgramUniformMatrix4x2dv", 43, -1 }, // XXX: Add to xml 775// { "glProgramUniformMatrix3x4dv", 43, -1 }, // XXX: Add to xml 776// { "glProgramUniformMatrix4x3dv", 43, -1 }, // XXX: Add to xml 777 { "glValidateProgramPipeline", 43, -1 }, 778 { "glGetProgramPipelineInfoLog", 43, -1 }, 779// { "glVertexAttribL1d", 43, -1 }, // XXX: Add to xml 780// { "glVertexAttribL2d", 43, -1 }, // XXX: Add to xml 781// { "glVertexAttribL3d", 43, -1 }, // XXX: Add to xml 782// { "glVertexAttribL4d", 43, -1 }, // XXX: Add to xml 783// { "glVertexAttribL1dv", 43, -1 }, // XXX: Add to xml 784// { "glVertexAttribL2dv", 43, -1 }, // XXX: Add to xml 785// { "glVertexAttribL3dv", 43, -1 }, // XXX: Add to xml 786// { "glVertexAttribL4dv", 43, -1 }, // XXX: Add to xml 787// { "glVertexAttribLPointer", 43, -1 }, // XXX: Add to xml 788// { "glGetVertexAttribLdv", 43, -1 }, // XXX: Add to xml 789 { "glViewportArrayv", 43, -1 }, 790 { "glViewportIndexedf", 43, -1 }, 791 { "glViewportIndexedfv", 43, -1 }, 792 { "glScissorArrayv", 43, -1 }, 793 { "glScissorIndexed", 43, -1 }, 794 { "glScissorIndexedv", 43, -1 }, 795 { "glDepthRangeArrayv", 43, -1 }, 796 { "glDepthRangeIndexed", 43, -1 }, 797 { "glGetFloati_v", 43, -1 }, 798 { "glGetDoublei_v", 43, -1 }, 799// { "glCreateSyncFromCLeventARB", 43, -1 }, // XXX: Add to xml 800 { "glGetGraphicsResetStatusARB", 43, -1 }, 801 { "glGetnMapdvARB", 43, -1 }, 802 { "glGetnMapfvARB", 43, -1 }, 803 { "glGetnMapivARB", 43, -1 }, 804 { "glGetnPixelMapfvARB", 43, -1 }, 805 { "glGetnPixelMapuivARB", 43, -1 }, 806 { "glGetnPixelMapusvARB", 43, -1 }, 807 { "glGetnPolygonStippleARB", 43, -1 }, 808 { "glGetnColorTableARB", 43, -1 }, 809 { "glGetnConvolutionFilterARB", 43, -1 }, 810 { "glGetnSeparableFilterARB", 43, -1 }, 811 { "glGetnHistogramARB", 43, -1 }, 812 { "glGetnMinmaxARB", 43, -1 }, 813 { "glGetnTexImageARB", 43, -1 }, 814 { "glReadnPixelsARB", 43, -1 }, 815 { "glGetnCompressedTexImageARB", 43, -1 }, 816 { "glGetnUniformfvARB", 43, -1 }, 817 { "glGetnUniformivARB", 43, -1 }, 818 { "glGetnUniformuivARB", 43, -1 }, 819 { "glGetnUniformdvARB", 43, -1 }, 820 { "glDrawArraysInstancedBaseInstance", 43, -1 }, 821 { "glDrawElementsInstancedBaseInstance", 43, -1 }, 822 { "glDrawElementsInstancedBaseVertexBaseInstance", 43, -1 }, 823 { "glDrawTransformFeedbackInstanced", 43, -1 }, 824 { "glDrawTransformFeedbackStreamInstanced", 43, -1 }, 825// { "glGetInternalformativ", 43, -1 }, // XXX: Add to xml 826 { "glGetActiveAtomicCounterBufferiv", 43, -1 }, 827 { "glBindImageTexture", 43, -1 }, 828 { "glMemoryBarrier", 43, -1 }, 829 { "glTexStorage1D", 43, -1 }, 830 { "glTexStorage2D", 43, -1 }, 831 { "glTexStorage3D", 43, -1 }, 832 { "glTextureStorage1DEXT", 43, -1 }, 833 { "glTextureStorage2DEXT", 43, -1 }, 834 { "glTextureStorage3DEXT", 43, -1 }, 835 { "glClearBufferData", 43, -1 }, 836 { "glClearBufferSubData", 43, -1 }, 837// { "glClearNamedBufferDataEXT", 43, -1 }, // XXX: Add to xml 838// { "glClearNamedBufferSubDataEXT", 43, -1 }, // XXX: Add to xml 839 { "glDispatchCompute", 43, -1 }, 840 { "glDispatchComputeIndirect", 43, -1 }, 841 { "glCopyImageSubData", 43, -1 }, 842 { "glTextureView", 43, -1 }, 843 { "glBindVertexBuffer", 43, -1 }, 844 { "glVertexAttribFormat", 43, -1 }, 845 { "glVertexAttribIFormat", 43, -1 }, 846 { "glVertexAttribLFormat", 43, -1 }, 847 { "glVertexAttribBinding", 43, -1 }, 848 { "glVertexBindingDivisor", 43, -1 }, 849// { "glVertexArrayBindVertexBufferEXT", 43, -1 }, // XXX: Add to xml 850// { "glVertexArrayVertexAttribFormatEXT", 43, -1 }, // XXX: Add to xml 851// { "glVertexArrayVertexAttribIFormatEXT", 43, -1 }, // XXX: Add to xml 852// { "glVertexArrayVertexAttribLFormatEXT", 43, -1 }, // XXX: Add to xml 853// { "glVertexArrayVertexAttribBindingEXT", 43, -1 }, // XXX: Add to xml 854// { "glVertexArrayVertexBindingDivisorEXT", 43, -1 }, // XXX: Add to xml 855// { "glFramebufferParameteri", 43, -1 }, // XXX: Add to xml 856// { "glGetFramebufferParameteriv", 43, -1 }, // XXX: Add to xml 857// { "glNamedFramebufferParameteriEXT", 43, -1 }, // XXX: Add to xml 858// { "glGetNamedFramebufferParameterivEXT", 43, -1 }, // XXX: Add to xml 859// { "glGetInternalformati64v", 43, -1 }, // XXX: Add to xml 860 { "glInvalidateTexSubImage", 43, -1 }, 861 { "glInvalidateTexImage", 43, -1 }, 862 { "glInvalidateBufferSubData", 43, -1 }, 863 { "glInvalidateBufferData", 43, -1 }, 864 { "glInvalidateFramebuffer", 43, -1 }, 865 { "glInvalidateSubFramebuffer", 43, -1 }, 866 { "glMultiDrawArraysIndirect", 43, -1 }, 867 { "glMultiDrawElementsIndirect", 43, -1 }, 868// { "glGetProgramInterfaceiv", 43, -1 }, // XXX: Add to xml 869// { "glGetProgramResourceIndex", 43, -1 }, // XXX: Add to xml 870// { "glGetProgramResourceName", 43, -1 }, // XXX: Add to xml 871// { "glGetProgramResourceiv", 43, -1 }, // XXX: Add to xml 872// { "glGetProgramResourceLocation", 43, -1 }, // XXX: Add to xml 873// { "glGetProgramResourceLocationIndex", 43, -1 }, // XXX: Add to xml 874// { "glShaderStorageBlockBinding", 43, -1 }, // XXX: Add to xml 875 { "glTexBufferRange", 43, -1 }, 876// { "glTextureBufferRangeEXT", 43, -1 }, // XXX: Add to xml 877 { "glTexStorage2DMultisample", 43, -1 }, 878 { "glTexStorage3DMultisample", 43, -1 }, 879// { "glTextureStorage2DMultisampleEXT", 43, -1 }, // XXX: Add to xml 880// { "glTextureStorage3DMultisampleEXT", 43, -1 }, // XXX: Add to xml 881 882 /* GL_ARB_internalformat_query */ 883 { "glGetInternalformativ", 30, -1 }, 884 885 /* GL_ARB_multi_bind */ 886 { "glBindBuffersBase", 44, -1 }, 887 { "glBindBuffersRange", 44, -1 }, 888 { "glBindTextures", 44, -1 }, 889 { "glBindSamplers", 44, -1 }, 890 { "glBindImageTextures", 44, -1 }, 891 { "glBindVertexBuffers", 44, -1 }, 892 893 /* GL_KHR_debug/GL_ARB_debug_output */ 894 { "glPushDebugGroup", 11, -1 }, 895 { "glPopDebugGroup", 11, -1 }, 896 { "glDebugMessageCallback", 11, -1 }, 897 { "glDebugMessageControl", 11, -1 }, 898 { "glDebugMessageInsert", 11, -1 }, 899 { "glGetDebugMessageLog", 11, -1 }, 900 { "glGetObjectLabel", 11, -1 }, 901 { "glGetObjectPtrLabel", 11, -1 }, 902 { "glObjectLabel", 11, -1 }, 903 { "glObjectPtrLabel", 11, -1 }, 904 /* aliased versions checked above */ 905 //{ "glDebugMessageControlARB", 11, -1 }, 906 //{ "glDebugMessageInsertARB", 11, -1 }, 907 //{ "glDebugMessageCallbackARB", 11, -1 }, 908 //{ "glGetDebugMessageLogARB", 11, -1 }, 909 910 /* GL_AMD_performance_monitor */ 911 { "glGetPerfMonitorGroupsAMD", 11, -1 }, 912 { "glGetPerfMonitorCountersAMD", 11, -1 }, 913 { "glGetPerfMonitorGroupStringAMD", 11, -1 }, 914 { "glGetPerfMonitorCounterStringAMD", 11, -1 }, 915 { "glGetPerfMonitorCounterInfoAMD", 11, -1 }, 916 { "glGenPerfMonitorsAMD", 11, -1 }, 917 { "glDeletePerfMonitorsAMD", 11, -1 }, 918 { "glSelectPerfMonitorCountersAMD", 11, -1 }, 919 { "glBeginPerfMonitorAMD", 11, -1 }, 920 { "glEndPerfMonitorAMD", 11, -1 }, 921 { "glGetPerfMonitorCounterDataAMD", 11, -1 }, 922 923 /* GL_INTEL_performance_query */ 924 { "glGetFirstPerfQueryIdINTEL", 30, -1 }, 925 { "glGetNextPerfQueryIdINTEL", 30, -1 }, 926 { "glGetPerfQueryIdByNameINTEL", 30, -1 }, 927 { "glGetPerfQueryInfoINTEL", 30, -1 }, 928 { "glGetPerfCounterInfoINTEL", 30, -1 }, 929 { "glCreatePerfQueryINTEL", 30, -1 }, 930 { "glDeletePerfQueryINTEL", 30, -1 }, 931 { "glBeginPerfQueryINTEL", 30, -1 }, 932 { "glEndPerfQueryINTEL", 30, -1 }, 933 { "glGetPerfQueryDataINTEL", 30, -1 }, 934 935 /* GL_NV_vdpau_interop */ 936 { "glVDPAUInitNV", 11, -1 }, 937 { "glVDPAUFiniNV", 11, -1 }, 938 { "glVDPAURegisterVideoSurfaceNV", 11, -1 }, 939 { "glVDPAURegisterOutputSurfaceNV", 11, -1 }, 940 { "glVDPAUIsSurfaceNV", 11, -1 }, 941 { "glVDPAUUnregisterSurfaceNV", 11, -1 }, 942 { "glVDPAUGetSurfaceivNV", 11, -1 }, 943 { "glVDPAUSurfaceAccessNV", 11, -1 }, 944 { "glVDPAUMapSurfacesNV", 11, -1 }, 945 { "glVDPAUUnmapSurfacesNV", 11, -1 }, 946 947 /* GL_ARB_buffer_storage */ 948 { "glBufferStorage", 43, -1 }, 949 950 /* GL_ARB_clear_texture */ 951 { "glClearTexImage", 13, -1 }, 952 { "glClearTexSubImage", 13, -1 }, 953 954 { NULL, 0, -1 } 955}; 956 957const struct function gles11_functions_possible[] = { 958 { "glActiveTexture", 11, _gloffset_ActiveTexture }, 959 { "glAlphaFunc", 11, _gloffset_AlphaFunc }, 960 { "glAlphaFuncx", 11, -1 }, 961 { "glBindBuffer", 11, -1 }, 962 { "glBindFramebufferOES", 11, -1 }, 963 { "glBindRenderbufferOES", 11, -1 }, 964 { "glBindTexture", 11, _gloffset_BindTexture }, 965 { "glBlendEquationOES", 11, _gloffset_BlendEquation }, 966 { "glBlendEquationSeparateOES", 11, -1 }, 967 { "glBlendFunc", 11, _gloffset_BlendFunc }, 968 { "glBlendFuncSeparateOES", 11, -1 }, 969 { "glBufferData", 11, -1 }, 970 { "glBufferSubData", 11, -1 }, 971 { "glCheckFramebufferStatusOES", 11, -1 }, 972 { "glClear", 11, _gloffset_Clear }, 973 { "glClearColor", 11, _gloffset_ClearColor }, 974 { "glClearColorx", 11, -1 }, 975 { "glClearDepthf", 11, -1 }, 976 { "glClearDepthx", 11, -1 }, 977 { "glClearStencil", 11, _gloffset_ClearStencil }, 978 { "glClientActiveTexture", 11, _gloffset_ClientActiveTexture }, 979 { "glClipPlanef", 11, -1 }, 980 { "glClipPlanex", 11, -1 }, 981 { "glColor4f", 11, _gloffset_Color4f }, 982 { "glColor4ub", 11, _gloffset_Color4ub }, 983 { "glColor4x", 11, -1 }, 984 { "glColorMask", 11, _gloffset_ColorMask }, 985 { "glColorPointer", 11, _gloffset_ColorPointer }, 986 { "glCompressedTexImage2D", 11, -1 }, 987 { "glCompressedTexSubImage2D", 11, -1 }, 988 { "glCopyTexImage2D", 11, _gloffset_CopyTexImage2D }, 989 { "glCopyTexSubImage2D", 11, _gloffset_CopyTexSubImage2D }, 990 { "glCullFace", 11, _gloffset_CullFace }, 991 { "glDeleteBuffers", 11, -1 }, 992 { "glDeleteFramebuffersOES", 11, -1 }, 993 { "glDeleteRenderbuffersOES", 11, -1 }, 994 { "glDeleteTextures", 11, _gloffset_DeleteTextures }, 995 { "glDepthFunc", 11, _gloffset_DepthFunc }, 996 { "glDepthMask", 11, _gloffset_DepthMask }, 997 { "glDepthRangef", 11, -1 }, 998 { "glDepthRangex", 11, -1 }, 999 { "glDisable", 11, _gloffset_Disable }, 1000 { "glDiscardFramebufferEXT", 11, -1 }, 1001 { "glDisableClientState", 11, _gloffset_DisableClientState }, 1002 { "glDrawArrays", 11, _gloffset_DrawArrays }, 1003 { "glDrawElements", 11, _gloffset_DrawElements }, 1004 { "glDrawTexfOES", 11, -1 }, 1005 { "glDrawTexfvOES", 11, -1 }, 1006 { "glDrawTexiOES", 11, -1 }, 1007 { "glDrawTexivOES", 11, -1 }, 1008 { "glDrawTexsOES", 11, -1 }, 1009 { "glDrawTexsvOES", 11, -1 }, 1010 { "glDrawTexxOES", 11, -1 }, 1011 { "glDrawTexxvOES", 11, -1 }, 1012 { "glEGLImageTargetRenderbufferStorageOES", 11, -1 }, 1013 { "glEGLImageTargetTexture2DOES", 11, -1 }, 1014 { "glEnable", 11, _gloffset_Enable }, 1015 { "glEnableClientState", 11, _gloffset_EnableClientState }, 1016 { "glFinish", 11, _gloffset_Finish }, 1017 { "glFlush", 11, _gloffset_Flush }, 1018 { "glFlushMappedBufferRangeEXT", 11, -1 }, 1019 { "glFogf", 11, _gloffset_Fogf }, 1020 { "glFogfv", 11, _gloffset_Fogfv }, 1021 { "glFogx", 11, -1 }, 1022 { "glFogxv", 11, -1 }, 1023 { "glFramebufferRenderbufferOES", 11, -1 }, 1024 { "glFramebufferTexture2DOES", 11, -1 }, 1025 { "glFrontFace", 11, _gloffset_FrontFace }, 1026 { "glFrustumf", 11, -1 }, 1027 { "glFrustumx", 11, -1 }, 1028 { "glGenBuffers", 11, -1 }, 1029 { "glGenFramebuffersOES", 11, -1 }, 1030 { "glGenRenderbuffersOES", 11, -1 }, 1031 { "glGenTextures", 11, _gloffset_GenTextures }, 1032 { "glGenerateMipmapOES", 11, -1 }, 1033 { "glGetBooleanv", 11, _gloffset_GetBooleanv }, 1034 { "glGetBufferParameteriv", 11, -1 }, 1035 { "glGetBufferPointervOES", 11, -1 }, 1036 { "glGetClipPlanef", 11, -1 }, 1037 { "glGetClipPlanex", 11, -1 }, 1038 { "glGetError", 11, _gloffset_GetError }, 1039 { "glGetFixedv", 11, -1 }, 1040 { "glGetFloatv", 11, _gloffset_GetFloatv }, 1041 { "glGetFramebufferAttachmentParameterivOES", 11, -1 }, 1042 { "glGetIntegerv", 11, _gloffset_GetIntegerv }, 1043 { "glGetLightfv", 11, _gloffset_GetLightfv }, 1044 { "glGetLightxv", 11, -1 }, 1045 { "glGetMaterialfv", 11, _gloffset_GetMaterialfv }, 1046 { "glGetMaterialxv", 11, -1 }, 1047 { "glGetPointerv", 11, _gloffset_GetPointerv }, 1048 { "glGetRenderbufferParameterivOES", 11, -1 }, 1049 { "glGetString", 11, _gloffset_GetString }, 1050 { "glGetTexEnvfv", 11, _gloffset_GetTexEnvfv }, 1051 { "glGetTexEnviv", 11, _gloffset_GetTexEnviv }, 1052 { "glGetTexEnvxv", 11, -1 }, 1053 { "glGetTexGenfvOES", 11, _gloffset_GetTexGenfv }, 1054 { "glGetTexGenivOES", 11, _gloffset_GetTexGeniv }, 1055 { "glGetTexGenxvOES", 11, -1 }, 1056 { "glGetTexParameterfv", 11, _gloffset_GetTexParameterfv }, 1057 { "glGetTexParameteriv", 11, _gloffset_GetTexParameteriv }, 1058 { "glGetTexParameterxv", 11, -1 }, 1059 { "glHint", 11, _gloffset_Hint }, 1060 { "glIsBuffer", 11, -1 }, 1061 { "glIsEnabled", 11, _gloffset_IsEnabled }, 1062 { "glIsFramebufferOES", 11, -1 }, 1063 { "glIsRenderbufferOES", 11, -1 }, 1064 { "glIsTexture", 11, _gloffset_IsTexture }, 1065 { "glLightModelf", 11, _gloffset_LightModelf }, 1066 { "glLightModelfv", 11, _gloffset_LightModelfv }, 1067 { "glLightModelx", 11, -1 }, 1068 { "glLightModelxv", 11, -1 }, 1069 { "glLightf", 11, _gloffset_Lightf }, 1070 { "glLightfv", 11, _gloffset_Lightfv }, 1071 { "glLightx", 11, -1 }, 1072 { "glLightxv", 11, -1 }, 1073 { "glLineWidth", 11, _gloffset_LineWidth }, 1074 { "glLineWidthx", 11, -1 }, 1075 { "glLoadIdentity", 11, _gloffset_LoadIdentity }, 1076 { "glLoadMatrixf", 11, _gloffset_LoadMatrixf }, 1077 { "glLoadMatrixx", 11, -1 }, 1078 { "glLogicOp", 11, _gloffset_LogicOp }, 1079 { "glMapBufferOES", 11, -1 }, 1080 { "glMapBufferRangeEXT", 11, -1 }, 1081 { "glMaterialf", 11, _gloffset_Materialf }, 1082 { "glMaterialfv", 11, _gloffset_Materialfv }, 1083 { "glMaterialx", 11, -1 }, 1084 { "glMaterialxv", 11, -1 }, 1085 { "glMatrixMode", 11, _gloffset_MatrixMode }, 1086 { "glMultMatrixf", 11, _gloffset_MultMatrixf }, 1087 { "glMultMatrixx", 11, -1 }, 1088 { "glMultiDrawArraysEXT", 11, -1 }, 1089 { "glMultiDrawElementsEXT", 11, -1 }, 1090 { "glMultiTexCoord4f", 11, _gloffset_MultiTexCoord4fARB }, 1091 { "glMultiTexCoord4x", 11, -1 }, 1092 { "glNormal3f", 11, _gloffset_Normal3f }, 1093 { "glNormal3x", 11, -1 }, 1094 { "glNormalPointer", 11, _gloffset_NormalPointer }, 1095 { "glOrthof", 11, -1 }, 1096 { "glOrthox", 11, -1 }, 1097 { "glPixelStorei", 11, _gloffset_PixelStorei }, 1098 { "glPointParameterf", 11, -1 }, 1099 { "glPointParameterfv", 11, -1 }, 1100 { "glPointParameterx", 11, -1 }, 1101 { "glPointParameterxv", 11, -1 }, 1102 { "glPointSize", 11, _gloffset_PointSize }, 1103 { "glPointSizePointerOES", 11, -1 }, 1104 { "glPointSizex", 11, -1 }, 1105 { "glPolygonOffset", 11, _gloffset_PolygonOffset }, 1106 { "glPolygonOffsetx", 11, -1 }, 1107 { "glPopMatrix", 11, _gloffset_PopMatrix }, 1108 { "glPushMatrix", 11, _gloffset_PushMatrix }, 1109 { "glQueryMatrixxOES", 11, -1 }, 1110 { "glReadPixels", 11, _gloffset_ReadPixels }, 1111 { "glRenderbufferStorageOES", 11, -1 }, 1112 { "glRotatef", 11, _gloffset_Rotatef }, 1113 { "glRotatex", 11, -1 }, 1114 { "glSampleCoverage", 11, -1 }, 1115 { "glSampleCoveragex", 11, -1 }, 1116 { "glScalef", 11, _gloffset_Scalef }, 1117 { "glScalex", 11, -1 }, 1118 { "glScissor", 11, _gloffset_Scissor }, 1119 { "glShadeModel", 11, _gloffset_ShadeModel }, 1120 { "glStencilFunc", 11, _gloffset_StencilFunc }, 1121 { "glStencilMask", 11, _gloffset_StencilMask }, 1122 { "glStencilOp", 11, _gloffset_StencilOp }, 1123 { "glTexCoordPointer", 11, _gloffset_TexCoordPointer }, 1124 { "glTexEnvf", 11, _gloffset_TexEnvf }, 1125 { "glTexEnvfv", 11, _gloffset_TexEnvfv }, 1126 { "glTexEnvi", 11, _gloffset_TexEnvi }, 1127 { "glTexEnviv", 11, _gloffset_TexEnviv }, 1128 { "glTexEnvx", 11, -1 }, 1129 { "glTexEnvxv", 11, -1 }, 1130 { "glTexGenfOES", 11, _gloffset_TexGenf }, 1131 { "glTexGenfvOES", 11, _gloffset_TexGenfv }, 1132 { "glTexGeniOES", 11, _gloffset_TexGeni }, 1133 { "glTexGenivOES", 11, _gloffset_TexGeniv }, 1134 { "glTexGenxOES", 11, -1 }, 1135 { "glTexGenxvOES", 11, -1 }, 1136 { "glTexImage2D", 11, _gloffset_TexImage2D }, 1137 { "glTexParameterf", 11, _gloffset_TexParameterf }, 1138 { "glTexParameterfv", 11, _gloffset_TexParameterfv }, 1139 { "glTexParameteri", 11, _gloffset_TexParameteri }, 1140 { "glTexParameteriv", 11, _gloffset_TexParameteriv }, 1141 { "glTexParameterx", 11, -1 }, 1142 { "glTexParameterxv", 11, -1 }, 1143 { "glTexSubImage2D", 11, _gloffset_TexSubImage2D }, 1144 { "glTranslatef", 11, _gloffset_Translatef }, 1145 { "glTranslatex", 11, -1 }, 1146 { "glUnmapBufferOES", 11, -1 }, 1147 { "glVertexPointer", 11, _gloffset_VertexPointer }, 1148 { "glViewport", 11, _gloffset_Viewport }, 1149 { NULL, 0, -1 } 1150}; 1151 1152const struct function gles2_functions_possible[] = { 1153 { "glActiveTexture", 20, _gloffset_ActiveTexture }, 1154 { "glAttachShader", 20, -1 }, 1155 { "glBindAttribLocation", 20, -1 }, 1156 { "glBindBuffer", 20, -1 }, 1157 { "glBindFramebuffer", 20, -1 }, 1158 { "glBindRenderbuffer", 20, -1 }, 1159 { "glBindTexture", 20, _gloffset_BindTexture }, 1160 { "glBindVertexArrayOES", 20, -1 }, 1161 { "glBlendColor", 20, _gloffset_BlendColor }, 1162 { "glBlendEquation", 20, _gloffset_BlendEquation }, 1163 { "glBlendEquationSeparate", 20, -1 }, 1164 { "glBlendFunc", 20, _gloffset_BlendFunc }, 1165 { "glBlendFuncSeparate", 20, -1 }, 1166 { "glBufferData", 20, -1 }, 1167 { "glBufferSubData", 20, -1 }, 1168 { "glCheckFramebufferStatus", 20, -1 }, 1169 { "glClear", 20, _gloffset_Clear }, 1170 { "glClearColor", 20, _gloffset_ClearColor }, 1171 { "glClearDepthf", 20, -1 }, 1172 { "glClearStencil", 20, _gloffset_ClearStencil }, 1173 { "glColorMask", 20, _gloffset_ColorMask }, 1174 { "glCompileShader", 20, -1 }, 1175 { "glCompressedTexImage2D", 20, -1 }, 1176 { "glCompressedTexImage3DOES", 20, -1 }, 1177 { "glCompressedTexSubImage2D", 20, -1 }, 1178 { "glCompressedTexSubImage3DOES", 20, -1 }, 1179 { "glCopyTexImage2D", 20, _gloffset_CopyTexImage2D }, 1180 { "glCopyTexSubImage2D", 20, _gloffset_CopyTexSubImage2D }, 1181 { "glCopyTexSubImage3DOES", 20, _gloffset_CopyTexSubImage3D }, 1182 { "glCreateProgram", 20, -1 }, 1183 { "glCreateShader", 20, -1 }, 1184 { "glCullFace", 20, _gloffset_CullFace }, 1185 { "glDeleteBuffers", 20, -1 }, 1186 { "glDeleteFramebuffers", 20, -1 }, 1187 { "glDeleteProgram", 20, -1 }, 1188 { "glDeleteRenderbuffers", 20, -1 }, 1189 { "glDeleteShader", 20, -1 }, 1190 { "glDeleteTextures", 20, _gloffset_DeleteTextures }, 1191 { "glDeleteVertexArraysOES", 20, -1 }, 1192 { "glDepthFunc", 20, _gloffset_DepthFunc }, 1193 { "glDepthMask", 20, _gloffset_DepthMask }, 1194 { "glDepthRangef", 20, -1 }, 1195 { "glDetachShader", 20, -1 }, 1196 { "glDisable", 20, _gloffset_Disable }, 1197 { "glDiscardFramebufferEXT", 20, -1 }, 1198 { "glDisableVertexAttribArray", 20, -1 }, 1199 { "glDrawArrays", 20, _gloffset_DrawArrays }, 1200 { "glDrawBuffersNV", 20, -1 }, 1201 { "glDrawElements", 20, _gloffset_DrawElements }, 1202 { "glEGLImageTargetRenderbufferStorageOES", 20, -1 }, 1203 { "glEGLImageTargetTexture2DOES", 20, -1 }, 1204 { "glEnable", 20, _gloffset_Enable }, 1205 { "glEnableVertexAttribArray", 20, -1 }, 1206 { "glFinish", 20, _gloffset_Finish }, 1207 { "glFlush", 20, _gloffset_Flush }, 1208 { "glFlushMappedBufferRangeEXT", 20, -1 }, 1209 { "glFramebufferRenderbuffer", 20, -1 }, 1210 { "glFramebufferTexture2D", 20, -1 }, 1211 { "glFramebufferTexture3DOES", 20, -1 }, 1212 { "glFrontFace", 20, _gloffset_FrontFace }, 1213 { "glGenBuffers", 20, -1 }, 1214 { "glGenFramebuffers", 20, -1 }, 1215 { "glGenRenderbuffers", 20, -1 }, 1216 { "glGenTextures", 20, _gloffset_GenTextures }, 1217 { "glGenVertexArraysOES", 20, -1 }, 1218 { "glGenerateMipmap", 20, -1 }, 1219 { "glGetActiveAttrib", 20, -1 }, 1220 { "glGetActiveUniform", 20, -1 }, 1221 { "glGetAttachedShaders", 20, -1 }, 1222 { "glGetAttribLocation", 20, -1 }, 1223 { "glGetBooleanv", 20, _gloffset_GetBooleanv }, 1224 { "glGetBufferParameteriv", 20, -1 }, 1225 { "glGetBufferPointervOES", 20, -1 }, 1226 { "glGetError", 20, _gloffset_GetError }, 1227 { "glGetFloatv", 20, _gloffset_GetFloatv }, 1228 { "glGetFramebufferAttachmentParameteriv", 20, -1 }, 1229 { "glGetIntegerv", 20, _gloffset_GetIntegerv }, 1230 { "glGetProgramInfoLog", 20, -1 }, 1231 { "glGetProgramiv", 20, -1 }, 1232 { "glGetRenderbufferParameteriv", 20, -1 }, 1233 { "glGetShaderInfoLog", 20, -1 }, 1234 { "glGetShaderPrecisionFormat", 20, -1 }, 1235 { "glGetShaderSource", 20, -1 }, 1236 { "glGetShaderiv", 20, -1 }, 1237 { "glGetString", 20, _gloffset_GetString }, 1238 { "glGetTexParameterfv", 20, _gloffset_GetTexParameterfv }, 1239 { "glGetTexParameteriv", 20, _gloffset_GetTexParameteriv }, 1240 { "glGetUniformLocation", 20, -1 }, 1241 { "glGetUniformfv", 20, -1 }, 1242 { "glGetUniformiv", 20, -1 }, 1243 { "glGetVertexAttribPointerv", 20, -1 }, 1244 { "glGetVertexAttribfv", 20, -1 }, 1245 { "glGetVertexAttribiv", 20, -1 }, 1246 { "glHint", 20, _gloffset_Hint }, 1247 { "glIsBuffer", 20, -1 }, 1248 { "glIsEnabled", 20, _gloffset_IsEnabled }, 1249 { "glIsFramebuffer", 20, -1 }, 1250 { "glIsProgram", 20, -1 }, 1251 { "glIsRenderbuffer", 20, -1 }, 1252 { "glIsShader", 20, -1 }, 1253 { "glIsTexture", 20, _gloffset_IsTexture }, 1254 { "glIsVertexArrayOES", 20, -1 }, 1255 { "glLineWidth", 20, _gloffset_LineWidth }, 1256 { "glLinkProgram", 20, -1 }, 1257 { "glMapBufferOES", 20, -1 }, 1258 { "glMapBufferRangeEXT", 20, -1 }, 1259 { "glMultiDrawArraysEXT", 20, -1 }, 1260 { "glMultiDrawElementsEXT", 20, -1 }, 1261 { "glPixelStorei", 20, _gloffset_PixelStorei }, 1262 { "glPolygonOffset", 20, _gloffset_PolygonOffset }, 1263 { "glReadBufferNV", 20, _gloffset_ReadBuffer }, 1264 { "glReadPixels", 20, _gloffset_ReadPixels }, 1265 { "glReleaseShaderCompiler", 20, -1 }, 1266 { "glRenderbufferStorage", 20, -1 }, 1267 { "glSampleCoverage", 20, -1 }, 1268 { "glScissor", 20, _gloffset_Scissor }, 1269 { "glShaderBinary", 20, -1 }, 1270 { "glShaderSource", 20, -1 }, 1271 { "glStencilFunc", 20, _gloffset_StencilFunc }, 1272 { "glStencilFuncSeparate", 20, -1 }, 1273 { "glStencilMask", 20, _gloffset_StencilMask }, 1274 { "glStencilMaskSeparate", 20, -1 }, 1275 { "glStencilOp", 20, _gloffset_StencilOp }, 1276 { "glStencilOpSeparate", 20, -1 }, 1277 { "glTexImage2D", 20, _gloffset_TexImage2D }, 1278 { "glTexImage3DOES", 20, _gloffset_TexImage3D }, 1279 { "glTexParameterf", 20, _gloffset_TexParameterf }, 1280 { "glTexParameterfv", 20, _gloffset_TexParameterfv }, 1281 { "glTexParameteri", 20, _gloffset_TexParameteri }, 1282 { "glTexParameteriv", 20, _gloffset_TexParameteriv }, 1283 { "glTexSubImage2D", 20, _gloffset_TexSubImage2D }, 1284 { "glTexSubImage3DOES", 20, _gloffset_TexSubImage3D }, 1285 { "glUniform1f", 20, -1 }, 1286 { "glUniform1fv", 20, -1 }, 1287 { "glUniform1i", 20, -1 }, 1288 { "glUniform1iv", 20, -1 }, 1289 { "glUniform2f", 20, -1 }, 1290 { "glUniform2fv", 20, -1 }, 1291 { "glUniform2i", 20, -1 }, 1292 { "glUniform2iv", 20, -1 }, 1293 { "glUniform3f", 20, -1 }, 1294 { "glUniform3fv", 20, -1 }, 1295 { "glUniform3i", 20, -1 }, 1296 { "glUniform3iv", 20, -1 }, 1297 { "glUniform4f", 20, -1 }, 1298 { "glUniform4fv", 20, -1 }, 1299 { "glUniform4i", 20, -1 }, 1300 { "glUniform4iv", 20, -1 }, 1301 { "glUniformMatrix2fv", 20, -1 }, 1302 { "glUniformMatrix3fv", 20, -1 }, 1303 { "glUniformMatrix4fv", 20, -1 }, 1304 { "glUnmapBufferOES", 20, -1 }, 1305 { "glUseProgram", 20, -1 }, 1306 { "glValidateProgram", 20, -1 }, 1307 { "glVertexAttrib1f", 20, -1 }, 1308 { "glVertexAttrib1fv", 20, -1 }, 1309 { "glVertexAttrib2f", 20, -1 }, 1310 { "glVertexAttrib2fv", 20, -1 }, 1311 { "glVertexAttrib3f", 20, -1 }, 1312 { "glVertexAttrib3fv", 20, -1 }, 1313 { "glVertexAttrib4f", 20, -1 }, 1314 { "glVertexAttrib4fv", 20, -1 }, 1315 { "glVertexAttribPointer", 20, -1 }, 1316 { "glViewport", 20, _gloffset_Viewport }, 1317 1318 /* GL_OES_get_program_binary - Also part of OpenGL ES 3.0. */ 1319 { "glGetProgramBinaryOES", 20, -1 }, 1320 { "glProgramBinaryOES", 20, -1 }, 1321 1322 /* GL_EXT_separate_shader_objects - Also part of OpenGL ES 3.1. */ 1323 { "glProgramParameteriEXT", 20, -1 }, 1324 { "glUseProgramStagesEXT", 20, -1 }, 1325 { "glActiveShaderProgramEXT", 20, -1 }, 1326 { "glCreateShaderProgramvEXT", 20, -1 }, 1327 { "glBindProgramPipelineEXT", 20, -1 }, 1328 { "glDeleteProgramPipelinesEXT", 20, -1 }, 1329 { "glGenProgramPipelinesEXT", 20, -1 }, 1330 { "glIsProgramPipelineEXT", 20, -1 }, 1331 { "glGetProgramPipelineivEXT", 20, -1 }, 1332 { "glProgramUniform1iEXT", 20, -1 }, 1333 { "glProgramUniform1ivEXT", 20, -1 }, 1334 { "glProgramUniform1fEXT", 20, -1 }, 1335 { "glProgramUniform1fvEXT", 20, -1 }, 1336 { "glProgramUniform2iEXT", 20, -1 }, 1337 { "glProgramUniform2ivEXT", 20, -1 }, 1338 { "glProgramUniform2fEXT", 20, -1 }, 1339 { "glProgramUniform2fvEXT", 20, -1 }, 1340 { "glProgramUniform3iEXT", 20, -1 }, 1341 { "glProgramUniform3ivEXT", 20, -1 }, 1342 { "glProgramUniform3fEXT", 20, -1 }, 1343 { "glProgramUniform3fvEXT", 20, -1 }, 1344 { "glProgramUniform4iEXT", 20, -1 }, 1345 { "glProgramUniform4ivEXT", 20, -1 }, 1346 { "glProgramUniform4fEXT", 20, -1 }, 1347 { "glProgramUniform4fvEXT", 20, -1 }, 1348 { "glProgramUniformMatrix2fvEXT", 20, -1 }, 1349 { "glProgramUniformMatrix3fvEXT", 20, -1 }, 1350 { "glProgramUniformMatrix4fvEXT", 20, -1 }, 1351 { "glProgramUniformMatrix2x3fvEXT", 20, -1 }, 1352 { "glProgramUniformMatrix3x2fvEXT", 20, -1 }, 1353 { "glProgramUniformMatrix2x4fvEXT", 20, -1 }, 1354 { "glProgramUniformMatrix4x2fvEXT", 20, -1 }, 1355 { "glProgramUniformMatrix3x4fvEXT", 20, -1 }, 1356 { "glProgramUniformMatrix4x3fvEXT", 20, -1 }, 1357 { "glValidateProgramPipelineEXT", 20, -1 }, 1358 { "glGetProgramPipelineInfoLogEXT", 20, -1 }, 1359 1360 /* GL_INTEL_performance_query */ 1361 { "glGetFirstPerfQueryIdINTEL", 20, -1 }, 1362 { "glGetNextPerfQueryIdINTEL", 20, -1 }, 1363 { "glGetPerfQueryIdByNameINTEL", 20, -1 }, 1364 { "glGetPerfQueryInfoINTEL", 20, -1 }, 1365 { "glGetPerfCounterInfoINTEL", 20, -1 }, 1366 { "glCreatePerfQueryINTEL", 20, -1 }, 1367 { "glDeletePerfQueryINTEL", 20, -1 }, 1368 { "glBeginPerfQueryINTEL", 20, -1 }, 1369 { "glEndPerfQueryINTEL", 20, -1 }, 1370 { "glGetPerfQueryDataINTEL", 20, -1 }, 1371 1372 { NULL, 0, -1 } 1373}; 1374 1375const struct function gles3_functions_possible[] = { 1376 { "glBeginQuery", 30, -1 }, 1377 { "glBeginTransformFeedback", 30, -1 }, 1378 { "glBindBufferBase", 30, -1 }, 1379 { "glBindBufferRange", 30, -1 }, 1380 { "glBindSampler", 30, -1 }, 1381 { "glBindTransformFeedback", 30, -1 }, 1382 // We check for the aliased -OES version in GLES 2 1383 // { "glBindVertexArray", 30, -1 }, 1384 { "glBlitFramebuffer", 30, -1 }, 1385 { "glClearBufferfi", 30, -1 }, 1386 { "glClearBufferfv", 30, -1 }, 1387 { "glClearBufferiv", 30, -1 }, 1388 { "glClearBufferuiv", 30, -1 }, 1389 { "glClientWaitSync", 30, -1 }, 1390 // We check for the aliased -OES version in GLES 2 1391 // { "glCompressedTexImage3D", 30, -1 }, 1392 // We check for the aliased -OES version in GLES 2 1393 // { "glCompressedTexSubImage3D", 30, -1 }, 1394 { "glCopyBufferSubData", 30, -1 }, 1395 // We check for the aliased -OES version in GLES 2 1396 // { "glCopyTexSubImage3D", 30, -1 }, 1397 { "glDeleteQueries", 30, -1 }, 1398 { "glDeleteSamplers", 30, -1 }, 1399 { "glDeleteSync", 30, -1 }, 1400 { "glDeleteTransformFeedbacks", 30, -1 }, 1401 // We check for the aliased -OES version in GLES 2 1402 // { "glDeleteVertexArrays", 30, -1 }, 1403 { "glDrawArraysInstanced", 30, -1 }, 1404 // We check for the aliased -NV version in GLES 2 1405 // { "glDrawBuffers", 30, -1 }, 1406 { "glDrawElementsInstanced", 30, -1 }, 1407 { "glDrawRangeElements", 30, -1 }, 1408 { "glEndQuery", 30, -1 }, 1409 { "glEndTransformFeedback", 30, -1 }, 1410 { "glFenceSync", 30, -1 }, 1411 // We check for the aliased -EXT version in GLES 2 1412 // { "glFlushMappedBufferRange", 30, -1 }, 1413 { "glFramebufferTextureLayer", 30, -1 }, 1414 { "glGenQueries", 30, -1 }, 1415 { "glGenSamplers", 30, -1 }, 1416 { "glGenTransformFeedbacks", 30, -1 }, 1417 // We check for the aliased -OES version in GLES 2 1418 // { "glGenVertexArrays", 30, -1 }, 1419 { "glGetActiveUniformBlockiv", 30, -1 }, 1420 { "glGetActiveUniformBlockName", 30, -1 }, 1421 { "glGetActiveUniformsiv", 30, -1 }, 1422 { "glGetBufferParameteri64v", 30, -1 }, 1423 // We check for the aliased -OES version in GLES 2 1424 // { "glGetBufferPointerv", 30, -1 }, 1425 { "glGetFragDataLocation", 30, -1 }, 1426 { "glGetInteger64i_v", 30, -1 }, 1427 { "glGetInteger64v", 30, -1 }, 1428 { "glGetIntegeri_v", 30, -1 }, 1429 { "glGetInternalformativ", 30, -1 }, 1430 // glGetProgramBinary aliases glGetProgramBinaryOES in GLES 2 1431 { "glGetQueryiv", 30, -1 }, 1432 { "glGetQueryObjectuiv", 30, -1 }, 1433 { "glGetSamplerParameterfv", 30, -1 }, 1434 { "glGetSamplerParameteriv", 30, -1 }, 1435 { "glGetStringi", 30, -1 }, 1436 { "glGetSynciv", 30, -1 }, 1437 { "glGetTransformFeedbackVarying", 30, -1 }, 1438 { "glGetUniformBlockIndex", 30, -1 }, 1439 { "glGetUniformIndices", 30, -1 }, 1440 { "glGetUniformuiv", 30, -1 }, 1441 { "glGetVertexAttribIiv", 30, -1 }, 1442 { "glGetVertexAttribIuiv", 30, -1 }, 1443 { "glInvalidateFramebuffer", 30, -1 }, 1444 { "glInvalidateSubFramebuffer", 30, -1 }, 1445 { "glIsQuery", 30, -1 }, 1446 { "glIsSampler", 30, -1 }, 1447 { "glIsSync", 30, -1 }, 1448 { "glIsTransformFeedback", 30, -1 }, 1449 // We check for the aliased -OES version in GLES 2 1450 // { "glIsVertexArray", 30, -1 }, 1451 // We check for the aliased -EXT version in GLES 2 1452 // { "glMapBufferRange", 30, -1 }, 1453 { "glPauseTransformFeedback", 30, -1 }, 1454 // glProgramBinary aliases glProgramBinaryOES in GLES 2 1455 // glProgramParameteri aliases glProgramParameteriEXT in GLES 2 1456 // We check for the aliased -NV version in GLES 2 1457 // { "glReadBuffer", 30, -1 }, 1458 { "glRenderbufferStorageMultisample", 30, -1 }, 1459 { "glResumeTransformFeedback", 30, -1 }, 1460 { "glSamplerParameterf", 30, -1 }, 1461 { "glSamplerParameterfv", 30, -1 }, 1462 { "glSamplerParameteri", 30, -1 }, 1463 { "glSamplerParameteriv", 30, -1 }, 1464 // We check for the aliased -OES version in GLES 2 1465 // { "glTexImage3D", 30, -1 }, 1466 { "glTexStorage2D", 30, -1 }, 1467 { "glTexStorage3D", 30, -1 }, 1468 // We check for the aliased -OES version in GLES 2 1469 // { "glTexSubImage3D", 30, -1 }, 1470 { "glTransformFeedbackVaryings", 30, -1 }, 1471 { "glUniform1ui", 30, -1 }, 1472 { "glUniform1uiv", 30, -1 }, 1473 { "glUniform2ui", 30, -1 }, 1474 { "glUniform2uiv", 30, -1 }, 1475 { "glUniform3ui", 30, -1 }, 1476 { "glUniform3uiv", 30, -1 }, 1477 { "glUniform4ui", 30, -1 }, 1478 { "glUniform4uiv", 30, -1 }, 1479 { "glUniformBlockBinding", 30, -1 }, 1480 { "glUniformMatrix2x3fv", 30, -1 }, 1481 { "glUniformMatrix2x4fv", 30, -1 }, 1482 { "glUniformMatrix3x2fv", 30, -1 }, 1483 { "glUniformMatrix3x4fv", 30, -1 }, 1484 { "glUniformMatrix4x2fv", 30, -1 }, 1485 { "glUniformMatrix4x3fv", 30, -1 }, 1486 // We check for the aliased -OES version in GLES 2 1487 // { "glUnmapBuffer", 30, -1 }, 1488 { "glVertexAttribDivisor", 30, -1 }, 1489 { "glVertexAttribI4i", 30, -1 }, 1490 { "glVertexAttribI4iv", 30, -1 }, 1491 { "glVertexAttribI4ui", 30, -1 }, 1492 { "glVertexAttribI4uiv", 30, -1 }, 1493 { "glVertexAttribIPointer", 30, -1 }, 1494 { "glWaitSync", 30, -1 }, 1495 1496 /* GL_EXT_separate_shader_objects - Also part of OpenGL ES 3.1. */ 1497 { "glProgramUniform1uiEXT", 30, -1 }, 1498 { "glProgramUniform1uivEXT", 30, -1 }, 1499 { "glProgramUniform2uiEXT", 30, -1 }, 1500 { "glProgramUniform2uivEXT", 30, -1 }, 1501 { "glProgramUniform3uiEXT", 30, -1 }, 1502 { "glProgramUniform3uivEXT", 30, -1 }, 1503 { "glProgramUniform4uiEXT", 30, -1 }, 1504 { "glProgramUniform4uivEXT", 30, -1 }, 1505 1506 { NULL, 0, -1 } 1507}; 1508