b1e80fd5dfbc34f263b71b8b8dc995a842c2cd55
[mesa.git] / src / mesa / main / tests / dispatch_sanity.cpp
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
44 #include "GL/gl.h"
45 #include "GL/glext.h"
46 #include "main/compiler.h"
47 #include "main/api_exec.h"
48 #include "main/context.h"
49 #include "main/remap.h"
50 #include "main/vtxfmt.h"
51 #include "glapi/glapi.h"
52 #include "drivers/common/driverfuncs.h"
53
54 #include "swrast/swrast.h"
55 #include "vbo/vbo.h"
56 #include "tnl/tnl.h"
57 #include "swrast_setup/swrast_setup.h"
58
59 #ifndef GLAPIENTRYP
60 #define GLAPIENTRYP GL_APIENTRYP
61 #endif
62
63 #include "main/dispatch.h"
64
65 struct function {
66 const char *name;
67 unsigned int Version;
68 int offset;
69 };
70
71 extern const struct function common_desktop_functions_possible[];
72 extern const struct function gl_compatibility_functions_possible[];
73 extern const struct function gl_core_functions_possible[];
74 extern const struct function gles11_functions_possible[];
75 extern const struct function gles2_functions_possible[];
76 extern const struct function gles3_functions_possible[];
77 extern const struct function gles31_functions_possible[];
78
79 class DispatchSanity_test : public ::testing::Test {
80 public:
81 virtual void SetUp();
82 void SetUpCtx(gl_api api, unsigned int version);
83
84 struct gl_config visual;
85 struct dd_function_table driver_functions;
86 struct gl_context share_list;
87 struct gl_context ctx;
88 _glapi_proc *nop_table;
89 };
90
91 void
92 DispatchSanity_test::SetUp()
93 {
94 memset(&visual, 0, sizeof(visual));
95 memset(&driver_functions, 0, sizeof(driver_functions));
96 memset(&share_list, 0, sizeof(share_list));
97 memset(&ctx, 0, sizeof(ctx));
98
99 _mesa_init_driver_functions(&driver_functions);
100
101 const unsigned size = _glapi_get_dispatch_table_size();
102 nop_table = (_glapi_proc *) _mesa_new_nop_table(size);
103 }
104
105 void
106 DispatchSanity_test::SetUpCtx(gl_api api, unsigned int version)
107 {
108 _mesa_initialize_context(&ctx,
109 api,
110 &visual,
111 NULL, // share_list
112 &driver_functions);
113 _vbo_CreateContext(&ctx);
114
115 _mesa_override_extensions(&ctx);
116 ctx.Version = version;
117
118 _mesa_initialize_dispatch_tables(&ctx);
119 _mesa_initialize_vbo_vtxfmt(&ctx);
120 }
121
122 static const char *
123 offset_to_proc_name_safe(unsigned offset)
124 {
125 const char *name = _glapi_get_proc_name(offset);
126 return name ? name : "???";
127 }
128
129 /* Scan through the dispatch table and check that all the functions in
130 * _glapi_proc *table exist.
131 */
132 static void
133 validate_functions(struct gl_context *ctx, const struct function *function_table,
134 const _glapi_proc *nop_table)
135 {
136 _glapi_proc *table = (_glapi_proc *) ctx->Exec;
137
138 for (unsigned i = 0; function_table[i].name != NULL; i++) {
139 /* The context version is >= the GL version where the function was
140 * introduced. Therefore, the function cannot be set to the nop
141 * function.
142 */
143 const bool cant_be_nop = ctx->Version >= function_table[i].Version;
144
145 const int offset = (function_table[i].offset != -1)
146 ? function_table[i].offset
147 : _glapi_get_proc_offset(function_table[i].name);
148
149 ASSERT_NE(-1, offset)
150 << "Function: " << function_table[i].name;
151 ASSERT_EQ(offset,
152 _glapi_get_proc_offset(function_table[i].name))
153 << "Function: " << function_table[i].name;
154 if (cant_be_nop) {
155 EXPECT_NE(nop_table[offset], table[offset])
156 << "Function: " << function_table[i].name
157 << " at offset " << offset;
158 }
159
160 table[offset] = nop_table[offset];
161 }
162 }
163
164 /* Scan through the table and ensure that there is nothing except
165 * nop functions (as set by validate_functions().
166 */
167 static void
168 validate_nops(struct gl_context *ctx, const _glapi_proc *nop_table)
169 {
170 _glapi_proc *table = (_glapi_proc *) ctx->Exec;
171
172 const unsigned size = _glapi_get_dispatch_table_size();
173 for (unsigned i = 0; i < size; i++) {
174 EXPECT_EQ(nop_table[i], table[i])
175 << "i = " << i << " (" << offset_to_proc_name_safe(i) << ")";
176 }
177 }
178
179 TEST_F(DispatchSanity_test, GL31_CORE)
180 {
181 SetUpCtx(API_OPENGL_CORE, 31);
182 validate_functions(&ctx, common_desktop_functions_possible, nop_table);
183 validate_functions(&ctx, gl_core_functions_possible, nop_table);
184 validate_nops(&ctx, nop_table);
185 }
186
187 TEST_F(DispatchSanity_test, GL30)
188 {
189 SetUpCtx(API_OPENGL_COMPAT, 30);
190 validate_functions(&ctx, common_desktop_functions_possible, nop_table);
191 validate_functions(&ctx, gl_compatibility_functions_possible, nop_table);
192 validate_nops(&ctx, nop_table);
193 }
194
195 TEST_F(DispatchSanity_test, GLES11)
196 {
197 SetUpCtx(API_OPENGLES, 11);
198 validate_functions(&ctx, gles11_functions_possible, nop_table);
199 validate_nops(&ctx, nop_table);
200 }
201
202 TEST_F(DispatchSanity_test, GLES2)
203 {
204 SetUpCtx(API_OPENGLES2, 20);
205 validate_functions(&ctx, gles2_functions_possible, nop_table);
206 validate_nops(&ctx, nop_table);
207 }
208
209 TEST_F(DispatchSanity_test, GLES3)
210 {
211 SetUpCtx(API_OPENGLES2, 30);
212 validate_functions(&ctx, gles2_functions_possible, nop_table);
213 validate_functions(&ctx, gles3_functions_possible, nop_table);
214 validate_nops(&ctx, nop_table);
215 }
216
217 TEST_F(DispatchSanity_test, GLES31)
218 {
219 SetUpCtx(API_OPENGLES2, 31);
220 validate_functions(&ctx, gles2_functions_possible, nop_table);
221 validate_functions(&ctx, gles3_functions_possible, nop_table);
222 validate_functions(&ctx, gles31_functions_possible, nop_table);
223 validate_nops(&ctx, nop_table);
224 }
225
226 const struct function common_desktop_functions_possible[] = {
227 { "glBindRenderbufferEXT", 10, -1 },
228 { "glBindFramebufferEXT", 10, -1 },
229 { "glCullFace", 10, -1 },
230 { "glFrontFace", 10, -1 },
231 { "glHint", 10, -1 },
232 { "glLineWidth", 10, -1 },
233 { "glPointSize", 10, -1 },
234 { "glPolygonMode", 10, -1 },
235 { "glScissor", 10, -1 },
236 { "glTexParameterf", 10, -1 },
237 { "glTexParameterfv", 10, -1 },
238 { "glTexParameteri", 10, -1 },
239 { "glTexParameteriv", 10, -1 },
240 { "glTexImage1D", 10, _gloffset_TexImage1D },
241 { "glTexImage2D", 10, _gloffset_TexImage2D },
242 { "glDrawBuffer", 10, -1 },
243 { "glClear", 10, -1 },
244 { "glClearColor", 10, -1 },
245 { "glClearStencil", 10, -1 },
246 { "glClearDepth", 10, -1 },
247 { "glStencilMask", 10, -1 },
248 { "glColorMask", 10, -1 },
249 { "glDepthMask", 10, -1 },
250 { "glDisable", 10, -1 },
251 { "glEnable", 10, -1 },
252 { "glFinish", 10, -1 },
253 { "glFlush", 10, -1 },
254 { "glBlendFunc", 10, -1 },
255 { "glLogicOp", 10, -1 },
256 { "glStencilFunc", 10, -1 },
257 { "glStencilOp", 10, -1 },
258 { "glDepthFunc", 10, -1 },
259 { "glPixelStoref", 10, -1 },
260 { "glPixelStorei", 10, -1 },
261 { "glReadBuffer", 10, -1 },
262 { "glReadPixels", 10, -1 },
263 { "glGetBooleanv", 10, -1 },
264 { "glGetDoublev", 10, -1 },
265 { "glGetError", 10, -1 },
266 { "glGetFloatv", 10, -1 },
267 { "glGetIntegerv", 10, -1 },
268 { "glGetString", 10, -1 },
269 { "glGetTexImage", 10, -1 },
270 { "glGetTexParameterfv", 10, -1 },
271 { "glGetTexParameteriv", 10, -1 },
272 { "glGetTexLevelParameterfv", 10, -1 },
273 { "glGetTexLevelParameteriv", 10, -1 },
274 { "glIsEnabled", 10, -1 },
275 { "glDepthRange", 10, -1 },
276 { "glViewport", 10, -1 },
277
278 /* GL 1.1 */
279 { "glDrawArrays", 11, -1 },
280 { "glDrawElements", 11, -1 },
281 { "glGetPointerv", 11, -1 },
282 { "glPolygonOffset", 11, -1 },
283 { "glCopyTexImage1D", 11, -1 },
284 { "glCopyTexImage2D", 11, -1 },
285 { "glCopyTexSubImage1D", 11, -1 },
286 { "glCopyTexSubImage2D", 11, -1 },
287 { "glTexSubImage1D", 11, -1 },
288 { "glTexSubImage2D", 11, -1 },
289 { "glBindTexture", 11, -1 },
290 { "glDeleteTextures", 11, -1 },
291 { "glGenTextures", 11, -1 },
292 { "glIsTexture", 11, -1 },
293
294 /* GL 1.2 */
295 { "glBlendColor", 12, -1 },
296 { "glBlendEquation", 12, -1 },
297 { "glDrawRangeElements", 12, -1 },
298 { "glTexImage3D", 12, -1 },
299 { "glTexSubImage3D", 12, -1 },
300 { "glCopyTexSubImage3D", 12, -1 },
301
302 /* GL 1.3 */
303 { "glActiveTexture", 13, -1 },
304 { "glSampleCoverage", 13, -1 },
305 { "glCompressedTexImage3D", 13, -1 },
306 { "glCompressedTexImage2D", 13, -1 },
307 { "glCompressedTexImage1D", 13, -1 },
308 { "glCompressedTexSubImage3D", 13, -1 },
309 { "glCompressedTexSubImage2D", 13, -1 },
310 { "glCompressedTexSubImage1D", 13, -1 },
311 { "glGetCompressedTexImage", 13, -1 },
312
313 /* GL 1.4 */
314 { "glBlendFuncSeparate", 14, -1 },
315 { "glMultiDrawArrays", 14, -1 },
316 { "glMultiDrawElements", 14, -1 },
317 { "glPointParameterf", 14, -1 },
318 { "glPointParameterfv", 14, -1 },
319 { "glPointParameteri", 14, -1 },
320 { "glPointParameteriv", 14, -1 },
321
322 /* GL 1.5 */
323 { "glGenQueries", 15, -1 },
324 { "glDeleteQueries", 15, -1 },
325 { "glIsQuery", 15, -1 },
326 { "glBeginQuery", 15, -1 },
327 { "glEndQuery", 15, -1 },
328 { "glGetQueryiv", 15, -1 },
329 { "glGetQueryObjectiv", 15, -1 },
330 { "glGetQueryObjectuiv", 15, -1 },
331 { "glBindBuffer", 15, -1 },
332 { "glDeleteBuffers", 15, -1 },
333 { "glGenBuffers", 15, -1 },
334 { "glIsBuffer", 15, -1 },
335 { "glBufferData", 15, -1 },
336 { "glBufferSubData", 15, -1 },
337 { "glGetBufferSubData", 15, -1 },
338 { "glMapBuffer", 15, -1 },
339 { "glUnmapBuffer", 15, -1 },
340 { "glGetBufferParameteriv", 15, -1 },
341 { "glGetBufferPointerv", 15, -1 },
342
343 /* GL 2.0 */
344 { "glBlendEquationSeparate", 20, -1 },
345 { "glDrawBuffers", 20, -1 },
346 { "glStencilOpSeparate", 20, -1 },
347 { "glStencilFuncSeparate", 20, -1 },
348 { "glStencilMaskSeparate", 20, -1 },
349 { "glAttachShader", 20, -1 },
350 { "glBindAttribLocation", 20, -1 },
351 { "glCompileShader", 20, -1 },
352 { "glCreateProgram", 20, -1 },
353 { "glCreateShader", 20, -1 },
354 { "glDeleteProgram", 20, -1 },
355 { "glDeleteShader", 20, -1 },
356 { "glDetachShader", 20, -1 },
357 { "glDisableVertexAttribArray", 20, -1 },
358 { "glEnableVertexAttribArray", 20, -1 },
359 { "glGetActiveAttrib", 20, -1 },
360 { "glGetActiveUniform", 20, -1 },
361 { "glGetAttachedShaders", 20, -1 },
362 { "glGetAttribLocation", 20, -1 },
363 { "glGetProgramiv", 20, -1 },
364 { "glGetProgramInfoLog", 20, -1 },
365 { "glGetShaderiv", 20, -1 },
366 { "glGetShaderInfoLog", 20, -1 },
367 { "glGetShaderSource", 20, -1 },
368 { "glGetUniformLocation", 20, -1 },
369 { "glGetUniformfv", 20, -1 },
370 { "glGetUniformiv", 20, -1 },
371 { "glGetVertexAttribdv", 20, -1 },
372 { "glGetVertexAttribfv", 20, -1 },
373 { "glGetVertexAttribiv", 20, -1 },
374 { "glGetVertexAttribPointerv", 20, -1 },
375 { "glIsProgram", 20, -1 },
376 { "glIsShader", 20, -1 },
377 { "glLinkProgram", 20, -1 },
378 { "glShaderSource", 20, -1 },
379 { "glUseProgram", 20, -1 },
380 { "glUniform1f", 20, -1 },
381 { "glUniform2f", 20, -1 },
382 { "glUniform3f", 20, -1 },
383 { "glUniform4f", 20, -1 },
384 { "glUniform1i", 20, -1 },
385 { "glUniform2i", 20, -1 },
386 { "glUniform3i", 20, -1 },
387 { "glUniform4i", 20, -1 },
388 { "glUniform1fv", 20, -1 },
389 { "glUniform2fv", 20, -1 },
390 { "glUniform3fv", 20, -1 },
391 { "glUniform4fv", 20, -1 },
392 { "glUniform1iv", 20, -1 },
393 { "glUniform2iv", 20, -1 },
394 { "glUniform3iv", 20, -1 },
395 { "glUniform4iv", 20, -1 },
396 { "glUniformMatrix2fv", 20, -1 },
397 { "glUniformMatrix3fv", 20, -1 },
398 { "glUniformMatrix4fv", 20, -1 },
399 { "glValidateProgram", 20, -1 },
400 { "glVertexAttrib1d", 20, -1 },
401 { "glVertexAttrib1dv", 20, -1 },
402 { "glVertexAttrib1f", 20, -1 },
403 { "glVertexAttrib1fv", 20, -1 },
404 { "glVertexAttrib1s", 20, -1 },
405 { "glVertexAttrib1sv", 20, -1 },
406 { "glVertexAttrib2d", 20, -1 },
407 { "glVertexAttrib2dv", 20, -1 },
408 { "glVertexAttrib2f", 20, -1 },
409 { "glVertexAttrib2fv", 20, -1 },
410 { "glVertexAttrib2s", 20, -1 },
411 { "glVertexAttrib2sv", 20, -1 },
412 { "glVertexAttrib3d", 20, -1 },
413 { "glVertexAttrib3dv", 20, -1 },
414 { "glVertexAttrib3f", 20, -1 },
415 { "glVertexAttrib3fv", 20, -1 },
416 { "glVertexAttrib3s", 20, -1 },
417 { "glVertexAttrib3sv", 20, -1 },
418 { "glVertexAttrib4Nbv", 20, -1 },
419 { "glVertexAttrib4Niv", 20, -1 },
420 { "glVertexAttrib4Nsv", 20, -1 },
421 { "glVertexAttrib4Nub", 20, -1 },
422 { "glVertexAttrib4Nubv", 20, -1 },
423 { "glVertexAttrib4Nuiv", 20, -1 },
424 { "glVertexAttrib4Nusv", 20, -1 },
425 { "glVertexAttrib4bv", 20, -1 },
426 { "glVertexAttrib4d", 20, -1 },
427 { "glVertexAttrib4dv", 20, -1 },
428 { "glVertexAttrib4f", 20, -1 },
429 { "glVertexAttrib4fv", 20, -1 },
430 { "glVertexAttrib4iv", 20, -1 },
431 { "glVertexAttrib4s", 20, -1 },
432 { "glVertexAttrib4sv", 20, -1 },
433 { "glVertexAttrib4ubv", 20, -1 },
434 { "glVertexAttrib4uiv", 20, -1 },
435 { "glVertexAttrib4usv", 20, -1 },
436 { "glVertexAttribPointer", 20, -1 },
437
438 /* GL 2.1 */
439 { "glUniformMatrix2x3fv", 21, -1 },
440 { "glUniformMatrix3x2fv", 21, -1 },
441 { "glUniformMatrix2x4fv", 21, -1 },
442 { "glUniformMatrix4x2fv", 21, -1 },
443 { "glUniformMatrix3x4fv", 21, -1 },
444 { "glUniformMatrix4x3fv", 21, -1 },
445
446 /* GL 3.0 */
447 { "glColorMaski", 30, -1 },
448 { "glGetBooleani_v", 30, -1 },
449 { "glGetIntegeri_v", 30, -1 },
450 { "glEnablei", 30, -1 },
451 { "glDisablei", 30, -1 },
452 { "glIsEnabledi", 30, -1 },
453 { "glBeginTransformFeedback", 30, -1 },
454 { "glEndTransformFeedback", 30, -1 },
455 { "glBindBufferRange", 30, -1 },
456 { "glBindBufferBase", 30, -1 },
457 { "glTransformFeedbackVaryings", 30, -1 },
458 { "glGetTransformFeedbackVarying", 30, -1 },
459 { "glClampColor", 30, -1 },
460 { "glBeginConditionalRender", 30, -1 },
461 { "glEndConditionalRender", 30, -1 },
462 { "glVertexAttribIPointer", 30, -1 },
463 { "glGetVertexAttribIiv", 30, -1 },
464 { "glGetVertexAttribIuiv", 30, -1 },
465 { "glVertexAttribI1i", 30, -1 },
466 { "glVertexAttribI2i", 30, -1 },
467 { "glVertexAttribI3i", 30, -1 },
468 { "glVertexAttribI4i", 30, -1 },
469 { "glVertexAttribI1ui", 30, -1 },
470 { "glVertexAttribI2ui", 30, -1 },
471 { "glVertexAttribI3ui", 30, -1 },
472 { "glVertexAttribI4ui", 30, -1 },
473 { "glVertexAttribI1iv", 30, -1 },
474 { "glVertexAttribI2iv", 30, -1 },
475 { "glVertexAttribI3iv", 30, -1 },
476 { "glVertexAttribI4iv", 30, -1 },
477 { "glVertexAttribI1uiv", 30, -1 },
478 { "glVertexAttribI2uiv", 30, -1 },
479 { "glVertexAttribI3uiv", 30, -1 },
480 { "glVertexAttribI4uiv", 30, -1 },
481 { "glVertexAttribI4bv", 30, -1 },
482 { "glVertexAttribI4sv", 30, -1 },
483 { "glVertexAttribI4ubv", 30, -1 },
484 { "glVertexAttribI4usv", 30, -1 },
485 { "glGetUniformuiv", 30, -1 },
486 { "glBindFragDataLocation", 30, -1 },
487 { "glGetFragDataLocation", 30, -1 },
488 { "glUniform1ui", 30, -1 },
489 { "glUniform2ui", 30, -1 },
490 { "glUniform3ui", 30, -1 },
491 { "glUniform4ui", 30, -1 },
492 { "glUniform1uiv", 30, -1 },
493 { "glUniform2uiv", 30, -1 },
494 { "glUniform3uiv", 30, -1 },
495 { "glUniform4uiv", 30, -1 },
496 { "glTexParameterIiv", 30, -1 },
497 { "glTexParameterIuiv", 30, -1 },
498 { "glGetTexParameterIiv", 30, -1 },
499 { "glGetTexParameterIuiv", 30, -1 },
500 { "glClearBufferiv", 30, -1 },
501 { "glClearBufferuiv", 30, -1 },
502 { "glClearBufferfv", 30, -1 },
503 { "glClearBufferfi", 30, -1 },
504 { "glGetStringi", 30, -1 },
505
506 /* GL 3.1 */
507 { "glDrawArraysInstanced", 31, -1 },
508 { "glDrawElementsInstanced", 31, -1 },
509 { "glPrimitiveRestartIndex", 31, -1 },
510 { "glTexBuffer", 31, -1 },
511
512 /* GL_ARB_texture_buffer_range */
513 { "glTexBufferRange", 43, -1 },
514
515 /* GL_ARB_shader_objects */
516 { "glDeleteObjectARB", 31, -1 },
517 { "glGetHandleARB", 31, -1 },
518 { "glDetachObjectARB", 31, -1 },
519 { "glCreateShaderObjectARB", 31, -1 },
520 { "glCreateProgramObjectARB", 31, -1 },
521 { "glAttachObjectARB", 31, -1 },
522 { "glGetObjectParameterfvARB", 31, -1 },
523 { "glGetObjectParameterivARB", 31, -1 },
524 { "glGetInfoLogARB", 31, -1 },
525 { "glGetAttachedObjectsARB", 31, -1 },
526
527 /* GL_ARB_get_program_binary */
528 { "glGetProgramBinary", 30, -1 },
529 { "glProgramBinary", 30, -1 },
530 { "glProgramParameteri", 30, -1 },
531
532 /* GL_EXT_transform_feedback */
533 { "glBindBufferOffsetEXT", 31, -1 },
534
535 /* GL_IBM_multimode_draw_arrays */
536 { "glMultiModeDrawArraysIBM", 31, -1 },
537 { "glMultiModeDrawElementsIBM", 31, -1 },
538
539 /* GL_EXT_depth_bounds_test */
540 { "glDepthBoundsEXT", 31, -1 },
541
542 /* GL_apple_object_purgeable */
543 { "glObjectPurgeableAPPLE", 31, -1 },
544 { "glObjectUnpurgeableAPPLE", 31, -1 },
545 { "glGetObjectParameterivAPPLE", 31, -1 },
546
547 /* GL_ARB_instanced_arrays */
548 { "glVertexAttribDivisorARB", 31, -1 },
549
550 /* GL_NV_texture_barrier */
551 { "glTextureBarrierNV", 31, -1 },
552
553 /* GL_EXT_texture_integer */
554 { "glClearColorIiEXT", 31, -1 },
555 { "glClearColorIuiEXT", 31, -1 },
556
557 /* GL_OES_EGL_image */
558 { "glEGLImageTargetRenderbufferStorageOES", 31, -1 },
559 { "glEGLImageTargetTexture2DOES", 31, -1 },
560
561 /* GL 3.2 */
562 { "glGetInteger64i_v", 32, -1 },
563 { "glGetBufferParameteri64v", 32, -1 },
564 { "glFramebufferTexture", 32, -1 },
565 { "glProgramParameteri", 32, -1 },
566 { "glFramebufferTextureLayer", 32, -1 },
567
568 /* GL 3.3 */
569 { "glVertexAttribDivisor", 33, -1 },
570
571 /* GL 4.0 */
572 { "glMinSampleShading", 40, -1 },
573 { "glPatchParameteri", 40, -1 },
574 { "glPatchParameterfv", 40, -1 },
575 { "glBlendEquationi", 40, -1 },
576 { "glBlendEquationSeparatei", 40, -1 },
577 { "glBlendFunci", 40, -1 },
578 { "glBlendFuncSeparatei", 40, -1 },
579
580 { "glGetSubroutineUniformLocation", 40, -1 },
581 { "glGetSubroutineIndex", 40, -1 },
582 { "glGetActiveSubroutineUniformiv", 40, -1 },
583 { "glGetActiveSubroutineUniformName", 40, -1 },
584 { "glGetActiveSubroutineName", 40, -1 },
585 { "glUniformSubroutinesuiv", 40, -1 },
586 { "glGetUniformSubroutineuiv", 40, -1 },
587 { "glGetProgramStageiv", 40, -1 },
588
589 { "glUniform1d", 40, -1 },
590 { "glUniform2d", 40, -1 },
591 { "glUniform3d", 40, -1 },
592 { "glUniform4d", 40, -1 },
593 { "glUniform1dv", 40, -1 },
594 { "glUniform2dv", 40, -1 },
595 { "glUniform3dv", 40, -1 },
596 { "glUniform4dv", 40, -1 },
597 { "glUniformMatrix2dv", 40, -1 },
598 { "glUniformMatrix3dv", 40, -1 },
599 { "glUniformMatrix4dv", 40, -1 },
600 { "glUniformMatrix2x3dv", 40, -1 },
601 { "glUniformMatrix2x4dv", 40, -1 },
602 { "glUniformMatrix3x2dv", 40, -1 },
603 { "glUniformMatrix3x4dv", 40, -1 },
604 { "glUniformMatrix4x2dv", 40, -1 },
605 { "glUniformMatrix4x3dv", 40, -1 },
606 { "glGetUniformdv", 43, -1 },
607
608 /* GL 4.1 */
609 { "glVertexAttribL1d", 41, -1 },
610 { "glVertexAttribL2d", 41, -1 },
611 { "glVertexAttribL3d", 41, -1 },
612 { "glVertexAttribL4d", 41, -1 },
613 { "glVertexAttribL1dv", 41, -1 },
614 { "glVertexAttribL2dv", 41, -1 },
615 { "glVertexAttribL3dv", 41, -1 },
616 { "glVertexAttribL4dv", 41, -1 },
617 { "glVertexAttribLPointer", 41, -1 },
618 { "glGetVertexAttribLdv", 41, -1 },
619
620 /* GL 4.3 */
621 { "glIsRenderbuffer", 43, -1 },
622 { "glBindRenderbuffer", 43, -1 },
623 { "glDeleteRenderbuffers", 43, -1 },
624 { "glGenRenderbuffers", 43, -1 },
625 { "glRenderbufferStorage", 43, -1 },
626 { "glGetRenderbufferParameteriv", 43, -1 },
627 { "glIsFramebuffer", 43, -1 },
628 { "glBindFramebuffer", 43, -1 },
629 { "glDeleteFramebuffers", 43, -1 },
630 { "glGenFramebuffers", 43, -1 },
631 { "glCheckFramebufferStatus", 43, -1 },
632 { "glFramebufferTexture1D", 43, -1 },
633 { "glFramebufferTexture2D", 43, -1 },
634 { "glFramebufferTexture3D", 43, -1 },
635 { "glFramebufferRenderbuffer", 43, -1 },
636 { "glGetFramebufferAttachmentParameteriv", 43, -1 },
637 { "glGenerateMipmap", 43, -1 },
638 { "glBlitFramebuffer", 43, -1 },
639 { "glRenderbufferStorageMultisample", 43, -1 },
640 { "glFramebufferTextureLayer", 43, -1 },
641 { "glMapBufferRange", 43, -1 },
642 { "glFlushMappedBufferRange", 43, -1 },
643 { "glBindVertexArray", 43, -1 },
644 { "glDeleteVertexArrays", 43, -1 },
645 { "glGenVertexArrays", 43, -1 },
646 { "glIsVertexArray", 43, -1 },
647 { "glGetUniformIndices", 43, -1 },
648 { "glGetActiveUniformsiv", 43, -1 },
649 { "glGetActiveUniformName", 43, -1 },
650 { "glGetUniformBlockIndex", 43, -1 },
651 { "glGetActiveUniformBlockiv", 43, -1 },
652 { "glGetActiveUniformBlockName", 43, -1 },
653 { "glUniformBlockBinding", 43, -1 },
654 { "glCopyBufferSubData", 43, -1 },
655 { "glDrawElementsBaseVertex", 43, -1 },
656 { "glDrawRangeElementsBaseVertex", 43, -1 },
657 { "glDrawElementsInstancedBaseVertex", 43, -1 },
658 { "glMultiDrawElementsBaseVertex", 43, -1 },
659 { "glProvokingVertex", 43, -1 },
660 { "glFenceSync", 43, -1 },
661 { "glIsSync", 43, -1 },
662 { "glDeleteSync", 43, -1 },
663 { "glClientWaitSync", 43, -1 },
664 { "glWaitSync", 43, -1 },
665 { "glGetInteger64v", 43, -1 },
666 { "glGetSynciv", 43, -1 },
667 { "glTexImage2DMultisample", 43, -1 },
668 { "glTexImage3DMultisample", 43, -1 },
669 { "glGetMultisamplefv", 43, -1 },
670 { "glSampleMaski", 43, -1 },
671 { "glBlendEquationiARB", 43, -1 },
672 { "glBlendEquationSeparateiARB", 43, -1 },
673 { "glBlendFunciARB", 43, -1 },
674 { "glBlendFuncSeparateiARB", 43, -1 },
675 { "glMinSampleShadingARB", 43, -1 }, // XXX: Add to xml
676 // { "glNamedStringARB", 43, -1 }, // XXX: Add to xml
677 // { "glDeleteNamedStringARB", 43, -1 }, // XXX: Add to xml
678 // { "glCompileShaderIncludeARB", 43, -1 }, // XXX: Add to xml
679 // { "glIsNamedStringARB", 43, -1 }, // XXX: Add to xml
680 // { "glGetNamedStringARB", 43, -1 }, // XXX: Add to xml
681 // { "glGetNamedStringivARB", 43, -1 }, // XXX: Add to xml
682 { "glBindFragDataLocationIndexed", 43, -1 },
683 { "glGetFragDataIndex", 43, -1 },
684 { "glGenSamplers", 43, -1 },
685 { "glDeleteSamplers", 43, -1 },
686 { "glIsSampler", 43, -1 },
687 { "glBindSampler", 43, -1 },
688 { "glSamplerParameteri", 43, -1 },
689 { "glSamplerParameteriv", 43, -1 },
690 { "glSamplerParameterf", 43, -1 },
691 { "glSamplerParameterfv", 43, -1 },
692 { "glSamplerParameterIiv", 43, -1 },
693 { "glSamplerParameterIuiv", 43, -1 },
694 { "glGetSamplerParameteriv", 43, -1 },
695 { "glGetSamplerParameterIiv", 43, -1 },
696 { "glGetSamplerParameterfv", 43, -1 },
697 { "glGetSamplerParameterIuiv", 43, -1 },
698 { "glQueryCounter", 43, -1 },
699 { "glGetQueryObjecti64v", 43, -1 },
700 { "glGetQueryObjectui64v", 43, -1 },
701 { "glVertexP2ui", 43, -1 },
702 { "glVertexP2uiv", 43, -1 },
703 { "glVertexP3ui", 43, -1 },
704 { "glVertexP3uiv", 43, -1 },
705 { "glVertexP4ui", 43, -1 },
706 { "glVertexP4uiv", 43, -1 },
707 { "glTexCoordP1ui", 43, -1 },
708 { "glTexCoordP1uiv", 43, -1 },
709 { "glTexCoordP2ui", 43, -1 },
710 { "glTexCoordP2uiv", 43, -1 },
711 { "glTexCoordP3ui", 43, -1 },
712 { "glTexCoordP3uiv", 43, -1 },
713 { "glTexCoordP4ui", 43, -1 },
714 { "glTexCoordP4uiv", 43, -1 },
715 { "glMultiTexCoordP1ui", 43, -1 },
716 { "glMultiTexCoordP1uiv", 43, -1 },
717 { "glMultiTexCoordP2ui", 43, -1 },
718 { "glMultiTexCoordP2uiv", 43, -1 },
719 { "glMultiTexCoordP3ui", 43, -1 },
720 { "glMultiTexCoordP3uiv", 43, -1 },
721 { "glMultiTexCoordP4ui", 43, -1 },
722 { "glMultiTexCoordP4uiv", 43, -1 },
723 { "glNormalP3ui", 43, -1 },
724 { "glNormalP3uiv", 43, -1 },
725 { "glColorP3ui", 43, -1 },
726 { "glColorP3uiv", 43, -1 },
727 { "glColorP4ui", 43, -1 },
728 { "glColorP4uiv", 43, -1 },
729 { "glSecondaryColorP3ui", 43, -1 },
730 { "glSecondaryColorP3uiv", 43, -1 },
731 { "glVertexAttribP1ui", 43, -1 },
732 { "glVertexAttribP1uiv", 43, -1 },
733 { "glVertexAttribP2ui", 43, -1 },
734 { "glVertexAttribP2uiv", 43, -1 },
735 { "glVertexAttribP3ui", 43, -1 },
736 { "glVertexAttribP3uiv", 43, -1 },
737 { "glVertexAttribP4ui", 43, -1 },
738 { "glVertexAttribP4uiv", 43, -1 },
739 { "glDrawArraysIndirect", 43, -1 },
740 { "glDrawElementsIndirect", 43, -1 },
741 { "glBindTransformFeedback", 43, -1 },
742 { "glDeleteTransformFeedbacks", 43, -1 },
743 { "glGenTransformFeedbacks", 43, -1 },
744 { "glIsTransformFeedback", 43, -1 },
745 { "glPauseTransformFeedback", 43, -1 },
746 { "glResumeTransformFeedback", 43, -1 },
747 { "glDrawTransformFeedback", 43, -1 },
748 { "glDrawTransformFeedbackStream", 43, -1 },
749 { "glBeginQueryIndexed", 43, -1 },
750 { "glEndQueryIndexed", 43, -1 },
751 { "glGetQueryIndexediv", 43, -1 },
752 { "glReleaseShaderCompiler", 43, -1 },
753 { "glShaderBinary", 43, -1 },
754 { "glGetShaderPrecisionFormat", 43, -1 },
755 { "glDepthRangef", 43, -1 },
756 { "glClearDepthf", 43, -1 },
757 { "glGetProgramBinary", 43, -1 },
758 { "glProgramBinary", 43, -1 },
759 { "glProgramParameteri", 43, -1 },
760 { "glUseProgramStages", 43, -1 },
761 { "glActiveShaderProgram", 43, -1 },
762 { "glCreateShaderProgramv", 43, -1 },
763 { "glBindProgramPipeline", 43, -1 },
764 { "glDeleteProgramPipelines", 43, -1 },
765 { "glGenProgramPipelines", 43, -1 },
766 { "glIsProgramPipeline", 43, -1 },
767 { "glGetProgramPipelineiv", 43, -1 },
768 { "glProgramUniform1d", 43, -1 },
769 { "glProgramUniform1dv", 43, -1 },
770 { "glProgramUniform1i", 43, -1 },
771 { "glProgramUniform1iv", 43, -1 },
772 { "glProgramUniform1f", 43, -1 },
773 { "glProgramUniform1fv", 43, -1 },
774 { "glProgramUniform1ui", 43, -1 },
775 { "glProgramUniform1uiv", 43, -1 },
776 { "glProgramUniform2i", 43, -1 },
777 { "glProgramUniform2iv", 43, -1 },
778 { "glProgramUniform2f", 43, -1 },
779 { "glProgramUniform2fv", 43, -1 },
780 { "glProgramUniform2d", 40, -1 },
781 { "glProgramUniform2dv", 40, -1 },
782 { "glProgramUniform2ui", 43, -1 },
783 { "glProgramUniform2uiv", 43, -1 },
784 { "glProgramUniform3i", 43, -1 },
785 { "glProgramUniform3iv", 43, -1 },
786 { "glProgramUniform3f", 43, -1 },
787 { "glProgramUniform3fv", 43, -1 },
788 { "glProgramUniform3d", 40, -1 },
789 { "glProgramUniform3dv", 40, -1 },
790 { "glProgramUniform3ui", 43, -1 },
791 { "glProgramUniform3uiv", 43, -1 },
792 { "glProgramUniform4i", 43, -1 },
793 { "glProgramUniform4iv", 43, -1 },
794 { "glProgramUniform4d", 43, -1 },
795 { "glProgramUniform4dv", 43, -1 },
796 { "glProgramUniform4f", 43, -1 },
797 { "glProgramUniform4fv", 43, -1 },
798 { "glProgramUniform4ui", 43, -1 },
799 { "glProgramUniform4uiv", 43, -1 },
800 { "glProgramUniformMatrix2dv", 43, -1 },
801 { "glProgramUniformMatrix2fv", 43, -1 },
802 { "glProgramUniformMatrix3dv", 43, -1 },
803 { "glProgramUniformMatrix3fv", 43, -1 },
804 { "glProgramUniformMatrix4dv", 43, -1 },
805 { "glProgramUniformMatrix4fv", 43, -1 },
806 { "glProgramUniformMatrix2x3dv", 43, -1 },
807 { "glProgramUniformMatrix2x3fv", 43, -1 },
808 { "glProgramUniformMatrix3x2dv", 43, -1 },
809 { "glProgramUniformMatrix3x2fv", 43, -1 },
810 { "glProgramUniformMatrix2x4dv", 43, -1 },
811 { "glProgramUniformMatrix2x4fv", 43, -1 },
812 { "glProgramUniformMatrix4x2dv", 43, -1 },
813 { "glProgramUniformMatrix4x2fv", 43, -1 },
814 { "glProgramUniformMatrix3x4dv", 43, -1 },
815 { "glProgramUniformMatrix3x4fv", 43, -1 },
816 { "glProgramUniformMatrix4x3dv", 43, -1 },
817 { "glProgramUniformMatrix4x3fv", 43, -1 },
818 { "glValidateProgramPipeline", 43, -1 },
819 { "glGetProgramPipelineInfoLog", 43, -1 },
820 { "glGetFloati_v", 43, -1 },
821 { "glGetDoublei_v", 43, -1 },
822 // { "glCreateSyncFromCLeventARB", 43, -1 }, // XXX: Add to xml
823 { "glGetGraphicsResetStatusARB", 43, -1 },
824 { "glGetnMapdvARB", 43, -1 },
825 { "glGetnMapfvARB", 43, -1 },
826 { "glGetnMapivARB", 43, -1 },
827 { "glGetnPixelMapfvARB", 43, -1 },
828 { "glGetnPixelMapuivARB", 43, -1 },
829 { "glGetnPixelMapusvARB", 43, -1 },
830 { "glGetnPolygonStippleARB", 43, -1 },
831 { "glGetnColorTableARB", 43, -1 },
832 { "glGetnConvolutionFilterARB", 43, -1 },
833 { "glGetnSeparableFilterARB", 43, -1 },
834 { "glGetnHistogramARB", 43, -1 },
835 { "glGetnMinmaxARB", 43, -1 },
836 { "glGetnTexImageARB", 43, -1 },
837 { "glReadnPixelsARB", 43, -1 },
838 { "glGetnCompressedTexImageARB", 43, -1 },
839 { "glGetnUniformfvARB", 43, -1 },
840 { "glGetnUniformivARB", 43, -1 },
841 { "glGetnUniformuivARB", 43, -1 },
842 { "glGetnUniformdvARB", 43, -1 },
843 { "glDrawArraysInstancedBaseInstance", 43, -1 },
844 { "glDrawElementsInstancedBaseInstance", 43, -1 },
845 { "glDrawElementsInstancedBaseVertexBaseInstance", 43, -1 },
846 { "glDrawTransformFeedbackInstanced", 43, -1 },
847 { "glDrawTransformFeedbackStreamInstanced", 43, -1 },
848 // { "glGetInternalformativ", 43, -1 }, // XXX: Add to xml
849 { "glGetActiveAtomicCounterBufferiv", 43, -1 },
850 { "glBindImageTexture", 43, -1 },
851 { "glMemoryBarrier", 43, -1 },
852 { "glTexStorage1D", 43, -1 },
853 { "glTexStorage2D", 43, -1 },
854 { "glTexStorage3D", 43, -1 },
855 { "glTextureStorage1DEXT", 43, -1 },
856 { "glTextureStorage2DEXT", 43, -1 },
857 { "glTextureStorage3DEXT", 43, -1 },
858 { "glClearBufferData", 43, -1 },
859 { "glClearBufferSubData", 43, -1 },
860 // { "glClearNamedBufferDataEXT", 43, -1 }, // XXX: Add to xml
861 // { "glClearNamedBufferSubDataEXT", 43, -1 }, // XXX: Add to xml
862 { "glCopyImageSubData", 43, -1 },
863 { "glTextureView", 43, -1 },
864 { "glBindVertexBuffer", 43, -1 },
865 { "glVertexAttribFormat", 43, -1 },
866 { "glVertexAttribIFormat", 43, -1 },
867 { "glVertexAttribLFormat", 43, -1 },
868 { "glVertexAttribBinding", 43, -1 },
869 { "glVertexBindingDivisor", 43, -1 },
870 // { "glVertexArrayBindVertexBufferEXT", 43, -1 }, // XXX: Add to xml
871 // { "glVertexArrayVertexAttribFormatEXT", 43, -1 }, // XXX: Add to xml
872 // { "glVertexArrayVertexAttribIFormatEXT", 43, -1 }, // XXX: Add to xml
873 // { "glVertexArrayVertexAttribBindingEXT", 43, -1 }, // XXX: Add to xml
874 // { "glVertexArrayVertexBindingDivisorEXT", 43, -1 }, // XXX: Add to xml
875 { "glFramebufferParameteri", 43, -1 },
876 { "glGetFramebufferParameteriv", 43, -1 },
877 // { "glNamedFramebufferParameteriEXT", 43, -1 }, // XXX: Add to xml
878 // { "glGetNamedFramebufferParameterivEXT", 43, -1 }, // XXX: Add to xml
879 // { "glGetInternalformati64v", 43, -1 }, // XXX: Add to xml
880 { "glInvalidateTexSubImage", 43, -1 },
881 { "glInvalidateTexImage", 43, -1 },
882 { "glInvalidateBufferSubData", 43, -1 },
883 { "glInvalidateBufferData", 43, -1 },
884 { "glInvalidateFramebuffer", 43, -1 },
885 { "glInvalidateSubFramebuffer", 43, -1 },
886 { "glMultiDrawArraysIndirect", 43, -1 },
887 { "glMultiDrawElementsIndirect", 43, -1 },
888 { "glGetProgramInterfaceiv", 43, -1 },
889 { "glGetProgramResourceIndex", 43, -1 },
890 { "glGetProgramResourceName", 43, -1 },
891 { "glGetProgramResourceiv", 43, -1 },
892 { "glGetProgramResourceLocation", 43, -1 },
893 { "glGetProgramResourceLocationIndex", 43, -1 },
894 { "glShaderStorageBlockBinding", 43, -1 },
895 // { "glTextureBufferRangeEXT", 43, -1 }, // XXX: Add to xml
896 { "glTexStorage2DMultisample", 43, -1 },
897 { "glTexStorage3DMultisample", 43, -1 },
898 // { "glTextureStorage2DMultisampleEXT", 43, -1 }, // XXX: Add to xml
899 // { "glTextureStorage3DMultisampleEXT", 43, -1 }, // XXX: Add to xml
900
901 { "glViewportArrayv", 43, -1 },
902 { "glViewportIndexedf", 43, -1 },
903 { "glViewportIndexedfv", 43, -1 },
904 { "glScissorArrayv", 43, -1 },
905 { "glScissorIndexed", 43, -1 },
906 { "glScissorIndexedv", 43, -1 },
907 { "glDepthRangeArrayv", 43, -1 },
908 { "glDepthRangeIndexed", 43, -1 },
909
910 /* GL 4.5 */
911 /* aliased versions checked above */
912 //{ "glGetGraphicsResetStatus", 45, -1 },
913 //{ "glReadnPixels", 45, -1 },
914 //{ "glGetnUniformfv", 45, -1 },
915 //{ "glGetnUniformiv", 45, -1 },
916 //{ "glGetnUniformuiv", 45, -1 },
917 { "glMemoryBarrierByRegion", 45, -1 },
918
919 /* GL_ARB_direct_state_access */
920 { "glCreateTransformFeedbacks", 45, -1 },
921 { "glTransformFeedbackBufferBase", 45, -1 },
922 { "glTransformFeedbackBufferRange", 45, -1 },
923 { "glGetTransformFeedbackiv", 45, -1 },
924 { "glGetTransformFeedbacki_v", 45, -1 },
925 { "glGetTransformFeedbacki64_v", 45, -1 },
926 { "glCreateBuffers", 45, -1 },
927 { "glNamedBufferStorage", 45, -1 },
928 { "glNamedBufferData", 45, -1 },
929 { "glNamedBufferSubData", 45, -1 },
930 { "glCopyNamedBufferSubData", 45, -1 },
931 { "glClearNamedBufferData", 45, -1 },
932 { "glClearNamedBufferSubData", 45, -1 },
933 { "glMapNamedBuffer", 45, -1 },
934 { "glMapNamedBufferRange", 45, -1 },
935 { "glFlushMappedNamedBufferRange", 45, -1 },
936 { "glGetNamedBufferParameteriv", 45, -1 },
937 { "glGetNamedBufferParameteri64v", 45, -1 },
938 { "glGetNamedBufferPointerv", 45, -1 },
939 { "glGetNamedBufferSubData", 45, -1 },
940 { "glCreateFramebuffers", 45, -1 },
941 { "glNamedFramebufferRenderbuffer", 45, -1 },
942 { "glNamedFramebufferParameteri", 45, -1 },
943 { "glNamedFramebufferTexture", 45, -1 },
944 { "glNamedFramebufferTextureLayer", 45, -1 },
945 { "glNamedFramebufferDrawBuffer", 45, -1 },
946 { "glNamedFramebufferDrawBuffers", 45, -1 },
947 { "glNamedFramebufferReadBuffer", 45, -1 },
948 { "glInvalidateNamedFramebufferSubData", 45, -1 },
949 { "glInvalidateNamedFramebufferData", 45, -1 },
950 { "glClearNamedFramebufferiv", 45, -1 },
951 { "glClearNamedFramebufferuiv", 45, -1 },
952 { "glClearNamedFramebufferfv", 45, -1 },
953 { "glClearNamedFramebufferfi", 45, -1 },
954 { "glBlitNamedFramebuffer", 45, -1 },
955 { "glCheckNamedFramebufferStatus", 45, -1 },
956 { "glGetNamedFramebufferParameteriv", 45, -1 },
957 { "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },
958 { "glCreateRenderbuffers", 45, -1 },
959 { "glNamedRenderbufferStorage", 45, -1 },
960 { "glNamedRenderbufferStorageMultisample", 45, -1 },
961 { "glGetNamedRenderbufferParameteriv", 45, -1 },
962 { "glCreateTextures", 45, -1 },
963 { "glTextureStorage1D", 45, -1 },
964 { "glTextureStorage2D", 45, -1 },
965 { "glTextureStorage3D", 45, -1 },
966 { "glTextureSubImage1D", 45, -1 },
967 { "glTextureSubImage2D", 45, -1 },
968 { "glTextureSubImage3D", 45, -1 },
969 { "glBindTextureUnit", 45, -1 },
970 { "glTextureParameterf", 45, -1 },
971 { "glTextureParameterfv", 45, -1 },
972 { "glTextureParameteri", 45, -1 },
973 { "glTextureParameterIiv", 45, -1 },
974 { "glTextureParameterIuiv", 45, -1 },
975 { "glTextureParameteriv", 45, -1 },
976 { "glGetTextureLevelParameterfv", 45, -1 },
977 { "glGetTextureLevelParameteriv", 45, -1 },
978 { "glGetTextureParameterfv", 45, -1 },
979 { "glGetTextureParameterIiv", 45, -1 },
980 { "glGetTextureParameterIuiv", 45, -1 },
981 { "glGetTextureParameteriv", 45, -1 },
982 { "glCopyTextureSubImage1D", 45, -1 },
983 { "glCopyTextureSubImage2D", 45, -1 },
984 { "glCopyTextureSubImage3D", 45, -1 },
985 { "glGetTextureImage", 45, -1 },
986 { "glGetCompressedTextureImage", 45, -1 },
987 { "glCompressedTextureSubImage1D", 45, -1 },
988 { "glCompressedTextureSubImage2D", 45, -1 },
989 { "glCompressedTextureSubImage3D", 45, -1 },
990 { "glGenerateTextureMipmap", 45, -1 },
991 { "glTextureStorage2DMultisample", 45, -1 },
992 { "glTextureStorage3DMultisample", 45, -1 },
993 { "glTextureBuffer", 45, -1 },
994 { "glTextureBufferRange", 45, -1 },
995 { "glCreateVertexArrays", 45, -1 },
996 { "glDisableVertexArrayAttrib", 45, -1 },
997 { "glEnableVertexArrayAttrib", 45, -1 },
998 { "glVertexArrayElementBuffer", 45, -1 },
999 { "glVertexArrayVertexBuffer", 45, -1 },
1000 { "glVertexArrayVertexBuffers", 45, -1 },
1001 { "glVertexArrayAttribFormat", 45, -1 },
1002 { "glVertexArrayAttribIFormat", 45, -1 },
1003 { "glVertexArrayAttribLFormat", 45, -1 },
1004 { "glVertexArrayAttribBinding", 45, -1 },
1005 { "glVertexArrayBindingDivisor", 45, -1 },
1006 { "glGetVertexArrayiv", 45, -1 },
1007 { "glGetVertexArrayIndexediv", 45, -1 },
1008 { "glGetVertexArrayIndexed64iv", 45, -1 },
1009 { "glCreateSamplers", 45, -1 },
1010 { "glCreateProgramPipelines", 45, -1 },
1011 { "glCreateQueries", 45, -1 },
1012 { "glGetQueryBufferObjectiv", 45, -1 },
1013 { "glGetQueryBufferObjectuiv", 45, -1 },
1014 { "glGetQueryBufferObjecti64v", 45, -1 },
1015 { "glGetQueryBufferObjectui64v", 45, -1 },
1016
1017 /* GL_EXT_direct_state_access - GL 1.0 */
1018 { "glMatrixLoadfEXT", 10, -1 },
1019 { "glMatrixLoaddEXT", 10, -1 },
1020 { "glMatrixMultfEXT", 10, -1 },
1021 { "glMatrixMultdEXT", 10, -1 },
1022 { "glMatrixLoadIdentityEXT", 10, -1 },
1023 { "glMatrixRotatefEXT", 10, -1 },
1024 { "glMatrixRotatedEXT", 10, -1 },
1025 { "glMatrixScalefEXT", 10, -1 },
1026 { "glMatrixScaledEXT", 10, -1 },
1027 { "glMatrixTranslatefEXT", 10, -1 },
1028 { "glMatrixTranslatedEXT", 10, -1 },
1029 { "glMatrixOrthoEXT", 10, -1 },
1030 { "glMatrixFrustumEXT", 10, -1 },
1031 { "glMatrixPushEXT", 10, -1 },
1032 { "glMatrixPopEXT", 10, -1 },
1033 /* GL_EXT_direct_state_access - GL 1.1 */
1034 //{ "glClientAttribDefaultEXT", 11, -1 },
1035 //{ "glPushClientAttribDefaultEXT", 11, -1 },
1036 { "glTextureParameteriEXT", 11, -1 },
1037 { "glTextureParameterivEXT", 11, -1 },
1038 { "glTextureParameterfEXT", 11, -1 },
1039 { "glTextureParameterfvEXT", 11, -1 },
1040 { "glTextureImage1DEXT", 11, -1 },
1041 { "glTextureImage2DEXT", 11, -1 },
1042 { "glTextureSubImage1DEXT", 11, -1 },
1043 { "glTextureSubImage2DEXT", 11, -1 },
1044 { "glCopyTextureImage1DEXT", 11, -1 },
1045 { "glCopyTextureImage2DEXT", 11, -1 },
1046 { "glCopyTextureSubImage1DEXT", 11, -1 },
1047 { "glCopyTextureSubImage2DEXT", 11, -1 },
1048 { "glGetTextureImageEXT", 11, -1 },
1049 { "glGetTextureParameterfvEXT", 11, -1 },
1050 { "glGetTextureParameterivEXT", 11, -1 },
1051 { "glGetTextureLevelParameterfvEXT", 11, -1 },
1052 { "glGetTextureLevelParameterivEXT", 11, -1 },
1053 /* GL_EXT_direct_state_access - GL 1.2 */
1054 { "glTextureImage3DEXT", 12, -1 },
1055 { "glTextureSubImage3DEXT", 12, -1 },
1056 { "glCopyTextureSubImage3DEXT", 12, -1 },
1057 /* GL_EXT_direct_state_access - GL 1.2.1 */
1058 { "glBindMultiTextureEXT", 12, -1 },
1059 //{ "glMultiTexCoordPointerEXT", 12, -1 },
1060 //{ "glMultiTexEnvfEXT", 12, -1 },
1061 //{ "glMultiTexEnvfvEXT", 12, -1 },
1062 //{ "glMultiTexEnviEXT", 12, -1 },
1063 //{ "glMultiTexEnvivEXT", 12, -1 },
1064 //{ "glMultiTexGendEXT", 12, -1 },
1065 //{ "glMultiTexGendvEXT", 12, -1 },
1066 //{ "glMultiTexGenfEXT", 12, -1 },
1067 //{ "glMultiTexGenfvEXT", 12, -1 },
1068 //{ "glMultiTexGeniEXT", 12, -1 },
1069 //{ "glMultiTexGenivEXT", 12, -1 },
1070 //{ "glGetMultiTexEnvfvEXT", 12, -1 },
1071 //{ "glGetMultiTexEnvivEXT", 12, -1 },
1072 //{ "glGetMultiTexGendvEXT", 12, -1 },
1073 //{ "glGetMultiTexGenfvEXT", 12, -1 },
1074 //{ "glGetMultiTexGenivEXT", 12, -1 },
1075 { "glMultiTexParameterfEXT", 12, -1 },
1076 { "glMultiTexParameterfvEXT", 12, -1 },
1077 { "glMultiTexParameteriEXT", 12, -1 },
1078 { "glMultiTexParameterivEXT", 12, -1 },
1079 { "glMultiTexImage1DEXT", 12, -1 },
1080 { "glMultiTexImage2DEXT", 12, -1 },
1081 //{ "glMultiTexSubImage1DEXT", 12, -1 },
1082 //{ "glMultiTexSubImage2DEXT", 12, -1 },
1083 //{ "glCopyMultiTexImage1DEXT", 12, -1 },
1084 //{ "glCopyMultiTexImage2DEXT", 12, -1 },
1085 //{ "glCopyMultiTexSubImage1DEXT", 12, -1 },
1086 //{ "glCopyMultiTexSubImage2DEXT", 12, -1 },
1087 { "glGetMultiTexImageEXT", 12, -1 },
1088 //{ "glGetMultiTexParameterfvEXT", 12, -1 },
1089 //{ "glGetMultiTexParameterivEXT", 12, -1 },
1090 //{ "glGetMultiTexLevelParameterfvEXT", 12, -1 },
1091 //{ "glGetMultiTexLevelParameterivEXT", 12, -1 },
1092 { "glMultiTexImage3DEXT", 12, -1 },
1093 //{ "glMultiTexSubImage3DEXT", 12, -1 },
1094 //{ "glCopyMultiTexSubImage3DEXT", 12, -1 },
1095 { "glEnableClientStateIndexedEXT", 12, -1 },
1096 { "glDisableClientStateIndexedEXT", 12, -1 },
1097 { "glGetPointerIndexedvEXT", 12, -1 },
1098 /* GL_EXT_direct_state_access - ARB_vertex_program */
1099 //{ "glNamedProgramStringEXT", 10, -1 },
1100 //{ "glNamedProgramLocalParameter4dEXT", 10, -1 },
1101 //{ "glNamedProgramLocalParameter4dvEXT", 10, -1 },
1102 //{ "glNamedProgramLocalParameter4fEXT", 10, -1 },
1103 //{ "glNamedProgramLocalParameter4fvEXT", 10, -1 },
1104 //{ "glGetNamedProgramLocalParameter4dvEXT", 10, -1 },
1105 //{ "glGetNamedProgramLocalParameter4fvEXT", 10, -1 },
1106 //{ "glGetNamedProgramivEXT", 10, -1 },
1107 //{ "glGetNamedProgramStringEXT", 10, -1 },
1108 /* GL_EXT_direct_state_access - GL 1.3 */
1109 //{ "glCompressedTextureImage1DEXT", 13, -1 },
1110 //{ "glCompressedTextureImage2DEXT", 13, -1 },
1111 //{ "glCompressedTextureImage3DEXT", 13, -1 },
1112 //{ "glCompressedTextureSubImage1DEXT", 13, -1 },
1113 { "glCompressedTextureSubImage2DEXT", 13, -1 },
1114 //{ "glCompressedTextureSubImage3DEXT", 13, -1 },
1115 //{ "glGetCompressedTextureImageEXT", 13, -1 },
1116 //{ "glCompressedMultiTexImage1DEXT", 13, -1 },
1117 //{ "glCompressedMultiTexImage2DEXT", 13, -1 },
1118 //{ "glCompressedMultiTexImage3DEXT", 13, -1 },
1119 //{ "glCompressedMultiTexSubImage1DEXT", 13, -1 },
1120 //{ "glCompressedMultiTexSubImage2DEXT", 13, -1 },
1121 //{ "glCompressedMultiTexSubImage3DEXT", 13, -1 },
1122 //{ "glGetCompressedMultiTexImageEXT", 13, -1 },
1123 { "glMatrixLoadTransposefEXT", 13, -1 },
1124 { "glMatrixLoadTransposedEXT", 13, -1 },
1125 { "glMatrixMultTransposefEXT", 13, -1 },
1126 { "glMatrixMultTransposedEXT", 13, -1 },
1127 /* GL_EXT_direct_state_access - GL 1.5 */
1128 { "glNamedBufferDataEXT", 15, -1 },
1129 { "glNamedBufferSubDataEXT", 15, -1 },
1130 { "glMapNamedBufferEXT", 15, -1 },
1131 { "glUnmapNamedBufferEXT", 15, -1 },
1132 { "glGetNamedBufferParameterivEXT", 15, -1 },
1133 { "glGetNamedBufferPointervEXT", 15, -1 },
1134 { "glGetNamedBufferSubDataEXT", 15, -1 },
1135 /* GL_EXT_direct_state_access - GL 2.0 */
1136 //{ "glProgramUniform1iEXT", 20, -1 },
1137 //{ "glProgramUniform1ivEXT", 20, -1 },
1138 //{ "glProgramUniform1fEXT", 20, -1 },
1139 //{ "glProgramUniform1fvEXT", 20, -1 },
1140 //{ "glProgramUniform2iEXT", 20, -1 },
1141 //{ "glProgramUniform2ivEXT", 20, -1 },
1142 //{ "glProgramUniform2fEXT", 20, -1 },
1143 //{ "glProgramUniform2fvEXT", 20, -1 },
1144 //{ "glProgramUniform3iEXT", 20, -1 },
1145 //{ "glProgramUniform3ivEXT", 20, -1 },
1146 //{ "glProgramUniform3fEXT", 20, -1 },
1147 //{ "glProgramUniform3fvEXT", 20, -1 },
1148 //{ "glProgramUniform4iEXT", 20, -1 },
1149 //{ "glProgramUniform4ivEXT", 20, -1 },
1150 //{ "glProgramUniform4fEXT", 20, -1 },
1151 //{ "glProgramUniform4fvEXT", 20, -1 },
1152 //{ "glProgramUniformMatrix2fvEXT", 20, -1 },
1153 //{ "glProgramUniformMatrix3fvEXT", 20, -1 },
1154 //{ "glProgramUniformMatrix4fvEXT", 20, -1 },
1155 /* GL_EXT_direct_state_access - GL 2.1 */
1156 //{ "glProgramUniformMatrix2x3fvEXT", 21, -1 },
1157 //{ "glProgramUniformMatrix3x2fvEXT", 21, -1 },
1158 //{ "glProgramUniformMatrix2x4fvEXT", 21, -1 },
1159 //{ "glProgramUniformMatrix4x2fvEXT", 21, -1 },
1160 //{ "glProgramUniformMatrix3x4fvEXT", 21, -1 },
1161 //{ "glProgramUniformMatrix4x3fvEXT", 21, -1 },
1162 /* GL_EXT_direct_state_access - EXT_texture_buffer_object */
1163 //{ "glTextureBufferEXT", 10, -1 },
1164 //{ "glMultiTexBufferEXT", 10, -1 },
1165 /* GL_EXT_direct_state_access - EXT_texture_integer */
1166 //{ "glTextureParameterIivEXT", 10, -1 },
1167 //{ "glTextureParameterIuivEXT", 10, -1 },
1168 //{ "glGetTextureParameterIivEXT", 10, -1 },
1169 //{ "glGetTextureParameterIuivEXT", 10, -1 },
1170 //{ "glMultiTexParameterIivEXT", 10, -1 },
1171 //{ "glMultiTexParameterIuivEXT", 10, -1 },
1172 //{ "glGetMultiTexParameterIivEXT", 10, -1 },
1173 //{ "glGetMultiTexParameterIuivEXT", 10, -1 },
1174 /* GL_EXT_direct_state_access - EXT_gpu_shader4 */
1175 //{ "glProgramUniform1uiEXT", 10, -1 },
1176 //{ "glProgramUniform1uivEXT", 10, -1 },
1177 //{ "glProgramUniform2uiEXT", 10, -1 },
1178 //{ "glProgramUniform2uivEXT", 10, -1 },
1179 //{ "glProgramUniform3uiEXT", 10, -1 },
1180 //{ "glProgramUniform3uivEXT", 10, -1 },
1181 //{ "glProgramUniform4uiEXT", 10, -1 },
1182 //{ "glProgramUniform4uivEXT", 10, -1 },
1183 /* GL_EXT_direct_state_access - EXT_gpu_program_parameters */
1184 //{ "glNamedProgramLocalParameters4fvEXT", 10, -1 },
1185 /* GL_EXT_direct_state_access - GL 3.0 */
1186 //{ "glGetFloati_vEXT", 30, -1 },
1187 //{ "glGetDoublei_vEXT", 30, -1 },
1188 //{ "glNamedRenderbufferStorageEXT", 30, -1 },
1189 //{ "glGetNamedRenderbufferParameterivEXT", 30, -1 },
1190 //{ "glNamedRenderbufferStorageMultisampleEXT", 30, -1 },
1191 { "glCheckNamedFramebufferStatusEXT", 30, -1 },
1192 { "glNamedFramebufferTexture1DEXT", 30, -1 },
1193 { "glNamedFramebufferTexture2DEXT", 30, -1 },
1194 { "glNamedFramebufferTexture3DEXT", 30, -1 },
1195 { "glNamedFramebufferRenderbufferEXT", 30, -1 },
1196 { "glGetNamedFramebufferAttachmentParameterivEXT", 30, -1 },
1197 //{ "glGenerateTextureMipmapEXT", 30, -1 },
1198 //{ "glGenerateMultiTexMipmapEXT", 30, -1 },
1199 { "glFramebufferDrawBufferEXT", 30, -1 },
1200 { "glFramebufferDrawBuffersEXT", 30, -1 },
1201 { "glFramebufferReadBufferEXT", 30, -1 },
1202 { "glGetFramebufferParameterivEXT", 30, -1 },
1203 //{ "glNamedCopyBufferSubDataEXT", 30, -1 },
1204 //{ "glVertexArrayVertexOffsetEXT", 30, -1 },
1205 //{ "glVertexArrayColorOffsetEXT", 30, -1 },
1206 //{ "glVertexArrayEdgeFlagOffsetEXT", 30, -1 },
1207 //{ "glVertexArrayIndexOffsetEXT", 30, -1 },
1208 //{ "glVertexArrayNormalOffsetEXT", 30, -1 },
1209 //{ "glVertexArrayTexCoordOffsetEXT", 30, -1 },
1210 //{ "glVertexArrayMultiTexCoordOffsetEXT", 30, -1 },
1211 //{ "glVertexArrayFogCoordOffsetEXT", 30, -1 },
1212 //{ "glVertexArraySecondColorOffsetEXT", 30, -1 },
1213 //{ "glVertexArrayVertexAttribOffsetEXT", 30, -1 },
1214 //{ "glVertexArrayVertexAttribIOffsetEXT", 30, -1 },
1215 //{ "glEnableVertexArrayEXT", 30, -1 },
1216 //{ "glDisableVertexArrayEXT", 30, -1 },
1217 //{ "glEnableVertexArrayAttribEXT", 30, -1 },
1218 //{ "glDisableVertexArrayAttribEXT", 30, -1 },
1219 //{ "glGetVertexArrayIntegervEXT", 30, -1 },
1220 //{ "glGetVertexArrayPointervEXT", 30, -1 },
1221 //{ "glGetVertexArrayIntegeri_vEXT", 30, -1 },
1222 //{ "glGetVertexArrayPointeri_vEXT", 30, -1 },
1223 { "glMapNamedBufferRangeEXT", 30, -1 },
1224 { "glFlushMappedNamedBufferRangeEXT", 30, -1 },
1225
1226 /* GL_ARB_internalformat_query */
1227 { "glGetInternalformativ", 30, -1 },
1228
1229 /* GL_ARB_internalformat_query */
1230 { "glGetInternalformati64v", 30, -1 },
1231
1232 /* GL_ARB_multi_bind */
1233 { "glBindBuffersBase", 44, -1 },
1234 { "glBindBuffersRange", 44, -1 },
1235 { "glBindTextures", 44, -1 },
1236 { "glBindSamplers", 44, -1 },
1237 { "glBindImageTextures", 44, -1 },
1238 { "glBindVertexBuffers", 44, -1 },
1239
1240 /* GL_KHR_debug/GL_ARB_debug_output */
1241 { "glPushDebugGroup", 11, -1 },
1242 { "glPopDebugGroup", 11, -1 },
1243 { "glDebugMessageCallback", 11, -1 },
1244 { "glDebugMessageControl", 11, -1 },
1245 { "glDebugMessageInsert", 11, -1 },
1246 { "glGetDebugMessageLog", 11, -1 },
1247 { "glGetObjectLabel", 11, -1 },
1248 { "glGetObjectPtrLabel", 11, -1 },
1249 { "glObjectLabel", 11, -1 },
1250 { "glObjectPtrLabel", 11, -1 },
1251 /* aliased versions checked above */
1252 //{ "glDebugMessageControlARB", 11, -1 },
1253 //{ "glDebugMessageInsertARB", 11, -1 },
1254 //{ "glDebugMessageCallbackARB", 11, -1 },
1255 //{ "glGetDebugMessageLogARB", 11, -1 },
1256
1257 /* GL_AMD_performance_monitor */
1258 { "glGetPerfMonitorGroupsAMD", 11, -1 },
1259 { "glGetPerfMonitorCountersAMD", 11, -1 },
1260 { "glGetPerfMonitorGroupStringAMD", 11, -1 },
1261 { "glGetPerfMonitorCounterStringAMD", 11, -1 },
1262 { "glGetPerfMonitorCounterInfoAMD", 11, -1 },
1263 { "glGenPerfMonitorsAMD", 11, -1 },
1264 { "glDeletePerfMonitorsAMD", 11, -1 },
1265 { "glSelectPerfMonitorCountersAMD", 11, -1 },
1266 { "glBeginPerfMonitorAMD", 11, -1 },
1267 { "glEndPerfMonitorAMD", 11, -1 },
1268 { "glGetPerfMonitorCounterDataAMD", 11, -1 },
1269
1270 /* GL_INTEL_performance_query */
1271 { "glGetFirstPerfQueryIdINTEL", 30, -1 },
1272 { "glGetNextPerfQueryIdINTEL", 30, -1 },
1273 { "glGetPerfQueryIdByNameINTEL", 30, -1 },
1274 { "glGetPerfQueryInfoINTEL", 30, -1 },
1275 { "glGetPerfCounterInfoINTEL", 30, -1 },
1276 { "glCreatePerfQueryINTEL", 30, -1 },
1277 { "glDeletePerfQueryINTEL", 30, -1 },
1278 { "glBeginPerfQueryINTEL", 30, -1 },
1279 { "glEndPerfQueryINTEL", 30, -1 },
1280 { "glGetPerfQueryDataINTEL", 30, -1 },
1281
1282 /* GL_NV_vdpau_interop */
1283 { "glVDPAUInitNV", 11, -1 },
1284 { "glVDPAUFiniNV", 11, -1 },
1285 { "glVDPAURegisterVideoSurfaceNV", 11, -1 },
1286 { "glVDPAURegisterOutputSurfaceNV", 11, -1 },
1287 { "glVDPAUIsSurfaceNV", 11, -1 },
1288 { "glVDPAUUnregisterSurfaceNV", 11, -1 },
1289 { "glVDPAUGetSurfaceivNV", 11, -1 },
1290 { "glVDPAUSurfaceAccessNV", 11, -1 },
1291 { "glVDPAUMapSurfacesNV", 11, -1 },
1292 { "glVDPAUUnmapSurfacesNV", 11, -1 },
1293
1294 /* GL_ARB_buffer_storage */
1295 { "glBufferStorage", 43, -1 },
1296 { "glNamedBufferStorageEXT", 43, -1 },
1297
1298 /* GL_ARB_clear_texture */
1299 { "glClearTexImage", 13, -1 },
1300 { "glClearTexSubImage", 13, -1 },
1301
1302 /* GL_ARB_clip_control */
1303 { "glClipControl", 45, -1 },
1304
1305 /* GL_ARB_compute_shader */
1306 { "glDispatchCompute", 43, -1 },
1307 { "glDispatchComputeIndirect", 43, -1 },
1308
1309 /* GL_ARB_compute_variable_group_size */
1310 { "glDispatchComputeGroupSizeARB", 43, -1 },
1311
1312 /* GL_EXT_polygon_offset_clamp */
1313 { "glPolygonOffsetClampEXT", 11, -1 },
1314
1315 /* GL_ARB_get_texture_sub_image */
1316 { "glGetTextureSubImage", 20, -1 },
1317 { "glGetCompressedTextureSubImage", 20, -1 },
1318
1319 /* GL_GREMEDY_string_marker */
1320 { "glStringMarkerGREMEDY", 15, -1 },
1321
1322 /* GL_EXT_window_rectangles */
1323 { "glWindowRectanglesEXT", 30, -1 },
1324
1325 /* GL_KHR_blend_equation_advanced */
1326 { "glBlendBarrierKHR", 20, -1 },
1327
1328 /* GL_ARB_sparse_buffer */
1329 { "glBufferPageCommitmentARB", 43, -1 },
1330 { "glNamedBufferPageCommitmentARB", 43, -1 },
1331
1332 /* GL_ARB_bindless_texture */
1333 { "glGetTextureHandleARB", 40, -1 },
1334 { "glGetTextureSamplerHandleARB", 40, -1 },
1335 { "glMakeTextureHandleResidentARB", 40, -1 },
1336 { "glMakeTextureHandleNonResidentARB", 40, -1 },
1337 { "glIsTextureHandleResidentARB", 40, -1 },
1338 { "glGetImageHandleARB", 40, -1 },
1339 { "glMakeImageHandleResidentARB", 40, -1 },
1340 { "glMakeImageHandleNonResidentARB", 40, -1 },
1341 { "glIsImageHandleResidentARB", 40, -1 },
1342 { "glUniformHandleui64ARB", 40, -1 },
1343 { "glUniformHandleui64vARB", 40, -1 },
1344 { "glProgramUniformHandleui64ARB", 40, -1 },
1345 { "glProgramUniformHandleui64vARB", 40, -1 },
1346 { "glVertexAttribL1ui64ARB", 40, -1 },
1347 { "glVertexAttribL1ui64vARB", 40, -1 },
1348 { "glGetVertexAttribLui64vARB", 40, -1 },
1349
1350 /* GL_EXT_external_objects */
1351 { "glGetUnsignedBytevEXT", 45, -1 },
1352 { "glGetUnsignedBytei_vEXT", 45, -1 },
1353 { "glDeleteMemoryObjectsEXT", 45, -1 },
1354 { "glIsMemoryObjectEXT", 45, -1 },
1355 { "glCreateMemoryObjectsEXT", 45, -1 },
1356 { "glMemoryObjectParameterivEXT", 45, -1 },
1357 { "glGetMemoryObjectParameterivEXT", 45, -1 },
1358 { "glTexStorageMem2DEXT", 45, -1 },
1359 { "glTexStorageMem2DMultisampleEXT", 45, -1 },
1360 { "glTexStorageMem3DEXT", 45, -1 },
1361 { "glTexStorageMem3DMultisampleEXT", 45, -1 },
1362 { "glBufferStorageMemEXT", 45, -1 },
1363 { "glTextureStorageMem2DEXT", 45, -1 },
1364 { "glTextureStorageMem2DMultisampleEXT", 45, -1 },
1365 { "glTextureStorageMem3DEXT", 45, -1 },
1366 { "glTextureStorageMem3DMultisampleEXT", 45, -1 },
1367 { "glNamedBufferStorageMemEXT", 45, -1 },
1368 { "glTexStorageMem1DEXT", 45, -1 },
1369 { "glTextureStorageMem1DEXT", 45, -1 },
1370 { "glGenSemaphoresEXT", 45, -1 },
1371 { "glDeleteSemaphoresEXT", 45, -1 },
1372 { "glIsSemaphoreEXT", 45, -1 },
1373 { "glSemaphoreParameterui64vEXT", 45, -1 },
1374 { "glGetSemaphoreParameterui64vEXT", 45, -1 },
1375 { "glWaitSemaphoreEXT", 45, -1 },
1376 { "glSignalSemaphoreEXT", 45, -1 },
1377
1378 /* GL_EXT_external_objects_fd */
1379 { "glImportMemoryFdEXT", 45, -1 },
1380 { "glImportSemaphoreFdEXT", 45, -1 },
1381
1382 /* GL_ARB_gl_spirv */
1383 { "glSpecializeShaderARB", 45, -1 },
1384
1385 /* GL_EXT_shader_framebuffer_fetch_non_coherent */
1386 { "glFramebufferFetchBarrierEXT", 20, -1 },
1387
1388 /* GL_NV_conservative_raster */
1389 { "glSubpixelPrecisionBiasNV", 10, -1 },
1390
1391 /* GL_NV_conservative_raster_dilate */
1392 { "glConservativeRasterParameterfNV", 10, -1 },
1393
1394 /* GL_NV_conservative_raster_pre_snap_triangles */
1395 { "glConservativeRasterParameteriNV", 10, -1 },
1396
1397 /* GL_ARB_sample_locations */
1398 { "glFramebufferSampleLocationsfvARB", 30, -1 },
1399 { "glNamedFramebufferSampleLocationsfvARB", 30, -1 },
1400 { "glEvaluateDepthValuesARB", 30, -1 },
1401
1402 /* GL_ARB_indirect_parameters */
1403 { "glMultiDrawArraysIndirectCountARB", 11, -1 },
1404 { "glMultiDrawElementsIndirectCountARB", 11, -1 },
1405
1406 /* GL_AMD_framebuffer_multisample_advanced */
1407 { "glRenderbufferStorageMultisampleAdvancedAMD", 11, -1 },
1408 { "glNamedRenderbufferStorageMultisampleAdvancedAMD", 11, -1 },
1409
1410 { "glMaxShaderCompilerThreadsKHR", 11, -1 },
1411
1412 { NULL, 0, -1 }
1413 };
1414
1415 const struct function gl_compatibility_functions_possible[] = {
1416 { "glNewList", 10, _gloffset_NewList },
1417 { "glEndList", 10, _gloffset_EndList },
1418 { "glCallList", 10, _gloffset_CallList },
1419 { "glCallLists", 10, _gloffset_CallLists },
1420 { "glDeleteLists", 10, _gloffset_DeleteLists },
1421 { "glGenLists", 10, _gloffset_GenLists },
1422 { "glListBase", 10, _gloffset_ListBase },
1423 { "glBegin", 10, _gloffset_Begin },
1424 { "glBitmap", 10, _gloffset_Bitmap },
1425 { "glColor3b", 10, _gloffset_Color3b },
1426 { "glColor3bv", 10, _gloffset_Color3bv },
1427 { "glColor3d", 10, _gloffset_Color3d },
1428 { "glColor3dv", 10, _gloffset_Color3dv },
1429 { "glColor3f", 10, _gloffset_Color3f },
1430 { "glColor3fv", 10, _gloffset_Color3fv },
1431 { "glColor3i", 10, _gloffset_Color3i },
1432 { "glColor3iv", 10, _gloffset_Color3iv },
1433 { "glColor3s", 10, _gloffset_Color3s },
1434 { "glColor3sv", 10, _gloffset_Color3sv },
1435 { "glColor3ub", 10, _gloffset_Color3ub },
1436 { "glColor3ubv", 10, _gloffset_Color3ubv },
1437 { "glColor3ui", 10, _gloffset_Color3ui },
1438 { "glColor3uiv", 10, _gloffset_Color3uiv },
1439 { "glColor3us", 10, _gloffset_Color3us },
1440 { "glColor3usv", 10, _gloffset_Color3usv },
1441 { "glColor4b", 10, _gloffset_Color4b },
1442 { "glColor4bv", 10, _gloffset_Color4bv },
1443 { "glColor4d", 10, _gloffset_Color4d },
1444 { "glColor4dv", 10, _gloffset_Color4dv },
1445 { "glColor4f", 10, _gloffset_Color4f },
1446 { "glColor4fv", 10, _gloffset_Color4fv },
1447 { "glColor4i", 10, _gloffset_Color4i },
1448 { "glColor4iv", 10, _gloffset_Color4iv },
1449 { "glColor4s", 10, _gloffset_Color4s },
1450 { "glColor4sv", 10, _gloffset_Color4sv },
1451 { "glColor4ub", 10, _gloffset_Color4ub },
1452 { "glColor4ubv", 10, _gloffset_Color4ubv },
1453 { "glColor4ui", 10, _gloffset_Color4ui },
1454 { "glColor4uiv", 10, _gloffset_Color4uiv },
1455 { "glColor4us", 10, _gloffset_Color4us },
1456 { "glColor4usv", 10, _gloffset_Color4usv },
1457 { "glEdgeFlag", 10, _gloffset_EdgeFlag },
1458 { "glEdgeFlagv", 10, _gloffset_EdgeFlagv },
1459 { "glEnd", 10, _gloffset_End },
1460 { "glIndexd", 10, _gloffset_Indexd },
1461 { "glIndexdv", 10, _gloffset_Indexdv },
1462 { "glIndexf", 10, _gloffset_Indexf },
1463 { "glIndexfv", 10, _gloffset_Indexfv },
1464 { "glIndexi", 10, _gloffset_Indexi },
1465 { "glIndexiv", 10, _gloffset_Indexiv },
1466 { "glIndexs", 10, _gloffset_Indexs },
1467 { "glIndexsv", 10, _gloffset_Indexsv },
1468 { "glNormal3b", 10, _gloffset_Normal3b },
1469 { "glNormal3bv", 10, _gloffset_Normal3bv },
1470 { "glNormal3d", 10, _gloffset_Normal3d },
1471 { "glNormal3dv", 10, _gloffset_Normal3dv },
1472 { "glNormal3f", 10, _gloffset_Normal3f },
1473 { "glNormal3fv", 10, _gloffset_Normal3fv },
1474 { "glNormal3i", 10, _gloffset_Normal3i },
1475 { "glNormal3iv", 10, _gloffset_Normal3iv },
1476 { "glNormal3s", 10, _gloffset_Normal3s },
1477 { "glNormal3sv", 10, _gloffset_Normal3sv },
1478 { "glRasterPos2d", 10, _gloffset_RasterPos2d },
1479 { "glRasterPos2dv", 10, _gloffset_RasterPos2dv },
1480 { "glRasterPos2f", 10, _gloffset_RasterPos2f },
1481 { "glRasterPos2fv", 10, _gloffset_RasterPos2fv },
1482 { "glRasterPos2i", 10, _gloffset_RasterPos2i },
1483 { "glRasterPos2iv", 10, _gloffset_RasterPos2iv },
1484 { "glRasterPos2s", 10, _gloffset_RasterPos2s },
1485 { "glRasterPos2sv", 10, _gloffset_RasterPos2sv },
1486 { "glRasterPos3d", 10, _gloffset_RasterPos3d },
1487 { "glRasterPos3dv", 10, _gloffset_RasterPos3dv },
1488 { "glRasterPos3f", 10, _gloffset_RasterPos3f },
1489 { "glRasterPos3fv", 10, _gloffset_RasterPos3fv },
1490 { "glRasterPos3i", 10, _gloffset_RasterPos3i },
1491 { "glRasterPos3iv", 10, _gloffset_RasterPos3iv },
1492 { "glRasterPos3s", 10, _gloffset_RasterPos3s },
1493 { "glRasterPos3sv", 10, _gloffset_RasterPos3sv },
1494 { "glRasterPos4d", 10, _gloffset_RasterPos4d },
1495 { "glRasterPos4dv", 10, _gloffset_RasterPos4dv },
1496 { "glRasterPos4f", 10, _gloffset_RasterPos4f },
1497 { "glRasterPos4fv", 10, _gloffset_RasterPos4fv },
1498 { "glRasterPos4i", 10, _gloffset_RasterPos4i },
1499 { "glRasterPos4iv", 10, _gloffset_RasterPos4iv },
1500 { "glRasterPos4s", 10, _gloffset_RasterPos4s },
1501 { "glRasterPos4sv", 10, _gloffset_RasterPos4sv },
1502 { "glRectd", 10, _gloffset_Rectd },
1503 { "glRectdv", 10, _gloffset_Rectdv },
1504 { "glRectf", 10, _gloffset_Rectf },
1505 { "glRectfv", 10, _gloffset_Rectfv },
1506 { "glRecti", 10, _gloffset_Recti },
1507 { "glRectiv", 10, _gloffset_Rectiv },
1508 { "glRects", 10, _gloffset_Rects },
1509 { "glRectsv", 10, _gloffset_Rectsv },
1510 { "glTexCoord1d", 10, _gloffset_TexCoord1d },
1511 { "glTexCoord1dv", 10, _gloffset_TexCoord1dv },
1512 { "glTexCoord1f", 10, _gloffset_TexCoord1f },
1513 { "glTexCoord1fv", 10, _gloffset_TexCoord1fv },
1514 { "glTexCoord1i", 10, _gloffset_TexCoord1i },
1515 { "glTexCoord1iv", 10, _gloffset_TexCoord1iv },
1516 { "glTexCoord1s", 10, _gloffset_TexCoord1s },
1517 { "glTexCoord1sv", 10, _gloffset_TexCoord1sv },
1518 { "glTexCoord2d", 10, _gloffset_TexCoord2d },
1519 { "glTexCoord2dv", 10, _gloffset_TexCoord2dv },
1520 { "glTexCoord2f", 10, _gloffset_TexCoord2f },
1521 { "glTexCoord2fv", 10, _gloffset_TexCoord2fv },
1522 { "glTexCoord2i", 10, _gloffset_TexCoord2i },
1523 { "glTexCoord2iv", 10, _gloffset_TexCoord2iv },
1524 { "glTexCoord2s", 10, _gloffset_TexCoord2s },
1525 { "glTexCoord2sv", 10, _gloffset_TexCoord2sv },
1526 { "glTexCoord3d", 10, _gloffset_TexCoord3d },
1527 { "glTexCoord3dv", 10, _gloffset_TexCoord3dv },
1528 { "glTexCoord3f", 10, _gloffset_TexCoord3f },
1529 { "glTexCoord3fv", 10, _gloffset_TexCoord3fv },
1530 { "glTexCoord3i", 10, _gloffset_TexCoord3i },
1531 { "glTexCoord3iv", 10, _gloffset_TexCoord3iv },
1532 { "glTexCoord3s", 10, _gloffset_TexCoord3s },
1533 { "glTexCoord3sv", 10, _gloffset_TexCoord3sv },
1534 { "glTexCoord4d", 10, _gloffset_TexCoord4d },
1535 { "glTexCoord4dv", 10, _gloffset_TexCoord4dv },
1536 { "glTexCoord4f", 10, _gloffset_TexCoord4f },
1537 { "glTexCoord4fv", 10, _gloffset_TexCoord4fv },
1538 { "glTexCoord4i", 10, _gloffset_TexCoord4i },
1539 { "glTexCoord4iv", 10, _gloffset_TexCoord4iv },
1540 { "glTexCoord4s", 10, _gloffset_TexCoord4s },
1541 { "glTexCoord4sv", 10, _gloffset_TexCoord4sv },
1542 { "glVertex2d", 10, _gloffset_Vertex2d },
1543 { "glVertex2dv", 10, _gloffset_Vertex2dv },
1544 { "glVertex2f", 10, _gloffset_Vertex2f },
1545 { "glVertex2fv", 10, _gloffset_Vertex2fv },
1546 { "glVertex2i", 10, _gloffset_Vertex2i },
1547 { "glVertex2iv", 10, _gloffset_Vertex2iv },
1548 { "glVertex2s", 10, _gloffset_Vertex2s },
1549 { "glVertex2sv", 10, _gloffset_Vertex2sv },
1550 { "glVertex3d", 10, _gloffset_Vertex3d },
1551 { "glVertex3dv", 10, _gloffset_Vertex3dv },
1552 { "glVertex3f", 10, _gloffset_Vertex3f },
1553 { "glVertex3fv", 10, _gloffset_Vertex3fv },
1554 { "glVertex3i", 10, _gloffset_Vertex3i },
1555 { "glVertex3iv", 10, _gloffset_Vertex3iv },
1556 { "glVertex3s", 10, _gloffset_Vertex3s },
1557 { "glVertex3sv", 10, _gloffset_Vertex3sv },
1558 { "glVertex4d", 10, _gloffset_Vertex4d },
1559 { "glVertex4dv", 10, _gloffset_Vertex4dv },
1560 { "glVertex4f", 10, _gloffset_Vertex4f },
1561 { "glVertex4fv", 10, _gloffset_Vertex4fv },
1562 { "glVertex4i", 10, _gloffset_Vertex4i },
1563 { "glVertex4iv", 10, _gloffset_Vertex4iv },
1564 { "glVertex4s", 10, _gloffset_Vertex4s },
1565 { "glVertex4sv", 10, _gloffset_Vertex4sv },
1566 { "glClipPlane", 10, _gloffset_ClipPlane },
1567 { "glColorMaterial", 10, _gloffset_ColorMaterial },
1568 { "glFogf", 10, _gloffset_Fogf },
1569 { "glFogfv", 10, _gloffset_Fogfv },
1570 { "glFogi", 10, _gloffset_Fogi },
1571 { "glFogiv", 10, _gloffset_Fogiv },
1572 { "glLightf", 10, _gloffset_Lightf },
1573 { "glLightfv", 10, _gloffset_Lightfv },
1574 { "glLighti", 10, _gloffset_Lighti },
1575 { "glLightiv", 10, _gloffset_Lightiv },
1576 { "glLightModelf", 10, _gloffset_LightModelf },
1577 { "glLightModelfv", 10, _gloffset_LightModelfv },
1578 { "glLightModeli", 10, _gloffset_LightModeli },
1579 { "glLightModeliv", 10, _gloffset_LightModeliv },
1580 { "glLineStipple", 10, _gloffset_LineStipple },
1581 { "glMaterialf", 10, _gloffset_Materialf },
1582 { "glMaterialfv", 10, _gloffset_Materialfv },
1583 { "glMateriali", 10, _gloffset_Materiali },
1584 { "glMaterialiv", 10, _gloffset_Materialiv },
1585 { "glPolygonStipple", 10, _gloffset_PolygonStipple },
1586 { "glShadeModel", 10, _gloffset_ShadeModel },
1587 { "glTexEnvf", 10, _gloffset_TexEnvf },
1588 { "glTexEnvfv", 10, _gloffset_TexEnvfv },
1589 { "glTexEnvi", 10, _gloffset_TexEnvi },
1590 { "glTexEnviv", 10, _gloffset_TexEnviv },
1591 { "glTexGend", 10, _gloffset_TexGend },
1592 { "glTexGendv", 10, _gloffset_TexGendv },
1593 { "glTexGenf", 10, _gloffset_TexGenf },
1594 { "glTexGenfv", 10, _gloffset_TexGenfv },
1595 { "glTexGeni", 10, _gloffset_TexGeni },
1596 { "glTexGeniv", 10, _gloffset_TexGeniv },
1597 { "glFeedbackBuffer", 10, _gloffset_FeedbackBuffer },
1598 { "glSelectBuffer", 10, _gloffset_SelectBuffer },
1599 { "glRenderMode", 10, _gloffset_RenderMode },
1600 { "glInitNames", 10, _gloffset_InitNames },
1601 { "glLoadName", 10, _gloffset_LoadName },
1602 { "glPassThrough", 10, _gloffset_PassThrough },
1603 { "glPopName", 10, _gloffset_PopName },
1604 { "glPushName", 10, _gloffset_PushName },
1605 { "glClearAccum", 10, _gloffset_ClearAccum },
1606 { "glClearIndex", 10, _gloffset_ClearIndex },
1607 { "glIndexMask", 10, _gloffset_IndexMask },
1608 { "glAccum", 10, _gloffset_Accum },
1609 { "glPopAttrib", 10, _gloffset_PopAttrib },
1610 { "glPushAttrib", 10, _gloffset_PushAttrib },
1611 { "glMap1d", 10, _gloffset_Map1d },
1612 { "glMap1f", 10, _gloffset_Map1f },
1613 { "glMap2d", 10, _gloffset_Map2d },
1614 { "glMap2f", 10, _gloffset_Map2f },
1615 { "glMapGrid1d", 10, _gloffset_MapGrid1d },
1616 { "glMapGrid1f", 10, _gloffset_MapGrid1f },
1617 { "glMapGrid2d", 10, _gloffset_MapGrid2d },
1618 { "glMapGrid2f", 10, _gloffset_MapGrid2f },
1619 { "glEvalCoord1d", 10, _gloffset_EvalCoord1d },
1620 { "glEvalCoord1dv", 10, _gloffset_EvalCoord1dv },
1621 { "glEvalCoord1f", 10, _gloffset_EvalCoord1f },
1622 { "glEvalCoord1fv", 10, _gloffset_EvalCoord1fv },
1623 { "glEvalCoord2d", 10, _gloffset_EvalCoord2d },
1624 { "glEvalCoord2dv", 10, _gloffset_EvalCoord2dv },
1625 { "glEvalCoord2f", 10, _gloffset_EvalCoord2f },
1626 { "glEvalCoord2fv", 10, _gloffset_EvalCoord2fv },
1627 { "glEvalMesh1", 10, _gloffset_EvalMesh1 },
1628 { "glEvalPoint1", 10, _gloffset_EvalPoint1 },
1629 { "glEvalMesh2", 10, _gloffset_EvalMesh2 },
1630 { "glEvalPoint2", 10, _gloffset_EvalPoint2 },
1631 { "glAlphaFunc", 10, _gloffset_AlphaFunc },
1632 { "glPixelZoom", 10, _gloffset_PixelZoom },
1633 { "glPixelTransferf", 10, _gloffset_PixelTransferf },
1634 { "glPixelTransferi", 10, _gloffset_PixelTransferi },
1635 { "glPixelMapfv", 10, _gloffset_PixelMapfv },
1636 { "glPixelMapuiv", 10, _gloffset_PixelMapuiv },
1637 { "glPixelMapusv", 10, _gloffset_PixelMapusv },
1638 { "glCopyPixels", 10, _gloffset_CopyPixels },
1639 { "glDrawPixels", 10, _gloffset_DrawPixels },
1640 { "glGetClipPlane", 10, _gloffset_GetClipPlane },
1641 { "glGetLightfv", 10, _gloffset_GetLightfv },
1642 { "glGetLightiv", 10, _gloffset_GetLightiv },
1643 { "glGetMapdv", 10, _gloffset_GetMapdv },
1644 { "glGetMapfv", 10, _gloffset_GetMapfv },
1645 { "glGetMapiv", 10, _gloffset_GetMapiv },
1646 { "glGetMaterialfv", 10, _gloffset_GetMaterialfv },
1647 { "glGetMaterialiv", 10, _gloffset_GetMaterialiv },
1648 { "glGetPixelMapfv", 10, _gloffset_GetPixelMapfv },
1649 { "glGetPixelMapuiv", 10, _gloffset_GetPixelMapuiv },
1650 { "glGetPixelMapusv", 10, _gloffset_GetPixelMapusv },
1651 { "glGetPolygonStipple", 10, _gloffset_GetPolygonStipple },
1652 { "glGetTexEnvfv", 10, _gloffset_GetTexEnvfv },
1653 { "glGetTexEnviv", 10, _gloffset_GetTexEnviv },
1654 { "glGetTexGendv", 10, _gloffset_GetTexGendv },
1655 { "glGetTexGenfv", 10, _gloffset_GetTexGenfv },
1656 { "glGetTexGeniv", 10, _gloffset_GetTexGeniv },
1657 { "glIsList", 10, _gloffset_IsList },
1658 { "glFrustum", 10, _gloffset_Frustum },
1659 { "glLoadIdentity", 10, _gloffset_LoadIdentity },
1660 { "glLoadMatrixf", 10, _gloffset_LoadMatrixf },
1661 { "glLoadMatrixd", 10, _gloffset_LoadMatrixd },
1662 { "glMatrixMode", 10, _gloffset_MatrixMode },
1663 { "glMultMatrixf", 10, _gloffset_MultMatrixf },
1664 { "glMultMatrixd", 10, _gloffset_MultMatrixd },
1665 { "glOrtho", 10, _gloffset_Ortho },
1666 { "glPopMatrix", 10, _gloffset_PopMatrix },
1667 { "glPushMatrix", 10, _gloffset_PushMatrix },
1668 { "glRotated", 10, _gloffset_Rotated },
1669 { "glRotatef", 10, _gloffset_Rotatef },
1670 { "glScaled", 10, _gloffset_Scaled },
1671 { "glScalef", 10, _gloffset_Scalef },
1672 { "glTranslated", 10, _gloffset_Translated },
1673 { "glTranslatef", 10, _gloffset_Translatef },
1674 { "glArrayElement", 10, _gloffset_ArrayElement },
1675 { "glColorPointer", 10, _gloffset_ColorPointer },
1676 { "glDisableClientState", 10, _gloffset_DisableClientState },
1677 { "glEdgeFlagPointer", 10, _gloffset_EdgeFlagPointer },
1678 { "glEnableClientState", 10, _gloffset_EnableClientState },
1679 { "glIndexPointer", 10, _gloffset_IndexPointer },
1680 { "glInterleavedArrays", 10, _gloffset_InterleavedArrays },
1681 { "glNormalPointer", 10, _gloffset_NormalPointer },
1682 { "glTexCoordPointer", 10, _gloffset_TexCoordPointer },
1683 { "glVertexPointer", 10, _gloffset_VertexPointer },
1684 { "glAreTexturesResident", 10, _gloffset_AreTexturesResident },
1685 { "glPrioritizeTextures", 10, _gloffset_PrioritizeTextures },
1686 { "glIndexub", 10, _gloffset_Indexub },
1687 { "glIndexubv", 10, _gloffset_Indexubv },
1688 { "glPopClientAttrib", 10, _gloffset_PopClientAttrib },
1689 { "glPushClientAttrib", 10, _gloffset_PushClientAttrib },
1690 { "glColorTable", 10, _gloffset_ColorTable },
1691 { "glColorTableParameterfv", 10, _gloffset_ColorTableParameterfv },
1692 { "glColorTableParameteriv", 10, _gloffset_ColorTableParameteriv },
1693 { "glCopyColorTable", 10, _gloffset_CopyColorTable },
1694 { "glGetColorTable", 10, _gloffset_GetColorTable },
1695 { "glGetColorTableParameterfv", 10, _gloffset_GetColorTableParameterfv },
1696 { "glGetColorTableParameteriv", 10, _gloffset_GetColorTableParameteriv },
1697 { "glColorSubTable", 10, _gloffset_ColorSubTable },
1698 { "glCopyColorSubTable", 10, _gloffset_CopyColorSubTable },
1699 { "glConvolutionFilter1D", 10, _gloffset_ConvolutionFilter1D },
1700 { "glConvolutionFilter2D", 10, _gloffset_ConvolutionFilter2D },
1701 { "glConvolutionParameterf", 10, _gloffset_ConvolutionParameterf },
1702 { "glConvolutionParameterfv", 10, _gloffset_ConvolutionParameterfv },
1703 { "glConvolutionParameteri", 10, _gloffset_ConvolutionParameteri },
1704 { "glConvolutionParameteriv", 10, _gloffset_ConvolutionParameteriv },
1705 { "glCopyConvolutionFilter1D", 10, _gloffset_CopyConvolutionFilter1D },
1706 { "glCopyConvolutionFilter2D", 10, _gloffset_CopyConvolutionFilter2D },
1707 { "glGetConvolutionFilter", 10, _gloffset_GetConvolutionFilter },
1708 { "glGetConvolutionParameterfv", 10, _gloffset_GetConvolutionParameterfv },
1709 { "glGetConvolutionParameteriv", 10, _gloffset_GetConvolutionParameteriv },
1710 { "glGetSeparableFilter", 10, _gloffset_GetSeparableFilter },
1711 { "glSeparableFilter2D", 10, _gloffset_SeparableFilter2D },
1712 { "glGetHistogram", 10, _gloffset_GetHistogram },
1713 { "glGetHistogramParameterfv", 10, _gloffset_GetHistogramParameterfv },
1714 { "glGetHistogramParameteriv", 10, _gloffset_GetHistogramParameteriv },
1715 { "glGetMinmax", 10, _gloffset_GetMinmax },
1716 { "glGetMinmaxParameterfv", 10, _gloffset_GetMinmaxParameterfv },
1717 { "glGetMinmaxParameteriv", 10, _gloffset_GetMinmaxParameteriv },
1718 { "glHistogram", 10, _gloffset_Histogram },
1719 { "glMinmax", 10, _gloffset_Minmax },
1720 { "glResetHistogram", 10, _gloffset_ResetHistogram },
1721 { "glResetMinmax", 10, _gloffset_ResetMinmax },
1722 { "glClientActiveTexture", 10, _gloffset_ClientActiveTexture },
1723 { "glMultiTexCoord1d", 10, _gloffset_MultiTexCoord1d },
1724 { "glMultiTexCoord1dv", 10, _gloffset_MultiTexCoord1dv },
1725 { "glMultiTexCoord1f", 10, _gloffset_MultiTexCoord1fARB },
1726 { "glMultiTexCoord1fv", 10, _gloffset_MultiTexCoord1fvARB },
1727 { "glMultiTexCoord1i", 10, _gloffset_MultiTexCoord1i },
1728 { "glMultiTexCoord1iv", 10, _gloffset_MultiTexCoord1iv },
1729 { "glMultiTexCoord1s", 10, _gloffset_MultiTexCoord1s },
1730 { "glMultiTexCoord1sv", 10, _gloffset_MultiTexCoord1sv },
1731 { "glMultiTexCoord2d", 10, _gloffset_MultiTexCoord2d },
1732 { "glMultiTexCoord2dv", 10, _gloffset_MultiTexCoord2dv },
1733 { "glMultiTexCoord2f", 10, _gloffset_MultiTexCoord2fARB },
1734 { "glMultiTexCoord2fv", 10, _gloffset_MultiTexCoord2fvARB },
1735 { "glMultiTexCoord2i", 10, _gloffset_MultiTexCoord2i },
1736 { "glMultiTexCoord2iv", 10, _gloffset_MultiTexCoord2iv },
1737 { "glMultiTexCoord2s", 10, _gloffset_MultiTexCoord2s },
1738 { "glMultiTexCoord2sv", 10, _gloffset_MultiTexCoord2sv },
1739 { "glMultiTexCoord3d", 10, _gloffset_MultiTexCoord3d },
1740 { "glMultiTexCoord3dv", 10, _gloffset_MultiTexCoord3dv },
1741 { "glMultiTexCoord3f", 10, _gloffset_MultiTexCoord3fARB },
1742 { "glMultiTexCoord3fv", 10, _gloffset_MultiTexCoord3fvARB },
1743 { "glMultiTexCoord3i", 10, _gloffset_MultiTexCoord3i },
1744 { "glMultiTexCoord3iv", 10, _gloffset_MultiTexCoord3iv },
1745 { "glMultiTexCoord3s", 10, _gloffset_MultiTexCoord3s },
1746 { "glMultiTexCoord3sv", 10, _gloffset_MultiTexCoord3sv },
1747 { "glMultiTexCoord4d", 10, _gloffset_MultiTexCoord4d },
1748 { "glMultiTexCoord4dv", 10, _gloffset_MultiTexCoord4dv },
1749 { "glMultiTexCoord4f", 10, _gloffset_MultiTexCoord4fARB },
1750 { "glMultiTexCoord4fv", 10, _gloffset_MultiTexCoord4fvARB },
1751 { "glMultiTexCoord4i", 10, _gloffset_MultiTexCoord4i },
1752 { "glMultiTexCoord4iv", 10, _gloffset_MultiTexCoord4iv },
1753 { "glMultiTexCoord4s", 10, _gloffset_MultiTexCoord4s },
1754 { "glMultiTexCoord4sv", 10, _gloffset_MultiTexCoord4sv },
1755 { "glLoadTransposeMatrixf", 10, -1 },
1756 { "glLoadTransposeMatrixd", 10, -1 },
1757 { "glMultTransposeMatrixf", 10, -1 },
1758 { "glMultTransposeMatrixd", 10, -1 },
1759 { "glFogCoordf", 10, -1 },
1760 { "glFogCoordfv", 10, -1 },
1761 { "glFogCoordd", 10, -1 },
1762 { "glFogCoorddv", 10, -1 },
1763 { "glFogCoordPointer", 10, -1 },
1764 { "glSecondaryColor3b", 10, -1 },
1765 { "glSecondaryColor3bv", 10, -1 },
1766 { "glSecondaryColor3d", 10, -1 },
1767 { "glSecondaryColor3dv", 10, -1 },
1768 { "glSecondaryColor3f", 10, -1 },
1769 { "glSecondaryColor3fv", 10, -1 },
1770 { "glSecondaryColor3i", 10, -1 },
1771 { "glSecondaryColor3iv", 10, -1 },
1772 { "glSecondaryColor3s", 10, -1 },
1773 { "glSecondaryColor3sv", 10, -1 },
1774 { "glSecondaryColor3ub", 10, -1 },
1775 { "glSecondaryColor3ubv", 10, -1 },
1776 { "glSecondaryColor3ui", 10, -1 },
1777 { "glSecondaryColor3uiv", 10, -1 },
1778 { "glSecondaryColor3us", 10, -1 },
1779 { "glSecondaryColor3usv", 10, -1 },
1780 { "glSecondaryColorPointer", 10, -1 },
1781 { "glWindowPos2d", 10, -1 },
1782 { "glWindowPos2dv", 10, -1 },
1783 { "glWindowPos2f", 10, -1 },
1784 { "glWindowPos2fv", 10, -1 },
1785 { "glWindowPos2i", 10, -1 },
1786 { "glWindowPos2iv", 10, -1 },
1787 { "glWindowPos2s", 10, -1 },
1788 { "glWindowPos2sv", 10, -1 },
1789 { "glWindowPos3d", 10, -1 },
1790 { "glWindowPos3dv", 10, -1 },
1791 { "glWindowPos3f", 10, -1 },
1792 { "glWindowPos3fv", 10, -1 },
1793 { "glWindowPos3i", 10, -1 },
1794 { "glWindowPos3iv", 10, -1 },
1795 { "glWindowPos3s", 10, -1 },
1796 { "glWindowPos3sv", 10, -1 },
1797 { "glProgramStringARB", 10, -1 },
1798 { "glProgramEnvParameter4dARB", 10, -1 },
1799 { "glProgramEnvParameter4dvARB", 10, -1 },
1800 { "glProgramEnvParameter4fARB", 10, -1 },
1801 { "glProgramEnvParameter4fvARB", 10, -1 },
1802 { "glProgramLocalParameter4dARB", 10, -1 },
1803 { "glProgramLocalParameter4dvARB", 10, -1 },
1804 { "glProgramLocalParameter4fARB", 10, -1 },
1805 { "glProgramLocalParameter4fvARB", 10, -1 },
1806 { "glGetProgramEnvParameterdvARB", 10, -1 },
1807 { "glGetProgramEnvParameterfvARB", 10, -1 },
1808 { "glGetProgramLocalParameterdvARB", 10, -1 },
1809 { "glGetProgramLocalParameterfvARB", 10, -1 },
1810 { "glGetProgramivARB", 10, -1 },
1811 { "glGetProgramStringARB", 10, -1 },
1812 { "glColorPointerEXT", 10, -1 },
1813 { "glEdgeFlagPointerEXT", 10, -1 },
1814 { "glIndexPointerEXT", 10, -1 },
1815 { "glNormalPointerEXT", 10, -1 },
1816 { "glTexCoordPointerEXT", 10, -1 },
1817 { "glVertexPointerEXT", 10, -1 },
1818 { "glLockArraysEXT", 10, -1 },
1819 { "glUnlockArraysEXT", 10, -1 },
1820 { "glWindowPos4dMESA", 10, -1 },
1821 { "glWindowPos4dvMESA", 10, -1 },
1822 { "glWindowPos4fMESA", 10, -1 },
1823 { "glWindowPos4fvMESA", 10, -1 },
1824 { "glWindowPos4iMESA", 10, -1 },
1825 { "glWindowPos4ivMESA", 10, -1 },
1826 { "glWindowPos4sMESA", 10, -1 },
1827 { "glWindowPos4svMESA", 10, -1 },
1828 { "glBindProgramNV", 10, -1 },
1829 { "glDeleteProgramsNV", 10, -1 },
1830 { "glGenProgramsNV", 10, -1 },
1831 { "glIsProgramNV", 10, -1 },
1832 { "glVertexAttrib1sNV", 10, -1 },
1833 { "glVertexAttrib1svNV", 10, -1 },
1834 { "glVertexAttrib2sNV", 10, -1 },
1835 { "glVertexAttrib2svNV", 10, -1 },
1836 { "glVertexAttrib3sNV", 10, -1 },
1837 { "glVertexAttrib3svNV", 10, -1 },
1838 { "glVertexAttrib4sNV", 10, -1 },
1839 { "glVertexAttrib4svNV", 10, -1 },
1840 { "glVertexAttrib1fNV", 10, -1 },
1841 { "glVertexAttrib1fvNV", 10, -1 },
1842 { "glVertexAttrib2fNV", 10, -1 },
1843 { "glVertexAttrib2fvNV", 10, -1 },
1844 { "glVertexAttrib3fNV", 10, -1 },
1845 { "glVertexAttrib3fvNV", 10, -1 },
1846 { "glVertexAttrib4fNV", 10, -1 },
1847 { "glVertexAttrib4fvNV", 10, -1 },
1848 { "glVertexAttrib1dNV", 10, -1 },
1849 { "glVertexAttrib1dvNV", 10, -1 },
1850 { "glVertexAttrib2dNV", 10, -1 },
1851 { "glVertexAttrib2dvNV", 10, -1 },
1852 { "glVertexAttrib3dNV", 10, -1 },
1853 { "glVertexAttrib3dvNV", 10, -1 },
1854 { "glVertexAttrib4dNV", 10, -1 },
1855 { "glVertexAttrib4dvNV", 10, -1 },
1856 { "glVertexAttrib4ubNV", 10, -1 },
1857 { "glVertexAttrib4ubvNV", 10, -1 },
1858 { "glVertexAttribs1svNV", 10, -1 },
1859 { "glVertexAttribs2svNV", 10, -1 },
1860 { "glVertexAttribs3svNV", 10, -1 },
1861 { "glVertexAttribs4svNV", 10, -1 },
1862 { "glVertexAttribs1fvNV", 10, -1 },
1863 { "glVertexAttribs2fvNV", 10, -1 },
1864 { "glVertexAttribs3fvNV", 10, -1 },
1865 { "glVertexAttribs4fvNV", 10, -1 },
1866 { "glVertexAttribs1dvNV", 10, -1 },
1867 { "glVertexAttribs2dvNV", 10, -1 },
1868 { "glVertexAttribs3dvNV", 10, -1 },
1869 { "glVertexAttribs4dvNV", 10, -1 },
1870 { "glVertexAttribs4ubvNV", 10, -1 },
1871 { "glGenFragmentShadersATI", 10, -1 },
1872 { "glBindFragmentShaderATI", 10, -1 },
1873 { "glDeleteFragmentShaderATI", 10, -1 },
1874 { "glBeginFragmentShaderATI", 10, -1 },
1875 { "glEndFragmentShaderATI", 10, -1 },
1876 { "glPassTexCoordATI", 10, -1 },
1877 { "glSampleMapATI", 10, -1 },
1878 { "glColorFragmentOp1ATI", 10, -1 },
1879 { "glColorFragmentOp2ATI", 10, -1 },
1880 { "glColorFragmentOp3ATI", 10, -1 },
1881 { "glAlphaFragmentOp1ATI", 10, -1 },
1882 { "glAlphaFragmentOp2ATI", 10, -1 },
1883 { "glAlphaFragmentOp3ATI", 10, -1 },
1884 { "glSetFragmentShaderConstantATI", 10, -1 },
1885 { "glActiveStencilFaceEXT", 10, -1 },
1886 { "glStencilFuncSeparateATI", 10, -1 },
1887 { "glProgramEnvParameters4fvEXT", 10, -1 },
1888 { "glProgramLocalParameters4fvEXT", 10, -1 },
1889 { "glPrimitiveRestartNV", 10, -1 },
1890
1891 { NULL, 0, -1 }
1892 };
1893
1894 const struct function gl_core_functions_possible[] = {
1895 /* GL_ARB_ES3_2_compatibility */
1896 { "glPrimitiveBoundingBoxARB", 45, -1 },
1897
1898 /* GL_ARB_gpu_shader_int64 */
1899 { "glUniform1i64ARB", 45, -1 },
1900 { "glUniform2i64ARB", 45, -1 },
1901 { "glUniform3i64ARB", 45, -1 },
1902 { "glUniform4i64ARB", 45, -1 },
1903 { "glUniform1ui64ARB", 45, -1 },
1904 { "glUniform2ui64ARB", 45, -1 },
1905 { "glUniform3ui64ARB", 45, -1 },
1906 { "glUniform4ui64ARB", 45, -1 },
1907 { "glUniform1i64vARB", 45, -1 },
1908 { "glUniform2i64vARB", 45, -1 },
1909 { "glUniform3i64vARB", 45, -1 },
1910 { "glUniform4i64vARB", 45, -1 },
1911 { "glUniform1ui64vARB", 45, -1 },
1912 { "glUniform2ui64vARB", 45, -1 },
1913 { "glUniform3ui64vARB", 45, -1 },
1914 { "glUniform4ui64vARB", 45, -1 },
1915 { "glGetUniformi64vARB", 45, -1 },
1916 { "glGetUniformui64vARB", 45, -1 },
1917 { "glGetnUniformi64vARB", 45, -1 },
1918 { "glGetnUniformui64vARB", 45, -1 },
1919 { "glProgramUniform1i64ARB", 45, -1 },
1920 { "glProgramUniform2i64ARB", 45, -1 },
1921 { "glProgramUniform3i64ARB", 45, -1 },
1922 { "glProgramUniform4i64ARB", 45, -1 },
1923 { "glProgramUniform1ui64ARB", 45, -1 },
1924 { "glProgramUniform2ui64ARB", 45, -1 },
1925 { "glProgramUniform3ui64ARB", 45, -1 },
1926 { "glProgramUniform4ui64ARB", 45, -1 },
1927 { "glProgramUniform1i64vARB", 45, -1 },
1928 { "glProgramUniform2i64vARB", 45, -1 },
1929 { "glProgramUniform3i64vARB", 45, -1 },
1930 { "glProgramUniform4i64vARB", 45, -1 },
1931 { "glProgramUniform1ui64vARB", 45, -1 },
1932 { "glProgramUniform2ui64vARB", 45, -1 },
1933 { "glProgramUniform3ui64vARB", 45, -1 },
1934 { "glProgramUniform4ui64vARB", 45, -1 },
1935
1936 /* GL_ARB_gl_spirv */
1937 { "glSpecializeShaderARB", 45, -1 },
1938
1939 { NULL, 0, -1 }
1940 };
1941
1942 const struct function gles11_functions_possible[] = {
1943 { "glActiveTexture", 11, _gloffset_ActiveTexture },
1944 { "glAlphaFunc", 11, _gloffset_AlphaFunc },
1945 { "glAlphaFuncx", 11, -1 },
1946 { "glBindBuffer", 11, -1 },
1947 { "glBindFramebufferOES", 11, -1 },
1948 { "glBindRenderbufferOES", 11, -1 },
1949 { "glBindTexture", 11, _gloffset_BindTexture },
1950 { "glBlendEquationOES", 11, _gloffset_BlendEquation },
1951 { "glBlendEquationSeparateOES", 11, -1 },
1952 { "glBlendFunc", 11, _gloffset_BlendFunc },
1953 { "glBlendFuncSeparateOES", 11, -1 },
1954 { "glBufferData", 11, -1 },
1955 { "glBufferSubData", 11, -1 },
1956 { "glCheckFramebufferStatusOES", 11, -1 },
1957 { "glClear", 11, _gloffset_Clear },
1958 { "glClearColor", 11, _gloffset_ClearColor },
1959 { "glClearColorx", 11, -1 },
1960 { "glClearDepthf", 11, -1 },
1961 { "glClearDepthx", 11, -1 },
1962 { "glClearStencil", 11, _gloffset_ClearStencil },
1963 { "glClientActiveTexture", 11, _gloffset_ClientActiveTexture },
1964 { "glClipPlanef", 11, -1 },
1965 { "glClipPlanex", 11, -1 },
1966 { "glColor4f", 11, _gloffset_Color4f },
1967 { "glColor4ub", 11, _gloffset_Color4ub },
1968 { "glColor4x", 11, -1 },
1969 { "glColorMask", 11, _gloffset_ColorMask },
1970 { "glColorPointer", 11, _gloffset_ColorPointer },
1971 { "glCompressedTexImage2D", 11, -1 },
1972 { "glCompressedTexSubImage2D", 11, -1 },
1973 { "glCopyTexImage2D", 11, _gloffset_CopyTexImage2D },
1974 { "glCopyTexSubImage2D", 11, _gloffset_CopyTexSubImage2D },
1975 { "glCullFace", 11, _gloffset_CullFace },
1976 { "glDeleteBuffers", 11, -1 },
1977 { "glDeleteFramebuffersOES", 11, -1 },
1978 { "glDeleteRenderbuffersOES", 11, -1 },
1979 { "glDeleteTextures", 11, _gloffset_DeleteTextures },
1980 { "glDepthFunc", 11, _gloffset_DepthFunc },
1981 { "glDepthMask", 11, _gloffset_DepthMask },
1982 { "glDepthRangef", 11, -1 },
1983 { "glDepthRangex", 11, -1 },
1984 { "glDisable", 11, _gloffset_Disable },
1985 { "glDiscardFramebufferEXT", 11, -1 },
1986 { "glDisableClientState", 11, _gloffset_DisableClientState },
1987 { "glDrawArrays", 11, _gloffset_DrawArrays },
1988 { "glDrawElements", 11, _gloffset_DrawElements },
1989 { "glDrawTexfOES", 11, -1 },
1990 { "glDrawTexfvOES", 11, -1 },
1991 { "glDrawTexiOES", 11, -1 },
1992 { "glDrawTexivOES", 11, -1 },
1993 { "glDrawTexsOES", 11, -1 },
1994 { "glDrawTexsvOES", 11, -1 },
1995 { "glDrawTexxOES", 11, -1 },
1996 { "glDrawTexxvOES", 11, -1 },
1997 { "glEGLImageTargetRenderbufferStorageOES", 11, -1 },
1998 { "glEGLImageTargetTexture2DOES", 11, -1 },
1999 { "glEnable", 11, _gloffset_Enable },
2000 { "glEnableClientState", 11, _gloffset_EnableClientState },
2001 { "glFinish", 11, _gloffset_Finish },
2002 { "glFlush", 11, _gloffset_Flush },
2003 { "glFlushMappedBufferRangeEXT", 11, -1 },
2004 { "glFogf", 11, _gloffset_Fogf },
2005 { "glFogfv", 11, _gloffset_Fogfv },
2006 { "glFogx", 11, -1 },
2007 { "glFogxv", 11, -1 },
2008 { "glFramebufferRenderbufferOES", 11, -1 },
2009 { "glFramebufferTexture2DOES", 11, -1 },
2010 { "glFrontFace", 11, _gloffset_FrontFace },
2011 { "glFrustumf", 11, -1 },
2012 { "glFrustumx", 11, -1 },
2013 { "glGenBuffers", 11, -1 },
2014 { "glGenFramebuffersOES", 11, -1 },
2015 { "glGenRenderbuffersOES", 11, -1 },
2016 { "glGenTextures", 11, _gloffset_GenTextures },
2017 { "glGenerateMipmapOES", 11, -1 },
2018 { "glGetBooleanv", 11, _gloffset_GetBooleanv },
2019 { "glGetBufferParameteriv", 11, -1 },
2020 { "glGetBufferPointervOES", 11, -1 },
2021 { "glGetClipPlanef", 11, -1 },
2022 { "glGetClipPlanex", 11, -1 },
2023 { "glGetError", 11, _gloffset_GetError },
2024 { "glGetFixedv", 11, -1 },
2025 { "glGetFloatv", 11, _gloffset_GetFloatv },
2026 { "glGetFramebufferAttachmentParameterivOES", 11, -1 },
2027 { "glGetIntegerv", 11, _gloffset_GetIntegerv },
2028 { "glGetLightfv", 11, _gloffset_GetLightfv },
2029 { "glGetLightxv", 11, -1 },
2030 { "glGetMaterialfv", 11, _gloffset_GetMaterialfv },
2031 { "glGetMaterialxv", 11, -1 },
2032 // We check for the aliased -KHR version in GLES 1.1
2033 // { "glGetPointerv", 11, _gloffset_GetPointerv },
2034 { "glGetRenderbufferParameterivOES", 11, -1 },
2035 { "glGetString", 11, _gloffset_GetString },
2036 { "glGetTexEnvfv", 11, _gloffset_GetTexEnvfv },
2037 { "glGetTexEnviv", 11, _gloffset_GetTexEnviv },
2038 { "glGetTexEnvxv", 11, -1 },
2039 { "glGetTexGenfvOES", 11, _gloffset_GetTexGenfv },
2040 { "glGetTexGenivOES", 11, _gloffset_GetTexGeniv },
2041 { "glGetTexGenxvOES", 11, -1 },
2042 { "glGetTexParameterfv", 11, _gloffset_GetTexParameterfv },
2043 { "glGetTexParameteriv", 11, _gloffset_GetTexParameteriv },
2044 { "glGetTexParameterxv", 11, -1 },
2045 { "glHint", 11, _gloffset_Hint },
2046 { "glIsBuffer", 11, -1 },
2047 { "glIsEnabled", 11, _gloffset_IsEnabled },
2048 { "glIsFramebufferOES", 11, -1 },
2049 { "glIsRenderbufferOES", 11, -1 },
2050 { "glIsTexture", 11, _gloffset_IsTexture },
2051 { "glLightModelf", 11, _gloffset_LightModelf },
2052 { "glLightModelfv", 11, _gloffset_LightModelfv },
2053 { "glLightModelx", 11, -1 },
2054 { "glLightModelxv", 11, -1 },
2055 { "glLightf", 11, _gloffset_Lightf },
2056 { "glLightfv", 11, _gloffset_Lightfv },
2057 { "glLightx", 11, -1 },
2058 { "glLightxv", 11, -1 },
2059 { "glLineWidth", 11, _gloffset_LineWidth },
2060 { "glLineWidthx", 11, -1 },
2061 { "glLoadIdentity", 11, _gloffset_LoadIdentity },
2062 { "glLoadMatrixf", 11, _gloffset_LoadMatrixf },
2063 { "glLoadMatrixx", 11, -1 },
2064 { "glLogicOp", 11, _gloffset_LogicOp },
2065 { "glMapBufferOES", 11, -1 },
2066 { "glMapBufferRangeEXT", 11, -1 },
2067 { "glMaterialf", 11, _gloffset_Materialf },
2068 { "glMaterialfv", 11, _gloffset_Materialfv },
2069 { "glMaterialx", 11, -1 },
2070 { "glMaterialxv", 11, -1 },
2071 { "glMatrixMode", 11, _gloffset_MatrixMode },
2072 { "glMultMatrixf", 11, _gloffset_MultMatrixf },
2073 { "glMultMatrixx", 11, -1 },
2074 { "glMultiDrawArraysEXT", 11, -1 },
2075 { "glMultiDrawElementsEXT", 11, -1 },
2076 { "glMultiTexCoord4f", 11, _gloffset_MultiTexCoord4fARB },
2077 { "glMultiTexCoord4x", 11, -1 },
2078 { "glNormal3f", 11, _gloffset_Normal3f },
2079 { "glNormal3x", 11, -1 },
2080 { "glNormalPointer", 11, _gloffset_NormalPointer },
2081 { "glOrthof", 11, -1 },
2082 { "glOrthox", 11, -1 },
2083 { "glPixelStorei", 11, _gloffset_PixelStorei },
2084 { "glPointParameterf", 11, -1 },
2085 { "glPointParameterfv", 11, -1 },
2086 { "glPointParameterx", 11, -1 },
2087 { "glPointParameterxv", 11, -1 },
2088 { "glPointSize", 11, _gloffset_PointSize },
2089 { "glPointSizePointerOES", 11, -1 },
2090 { "glPointSizex", 11, -1 },
2091 { "glPolygonOffset", 11, _gloffset_PolygonOffset },
2092 { "glPolygonOffsetx", 11, -1 },
2093 { "glPopMatrix", 11, _gloffset_PopMatrix },
2094 { "glPushMatrix", 11, _gloffset_PushMatrix },
2095 { "glQueryMatrixxOES", 11, -1 },
2096 { "glReadPixels", 11, _gloffset_ReadPixels },
2097 { "glRenderbufferStorageOES", 11, -1 },
2098 { "glRotatef", 11, _gloffset_Rotatef },
2099 { "glRotatex", 11, -1 },
2100 { "glSampleCoverage", 11, -1 },
2101 { "glSampleCoveragex", 11, -1 },
2102 { "glScalef", 11, _gloffset_Scalef },
2103 { "glScalex", 11, -1 },
2104 { "glScissor", 11, _gloffset_Scissor },
2105 { "glShadeModel", 11, _gloffset_ShadeModel },
2106 { "glStencilFunc", 11, _gloffset_StencilFunc },
2107 { "glStencilMask", 11, _gloffset_StencilMask },
2108 { "glStencilOp", 11, _gloffset_StencilOp },
2109 { "glTexCoordPointer", 11, _gloffset_TexCoordPointer },
2110 { "glTexEnvf", 11, _gloffset_TexEnvf },
2111 { "glTexEnvfv", 11, _gloffset_TexEnvfv },
2112 { "glTexEnvi", 11, _gloffset_TexEnvi },
2113 { "glTexEnviv", 11, _gloffset_TexEnviv },
2114 { "glTexEnvx", 11, -1 },
2115 { "glTexEnvxv", 11, -1 },
2116 { "glTexGenfOES", 11, _gloffset_TexGenf },
2117 { "glTexGenfvOES", 11, _gloffset_TexGenfv },
2118 { "glTexGeniOES", 11, _gloffset_TexGeni },
2119 { "glTexGenivOES", 11, _gloffset_TexGeniv },
2120 { "glTexGenxOES", 11, -1 },
2121 { "glTexGenxvOES", 11, -1 },
2122 { "glTexImage2D", 11, _gloffset_TexImage2D },
2123 { "glTexParameterf", 11, _gloffset_TexParameterf },
2124 { "glTexParameterfv", 11, _gloffset_TexParameterfv },
2125 { "glTexParameteri", 11, _gloffset_TexParameteri },
2126 { "glTexParameteriv", 11, _gloffset_TexParameteriv },
2127 { "glTexParameterx", 11, -1 },
2128 { "glTexParameterxv", 11, -1 },
2129 { "glTexSubImage2D", 11, _gloffset_TexSubImage2D },
2130 { "glTranslatef", 11, _gloffset_Translatef },
2131 { "glTranslatex", 11, -1 },
2132 { "glUnmapBufferOES", 11, -1 },
2133 { "glVertexPointer", 11, _gloffset_VertexPointer },
2134 { "glViewport", 11, _gloffset_Viewport },
2135
2136 /* GL_KHR_debug */
2137 { "glPushDebugGroupKHR", 11, -1 },
2138 { "glPopDebugGroupKHR", 11, -1 },
2139 { "glDebugMessageCallbackKHR", 11, -1 },
2140 { "glDebugMessageControlKHR", 11, -1 },
2141 { "glDebugMessageInsertKHR", 11, -1 },
2142 { "glGetDebugMessageLogKHR", 11, -1 },
2143 { "glGetObjectLabelKHR", 11, -1 },
2144 { "glGetObjectPtrLabelKHR", 11, -1 },
2145 { "glGetPointervKHR", 11, _gloffset_GetPointerv },
2146 { "glObjectLabelKHR", 11, -1 },
2147 { "glObjectPtrLabelKHR", 11, -1 },
2148
2149 /* GL_EXT_polygon_offset_clamp */
2150 { "glPolygonOffsetClampEXT", 11, -1 },
2151
2152 /* GL_NV_conservative_raster */
2153 { "glSubpixelPrecisionBiasNV", 20, -1 },
2154
2155 /* GL_NV_conservative_raster_dilate */
2156 { "glConservativeRasterParameterfNV", 20, -1 },
2157
2158 /* GL_NV_conservative_raster_pre_snap_triangles */
2159 { "glConservativeRasterParameteriNV", 20, -1 },
2160
2161 { NULL, 0, -1 }
2162 };
2163
2164 const struct function gles2_functions_possible[] = {
2165 { "glActiveTexture", 20, _gloffset_ActiveTexture },
2166 { "glAttachShader", 20, -1 },
2167 { "glBindAttribLocation", 20, -1 },
2168 { "glBindBuffer", 20, -1 },
2169 { "glBindFramebuffer", 20, -1 },
2170 { "glBindRenderbuffer", 20, -1 },
2171 { "glBindTexture", 20, _gloffset_BindTexture },
2172 { "glBindVertexArrayOES", 20, -1 },
2173 { "glBlendColor", 20, _gloffset_BlendColor },
2174 { "glBlendEquation", 20, _gloffset_BlendEquation },
2175 { "glBlendEquationSeparate", 20, -1 },
2176 { "glBlendFunc", 20, _gloffset_BlendFunc },
2177 { "glBlendFuncSeparate", 20, -1 },
2178 { "glBufferData", 20, -1 },
2179 { "glBufferSubData", 20, -1 },
2180 { "glCheckFramebufferStatus", 20, -1 },
2181 { "glClear", 20, _gloffset_Clear },
2182 { "glClearColor", 20, _gloffset_ClearColor },
2183 { "glClearDepthf", 20, -1 },
2184 { "glClearStencil", 20, _gloffset_ClearStencil },
2185 { "glColorMask", 20, _gloffset_ColorMask },
2186 { "glCompileShader", 20, -1 },
2187 { "glCompressedTexImage2D", 20, -1 },
2188 { "glCompressedTexImage3DOES", 20, -1 },
2189 { "glCompressedTexSubImage2D", 20, -1 },
2190 { "glCompressedTexSubImage3DOES", 20, -1 },
2191 { "glCopyTexImage2D", 20, _gloffset_CopyTexImage2D },
2192 { "glCopyTexSubImage2D", 20, _gloffset_CopyTexSubImage2D },
2193 { "glCopyTexSubImage3DOES", 20, _gloffset_CopyTexSubImage3D },
2194 { "glCreateProgram", 20, -1 },
2195 { "glCreateShader", 20, -1 },
2196 { "glCullFace", 20, _gloffset_CullFace },
2197 { "glDeleteBuffers", 20, -1 },
2198 { "glDeleteFramebuffers", 20, -1 },
2199 { "glDeleteProgram", 20, -1 },
2200 { "glDeleteRenderbuffers", 20, -1 },
2201 { "glDeleteShader", 20, -1 },
2202 { "glDeleteTextures", 20, _gloffset_DeleteTextures },
2203 { "glDeleteVertexArraysOES", 20, -1 },
2204 { "glDepthFunc", 20, _gloffset_DepthFunc },
2205 { "glDepthMask", 20, _gloffset_DepthMask },
2206 { "glDepthRangef", 20, -1 },
2207 { "glDetachShader", 20, -1 },
2208 { "glDisable", 20, _gloffset_Disable },
2209 { "glDiscardFramebufferEXT", 20, -1 },
2210 { "glDisableVertexAttribArray", 20, -1 },
2211 { "glDrawArrays", 20, _gloffset_DrawArrays },
2212 { "glDrawBuffersNV", 20, -1 },
2213 { "glDrawElements", 20, _gloffset_DrawElements },
2214 { "glEGLImageTargetRenderbufferStorageOES", 20, -1 },
2215 { "glEGLImageTargetTexture2DOES", 20, -1 },
2216 { "glEnable", 20, _gloffset_Enable },
2217 { "glEnableVertexAttribArray", 20, -1 },
2218 { "glFinish", 20, _gloffset_Finish },
2219 { "glFlush", 20, _gloffset_Flush },
2220 { "glFlushMappedBufferRangeEXT", 20, -1 },
2221 { "glFramebufferRenderbuffer", 20, -1 },
2222 { "glFramebufferTexture2D", 20, -1 },
2223 { "glFramebufferTexture3DOES", 20, -1 },
2224 { "glFrontFace", 20, _gloffset_FrontFace },
2225 { "glGenBuffers", 20, -1 },
2226 { "glGenFramebuffers", 20, -1 },
2227 { "glGenRenderbuffers", 20, -1 },
2228 { "glGenTextures", 20, _gloffset_GenTextures },
2229 { "glGenVertexArraysOES", 20, -1 },
2230 { "glGenerateMipmap", 20, -1 },
2231 { "glGetActiveAttrib", 20, -1 },
2232 { "glGetActiveUniform", 20, -1 },
2233 { "glGetAttachedShaders", 20, -1 },
2234 { "glGetAttribLocation", 20, -1 },
2235 { "glGetBooleanv", 20, _gloffset_GetBooleanv },
2236 { "glGetBufferParameteriv", 20, -1 },
2237 { "glGetBufferPointervOES", 20, -1 },
2238 { "glGetError", 20, _gloffset_GetError },
2239 { "glGetFloatv", 20, _gloffset_GetFloatv },
2240 { "glGetFramebufferAttachmentParameteriv", 20, -1 },
2241 { "glGetIntegerv", 20, _gloffset_GetIntegerv },
2242 { "glGetProgramInfoLog", 20, -1 },
2243 { "glGetProgramiv", 20, -1 },
2244 { "glGetRenderbufferParameteriv", 20, -1 },
2245 { "glGetShaderInfoLog", 20, -1 },
2246 { "glGetShaderPrecisionFormat", 20, -1 },
2247 { "glGetShaderSource", 20, -1 },
2248 { "glGetShaderiv", 20, -1 },
2249 { "glGetString", 20, _gloffset_GetString },
2250 { "glGetTexParameterfv", 20, _gloffset_GetTexParameterfv },
2251 { "glGetTexParameteriv", 20, _gloffset_GetTexParameteriv },
2252 { "glGetUniformLocation", 20, -1 },
2253 { "glGetUniformfv", 20, -1 },
2254 { "glGetUniformiv", 20, -1 },
2255 { "glGetVertexAttribPointerv", 20, -1 },
2256 { "glGetVertexAttribfv", 20, -1 },
2257 { "glGetVertexAttribiv", 20, -1 },
2258 { "glHint", 20, _gloffset_Hint },
2259 { "glIsBuffer", 20, -1 },
2260 { "glIsEnabled", 20, _gloffset_IsEnabled },
2261 { "glIsFramebuffer", 20, -1 },
2262 { "glIsProgram", 20, -1 },
2263 { "glIsRenderbuffer", 20, -1 },
2264 { "glIsShader", 20, -1 },
2265 { "glIsTexture", 20, _gloffset_IsTexture },
2266 { "glIsVertexArrayOES", 20, -1 },
2267 { "glLineWidth", 20, _gloffset_LineWidth },
2268 { "glLinkProgram", 20, -1 },
2269 { "glMapBufferOES", 20, -1 },
2270 { "glMapBufferRangeEXT", 20, -1 },
2271 { "glMultiDrawArraysEXT", 20, -1 },
2272 { "glMultiDrawElementsEXT", 20, -1 },
2273 { "glPixelStorei", 20, _gloffset_PixelStorei },
2274 { "glPolygonOffset", 20, _gloffset_PolygonOffset },
2275 { "glReadBufferNV", 20, _gloffset_ReadBuffer },
2276 { "glReadPixels", 20, _gloffset_ReadPixels },
2277 { "glReleaseShaderCompiler", 20, -1 },
2278 { "glRenderbufferStorage", 20, -1 },
2279 { "glSampleCoverage", 20, -1 },
2280 { "glScissor", 20, _gloffset_Scissor },
2281 { "glShaderBinary", 20, -1 },
2282 { "glShaderSource", 20, -1 },
2283 { "glStencilFunc", 20, _gloffset_StencilFunc },
2284 { "glStencilFuncSeparate", 20, -1 },
2285 { "glStencilMask", 20, _gloffset_StencilMask },
2286 { "glStencilMaskSeparate", 20, -1 },
2287 { "glStencilOp", 20, _gloffset_StencilOp },
2288 { "glStencilOpSeparate", 20, -1 },
2289 { "glTexImage2D", 20, _gloffset_TexImage2D },
2290 { "glTexImage3DOES", 20, _gloffset_TexImage3D },
2291 { "glTexParameterf", 20, _gloffset_TexParameterf },
2292 { "glTexParameterfv", 20, _gloffset_TexParameterfv },
2293 { "glTexParameteri", 20, _gloffset_TexParameteri },
2294 { "glTexParameteriv", 20, _gloffset_TexParameteriv },
2295 { "glTexSubImage2D", 20, _gloffset_TexSubImage2D },
2296 { "glTexSubImage3DOES", 20, _gloffset_TexSubImage3D },
2297 { "glUniform1f", 20, -1 },
2298 { "glUniform1fv", 20, -1 },
2299 { "glUniform1i", 20, -1 },
2300 { "glUniform1iv", 20, -1 },
2301 { "glUniform2f", 20, -1 },
2302 { "glUniform2fv", 20, -1 },
2303 { "glUniform2i", 20, -1 },
2304 { "glUniform2iv", 20, -1 },
2305 { "glUniform3f", 20, -1 },
2306 { "glUniform3fv", 20, -1 },
2307 { "glUniform3i", 20, -1 },
2308 { "glUniform3iv", 20, -1 },
2309 { "glUniform4f", 20, -1 },
2310 { "glUniform4fv", 20, -1 },
2311 { "glUniform4i", 20, -1 },
2312 { "glUniform4iv", 20, -1 },
2313 { "glUniformMatrix2fv", 20, -1 },
2314 { "glUniformMatrix3fv", 20, -1 },
2315 { "glUniformMatrix4fv", 20, -1 },
2316 { "glUnmapBufferOES", 20, -1 },
2317 { "glUseProgram", 20, -1 },
2318 { "glValidateProgram", 20, -1 },
2319 { "glVertexAttrib1f", 20, -1 },
2320 { "glVertexAttrib1fv", 20, -1 },
2321 { "glVertexAttrib2f", 20, -1 },
2322 { "glVertexAttrib2fv", 20, -1 },
2323 { "glVertexAttrib3f", 20, -1 },
2324 { "glVertexAttrib3fv", 20, -1 },
2325 { "glVertexAttrib4f", 20, -1 },
2326 { "glVertexAttrib4fv", 20, -1 },
2327 { "glVertexAttribPointer", 20, -1 },
2328 { "glViewport", 20, _gloffset_Viewport },
2329
2330 /* GL_OES_get_program_binary - Also part of OpenGL ES 3.0. */
2331 { "glGetProgramBinaryOES", 20, -1 },
2332 { "glProgramBinaryOES", 20, -1 },
2333
2334 /* GL_EXT_separate_shader_objects - Also part of OpenGL ES 3.1. */
2335 { "glProgramParameteriEXT", 20, -1 },
2336 { "glUseProgramStagesEXT", 20, -1 },
2337 { "glActiveShaderProgramEXT", 20, -1 },
2338 { "glCreateShaderProgramvEXT", 20, -1 },
2339 { "glBindProgramPipelineEXT", 20, -1 },
2340 { "glDeleteProgramPipelinesEXT", 20, -1 },
2341 { "glGenProgramPipelinesEXT", 20, -1 },
2342 { "glIsProgramPipelineEXT", 20, -1 },
2343 { "glGetProgramPipelineivEXT", 20, -1 },
2344 { "glProgramUniform1iEXT", 20, -1 },
2345 { "glProgramUniform1ivEXT", 20, -1 },
2346 { "glProgramUniform1fEXT", 20, -1 },
2347 { "glProgramUniform1fvEXT", 20, -1 },
2348 { "glProgramUniform2iEXT", 20, -1 },
2349 { "glProgramUniform2ivEXT", 20, -1 },
2350 { "glProgramUniform2fEXT", 20, -1 },
2351 { "glProgramUniform2fvEXT", 20, -1 },
2352 { "glProgramUniform3iEXT", 20, -1 },
2353 { "glProgramUniform3ivEXT", 20, -1 },
2354 { "glProgramUniform3fEXT", 20, -1 },
2355 { "glProgramUniform3fvEXT", 20, -1 },
2356 { "glProgramUniform4iEXT", 20, -1 },
2357 { "glProgramUniform4ivEXT", 20, -1 },
2358 { "glProgramUniform4fEXT", 20, -1 },
2359 { "glProgramUniform4fvEXT", 20, -1 },
2360 { "glProgramUniformMatrix2fvEXT", 20, -1 },
2361 { "glProgramUniformMatrix3fvEXT", 20, -1 },
2362 { "glProgramUniformMatrix4fvEXT", 20, -1 },
2363 { "glProgramUniformMatrix2x3fvEXT", 20, -1 },
2364 { "glProgramUniformMatrix3x2fvEXT", 20, -1 },
2365 { "glProgramUniformMatrix2x4fvEXT", 20, -1 },
2366 { "glProgramUniformMatrix4x2fvEXT", 20, -1 },
2367 { "glProgramUniformMatrix3x4fvEXT", 20, -1 },
2368 { "glProgramUniformMatrix4x3fvEXT", 20, -1 },
2369 { "glValidateProgramPipelineEXT", 20, -1 },
2370 { "glGetProgramPipelineInfoLogEXT", 20, -1 },
2371
2372 /* GL_AMD_performance_monitor */
2373 { "glGetPerfMonitorGroupsAMD", 20, -1 },
2374 { "glGetPerfMonitorCountersAMD", 20, -1 },
2375 { "glGetPerfMonitorGroupStringAMD", 20, -1 },
2376 { "glGetPerfMonitorCounterStringAMD", 20, -1 },
2377 { "glGetPerfMonitorCounterInfoAMD", 20, -1 },
2378 { "glGenPerfMonitorsAMD", 20, -1 },
2379 { "glDeletePerfMonitorsAMD", 20, -1 },
2380 { "glSelectPerfMonitorCountersAMD", 20, -1 },
2381 { "glBeginPerfMonitorAMD", 20, -1 },
2382 { "glEndPerfMonitorAMD", 20, -1 },
2383 { "glGetPerfMonitorCounterDataAMD", 20, -1 },
2384
2385 /* GL_INTEL_performance_query */
2386 { "glGetFirstPerfQueryIdINTEL", 20, -1 },
2387 { "glGetNextPerfQueryIdINTEL", 20, -1 },
2388 { "glGetPerfQueryIdByNameINTEL", 20, -1 },
2389 { "glGetPerfQueryInfoINTEL", 20, -1 },
2390 { "glGetPerfCounterInfoINTEL", 20, -1 },
2391 { "glCreatePerfQueryINTEL", 20, -1 },
2392 { "glDeletePerfQueryINTEL", 20, -1 },
2393 { "glBeginPerfQueryINTEL", 20, -1 },
2394 { "glEndPerfQueryINTEL", 20, -1 },
2395 { "glGetPerfQueryDataINTEL", 20, -1 },
2396
2397 /* GL_KHR_debug */
2398 { "glPushDebugGroupKHR", 20, -1 },
2399 { "glPopDebugGroupKHR", 20, -1 },
2400 { "glDebugMessageCallbackKHR", 20, -1 },
2401 { "glDebugMessageControlKHR", 20, -1 },
2402 { "glDebugMessageInsertKHR", 20, -1 },
2403 { "glGetDebugMessageLogKHR", 20, -1 },
2404 { "glGetObjectLabelKHR", 20, -1 },
2405 { "glGetObjectPtrLabelKHR", 20, -1 },
2406 { "glGetPointervKHR", 20, -1 },
2407 { "glObjectLabelKHR", 20, -1 },
2408 { "glObjectPtrLabelKHR", 20, -1 },
2409
2410 /* GL_EXT_polygon_offset_clamp */
2411 { "glPolygonOffsetClampEXT", 11, -1 },
2412
2413 /* GL_KHR_robustness */
2414 { "glGetGraphicsResetStatusKHR", 20, -1 },
2415 { "glReadnPixelsKHR", 20, -1 },
2416 { "glGetnUniformfvKHR", 20, -1 },
2417 { "glGetnUniformivKHR", 20, -1 },
2418 { "glGetnUniformuivKHR", 20, -1 },
2419
2420 /* GL_KHR_blend_equation_advanced */
2421 { "glBlendBarrierKHR", 20, -1 },
2422
2423 /* GL_EXT_occlusion_query_boolean */
2424 { "glGenQueriesEXT", 20, -1 },
2425 { "glDeleteQueriesEXT", 20, -1 },
2426 { "glIsQueryEXT", 20, -1 },
2427 { "glBeginQueryEXT", 20, -1 },
2428 { "glEndQueryEXT", 20, -1 },
2429 { "glGetQueryivEXT", 20, -1 },
2430 { "glGetQueryObjectivEXT", 20, -1 },
2431 { "glGetQueryObjectuivEXT", 20, -1 },
2432
2433 /* GL_EXT_clip_control */
2434 { "glClipControlEXT", 20, -1 },
2435
2436 /* GL_EXT_disjoint_timer_query */
2437 { "glGetQueryObjecti64vEXT", 20, -1 },
2438 { "glGetQueryObjectui64vEXT", 20, -1 },
2439 { "glQueryCounterEXT", 20, -1 },
2440
2441 /* GL_EXT_shader_framebuffer_fetch_non_coherent */
2442 { "glFramebufferFetchBarrierEXT", 20, -1 },
2443
2444 /* GL_NV_conditional_render */
2445 { "glBeginConditionalRenderNV", 20, -1 },
2446 { "glEndConditionalRenderNV", 20, -1 },
2447
2448 /* GL_NV_conservative_raster */
2449 { "glSubpixelPrecisionBiasNV", 20, -1 },
2450
2451 /* GL_NV_conservative_raster_dilate */
2452 { "glConservativeRasterParameterfNV", 20, -1 },
2453
2454 /* GL_NV_conservative_raster_pre_snap_triangles */
2455 { "glConservativeRasterParameteriNV", 20, -1 },
2456
2457 /* GL_EXT_multisampled_render_to_texture */
2458 { "glRenderbufferStorageMultisampleEXT", 20, -1 },
2459 { "glFramebufferTexture2DMultisampleEXT", 20, -1 },
2460
2461 /* GL_KHR_parallel_shader_compile */
2462 { "glMaxShaderCompilerThreadsKHR", 20, -1 },
2463
2464 { NULL, 0, -1 }
2465 };
2466
2467 const struct function gles3_functions_possible[] = {
2468 // We check for the aliased -EXT version in GLES 2
2469 // { "glBeginQuery", 30, -1 },
2470 { "glBeginTransformFeedback", 30, -1 },
2471 { "glBindBufferBase", 30, -1 },
2472 { "glBindBufferRange", 30, -1 },
2473 { "glBindSampler", 30, -1 },
2474 { "glBindTransformFeedback", 30, -1 },
2475 // We check for the aliased -OES version in GLES 2
2476 // { "glBindVertexArray", 30, -1 },
2477 { "glBlitFramebuffer", 30, -1 },
2478 { "glClearBufferfi", 30, -1 },
2479 { "glClearBufferfv", 30, -1 },
2480 { "glClearBufferiv", 30, -1 },
2481 { "glClearBufferuiv", 30, -1 },
2482 { "glClientWaitSync", 30, -1 },
2483 // We check for the aliased -OES version in GLES 2
2484 // { "glCompressedTexImage3D", 30, -1 },
2485 // We check for the aliased -OES version in GLES 2
2486 // { "glCompressedTexSubImage3D", 30, -1 },
2487 { "glCopyBufferSubData", 30, -1 },
2488 // We check for the aliased -OES version in GLES 2
2489 // { "glCopyTexSubImage3D", 30, -1 },
2490 // We check for the aliased -EXT version in GLES 2
2491 // { "glDeleteQueries", 30, -1 },
2492 { "glDeleteSamplers", 30, -1 },
2493 { "glDeleteSync", 30, -1 },
2494 { "glDeleteTransformFeedbacks", 30, -1 },
2495 // We check for the aliased -OES version in GLES 2
2496 // { "glDeleteVertexArrays", 30, -1 },
2497 { "glDrawArraysInstanced", 30, -1 },
2498 // We check for the aliased -NV version in GLES 2
2499 // { "glDrawBuffers", 30, -1 },
2500 { "glDrawElementsInstanced", 30, -1 },
2501 { "glDrawRangeElements", 30, -1 },
2502 // We check for the aliased -EXT version in GLES 2
2503 // { "glEndQuery", 30, -1 },
2504 { "glEndTransformFeedback", 30, -1 },
2505 { "glFenceSync", 30, -1 },
2506 // We check for the aliased -EXT version in GLES 2
2507 // { "glFlushMappedBufferRange", 30, -1 },
2508 { "glFramebufferTextureLayer", 30, -1 },
2509 // We check for the aliased -EXT version in GLES 2
2510 // { "glGenQueries", 30, -1 },
2511 { "glGenSamplers", 30, -1 },
2512 { "glGenTransformFeedbacks", 30, -1 },
2513 // We check for the aliased -OES version in GLES 2
2514 // { "glGenVertexArrays", 30, -1 },
2515 { "glGetActiveUniformBlockiv", 30, -1 },
2516 { "glGetActiveUniformBlockName", 30, -1 },
2517 { "glGetActiveUniformsiv", 30, -1 },
2518 { "glGetBufferParameteri64v", 30, -1 },
2519 // We check for the aliased -OES version in GLES 2
2520 // { "glGetBufferPointerv", 30, -1 },
2521 { "glGetFragDataLocation", 30, -1 },
2522 { "glGetInteger64i_v", 30, -1 },
2523 { "glGetInteger64v", 30, -1 },
2524 { "glGetIntegeri_v", 30, -1 },
2525 { "glGetInternalformativ", 30, -1 },
2526 { "glGetInternalformati64v", 30, -1 },
2527 // glGetProgramBinary aliases glGetProgramBinaryOES in GLES 2
2528 // We check for the aliased -EXT version in GLES 2
2529 // { "glGetQueryiv", 30, -1 },
2530 // We check for the aliased -EXT version in GLES 2
2531 // { "glGetQueryObjectuiv", 30, -1 },
2532 { "glGetSamplerParameterfv", 30, -1 },
2533 { "glGetSamplerParameteriv", 30, -1 },
2534 { "glGetStringi", 30, -1 },
2535 { "glGetSynciv", 30, -1 },
2536 { "glGetTransformFeedbackVarying", 30, -1 },
2537 { "glGetUniformBlockIndex", 30, -1 },
2538 { "glGetUniformIndices", 30, -1 },
2539 { "glGetUniformuiv", 30, -1 },
2540 { "glGetVertexAttribIiv", 30, -1 },
2541 { "glGetVertexAttribIuiv", 30, -1 },
2542 { "glInvalidateFramebuffer", 30, -1 },
2543 { "glInvalidateSubFramebuffer", 30, -1 },
2544 // We check for the aliased -EXT version in GLES 2
2545 // { "glIsQuery", 30, -1 },
2546 { "glIsSampler", 30, -1 },
2547 { "glIsSync", 30, -1 },
2548 { "glIsTransformFeedback", 30, -1 },
2549 // We check for the aliased -OES version in GLES 2
2550 // { "glIsVertexArray", 30, -1 },
2551 // We check for the aliased -EXT version in GLES 2
2552 // { "glMapBufferRange", 30, -1 },
2553 { "glPauseTransformFeedback", 30, -1 },
2554 // glProgramBinary aliases glProgramBinaryOES in GLES 2
2555 // glProgramParameteri aliases glProgramParameteriEXT in GLES 2
2556 // We check for the aliased -NV version in GLES 2
2557 // { "glReadBuffer", 30, -1 },
2558 // glRenderbufferStorageMultisample aliases glRenderbufferStorageMultisampleEXT in GLES 2
2559 { "glResumeTransformFeedback", 30, -1 },
2560 { "glSamplerParameterf", 30, -1 },
2561 { "glSamplerParameterfv", 30, -1 },
2562 { "glSamplerParameteri", 30, -1 },
2563 { "glSamplerParameteriv", 30, -1 },
2564 // We check for the aliased -OES version in GLES 2
2565 // { "glTexImage3D", 30, -1 },
2566 { "glTexStorage2D", 30, -1 },
2567 { "glTexStorage3D", 30, -1 },
2568 // We check for the aliased -OES version in GLES 2
2569 // { "glTexSubImage3D", 30, -1 },
2570 { "glTransformFeedbackVaryings", 30, -1 },
2571 { "glUniform1ui", 30, -1 },
2572 { "glUniform1uiv", 30, -1 },
2573 { "glUniform2ui", 30, -1 },
2574 { "glUniform2uiv", 30, -1 },
2575 { "glUniform3ui", 30, -1 },
2576 { "glUniform3uiv", 30, -1 },
2577 { "glUniform4ui", 30, -1 },
2578 { "glUniform4uiv", 30, -1 },
2579 { "glUniformBlockBinding", 30, -1 },
2580 { "glUniformMatrix2x3fv", 30, -1 },
2581 { "glUniformMatrix2x4fv", 30, -1 },
2582 { "glUniformMatrix3x2fv", 30, -1 },
2583 { "glUniformMatrix3x4fv", 30, -1 },
2584 { "glUniformMatrix4x2fv", 30, -1 },
2585 { "glUniformMatrix4x3fv", 30, -1 },
2586 // We check for the aliased -OES version in GLES 2
2587 // { "glUnmapBuffer", 30, -1 },
2588 { "glVertexAttribDivisor", 30, -1 },
2589 { "glVertexAttribI4i", 30, -1 },
2590 { "glVertexAttribI4iv", 30, -1 },
2591 { "glVertexAttribI4ui", 30, -1 },
2592 { "glVertexAttribI4uiv", 30, -1 },
2593 { "glVertexAttribIPointer", 30, -1 },
2594 { "glWaitSync", 30, -1 },
2595
2596 /* GL_EXT_separate_shader_objects - Also part of OpenGL ES 3.1. */
2597 { "glProgramUniform1uiEXT", 30, -1 },
2598 { "glProgramUniform1uivEXT", 30, -1 },
2599 { "glProgramUniform2uiEXT", 30, -1 },
2600 { "glProgramUniform2uivEXT", 30, -1 },
2601 { "glProgramUniform3uiEXT", 30, -1 },
2602 { "glProgramUniform3uivEXT", 30, -1 },
2603 { "glProgramUniform4uiEXT", 30, -1 },
2604 { "glProgramUniform4uivEXT", 30, -1 },
2605
2606 /* GL_EXT_blend_func_extended */
2607 { "glBindFragDataLocationIndexedEXT", 30, -1 },
2608 { "glGetFragDataIndexEXT", 30, -1 },
2609 { "glBindFragDataLocationEXT", 30, -1 },
2610
2611 /* GL_OES_texture_border_clamp */
2612 { "glTexParameterIivOES", 30, -1 },
2613 { "glTexParameterIuivOES", 30, -1 },
2614 { "glGetTexParameterIivOES", 30, -1 },
2615 { "glGetTexParameterIuivOES", 30, -1 },
2616 { "glSamplerParameterIivOES", 30, -1 },
2617 { "glSamplerParameterIuivOES", 30, -1 },
2618 { "glGetSamplerParameterIivOES", 30, -1 },
2619 { "glGetSamplerParameterIuivOES", 30, -1 },
2620
2621 /* GL_OES_texture_buffer */
2622 { "glTexBufferOES", 31, -1 },
2623 { "glTexBufferRangeOES", 31, -1 },
2624
2625 /* GL_OES_sample_shading */
2626 { "glMinSampleShadingOES", 30, -1 },
2627
2628 /* GL_OES_copy_image */
2629 { "glCopyImageSubDataOES", 30, -1 },
2630
2631 /* GL_OES_draw_buffers_indexed */
2632 { "glBlendFunciOES", 30, -1 },
2633 { "glBlendFuncSeparateiOES", 30, -1 },
2634 { "glBlendEquationiOES", 30, -1 },
2635 { "glBlendEquationSeparateiOES", 30, -1 },
2636 { "glColorMaskiOES", 30, -1 },
2637 { "glEnableiOES", 30, -1 },
2638 { "glDisableiOES", 30, -1 },
2639 { "glIsEnablediOES", 30, -1 },
2640
2641 /* GL_EXT_base_instance */
2642 { "glDrawArraysInstancedBaseInstanceEXT", 30, -1 },
2643 { "glDrawElementsInstancedBaseInstanceEXT", 30, -1 },
2644 { "glDrawElementsInstancedBaseVertexBaseInstanceEXT", 30, -1 },
2645
2646 /* GL_EXT_window_rectangles */
2647 { "glWindowRectanglesEXT", 30, -1 },
2648
2649 /* GL_AMD_framebuffer_multisample_advanced */
2650 { "glRenderbufferStorageMultisampleAdvancedAMD", 11, -1 },
2651 { "glNamedRenderbufferStorageMultisampleAdvancedAMD", 11, -1 },
2652
2653 { NULL, 0, -1 }
2654 };
2655
2656 const struct function gles31_functions_possible[] = {
2657 { "glDispatchCompute", 31, -1 },
2658 { "glDispatchComputeIndirect", 31, -1 },
2659 { "glDrawArraysIndirect", 31, -1 },
2660 { "glDrawElementsIndirect", 31, -1 },
2661
2662 { "glFramebufferParameteri", 31, -1 },
2663 { "glGetFramebufferParameteriv", 31, -1 },
2664
2665 { "glGetProgramInterfaceiv", 31, -1 },
2666 { "glGetProgramResourceIndex", 31, -1 },
2667 { "glGetProgramResourceName", 31, -1 },
2668 { "glGetProgramResourceiv", 31, -1 },
2669 { "glGetProgramResourceLocation", 31, -1 },
2670
2671 // We check for the aliased EXT versions in GLES 2
2672 // { "glUseProgramStages", 31, -1 },
2673 // { "glActiveShaderProgram", 31, -1 },
2674 // { "glCreateShaderProgramv", 31, -1 },
2675 // { "glBindProgramPipeline", 31, -1 },
2676 // { "glDeleteProgramPipelines", 31, -1 },
2677 // { "glGenProgramPipelines", 31, -1 },
2678 // { "glIsProgramPipeline", 31, -1 },
2679 // { "glGetProgramPipelineiv", 31, -1 },
2680 // { "glProgramUniform1i", 31, -1 },
2681 // { "glProgramUniform2i", 31, -1 },
2682 // { "glProgramUniform3i", 31, -1 },
2683 // { "glProgramUniform4i", 31, -1 },
2684 // { "glProgramUniform1f", 31, -1 },
2685 // { "glProgramUniform2f", 31, -1 },
2686 // { "glProgramUniform3f", 31, -1 },
2687 // { "glProgramUniform4f", 31, -1 },
2688 // { "glProgramUniform1iv", 31, -1 },
2689 // { "glProgramUniform2iv", 31, -1 },
2690 // { "glProgramUniform3iv", 31, -1 },
2691 // { "glProgramUniform4iv", 31, -1 },
2692 // { "glProgramUniform1fv", 31, -1 },
2693 // { "glProgramUniform2fv", 31, -1 },
2694 // { "glProgramUniform3fv", 31, -1 },
2695 // { "glProgramUniform4fv", 31, -1 },
2696 // { "glProgramUniformMatrix2fv", 31, -1 },
2697 // { "glProgramUniformMatrix3fv", 31, -1 },
2698 // { "glProgramUniformMatrix4fv", 31, -1 },
2699 // { "glProgramUniformMatrix2x3fv", 31, -1 },
2700 // { "glProgramUniformMatrix3x2fv", 31, -1 },
2701 // { "glProgramUniformMatrix2x4fv", 31, -1 },
2702 // { "glProgramUniformMatrix4x2fv", 31, -1 },
2703 // { "glProgramUniformMatrix3x4fv", 31, -1 },
2704 // { "glProgramUniformMatrix4x3fv", 31, -1 },
2705 // { "glValidateProgramPipeline", 31, -1 },
2706 // { "glGetProgramPipelineInfoLog", 31, -1 },
2707
2708 // We check for the aliased EXT versions in GLES 3
2709 // { "glProgramUniform1ui", 31, -1 },
2710 // { "glProgramUniform2ui", 31, -1 },
2711 // { "glProgramUniform3ui", 31, -1 },
2712 // { "glProgramUniform4ui", 31, -1 },
2713 // { "glProgramUniform1uiv", 31, -1 },
2714 // { "glProgramUniform2uiv", 31, -1 },
2715 // { "glProgramUniform3uiv", 31, -1 },
2716 // { "glProgramUniform4uiv", 31, -1 },
2717
2718 { "glBindImageTexture", 31, -1 },
2719 { "glGetBooleani_v", 31, -1 },
2720 { "glMemoryBarrier", 31, -1 },
2721
2722 { "glMemoryBarrierByRegion", 31, -1 },
2723
2724 { "glTexStorage2DMultisample", 31, -1 },
2725 { "glGetMultisamplefv", 31, -1 },
2726 { "glSampleMaski", 31, -1 },
2727 { "glGetTexLevelParameteriv", 31, -1 },
2728 { "glGetTexLevelParameterfv", 31, -1 },
2729 { "glBindVertexBuffer", 31, -1 },
2730 { "glVertexAttribFormat", 31, -1 },
2731 { "glVertexAttribIFormat", 31, -1 },
2732 { "glVertexAttribBinding", 31, -1 },
2733 { "glVertexBindingDivisor", 31, -1 },
2734
2735 /* GL_OES_texture_storage_multisample_2d_array */
2736 { "glTexStorage3DMultisampleOES", 31, -1 },
2737
2738 /* GL_OES_texture_view */
2739 { "glTextureViewOES", 31, -1 },
2740
2741 /* GL_EXT_buffer_storage */
2742 { "glBufferStorageEXT", 31, -1 },
2743
2744 /* GL_EXT_blend_func_extended */
2745 { "glGetProgramResourceLocationIndexEXT", 31, -1 },
2746
2747 /* GL_OES_geometry_shader */
2748 { "glFramebufferTextureOES", 31, -1},
2749
2750 /* GL_EXT_geometry_shader */
2751 // We check for the aliased OES version above
2752 // { "glFramebufferTextureEXT", 31, -1},
2753
2754 /* GL_OES_tessellation_shader */
2755 { "glPatchParameteriOES", 31, -1 },
2756
2757 /* GL_OES_primitive_bound_box */
2758 { "glPrimitiveBoundingBoxOES", 31, -1 },
2759
2760 /* GL_OES_viewport_array */
2761 { "glViewportArrayvOES", 31, -1 },
2762 { "glViewportIndexedfOES", 31, -1 },
2763 { "glViewportIndexedfvOES", 31, -1 },
2764 { "glScissorArrayvOES", 31, -1 },
2765 { "glScissorIndexedOES", 31, -1 },
2766 { "glScissorIndexedvOES", 31, -1 },
2767 { "glDepthRangeArrayfvOES", 31, -1 },
2768 { "glDepthRangeIndexedfOES", 31, -1 },
2769 { "glGetFloati_vOES", 31, -1 },
2770
2771 /* GL_ARB_sample_locations */
2772 { "glFramebufferSampleLocationsfvARB", 31, -1 },
2773 { "glNamedFramebufferSampleLocationsfvARB", 31, -1 },
2774 { "glEvaluateDepthValuesARB", 31, -1 },
2775
2776 { NULL, 0, -1 },
2777 };