15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""code generator for GL/GLES extension wrangler."""
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import optparse
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import collections
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)"""In case there are multiple versions of the same function, one that's listed
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)first takes priority if its conditions are met. If the function is an extension
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function, finding the extension from the extension string is a condition for
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)binding it. The last version of the function is treated as a fallback option in
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)case no other versions were bound, so a non-null function pointer in the
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bindings does not guarantee that the function is supported.
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Function binding conditions can be specified manually by supplying a versions
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)array instead of the names array. Each version has the following keys:
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   name: Mandatory. Name of the function. Multiple versions can have the same
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)         name but different conditions.
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   gl_versions: List of GL versions where the function is found.
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   extensions: Extensions where the function is found. If not specified, the
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               extensions are determined based on GL header files.
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               If the function exists in an extension header, you may specify
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               an empty array to prevent making that a condition for binding.
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)By default, the function gets its name from the first name in its names or
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)versions array. This can be overridden by supplying a 'known_as' key.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)"""
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GL_FUNCTIONS = [
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glActiveTexture'],
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum texture', },
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glAttachShader'],
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint shader', },
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBeginQuery'],
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint id', },
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBeginQueryARB', 'glBeginQueryEXT'],
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint id', },
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindAttribLocation'],
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint index, const char* name', },
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindBuffer'],
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint buffer', },
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindFragDataLocation'],
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint colorNumber, const char* name', },
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindFragDataLocationIndexed'],
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLuint colorNumber, GLuint index, const char* name', },
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindFramebufferEXT', 'glBindFramebuffer'],
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint framebuffer', },
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindRenderbufferEXT', 'glBindRenderbuffer'],
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint renderbuffer', },
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindTexture'],
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint texture', },
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendColor'],
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendEquation'],
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': ' GLenum mode ', },
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendEquationSeparate'],
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum modeRGB, GLenum modeAlpha', },
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendFunc'],
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum sfactor, GLenum dfactor', },
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendFuncSeparate'],
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha', },
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  'names': ['glBlitFramebuffer'],
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               'GLbitfield mask, GLenum filter', },
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 'return_type': 'void',
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlitFramebufferEXT', 'glBlitFramebuffer'],
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLbitfield mask, GLenum filter', },
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlitFramebufferANGLE', 'glBlitFramebuffer'],
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLbitfield mask, GLenum filter', },
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBufferData'],
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  'arguments':
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      'GLenum target, GLsizeiptr size, const void* data, GLenum usage', },
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBufferSubData'],
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  'arguments':
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      'GLenum target, GLintptr offset, GLsizeiptr size, const void* data', },
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLenum',
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCheckFramebufferStatusEXT',
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glCheckFramebufferStatus'],
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target',
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'logging_code': """
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GL_SERVICE_LOG("GL_RESULT: " << GLES2Util::GetStringEnum(result));
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""", },
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClear'],
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLbitfield mask', },
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearColor'],
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearDepth'],
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampd depth', },
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearDepthf'],
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf depth', },
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearStencil'],
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint s', },
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glColorMask'],
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha', },
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCompileShader'],
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader', },
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCompressedTexImage2D'],
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLenum internalformat, GLsizei width, '
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei height, GLint border, GLsizei imageSize, const void* data', },
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCompressedTexSubImage2D'],
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, '
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'const void* data', },
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCopyTexImage2D'],
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, '
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei width, GLsizei height, GLint border', },
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCopyTexSubImage2D'],
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLint xoffset, '
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLuint',
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCreateProgram'],
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLuint',
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCreateShader'],
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum type', },
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCullFace'],
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode', },
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteBuffersARB', 'glDeleteBuffers'],
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* buffers', },
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'],
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* framebuffers', },
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteProgram'],
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteQueries'],
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* ids', },
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteQueriesARB', 'glDeleteQueriesEXT'],
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* ids', },
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'],
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* renderbuffers', },
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteShader'],
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader', },
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteTextures'],
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* textures', },
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthFunc'],
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum func', },
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthMask'],
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLboolean flag', },
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthRange'],
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampd zNear, GLclampd zFar', },
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthRangef'],
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf zNear, GLclampf zFar', },
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDetachShader'],
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint shader', },
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDisable'],
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum cap', },
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDisableVertexAttribArray'],
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index', },
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawArrays'],
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode, GLint first, GLsizei count', },
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawBuffer'],
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode', },
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['glDrawBuffersARB', 'glDrawBuffersEXT'],
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLenum* bufs', },
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawElements'],
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum mode, GLsizei count, GLenum type, const void* indices', },
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEGLImageTargetTexture2DOES'],
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLeglImageOES image', },
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEGLImageTargetRenderbufferStorageOES'],
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLeglImageOES image', },
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEnable'],
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum cap', },
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEnableVertexAttribArray'],
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index', },
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEndQuery'],
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEndQueryARB', 'glEndQueryEXT'],
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFinish'],
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFlush'],
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'],
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': \
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLenum attachment, GLenum renderbuffertarget, '
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint renderbuffer', },
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFramebufferTexture2DEXT', 'glFramebufferTexture2D'],
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint level', },
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'names': ['glFramebufferTexture2DMultisampleEXT'],
2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'arguments':
2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLint level, GLsizei samples', },
2647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 'return_type': 'void',
2657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'names': ['glFramebufferTexture2DMultisampleIMG'],
2667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'arguments':
2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLint level, GLsizei samples', },
2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 'return_type': 'void',
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFrontFace'],
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode', },
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenBuffersARB', 'glGenBuffers'],
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* buffers', },
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenQueries'],
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* ids', },
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenQueriesARB', 'glGenQueriesEXT'],
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* ids', },
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenerateMipmapEXT', 'glGenerateMipmap'],
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'],
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* framebuffers', },
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'],
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* renderbuffers', },
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenTextures'],
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* textures', },
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetActiveAttrib'],
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint* size, GLenum* type, char* name', },
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetActiveUniform'],
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint* size, GLenum* type, char* name', },
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetAttachedShaders'],
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders', },
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLint',
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetAttribLocation'],
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, const char* name', },
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetBooleanv'],
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLboolean* params', },
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetBufferParameteriv'],
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLenum',
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetError'],
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void',
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'logging_code': """
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GL_SERVICE_LOG("GL_RESULT: " << GLES2Util::GetStringError(result));
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""", },
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetFloatv'],
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLfloat* params', },
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetFramebufferAttachmentParameterivEXT',
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glGetFramebufferAttachmentParameteriv'],
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, '
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLenum attachment, GLenum pname, GLint* params', },
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLenum',
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetGraphicsResetStatusARB',
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glGetGraphicsResetStatusEXT'],
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetIntegerv'],
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLint* params', },
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'names': ['glGetInteger64v'],
3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'arguments': 'GLenum pname, GLint64* params', },
3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 'return_type': 'void',
3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glGetProgramBinary',
3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glGetProgramBinaryOES' },
3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glGetProgramBinary',
3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_get_program_binary'] },
3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glGetProgramBinary' }],
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLsizei bufSize, GLsizei* length, '
3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               'GLenum* binaryFormat, GLvoid* binary' },
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetProgramiv'],
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLenum pname, GLint* params', },
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetProgramInfoLog'],
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLsizei bufsize, GLsizei* length, char* infolog', },
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryiv'],
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryivARB', 'glGetQueryivEXT'],
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjecti64v'],
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLint64* params', },
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'names': ['glGetQueryObjectui64v', 'glGetQueryObjectui64vEXT'],
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLuint64* params', },
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjectuiv'],
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLuint* params', },
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjectuivARB', 'glGetQueryObjectuivEXT'],
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLuint* params', },
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'names': ['glGetQueryObjectiv', 'glGetQueryObjectivARB',
3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            'glGetQueryObjectivEXT'],
3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'arguments': 'GLuint id, GLenum pname, GLint* params', },
3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 'return_type': 'void',
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'],
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderiv'],
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader, GLenum pname, GLint* params', },
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderInfoLog'],
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog', },
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderPrecisionFormat'],
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum shadertype, GLenum precisiontype, '
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLint* range, GLint* precision', },
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderSource'],
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const GLubyte*',
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetString'],
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum name', },
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexLevelParameterfv'],
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLint level, GLenum pname, GLfloat* params', },
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexLevelParameteriv'],
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLint level, GLenum pname, GLint* params', },
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexParameterfv'],
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLfloat* params', },
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexParameteriv'],
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTranslatedShaderSourceANGLE'],
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetUniformfv'],
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLint location, GLfloat* params', },
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetUniformiv'],
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLint location, GLint* params', },
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLint',
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetUniformLocation'],
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, const char* name', },
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetVertexAttribfv'],
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index, GLenum pname, GLfloat* params', },
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetVertexAttribiv'],
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index, GLenum pname, GLint* params', },
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetVertexAttribPointerv'],
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index, GLenum pname, void** pointer', },
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glHint'],
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum mode', },
435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){ 'return_type': 'void',
436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'names': ['glInsertEventMarkerEXT'],
437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'arguments': 'GLsizei length, const char* marker', },
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsBuffer'],
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint buffer', },
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsEnabled'],
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum cap', },
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsFramebufferEXT', 'glIsFramebuffer'],
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint framebuffer', },
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsProgram'],
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsQueryARB', 'glIsQueryEXT'],
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint query', },
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsRenderbufferEXT', 'glIsRenderbuffer'],
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint renderbuffer', },
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsShader'],
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader', },
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsTexture'],
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint texture', },
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glLineWidth'],
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLfloat width', },
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glLinkProgram'],
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void*',
4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glMapBuffer',
4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'names': ['glMapBufferOES', 'glMapBuffer'],
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum access', },
472424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles){ 'return_type': 'void*',
473424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  'names': ['glMapBufferRange'],
474424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  'arguments':
475424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      'GLenum target, GLintptr offset, GLsizeiptr length, GLenum access', },
476424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles){ 'return_type': 'void',
477424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  'names': ['glFlushMappedBufferRange'],
478424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  'arguments': 'GLenum target, GLintptr offset, GLsizeiptr length', },
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glPixelStorei'],
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLint param', },
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glPointParameteri'],
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLint param', },
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glPolygonOffset'],
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLfloat factor, GLfloat units', },
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'names': ['glPopGroupMarkerEXT'],
490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'arguments': 'void', },
491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){ 'return_type': 'void',
4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glProgramBinary',
4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glProgramBinaryOES' },
4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glProgramBinary',
4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_get_program_binary'] },
4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glProgramBinary' }],
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLenum binaryFormat, '
4985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               'const GLvoid* binary, GLsizei length' },
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glProgramParameteri',
5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_get_program_binary'] },
5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glProgramParameteri' }],
5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'GLuint program, GLenum pname, GLint value' },
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'names': ['glPushGroupMarkerEXT'],
506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'arguments': 'GLsizei length, const char* marker', },
507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){ 'return_type': 'void',
5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'names': ['glQueryCounter', 'glQueryCounterEXT'],
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum target', },
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glReadBuffer'],
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum src', },
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glReadPixels'],
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, '
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLenum type, void* pixels', },
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glReleaseShaderCompiler'],
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Multisampling API is different in different GL versions, some require an
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# explicit resolve step for renderbuffers and/or FBO texture attachments and
5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# some do not. Multiple alternatives might be present in a single
5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# implementation, which require different use of the API and may have
5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# different performance (explicit resolve performing worse, for example).
5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# So even though the function signature is the same across versions, we split
5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# their definitions so that the function to use can be chosen correctly at a
5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# higher level.
5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# TODO(oetuaho@nvidia.com): Some of these might still be possible to combine.
5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# This could also fix weirdness in the mock bindings that's caused by the same
5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# function name appearing multiple times.
5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# This is the ES3 function, which requires explicit resolve:
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  'names': ['glRenderbufferStorageMultisample'],
535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               'GLsizei width, GLsizei height', },
5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# In desktop GL, EXT and core versions both have an explicit resolve step,
5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# though desktop core GL implicitly resolves when drawing to a window.
5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# TODO(oetuaho@nvidia.com): Right now this function also doubles as ES2 EXT
5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# function, which has implicit resolve, and for which the fallback is wrong.
5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Fix this.
542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 'return_type': 'void',
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glRenderbufferStorageMultisampleEXT',
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glRenderbufferStorageMultisample'],
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei width, GLsizei height', },
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glRenderbufferStorageMultisampleANGLE',
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glRenderbufferStorageMultisample'],
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei width, GLsizei height', },
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'names': ['glRenderbufferStorageMultisampleIMG'],
5547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
5557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch               'GLsizei width, GLsizei height', },
5567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 'return_type': 'void',
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glRenderbufferStorageEXT', 'glRenderbufferStorage'],
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLenum internalformat, GLsizei width, GLsizei height', },
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glSampleCoverage'],
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf value, GLboolean invert', },
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glScissor'],
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glShaderBinary'],
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* shaders, GLenum binaryformat, '
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const void* binary, GLsizei length', },
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glShaderSource'],
5725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'GLuint shader, GLsizei count, const char* const* str, '
5735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               'const GLint* length',
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'logging_code': """
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GL_SERVICE_LOG_CODE_BLOCK({
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (GLsizei ii = 0; ii < count; ++ii) {
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (str[ii]) {
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (length && length[ii] >= 0) {
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          std::string source(str[ii], length[ii]);
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          GL_SERVICE_LOG("  " << ii << ": ---\\n" << source << "\\n---");
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          GL_SERVICE_LOG("  " << ii << ": ---\\n" << str[ii] << "\\n---");
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_SERVICE_LOG("  " << ii << ": NULL");
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""", },
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilFunc'],
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum func, GLint ref, GLuint mask', },
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilFuncSeparate'],
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum face, GLenum func, GLint ref, GLuint mask', },
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilMask'],
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint mask', },
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilMaskSeparate'],
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum face, GLuint mask', },
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilOp'],
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum fail, GLenum zfail, GLenum zpass', },
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilOpSeparate'],
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum face, GLenum fail, GLenum zfail, GLenum zpass', },
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexImage2D'],
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLint internalformat, GLsizei width, '
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei height, GLint border, GLenum format, GLenum type, '
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const void* pixels', },
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameterf'],
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLfloat param', },
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameterfv'],
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, const GLfloat* params', },
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameteri'],
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint param', },
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameteriv'],
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, const GLint* params', },
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'known_as': 'glTexStorage2DEXT',
6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'versions': [{ 'name': 'glTexStorage2D',
6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['es3'] },
6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci               { 'name': 'glTexStorage2D',
6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['GL_ARB_texture_storage'] },
6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci               { 'name': 'glTexStorage2DEXT',
6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['GL_EXT_texture_storage'] }],
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei levels, GLenum internalformat, '
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei width, GLsizei height', },
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexSubImage2D'],
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLsizei width, GLsizei height, GLenum format, GLenum type, '
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'const void* pixels', },
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1f'],
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x', },
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1fv'],
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1i'],
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x', },
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1iv'],
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2f'],
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x, GLfloat y', },
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2fv'],
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2i'],
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x, GLint y', },
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2iv'],
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3f'],
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x, GLfloat y, GLfloat z', },
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3fv'],
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3i'],
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x, GLint y, GLint z', },
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3iv'],
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4f'],
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w', },
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4fv'],
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4i'],
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x, GLint y, GLint z, GLint w', },
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4iv'],
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniformMatrix2fv'],
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, '
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLboolean transpose, const GLfloat* value', },
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniformMatrix3fv'],
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, '
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLboolean transpose, const GLfloat* value', },
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniformMatrix4fv'],
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, '
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLboolean transpose, const GLfloat* value', },
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glUnmapBuffer',
7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'names': ['glUnmapBufferOES', 'glUnmapBuffer'],
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUseProgram'],
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glValidateProgram'],
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib1f'],
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x', },
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib1fv'],
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib2f'],
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x, GLfloat y', },
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib2fv'],
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib3f'],
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x, GLfloat y, GLfloat z', },
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib3fv'],
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib4f'],
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w', },
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib4fv'],
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttribPointer'],
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLint size, GLenum type, GLboolean normalized, '
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei stride, const void* ptr', },
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glViewport'],
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenFencesNV'],
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* fences', },
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteFencesNV'],
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* fences', },
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glSetFenceNV'],
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence, GLenum condition', },
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTestFenceNV'],
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence', },
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFinishFenceNV'],
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence', },
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsFenceNV'],
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence', },
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetFenceivNV'],
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence, GLenum pname, GLint* params', },
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLsync',
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFenceSync'],
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum condition, GLbitfield flags', },
767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ 'return_type': 'GLboolean',
768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  'names': ['glIsSync'],
769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  'arguments': 'GLsync sync', },
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteSync'],
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsync sync', },
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetSynciv'],
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length,'
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLint* values', },
778558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch{ 'return_type': 'GLenum',
779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  'names': ['glClientWaitSync'],
780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  'arguments':
781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'GLsync sync, GLbitfield flags, GLuint64 timeout', },
782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){ 'return_type': 'GLenum',
783a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'names': ['glWaitSync'],
784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  'arguments':
785a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    'GLsync sync, GLbitfield flags, GLuint64 timeout', },
786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch{ 'return_type': 'void',
7875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glDrawArraysInstancedANGLE',
788a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  'names': ['glDrawArraysInstancedARB', 'glDrawArraysInstancedANGLE',
789a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            'glDrawArraysInstanced'],
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode, GLint first, GLsizei count, GLsizei primcount', },
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glDrawElementsInstancedANGLE',
793a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  'names': ['glDrawElementsInstancedARB', 'glDrawElementsInstancedANGLE',
794a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            'glDrawElementsInstanced'],
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum mode, GLsizei count, GLenum type, const void* indices, '
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei primcount', },
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glVertexAttribDivisorANGLE',
800a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  'names': ['glVertexAttribDivisorARB', 'glVertexAttribDivisorANGLE',
801a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            'glVertexAttribDivisor'],
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint index, GLuint divisor', },
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glGenVertexArraysOES',
8065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glGenVertexArrays',
8071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['gl3', 'gl4', 'es3'] },
8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glGenVertexArrays',
8095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_vertex_array_object'] },
8105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glGenVertexArraysOES' },
8115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glGenVertexArraysAPPLE',
8125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_APPLE_vertex_array_object'] }],
8135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* arrays', },
8145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 'return_type': 'void',
8155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glDeleteVertexArraysOES',
8165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glDeleteVertexArrays',
8171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['gl3', 'gl4', 'es3'] },
8185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glDeleteVertexArrays',
8195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_vertex_array_object'] },
8205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glDeleteVertexArraysOES' },
8215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glDeleteVertexArraysAPPLE',
8225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_APPLE_vertex_array_object'] }],
8235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* arrays' },
8245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 'return_type': 'void',
8255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glBindVertexArrayOES',
8265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glBindVertexArray',
8271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['gl3', 'gl4', 'es3'] },
8285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glBindVertexArray',
8295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_vertex_array_object'] },
8305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glBindVertexArrayOES' },
8315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glBindVertexArrayAPPLE',
8325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_APPLE_vertex_array_object'] }],
8335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'GLuint array' },
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
8355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glIsVertexArrayOES',
8365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glIsVertexArray',
8375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'gl_versions': ['gl3', 'gl4'] },
8385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glIsVertexArray',
8395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_ARB_vertex_array_object'] },
8405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glIsVertexArrayOES' },
8415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glIsVertexArrayAPPLE',
8425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['GL_APPLE_vertex_array_object'] }],
8435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'GLuint array' },
8445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 'return_type': 'void',
8455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'known_as': 'glDiscardFramebufferEXT',
8465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'glInvalidateFramebuffer',
8475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'gl_versions': ['es3'],
8485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': [] },
8495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               { 'name': 'glDiscardFramebufferEXT',
8505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'gl_versions': ['es1', 'es2'] }],
8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'GLenum target, GLsizei numAttachments, '
8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'const GLenum* attachments' },
8531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 'return_type': 'void',
8541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'known_as': 'glMatrixLoadfEXT',
8551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'versions': [{ 'name': 'glMatrixLoadfEXT',
8561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['gl4'],
8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['GL_EXT_direct_state_access'] },
8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci               { 'name': 'glMatrixLoadfEXT',
8591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['es3'],
8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['GL_NV_path_rendering'] }],
8611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'arguments': 'GLenum matrixMode, const GLfloat* m' },
8621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 'return_type': 'void',
8631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'known_as': 'glMatrixLoadIdentityEXT',
8641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'versions': [{ 'name': 'glMatrixLoadIdentityEXT',
8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['gl4'],
8661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['GL_EXT_direct_state_access'] },
8671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci               { 'name': 'glMatrixLoadIdentityEXT',
8681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'gl_versions': ['es3'],
8691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['GL_NV_path_rendering'] }],
8701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'arguments': 'GLenum matrixMode' },
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSMESA_FUNCTIONS = [
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMesaContext',
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaCreateContext'],
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum format, OSMesaContext sharelist', },
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMesaContext',
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaCreateContextExt'],
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, '
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'OSMesaContext sharelist', },
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaDestroyContext'],
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'OSMesaContext ctx', },
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaMakeCurrent'],
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'OSMesaContext ctx, void* buffer, GLenum type, GLsizei width, '
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei height', },
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMesaContext',
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetCurrentContext'],
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaPixelStore'],
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint pname, GLint value', },
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetIntegerv'],
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint pname, GLint* value', },
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetDepthBuffer'],
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'OSMesaContext c, GLint* width, GLint* height, GLint* bytesPerValue, '
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'void** buffer', },
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetColorBuffer'],
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'OSMesaContext c, GLint* width, GLint* height, GLint* format, '
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'void** buffer', },
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMESAproc',
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetProcAddress'],
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'const char* funcName', },
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaColorClamp'],
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLboolean enable', },
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EGL_FUNCTIONS = [
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLint',
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetError'],
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLDisplay',
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetDisplay'],
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLNativeDisplayType display_id', },
9221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 'return_type': 'EGLDisplay',
9231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'known_as': 'eglGetPlatformDisplayEXT',
9241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'versions': [{ 'name': 'eglGetPlatformDisplayEXT',
9251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 'extensions': ['EGL_ANGLE_platform_angle'] }],
9261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'arguments': 'EGLenum platform, void* native_display, '
9271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci               'const EGLint* attrib_list', },
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglInitialize'],
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLint* major, EGLint* minor', },
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglTerminate'],
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy', },
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQueryString'],
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLint name', },
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetConfigs'],
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig* configs, EGLint config_size, '
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'EGLint* num_config', },
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglChooseConfig'],
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, '
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'EGLint config_size, EGLint* num_config', },
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetConfigAttrib'],
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value', },
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLImageKHR',
9505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'eglCreateImageKHR',
951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                 'extensions':
952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                     ['EGL_KHR_image_base', 'EGL_KHR_gl_texture_2D_image'] }],
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, '
9555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      'const EGLint* attrib_list' },
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name' : 'eglDestroyImageKHR',
9585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['EGL_KHR_image_base'] }],
9595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLImageKHR image' },
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreateWindowSurface'],
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, '
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const EGLint* attrib_list', },
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreatePbufferSurface'],
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, const EGLint* attrib_list', },
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreatePixmapSurface'],
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, '
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const EGLint* attrib_list', },
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglDestroySurface'],
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface', },
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQuerySurface'],
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint* value', },
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglBindAPI'],
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLenum api', },
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLenum',
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQueryAPI'],
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglWaitClient'],
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglReleaseThread'],
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreatePbufferFromClientBuffer'],
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLenum buftype, void* buffer, EGLConfig config, '
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const EGLint* attrib_list', },
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglSurfaceAttrib'],
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value', },
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglBindTexImage'],
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint buffer', },
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglReleaseTexImage'],
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint buffer', },
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglSwapInterval'],
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLint interval', },
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLContext',
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreateContext'],
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, EGLContext share_context, '
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              'const EGLint* attrib_list', },
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglDestroyContext'],
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLContext ctx', },
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglMakeCurrent'],
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx', },
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLContext',
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetCurrentContext'],
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetCurrentSurface'],
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLint readdraw', },
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLDisplay',
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetCurrentDisplay'],
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQueryContext'],
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint* value', },
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglWaitGL'],
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglWaitNative'],
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLint engine', },
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglSwapBuffers'],
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface', },
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCopyBuffers'],
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target', },
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': '__eglMustCastToProperFunctionPointerType',
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetProcAddress'],
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'const char* procname', },
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglPostSubBufferNV'],
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface, '
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'EGLint x, EGLint y, EGLint width, EGLint height', },
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQuerySurfacePointerANGLE'],
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLint attribute, void** value', },
10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLSyncKHR',
10575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'eglCreateSyncKHR',
10585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['EGL_KHR_fence_sync'] }],
10595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLenum type, const EGLint* attrib_list' },
10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLint',
10615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'eglClientWaitSyncKHR',
10625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['EGL_KHR_fence_sync'] }],
10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, '
10645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      'EGLTimeKHR timeout' },
10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLBoolean',
10665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'eglGetSyncAttribKHR',
10675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['EGL_KHR_fence_sync'] }],
10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, '
10695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      'EGLint* value' },
10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLBoolean',
10715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'eglDestroySyncKHR',
10725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 'extensions': ['EGL_KHR_fence_sync'] }],
10735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync' },
10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLBoolean',
10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['eglGetSyncValuesCHROMIUM'],
10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments':
10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, '
10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLuint64CHROMIUM* ust, EGLuint64CHROMIUM* msc, '
10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLuint64CHROMIUM* sbc', },
1080d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles){ 'return_type': 'EGLint',
10815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'versions': [{ 'name': 'eglWaitSyncKHR',
10828fd87632b6d48cb96d825bb68d4f1fd457262f36boliu                 'extensions': ['EGL_KHR_fence_sync', 'EGL_KHR_wait_sync'] }],
10835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint flags' }
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WGL_FUNCTIONS = [
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HGLRC',
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCreateContext'],
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc', },
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HGLRC',
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCreateLayerContext'],
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc, int iLayerPlane', },
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCopyContext'],
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask', },
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglDeleteContext'],
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HGLRC hglrc', },
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HGLRC',
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetCurrentContext'],
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': '', },
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HDC',
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetCurrentDC'],
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': '', },
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglMakeCurrent'],
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc, HGLRC hglrc', },
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglShareLists'],
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HGLRC hglrc1, HGLRC hglrc2', },
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglSwapIntervalEXT'],
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'int interval', },
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglSwapLayerBuffers'],
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc, UINT fuPlanes', },
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetExtensionsStringARB'],
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hDC', },
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetExtensionsStringEXT'],
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': '', },
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglChoosePixelFormatARB'],
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'HDC dc, const int* int_attrib_list, const float* float_attrib_list, '
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'UINT max_formats, int* formats, UINT* num_formats', },
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HPBUFFERARB',
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCreatePbufferARB'],
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hDC, int iPixelFormat, int iWidth, int iHeight, '
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const int* piAttribList', },
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HDC',
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetPbufferDCARB'],
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer', },
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglReleasePbufferDCARB'],
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer, HDC hDC', },
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglDestroyPbufferARB'],
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer', },
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglQueryPbufferARB'],
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer, int iAttribute, int* piValue', },
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLX_FUNCTIONS = [
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXWaitVideoSyncSGI'],
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'int divisor, int remainder, unsigned int* count', },
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'XVisualInfo*',
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXChooseVisual'],
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen, int* attribList', },
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCopySubBufferMESA'],
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, '
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'int x, int y, int width, int height', },
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateContext'],
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, XVisualInfo* vis, GLXContext shareList, int direct', },
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXBindTexImageEXT'],
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable drawable, int buffer, int* attribList', },
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXReleaseTexImageEXT'],
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, int buffer', },
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyContext'],
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXContext ctx', },
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXMakeCurrent'],
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, GLXContext ctx', },
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCopyContext'],
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXContext src, GLXContext dst, unsigned long mask', },
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSwapBuffers'],
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable', },
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXPixmap',
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateGLXPixmap'],
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, XVisualInfo* visual, Pixmap pixmap', },
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyGLXPixmap'],
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXPixmap pixmap', },
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryExtension'],
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int* errorb, int* event', },
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryVersion'],
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int* maj, int* min', },
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXIsDirect'],
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXContext ctx', },
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetConfig'],
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, XVisualInfo* visual, int attrib, int* value', },
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentContext'],
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXDrawable',
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentDrawable'],
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXWaitGL'],
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXWaitX'],
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXUseXFont'],
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Font font, int first, int count, int list', },
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryExtensionsString'],
12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen', },
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryServerString'],
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen, int name', },
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetClientString'],
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int name', },
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'Display*',
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentDisplay'],
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXFBConfig*',
12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXChooseFBConfig'],
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, int screen, const int* attribList, int* nitems', },
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetFBConfigAttrib'],
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, int attribute, int* value', },
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXFBConfig*',
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetFBConfigs'],
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen, int* nelements', },
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'XVisualInfo*',
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetVisualFromFBConfig'],
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config', },
12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXWindow',
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateWindow'],
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXFBConfig config, Window win, const int* attribList', },
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyWindow'],
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXWindow window', },
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXPixmap',
12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreatePixmap'],
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, '
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'Pixmap pixmap, const int* attribList', },
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyPixmap'],
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXPixmap pixmap', },
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXPbuffer',
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreatePbuffer'],
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, const int* attribList', },
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyPbuffer'],
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXPbuffer pbuf', },
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryDrawable'],
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable draw, int attribute, unsigned int* value', },
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateNewContext'],
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, int renderType, '
12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLXContext shareList, int direct', },
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXMakeContextCurrent'],
12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx', },
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXDrawable',
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentReadDrawable'],
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryContext'],
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXContext ctx, int attribute, int* value', },
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSelectEvent'],
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long mask', },
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetSelectedEvent'],
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSwapIntervalMESA'],
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'unsigned int interval', },
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSwapIntervalEXT'],
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, int interval', },
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXFBConfig',
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetFBConfigFromVisualSGIX'],
12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, XVisualInfo* visualInfo', },
12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateContextAttribsARB'],
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXFBConfig config, GLXContext share_context, int direct, '
12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const int* attrib_list', },
12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'bool',
12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetSyncValuesOML'],
12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable drawable, int64* ust, int64* msc, '
13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'int64* sbc' },
13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'bool',
13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetMscRateOML'],
13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable drawable, int32* numerator, '
13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'int32* denominator' },
13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FUNCTION_SETS = [
1310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  [GL_FUNCTIONS, 'gl', [
13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GL/glext.h',
13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLES2/gl2ext.h',
13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # Files below are Chromium-specific and shipped with Chromium sources.
13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GL/glextchromium.h',
13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLES2/gl2chromium.h',
13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLES2/gl2extchromium.h'
13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ], []],
1318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  [OSMESA_FUNCTIONS, 'osmesa', [], []],
1319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  [EGL_FUNCTIONS, 'egl', [
13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGL/eglext.h',
13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # Files below are Chromium-specific and shipped with Chromium sources.
13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGL/eglextchromium.h',
13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ],
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    [
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGL_ANGLE_d3d_share_handle_client_buffer',
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGL_ANGLE_surface_d3d_texture_2d_share_handle',
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ],
1329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  [WGL_FUNCTIONS, 'wgl', ['GL/wglext.h'], []],
1330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  [GLX_FUNCTIONS, 'glx', ['GL/glx.h', 'GL/glxext.h'], []],
13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def GenerateHeader(file, functions, set_name, used_extensions):
13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_bindings_autogen_x.h"""
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write file header.
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_GL_GL_BINDINGS_AUTOGEN_%(name)s_H_
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_GL_GL_BINDINGS_AUTOGEN_%(name)s_H_
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLContext;
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % {'name': set_name.upper()})
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write typedefs for function pointer types. Always use the GL name for the
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # typedef.
13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('typedef %s (GL_BINDING_CALL *%sProc)(%s);\n' %
13585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (func['return_type'], func['known_as'], func['arguments']))
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write declarations for booleans indicating which extensions are available.
13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("struct Extensions%s {\n" % set_name.upper())
13635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for extension in sorted(used_extensions):
13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  bool b_%s;\n' % extension)
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('};\n')
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write Procs struct.
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("struct Procs%s {\n" % set_name.upper())
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
13715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('  %sProc %sFn;\n' % (func['known_as'], func['known_as']))
13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('};\n')
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write Api class.
13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""class GL_EXPORT %(name)sApi {
13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  %(name)sApi();
13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~%(name)sApi();
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % {'name': set_name.upper()})
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  virtual %s %sFn(%s) = 0;\n' %
13855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      (func['return_type'], func['known_as'], func['arguments']))
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('};\n')
13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write( '}  // namespace gfx\n')
13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write macros to invoke function pointers. Always use the GL name for the
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # macro.
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('#define %s ::gfx::g_current_%s_context->%sFn\n' %
13965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (func['known_as'], set_name.lower(), func['known_as']))
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('#endif  //  UI_GFX_GL_GL_BINDINGS_AUTOGEN_%s_H_\n' %
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      set_name.upper())
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def GenerateAPIHeader(file, functions, set_name):
14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_bindings_api_autogen_x.h"""
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write file header.
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % {'name': set_name.upper()})
14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write API declaration.
14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  virtual %s %sFn(%s) OVERRIDE;\n' %
14195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      (func['return_type'], func['known_as'], func['arguments']))
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def GenerateMockHeader(file, functions, set_name):
14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_mock_autogen_x.h"""
14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write file header.
14282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  file.write(
14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
14312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is automatically generated.
14342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" % {'name': set_name.upper()})
14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write API declaration.
14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for func in functions:
14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    args = func['arguments']
14402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if args == 'void':
14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      args = ''
14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    arg_count = 0
14432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if len(args):
14442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      arg_count = func['arguments'].count(',') + 1
14452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('  MOCK_METHOD%d(%s, %s(%s));\n' %
14465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      (arg_count, func['known_as'][2:], func['return_type'], args))
14472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  file.write('\n')
14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)def GenerateSource(file, functions, set_name, used_extensions):
14522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_bindings_autogen_x.cc"""
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write file header.
14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2011 The Chromium Authors. All rights reserved.
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/debug/trace_event.h"
14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h"
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_bindings.h"
14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_context.h"
14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h"
14685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gl/gl_version_info.h"
14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_%s_api_implementation.h"
14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using gpu::gles2::GLES2Util;
14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % set_name.lower())
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('static bool g_debugBindingsInitialized;\n')
14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('Driver%s g_driver_%s;\n' % (set_name.upper(), set_name.lower()))
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # Write stub functions that take the place of some functions before a context
14825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # is initialized. This is done to provide clear asserts on debug build and to
14835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # avoid crashing in case of a bug on release build.
14845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write('\n')
14855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for func in functions:
14865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    unique_names = set([version['name'] for version in func['versions']])
14875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if len(unique_names) > 1:
14885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('%s %sNotBound(%s) {\n' %
14895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          (func['return_type'], func['known_as'], func['arguments']))
14905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('  NOTREACHED();\n')
14915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return_type = func['return_type'].lower()
14925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # Returning 0 works for booleans, integers and pointers.
14935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if return_type != 'void':
14945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        file.write('  return 0;\n')
14955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('}\n')
14965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
14975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # Write function to initialize the function pointers that are always the same
14985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # and to initialize bindings where choice of the function depends on the
14995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # extension string or the GL version to point to stub functions.
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
15015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write('void Driver%s::InitializeStaticBindings() {\n' %
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             set_name.upper())
15035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def WriteFuncBinding(file, known_as, version_name):
15055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write(
15065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        '  fn.%sFn = reinterpret_cast<%sProc>(GetGLProcAddress("%s"));\n' %
15075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (known_as, known_as, version_name))
15085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
15105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    unique_names = set([version['name'] for version in func['versions']])
15115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if len(unique_names) == 1:
15125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      WriteFuncBinding(file, func['known_as'], func['known_as'])
15135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    else:
15145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('  fn.%sFn = reinterpret_cast<%sProc>(%sNotBound);\n' %
15155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          (func['known_as'], func['known_as'], func['known_as']))
15165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # Write function to initialize bindings where choice of the function depends
15215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # on the extension string or the GL version.
15225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write("""void Driver%s::InitializeDynamicBindings(GLContext* context) {
15235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(context && context->IsCurrent(NULL));
15245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const GLVersionInfo* ver ALLOW_UNUSED = context->GetVersionInfo();
15255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string extensions ALLOW_UNUSED = context->GetExtensions();
15265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  extensions += " ";
15275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % set_name.upper())
15295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for extension in sorted(used_extensions):
15305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # Extra space at the end of the extension name is intentional, it is used
15315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # as a separator
15325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('  ext.b_%s = extensions.find("%s ") != std::string::npos;\n' %
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (extension, extension))
15345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def WrapOr(cond):
15365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if ' || ' in cond:
15375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return '(%s)' % cond
15385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return cond
15395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def WrapAnd(cond):
15415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if ' && ' in cond:
15425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return '(%s)' % cond
15435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return cond
15445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def VersionCondition(version):
15465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    conditions = []
15475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if 'gl_versions' in version:
15485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      gl_versions = version['gl_versions']
15495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      version_cond = ' || '.join(['ver->is_%s' % gl for gl in gl_versions])
15505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      conditions.append(WrapOr(version_cond))
15515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if 'extensions' in version and version['extensions']:
15525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ext_cond = ' || '.join(['ext.b_%s' % e for e in version['extensions']])
15535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      conditions.append(WrapOr(ext_cond))
15545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return ' && '.join(conditions)
15555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def WriteConditionalFuncBinding(file, func):
15575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # Functions with only one version are always bound unconditionally
15585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    assert len(func['versions']) > 1
15595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    known_as = func['known_as']
15605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    i = 0
15615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    first_version = True
15625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    while i < len(func['versions']):
15635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      version = func['versions'][i]
15645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      cond = VersionCondition(version)
15655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      combined_conditions = [WrapAnd(cond)]
15665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      last_version = i + 1 == len(func['versions'])
15675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      while not last_version and \
15685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          func['versions'][i + 1]['name'] == version['name']:
15695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        i += 1
15705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        combinable_cond = VersionCondition(func['versions'][i])
15715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        combined_conditions.append(WrapAnd(combinable_cond))
15725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        last_version = i + 1 == len(func['versions'])
15735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if len(combined_conditions) > 1:
15745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if [1 for cond in combined_conditions if cond == '']:
15755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          cond = ''
15765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        else:
15775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          cond = ' || '.join(combined_conditions)
15785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # Don't make the last possible binding conditional on anything else but
15795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # that the function isn't already bound to avoid verbose specification
15805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # of functions which have both ARB and core versions with the same name,
15815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # and to be able to bind to mock extension functions in unit tests which
15825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # call InitializeDynamicGLBindings with a stub context that doesn't have
15835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # extensions in its extension string.
15845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # TODO(oetuaho@nvidia.com): Get rid of the fallback.
15855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # http://crbug.com/325668
15865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if cond != '' and not last_version:
15875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if not first_version:
15885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          file.write('  if (!fn.%sFn && (%s))\n  ' % (known_as, cond))
15895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        else:
15905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          file.write('  if (%s)\n  ' % cond)
15915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      elif not first_version:
15925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        file.write('  if (!fn.%sFn)\n  ' % known_as)
15935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      WriteFuncBinding(file, known_as, version['name'])
15945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      i += 1
15955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      first_version = False
15965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
15975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for func in functions:
15985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    unique_names = set([version['name'] for version in func['versions']])
15995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if len(unique_names) > 1:
16005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('\n')
16015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('  fn.%sFn = 0;\n' % func['known_as'])
16025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('  debug_fn.%sFn = 0;\n' % func['known_as'])
16035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      WriteConditionalFuncBinding(file, func)
16045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
16055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # Some new function pointers have been added, so update them in debug bindings
16065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write('\n')
16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  if (g_debugBindingsInitialized)\n')
16085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write('    InitializeDebugBindings();\n')
16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write logging wrappers for each function.
16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('extern "C" {\n')
16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return_type = func['return_type']
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    arguments = func['arguments']
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('\n')
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('static %s GL_BINDING_CALL Debug_%s(%s) {\n' %
16195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (return_type, func['known_as'], arguments))
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument_names = re.sub(
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', arguments)
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument_names = re.sub(
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', argument_names)
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'const char\* ([a-zA-Z0-9_]+)', r'CONSTCHAR_\1', arguments)
16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\* ([a-zA-Z0-9_]+)',
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'CONSTVOID_\2', log_argument_names)
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(?<!E)GLenum ([a-zA-Z0-9_]+)', r'GLenum_\1', log_argument_names)
16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(?<!E)GLboolean ([a-zA-Z0-9_]+)', r'GLboolean_\1', log_argument_names)
16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2',
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2',
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'CONSTVOID_([a-zA-Z0-9_]+)',
16415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        r'static_cast<const void*>(\1)', log_argument_names)
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        r'CONSTCHAR_([a-zA-Z0-9_]+)', r'\1', log_argument_names)
16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'GLenum_([a-zA-Z0-9_]+)', r'GLES2Util::GetStringEnum(\1)',
16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'GLboolean_([a-zA-Z0-9_]+)', r'GLES2Util::GetStringBool(\1)',
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = log_argument_names.replace(',', ' << ", " <<')
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if argument_names == 'void' or argument_names == '':
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      argument_names = ''
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      log_argument_names = ''
16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      log_argument_names = " << " + log_argument_names
16565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    function_name = func['known_as']
16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if return_type == 'void':
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  GL_SERVICE_LOG("%s" << "(" %s << ")");\n' %
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, log_argument_names))
16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  g_driver_%s.debug_fn.%sFn(%s);\n' %
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (set_name.lower(), function_name, argument_names))
16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if 'logging_code' in func:
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write("%s\n" % func['logging_code'])
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  GL_SERVICE_LOG("%s" << "(" %s << ")");\n' %
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, log_argument_names))
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  %s result = g_driver_%s.debug_fn.%sFn(%s);\n' %
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (return_type, set_name.lower(), function_name, argument_names))
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if 'logging_code' in func:
16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write("%s\n" % func['logging_code'])
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else:
16725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        file.write('  GL_SERVICE_LOG("GL_RESULT: " << result);\n')
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  return result;\n')
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('}\n')
16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}  // extern "C"\n')
16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to initialize the debug function pointers.
16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('void Driver%s::InitializeDebugBindings() {\n' %
16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             set_name.upper())
16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
16825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    first_name = func['known_as']
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  if (!debug_fn.%sFn) {\n' % first_name)
16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('    debug_fn.%sFn = fn.%sFn;\n' % (first_name, first_name))
16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('    fn.%sFn = Debug_%s;\n' % (first_name, first_name))
16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  }\n')
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  g_debugBindingsInitialized = true;\n')
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to clear all function pointers.
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("""void Driver%s::ClearBindings() {
16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  memset(this, 0, sizeof(*this));
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % set_name.upper())
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1697e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  def MakeArgNames(arguments):
1698e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    argument_names = re.sub(
1699e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', arguments)
1700e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    argument_names = re.sub(
1701e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', argument_names)
1702e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    if argument_names == 'void' or argument_names == '':
1703e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      argument_names = ''
1704e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    return argument_names
1705e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
17062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write GLApiBase functions
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
17085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    function_name = func['known_as']
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return_type = func['return_type']
17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    arguments = func['arguments']
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('\n')
17122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('%s %sApiBase::%sFn(%s) {\n' %
17135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (return_type, set_name.upper(), function_name, arguments))
1714e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    argument_names = MakeArgNames(arguments)
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if return_type == 'void':
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  driver_->fn.%sFn(%s);\n' %
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  return driver_->fn.%sFn(%s);\n' %
17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('}\n')
17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write TraceGLApi functions
17242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for func in functions:
17255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    function_name = func['known_as']
17262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return_type = func['return_type']
17272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    arguments = func['arguments']
17282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('\n')
17292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('%s Trace%sApi::%sFn(%s) {\n' %
17305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (return_type, set_name.upper(), function_name, arguments))
1731e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    argument_names = MakeArgNames(arguments)
17322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::%s")\n' %
17332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               function_name)
17342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if return_type == 'void':
17352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      file.write('  %s_api_->%sFn(%s);\n' %
17362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          (set_name.lower(), function_name, argument_names))
17372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    else:
17382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      file.write('  return %s_api_->%sFn(%s);\n' %
17392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          (set_name.lower(), function_name, argument_names))
17402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('}\n')
17412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  # Write NoContextGLApi functions
1743e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  if set_name.upper() == "GL":
1744e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    for func in functions:
1745e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      function_name = func['known_as']
1746e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      return_type = func['return_type']
1747e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      arguments = func['arguments']
1748e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      file.write('\n')
1749e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      file.write('%s NoContextGLApi::%sFn(%s) {\n' %
1750e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch          (return_type, function_name, arguments))
1751e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      argument_names = MakeArgNames(arguments)
1752e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      no_context_error = "Trying to call %s() without current GL context" % function_name
1753e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      file.write('  NOTREACHED() <<  "%s";\n' % no_context_error)
1754e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      file.write('  LOG(ERROR) <<  "%s";\n' % no_context_error)
1755e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      default_value = { 'GLenum': 'static_cast<GLenum>(0)',
1756e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLuint': '0U',
1757e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLint': '0',
1758e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLboolean': 'GL_FALSE',
1759e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLbyte': '0',
1760e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLubyte': '0',
1761e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLbutfield': '0',
1762e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLushort': '0',
1763e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLsizei': '0',
1764e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLfloat': '0.0f',
1765e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLdouble': '0.0',
1766e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                        'GLsync': 'NULL'}
1767e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      if return_type.endswith('*'):
1768e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        file.write('  return NULL;\n')
1769e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      elif return_type != 'void':
1770e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        file.write('  return %s;\n' % default_value[return_type])
1771e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      file.write('}\n')
1772e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}  // namespace gfx\n')
17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def GetUniquelyNamedFunctions(functions):
17785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  uniquely_named_functions = {}
17795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
17805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for func in functions:
17815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    for version in func['versions']:
17825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      uniquely_named_functions[version['name']] = ({
17835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'name': version['name'],
17845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'return_type': func['return_type'],
17855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'arguments': func['arguments'],
17865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'known_as': func['known_as']
17875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      })
17885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return uniquely_named_functions
17895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
17905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
17915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def GenerateMockBindingsHeader(file, functions):
17925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  """Headers for functions that invoke MockGLInterface members"""
17935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
17945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write(
17955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)"""// Copyright (c) 2014 The Chromium Authors. All rights reserved.
17965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
17975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
17985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
17995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This file is automatically generated.
18005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)""")
18025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  uniquely_named_functions = GetUniquelyNamedFunctions(functions)
18035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for key in sorted(uniquely_named_functions.iterkeys()):
18055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    func = uniquely_named_functions[key]
18065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('static %s GL_BINDING_CALL Mock_%s(%s);\n' %
18075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (func['return_type'], func['name'], func['arguments']))
18085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def GenerateMockBindingsSource(file, functions):
18115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  """Generates functions that invoke MockGLInterface members and a
18125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GetGLProcAddress function that returns addresses to those functions."""
18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2011 The Chromium Authors. All rights reserved.
18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gl/gl_mock.h"
18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
18265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This is called mainly to prevent the compiler combining the code of mock
18285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// functions with identical contents, so that their function pointers will be
18295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// different.
18305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MakeFunctionUnique(const char *func_name) {
18315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    VLOG(2) << "Calling mock " << func_name;
18325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
18335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""")
18355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # Write functions that trampoline into the set MockGLInterface instance.
18365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  uniquely_named_functions = GetUniquelyNamedFunctions(functions)
18375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sorted_function_names = sorted(uniquely_named_functions.iterkeys())
18385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
18395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for key in sorted_function_names:
18405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    func = uniquely_named_functions[key]
18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('\n')
18425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('%s GL_BINDING_CALL MockGLInterface::Mock_%s(%s) {\n' %
18435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        (func['return_type'], func['name'], func['arguments']))
18445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('  MakeFunctionUnique("%s");\n' % func['name'])
18455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    arg_re = r'(const )?[a-zA-Z0-9]+((\s*const\s*)?\*)* ([a-zA-Z0-9]+)'
18465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    argument_names = re.sub(arg_re, r'\4', func['arguments'])
18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if argument_names == 'void':
18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      argument_names = ''
18495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    function_name = func['known_as'][2:]
18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if func['return_type'] == 'void':
18515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('  interface_->%s(%s);\n' %
18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
18545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      file.write('  return interface_->%s(%s);\n' %
18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('}\n')
18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write an 'invalid' function to catch code calling through uninitialized
18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # function pointers or trying to interpret the return value of
18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # GLProcAddress().
18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('static void MockInvalidFunction() {\n')
18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  NOTREACHED();\n')
18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write a function to lookup a mock GL function based on its name.
18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
18685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write('void* GL_BINDING_CALL ' +
18695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      'MockGLInterface::GetGLProcAddress(const char* name) {\n')
18705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for key in sorted_function_names:
18715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    name = uniquely_named_functions[key]['name']
18725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('  if (strcmp(name, "%s") == 0)\n' % name)
18735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    file.write('    return reinterpret_cast<void*>(Mock_%s);\n' % name)
18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Always return a non-NULL pointer like some EGL implementations do.
18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  return reinterpret_cast<void*>(&MockInvalidFunction);\n')
18765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  file.write('}\n')
18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}  // namespace gfx\n')
18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ParseExtensionFunctionsFromHeader(header_file):
18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Parse a C extension header file and return a map from extension names to
18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  a list of functions.
18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file: Line-iterable C header file.
18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Map of extension name => functions.
18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
18912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extension_start = re.compile(
18922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      r'#ifndef ((?:GL|EGL|WGL|GLX)_[A-Z]+_[a-zA-Z]\w+)')
18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extension_function = re.compile(r'.+\s+([a-z]+\w+)\s*\(')
18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef = re.compile(r'typedef .*')
18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  macro_start = re.compile(r'^#(if|ifdef|ifndef).*')
18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  macro_end = re.compile(r'^#endif.*')
18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  macro_depth = 0
18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current_extension = None
18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current_extension_depth = 0
19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions = collections.defaultdict(lambda: [])
19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for line in header_file:
19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if macro_start.match(line):
19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      macro_depth += 1
19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    elif macro_end.match(line):
19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      macro_depth -= 1
19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if macro_depth < current_extension_depth:
19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        current_extension = None
19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = extension_start.match(line)
19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_extension = match.group(1)
19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_extension_depth = macro_depth
19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      assert current_extension not in extensions, \
19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "Duplicate extension: " + current_extension
19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = extension_function.match(line)
19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match and current_extension and not typedef.match(line):
19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extensions[current_extension].append(match.group(1))
19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return extensions
19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetExtensionFunctions(extension_headers):
19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Parse extension functions from a list of header files.
19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extension_headers: List of header file names.
19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Map of extension name => list of functions.
19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions = {}
19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for header in extension_headers:
19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions.update(ParseExtensionFunctionsFromHeader(open(header)))
19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return extensions
19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetFunctionToExtensionMap(extensions):
19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Construct map from a function names to extensions which define the
19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function.
19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions: Map of extension name => functions.
19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Map of function name => extension name.
19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function_to_extensions = {}
19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for extension, functions in extensions.items():
19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for function in functions:
19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if not function in function_to_extensions:
19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        function_to_extensions[function] = []
19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      function_to_extensions[function].append(extension)
19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return function_to_extensions
19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def LooksLikeExtensionFunction(function):
19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Heuristic to see if a function name is consistent with extension function
19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  naming."""
19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  vendor = re.match(r'\w+?([A-Z][A-Z]+)$', function)
19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return vendor is not None and not vendor.group(1) in ['GL', 'API', 'DC']
19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def FillExtensionsFromHeaders(functions, extension_headers, extra_extensions):
19605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  """Determine which functions belong to extensions based on extension headers,
19615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  and fill in this information to the functions table for functions that don't
19625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  already have the information.
19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
19655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    functions: List of (return type, function versions, arguments).
19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extension_headers: List of header file names.
19675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    extra_extensions: Extensions to add to the list.
19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
19695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Set of used extensions.
19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Parse known extensions.
19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions = GetExtensionFunctions(extension_headers)
19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  functions_to_extensions = GetFunctionToExtensionMap(extensions)
19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  # Fill in the extension information.
19765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  used_extensions = set()
19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
19785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    for version in func['versions']:
19795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      name = version['name']
19805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # Make sure we know about all extensions and extension functions.
19815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if 'extensions' in version:
19825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        used_extensions.update(version['extensions'])
19835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      elif name in functions_to_extensions:
19845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # If there are multiple versions with the same name, assume that they
19855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # already have all the correct conditions, we can't just blindly add
19865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # the same extension conditions to all of them
19875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if len([v for v in func['versions'] if v['name'] == name]) == 1:
19885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          version['extensions'] = functions_to_extensions[name]
19895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          used_extensions.update(version['extensions'])
19905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      elif LooksLikeExtensionFunction(name):
19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        raise RuntimeError('%s looks like an extension function but does not '
19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'belong to any of the known extensions.' % name)
19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Add extensions that do not have any functions.
19955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  used_extensions.update(extra_extensions)
19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return used_extensions
19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def ResolveHeader(header, header_paths):
20012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  paths = header_paths.split(':')
20022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for path in paths:
20042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    result = os.path.join(path, header)
20052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if not os.path.isabs(path):
200646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      result = os.path.relpath(os.path.join(os.getcwd(), result), os.getcwd())
20072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if os.path.exists(result):
20082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # Always use forward slashes as path separators. Otherwise backslashes
20092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # may be incorrectly interpreted as escape characters.
20102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return result.replace(os.path.sep, '/')
20112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  raise Exception('Header %s not found.' % header)
20132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main(argv):
20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """This is the main function."""
20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser = optparse.OptionParser()
20192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser.add_option('--inputs', action='store_true')
20202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser.add_option('--header-paths')
20212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  options, args = parser.parse_args(argv)
20232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if options.inputs:
2025a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    for [_, _, headers, _] in FUNCTION_SETS:
20262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for header in headers:
20272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        print ResolveHeader(header, options.header_paths)
20282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0
20292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  directory = '.'
20312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if len(args) >= 1:
20325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    directory = args[0]
20335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2034a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  for [functions, set_name, extension_headers, extensions] in FUNCTION_SETS:
20355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # Function names can be specified in two ways (list of unique names or list
20365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # of versions with different binding conditions). Fill in the data to the
20375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # versions list in case it is missing, so that can be used from here on:
2038a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    for func in functions:
20395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      assert 'versions' in func or 'names' in func, 'Function with no names'
20405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if 'versions' not in func:
20415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        func['versions'] = [{'name': n} for n in func['names']]
20425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # Use the first version's name unless otherwise specified
20435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if 'known_as' not in func:
20445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        func['known_as'] = func['versions'][0]['name']
20455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      # Make sure that 'names' is not accidentally used instead of 'versions'
20465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if 'names' in func:
20475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        del func['names']
20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    extension_headers = [ResolveHeader(h, options.header_paths)
20502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         for h in extension_headers]
20515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    used_extensions = FillExtensionsFromHeaders(
20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        functions, extension_headers, extensions)
20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file = open(
20555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        os.path.join(directory, 'gl_bindings_autogen_%s.h' % set_name), 'wb')
20565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GenerateHeader(header_file, functions, set_name, used_extensions)
20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file.close()
20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file = open(
20605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        os.path.join(directory, 'gl_bindings_api_autogen_%s.h' % set_name),
20615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'wb')
20625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GenerateAPIHeader(header_file, functions, set_name)
20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file.close()
20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    source_file = open(
20665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        os.path.join(directory, 'gl_bindings_autogen_%s.cc' % set_name), 'wb')
2067a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    GenerateSource(source_file, functions, set_name, used_extensions)
20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    source_file.close()
20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  header_file = open(
20715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      os.path.join(directory, 'gl_mock_autogen_gl.h'), 'wb')
20725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GenerateMockHeader(header_file, GL_FUNCTIONS, 'gl')
20735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  header_file.close()
20742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  header_file = open(os.path.join(directory, 'gl_bindings_autogen_mock.h'),
20765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     'wb')
20775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GenerateMockBindingsHeader(header_file, GL_FUNCTIONS)
20785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  header_file.close()
20792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  source_file = open(os.path.join(directory, 'gl_bindings_autogen_mock.cc'),
20815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     'wb')
20825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GenerateMockBindingsSource(source_file, GL_FUNCTIONS)
20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  source_file.close()
20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0
20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(main(sys.argv[1:]))
2089