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