Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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