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)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GL_FUNCTIONS = [
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glActiveTexture'],
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum texture', },
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glAttachShader'],
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint shader', },
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBeginQuery'],
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint id', },
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBeginQueryARB', 'glBeginQueryEXT'],
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint id', },
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindAttribLocation'],
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint index, const char* name', },
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindBuffer'],
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint buffer', },
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindFragDataLocation'],
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint colorNumber, const char* name', },
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindFragDataLocationIndexed'],
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLuint colorNumber, GLuint index, const char* name', },
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindFramebufferEXT', 'glBindFramebuffer'],
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint framebuffer', },
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindRenderbufferEXT', 'glBindRenderbuffer'],
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint renderbuffer', },
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindTexture'],
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLuint texture', },
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendColor'],
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendEquation'],
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': ' GLenum mode ', },
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendEquationSeparate'],
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum modeRGB, GLenum modeAlpha', },
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendFunc'],
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum sfactor, GLenum dfactor', },
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlendFuncSeparate'],
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha', },
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlitFramebufferEXT', 'glBlitFramebuffer'],
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLbitfield mask, GLenum filter', },
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBlitFramebufferANGLE', 'glBlitFramebuffer'],
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLbitfield mask, GLenum filter', },
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBufferData'],
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei size, const void* data, GLenum usage', },
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBufferSubData'],
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLint offset, GLsizei size, const void* data', },
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLenum',
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCheckFramebufferStatusEXT',
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glCheckFramebufferStatus'],
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target',
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'logging_code': """
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GL_SERVICE_LOG("GL_RESULT: " << GLES2Util::GetStringEnum(result));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""", },
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClear'],
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLbitfield mask', },
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearColor'],
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearDepth'],
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampd depth', },
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearDepthf'],
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf depth', },
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glClearStencil'],
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint s', },
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glColorMask'],
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha', },
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCompileShader'],
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader', },
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCompressedTexImage2D'],
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLenum internalformat, GLsizei width, '
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei height, GLint border, GLsizei imageSize, const void* data', },
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCompressedTexSubImage2D'],
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, '
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'const void* data', },
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCopyTexImage2D'],
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, '
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei width, GLsizei height, GLint border', },
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCopyTexSubImage2D'],
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLint xoffset, '
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLuint',
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCreateProgram'],
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLuint',
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCreateShader'],
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum type', },
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glCullFace'],
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode', },
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteBuffersARB', 'glDeleteBuffers'],
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* buffers', },
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'],
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* framebuffers', },
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteProgram'],
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteQueries'],
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* ids', },
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteQueriesARB', 'glDeleteQueriesEXT'],
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* ids', },
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'],
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* renderbuffers', },
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteShader'],
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader', },
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteTextures'],
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* textures', },
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthFunc'],
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum func', },
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthMask'],
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLboolean flag', },
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthRange'],
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampd zNear, GLclampd zFar', },
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDepthRangef'],
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf zNear, GLclampf zFar', },
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDetachShader'],
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLuint shader', },
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDisable'],
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum cap', },
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDisableVertexAttribArray'],
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index', },
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawArrays'],
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode, GLint first, GLsizei count', },
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawBuffer'],
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode', },
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['glDrawBuffersARB', 'glDrawBuffersEXT'],
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLenum* bufs', },
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawElements'],
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum mode, GLsizei count, GLenum type, const void* indices', },
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEGLImageTargetTexture2DOES'],
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLeglImageOES image', },
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEGLImageTargetRenderbufferStorageOES'],
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLeglImageOES image', },
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEnable'],
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum cap', },
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEnableVertexAttribArray'],
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index', },
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEndQuery'],
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glEndQueryARB', 'glEndQueryEXT'],
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFinish'],
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFlush'],
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'],
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': \
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLenum attachment, GLenum renderbuffertarget, '
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint renderbuffer', },
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFramebufferTexture2DEXT', 'glFramebufferTexture2D'],
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint level', },
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'names': ['glFramebufferTexture2DMultisampleEXT'],
2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'arguments':
2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLint level, GLsizei samples', },
2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 'return_type': 'void',
2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'names': ['glFramebufferTexture2DMultisampleIMG'],
2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'arguments':
2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      'GLint level, GLsizei samples', },
2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 'return_type': 'void',
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFrontFace'],
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode', },
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenBuffersARB', 'glGenBuffers'],
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* buffers', },
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenQueries'],
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* ids', },
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenQueriesARB', 'glGenQueriesEXT'],
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* ids', },
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenerateMipmapEXT', 'glGenerateMipmap'],
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'],
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* framebuffers', },
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'],
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* renderbuffers', },
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenTextures'],
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* textures', },
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetActiveAttrib'],
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint* size, GLenum* type, char* name', },
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetActiveUniform'],
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLint* size, GLenum* type, char* name', },
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetAttachedShaders'],
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders', },
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLint',
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetAttribLocation'],
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, const char* name', },
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetBooleanv'],
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLboolean* params', },
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetBufferParameteriv'],
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLenum',
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetError'],
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void',
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'logging_code': """
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GL_SERVICE_LOG("GL_RESULT: " << GLES2Util::GetStringError(result));
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""", },
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetFloatv'],
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLfloat* params', },
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetFramebufferAttachmentParameterivEXT',
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glGetFramebufferAttachmentParameteriv'],
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, '
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLenum attachment, GLenum pname, GLint* params', },
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLenum',
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetGraphicsResetStatusARB',
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glGetGraphicsResetStatusEXT'],
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetIntegerv'],
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLint* params', },
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetProgramBinary', 'glGetProgramBinaryOES'],
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLsizei bufSize, GLsizei* length, '
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLenum* binaryFormat, GLvoid* binary',
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['ARB_get_program_binary',
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'OES_get_program_binary'] },
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetProgramiv'],
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLenum pname, GLint* params', },
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetProgramInfoLog'],
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint program, GLsizei bufsize, GLsizei* length, char* infolog', },
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryiv'],
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryivARB', 'glGetQueryivEXT'],
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjecti64v'],
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLint64* params', },
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjectiv'],
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLint* params', },
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjectui64v'],
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLuint64* params', },
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjectuiv'],
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLuint* params', },
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetQueryObjectuivARB', 'glGetQueryObjectuivEXT'],
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum pname, GLuint* params', },
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'],
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderiv'],
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader, GLenum pname, GLint* params', },
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderInfoLog'],
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog', },
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderPrecisionFormat'],
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum shadertype, GLenum precisiontype, '
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLint* range, GLint* precision', },
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetShaderSource'],
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const GLubyte*',
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetString'],
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum name', },
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexLevelParameterfv'],
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLint level, GLenum pname, GLfloat* params', },
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexLevelParameteriv'],
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLint level, GLenum pname, GLint* params', },
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexParameterfv'],
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLfloat* params', },
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTexParameteriv'],
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint* params', },
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetTranslatedShaderSourceANGLE'],
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetUniformfv'],
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLint location, GLfloat* params', },
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetUniformiv'],
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLint location, GLint* params', },
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLint',
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetUniformLocation'],
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, const char* name', },
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetVertexAttribfv'],
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index, GLenum pname, GLfloat* params', },
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetVertexAttribiv'],
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index, GLenum pname, GLint* params', },
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetVertexAttribPointerv'],
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint index, GLenum pname, void** pointer', },
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glHint'],
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum mode', },
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsBuffer'],
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint buffer', },
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsEnabled'],
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum cap', },
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsFramebufferEXT', 'glIsFramebuffer'],
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint framebuffer', },
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsProgram'],
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsQueryARB', 'glIsQueryEXT'],
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint query', },
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsRenderbufferEXT', 'glIsRenderbuffer'],
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint renderbuffer', },
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsShader'],
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint shader', },
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsTexture'],
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint texture', },
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glLineWidth'],
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLfloat width', },
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glLinkProgram'],
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void*',
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glMapBuffer', 'glMapBufferOES'],
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum access', },
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glPixelStorei'],
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLint param', },
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glPointParameteri'],
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum pname, GLint param', },
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glPolygonOffset'],
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLfloat factor, GLfloat units', },
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glProgramBinary', 'glProgramBinaryOES'],
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLenum binaryFormat, '
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const GLvoid* binary, GLsizei length',
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['ARB_get_program_binary',
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'OES_get_program_binary'] },
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glProgramParameteri'],
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program, GLenum pname, GLint value',
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['ARB_get_program_binary'] },
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glQueryCounter'],
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint id, GLenum target', },
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glReadBuffer'],
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum src', },
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glReadPixels'],
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, '
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLenum type, void* pixels', },
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glReleaseShaderCompiler'],
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glRenderbufferStorageMultisampleEXT',
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glRenderbufferStorageMultisample'],
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei width, GLsizei height', },
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glRenderbufferStorageMultisampleANGLE',
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glRenderbufferStorageMultisample'],
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei width, GLsizei height', },
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'names': ['glRenderbufferStorageMultisampleIMG'],
4807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
4817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch               'GLsizei width, GLsizei height', },
4827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 'return_type': 'void',
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glRenderbufferStorageEXT', 'glRenderbufferStorage'],
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLenum internalformat, GLsizei width, GLsizei height', },
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glSampleCoverage'],
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLclampf value, GLboolean invert', },
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glScissor'],
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glShaderBinary'],
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* shaders, GLenum binaryformat, '
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const void* binary, GLsizei length', },
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glShaderSource'],
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLuint shader, GLsizei count, const char* const* str, const GLint* length',
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'logging_code': """
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GL_SERVICE_LOG_CODE_BLOCK({
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (GLsizei ii = 0; ii < count; ++ii) {
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (str[ii]) {
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (length && length[ii] >= 0) {
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          std::string source(str[ii], length[ii]);
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          GL_SERVICE_LOG("  " << ii << ": ---\\n" << source << "\\n---");
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          GL_SERVICE_LOG("  " << ii << ": ---\\n" << str[ii] << "\\n---");
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GL_SERVICE_LOG("  " << ii << ": NULL");
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""", },
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilFunc'],
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum func, GLint ref, GLuint mask', },
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilFuncSeparate'],
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum face, GLenum func, GLint ref, GLuint mask', },
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilMask'],
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint mask', },
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilMaskSeparate'],
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum face, GLuint mask', },
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilOp'],
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum fail, GLenum zfail, GLenum zpass', },
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glStencilOpSeparate'],
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum face, GLenum fail, GLenum zfail, GLenum zpass', },
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexImage2D'],
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum target, GLint level, GLint internalformat, GLsizei width, '
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei height, GLint border, GLenum format, GLenum type, '
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const void* pixels', },
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameterf'],
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLfloat param', },
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameterfv'],
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, const GLfloat* params', },
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameteri'],
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, GLint param', },
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexParameteriv'],
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLenum pname, const GLint* params', },
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexStorage2DEXT'],
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target, GLsizei levels, GLenum internalformat, '
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei width, GLsizei height', },
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTexSubImage2D'],
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'GLsizei width, GLsizei height, GLenum format, GLenum type, '
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     'const void* pixels', },
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1f'],
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x', },
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1fv'],
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1i'],
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x', },
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform1iv'],
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2f'],
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x, GLfloat y', },
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2fv'],
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2i'],
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x, GLint y', },
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform2iv'],
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3f'],
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x, GLfloat y, GLfloat z', },
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3fv'],
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3i'],
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x, GLint y, GLint z', },
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform3iv'],
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4f'],
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w', },
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4fv'],
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4i'],
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLint x, GLint y, GLint z, GLint w', },
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniform4iv'],
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, const GLint* v', },
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniformMatrix2fv'],
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, '
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLboolean transpose, const GLfloat* value', },
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniformMatrix3fv'],
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, '
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLboolean transpose, const GLfloat* value', },
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUniformMatrix4fv'],
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint location, GLsizei count, '
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLboolean transpose, const GLfloat* value', },
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUnmapBuffer', 'glUnmapBufferOES'],
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum target', },
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glUseProgram'],
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glValidateProgram'],
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint program', },
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib1f'],
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x', },
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib1fv'],
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib2f'],
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x, GLfloat y', },
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib2fv'],
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib3f'],
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x, GLfloat y, GLfloat z', },
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib3fv'],
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib4f'],
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w', },
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttrib4fv'],
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, const GLfloat* values', },
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttribPointer'],
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint indx, GLint size, GLenum type, GLboolean normalized, '
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei stride, const void* ptr', },
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glViewport'],
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenFencesNV'],
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* fences', },
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteFencesNV'],
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* fences', },
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glSetFenceNV'],
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence, GLenum condition', },
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glTestFenceNV'],
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence', },
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFinishFenceNV'],
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence', },
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsFenceNV'],
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence', },
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetFenceivNV'],
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint fence, GLenum pname, GLint* params', },
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLsync',
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glFenceSync'],
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum condition, GLbitfield flags', },
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteSync'],
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsync sync', },
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGetSynciv'],
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length,'
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GLint* values', },
694558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch{ 'return_type': 'GLenum',
695eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  'names': ['glClientWaitSync'],
696eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  'arguments':
697eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'GLsync sync, GLbitfield flags, GLuint64 timeout', },
698eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch{ 'return_type': 'void',
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawArraysInstancedANGLE', 'glDrawArraysInstancedARB'],
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum mode, GLint first, GLsizei count, GLsizei primcount', },
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDrawElementsInstancedANGLE', 'glDrawElementsInstancedARB'],
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum mode, GLsizei count, GLenum type, const void* indices, '
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLsizei primcount', },
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glVertexAttribDivisorANGLE', 'glVertexAttribDivisorARB'],
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLuint index, GLuint divisor', },
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glGenVertexArraysOES',
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glGenVertexArraysAPPLE',
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glGenVertexArrays'],
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, GLuint* arrays',
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['OES_vertex_array_object',
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'APPLE_vertex_array_object',
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'ARB_vertex_array_object'] },
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glDeleteVertexArraysOES',
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glDeleteVertexArraysAPPLE',
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glDeleteVertexArrays'],
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLsizei n, const GLuint* arrays',
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['OES_vertex_array_object',
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'APPLE_vertex_array_object',
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'ARB_vertex_array_object'] },
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glBindVertexArrayOES',
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glBindVertexArrayAPPLE',
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glBindVertexArray'],
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint array',
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['OES_vertex_array_object',
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'APPLE_vertex_array_object',
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'ARB_vertex_array_object'] },
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glIsVertexArrayOES',
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glIsVertexArrayAPPLE',
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'glIsVertexArray'],
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLuint array',
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['OES_vertex_array_object',
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'APPLE_vertex_array_object',
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       'ARB_vertex_array_object'] },
7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'void',
7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['glDiscardFramebufferEXT'],
7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'GLenum target, GLsizei numAttachments, '
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'const GLenum* attachments' },
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSMESA_FUNCTIONS = [
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMesaContext',
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaCreateContext'],
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLenum format, OSMesaContext sharelist', },
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMesaContext',
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaCreateContextExt'],
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, '
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'OSMesaContext sharelist', },
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaDestroyContext'],
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'OSMesaContext ctx', },
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaMakeCurrent'],
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'OSMesaContext ctx, void* buffer, GLenum type, GLsizei width, '
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLsizei height', },
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMesaContext',
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetCurrentContext'],
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaPixelStore'],
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint pname, GLint value', },
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetIntegerv'],
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLint pname, GLint* value', },
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetDepthBuffer'],
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'OSMesaContext c, GLint* width, GLint* height, GLint* bytesPerValue, '
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'void** buffer', },
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLboolean',
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetColorBuffer'],
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'OSMesaContext c, GLint* width, GLint* height, GLint* format, '
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'void** buffer', },
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'OSMESAproc',
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaGetProcAddress'],
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'const char* funcName', },
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['OSMesaColorClamp'],
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'GLboolean enable', },
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EGL_FUNCTIONS = [
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLint',
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetError'],
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLDisplay',
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetDisplay'],
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLNativeDisplayType display_id', },
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglInitialize'],
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLint* major, EGLint* minor', },
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglTerminate'],
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy', },
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQueryString'],
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLint name', },
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetConfigs'],
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig* configs, EGLint config_size, '
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'EGLint* num_config', },
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglChooseConfig'],
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, '
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'EGLint config_size, EGLint* num_config', },
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetConfigAttrib'],
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value', },
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLImageKHR',
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreateImageKHR'],
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, '
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const EGLint* attrib_list',
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['EGL_KHR_image_base'] },
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglDestroyImageKHR'],
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLImageKHR image',
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'other_extensions': ['EGL_KHR_image_base'] },
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreateWindowSurface'],
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, '
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const EGLint* attrib_list', },
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreatePbufferSurface'],
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, const EGLint* attrib_list', },
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreatePixmapSurface'],
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, '
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const EGLint* attrib_list', },
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglDestroySurface'],
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface', },
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQuerySurface'],
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint* value', },
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglBindAPI'],
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLenum api', },
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLenum',
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQueryAPI'],
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglWaitClient'],
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglReleaseThread'],
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreatePbufferFromClientBuffer'],
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLenum buftype, void* buffer, EGLConfig config, '
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const EGLint* attrib_list', },
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglSurfaceAttrib'],
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value', },
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglBindTexImage'],
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint buffer', },
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglReleaseTexImage'],
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint buffer', },
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglSwapInterval'],
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLint interval', },
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLContext',
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCreateContext'],
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLConfig config, EGLContext share_context, '
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              'const EGLint* attrib_list', },
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglDestroyContext'],
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLContext ctx', },
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglMakeCurrent'],
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx', },
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLContext',
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetCurrentContext'],
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLSurface',
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetCurrentSurface'],
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLint readdraw', },
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLDisplay',
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetCurrentDisplay'],
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQueryContext'],
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint* value', },
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglWaitGL'],
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglWaitNative'],
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLint engine', },
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglSwapBuffers'],
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface', },
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglCopyBuffers'],
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target', },
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': '__eglMustCastToProperFunctionPointerType',
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglGetProcAddress'],
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'const char* procname', },
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglPostSubBufferNV'],
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSurface surface, '
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'EGLint x, EGLint y, EGLint width, EGLint height', },
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'EGLBoolean',
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['eglQuerySurfacePointerANGLE'],
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, EGLint attribute, void** value', },
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLSyncKHR',
9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['eglCreateSyncKHR'],
9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLenum type, const EGLint* attrib_list',
9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'other_extensions': ['EGL_KHR_fence_sync'] },
9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLint',
9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['eglClientWaitSyncKHR'],
9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, '
9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLTimeKHR timeout',
9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'other_extensions': ['EGL_KHR_fence_sync'] },
9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLBoolean',
9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['eglGetSyncAttribKHR'],
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, '
9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLint* value',
9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'other_extensions': ['EGL_KHR_fence_sync'] },
9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLBoolean',
9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['eglDestroySyncKHR'],
9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments': 'EGLDisplay dpy, EGLSyncKHR sync',
9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'other_extensions': ['EGL_KHR_fence_sync'] },
9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 'return_type': 'EGLBoolean',
9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'names': ['eglGetSyncValuesCHROMIUM'],
9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  'arguments':
9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLDisplay dpy, EGLSurface surface, '
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLuint64CHROMIUM* ust, EGLuint64CHROMIUM* msc, '
9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGLuint64CHROMIUM* sbc', },
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WGL_FUNCTIONS = [
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HGLRC',
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCreateContext'],
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc', },
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HGLRC',
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCreateLayerContext'],
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc, int iLayerPlane', },
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCopyContext'],
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask', },
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglDeleteContext'],
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HGLRC hglrc', },
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HGLRC',
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetCurrentContext'],
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': '', },
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HDC',
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetCurrentDC'],
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': '', },
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglMakeCurrent'],
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc, HGLRC hglrc', },
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglShareLists'],
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HGLRC hglrc1, HGLRC hglrc2', },
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglSwapIntervalEXT'],
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'int interval', },
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglSwapLayerBuffers'],
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hdc, UINT fuPlanes', },
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetExtensionsStringARB'],
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hDC', },
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetExtensionsStringEXT'],
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': '', },
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglChoosePixelFormatARB'],
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'HDC dc, const int* int_attrib_list, const float* float_attrib_list, '
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'UINT max_formats, int* formats, UINT* num_formats', },
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HPBUFFERARB',
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglCreatePbufferARB'],
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HDC hDC, int iPixelFormat, int iWidth, int iHeight, '
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'const int* piAttribList', },
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'HDC',
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglGetPbufferDCARB'],
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer', },
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglReleasePbufferDCARB'],
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer, HDC hDC', },
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglDestroyPbufferARB'],
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer', },
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'BOOL',
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['wglQueryPbufferARB'],
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'HPBUFFERARB hPbuffer, int iAttribute, int* piValue', },
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLX_FUNCTIONS = [
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXWaitVideoSyncSGI'],
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'int divisor, int remainder, unsigned int* count', },
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'XVisualInfo*',
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXChooseVisual'],
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen, int* attribList', },
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCopySubBufferMESA'],
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, '
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'int x, int y, int width, int height', },
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateContext'],
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, XVisualInfo* vis, GLXContext shareList, int direct', },
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXBindTexImageEXT'],
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable drawable, int buffer, int* attribList', },
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXReleaseTexImageEXT'],
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, int buffer', },
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyContext'],
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXContext ctx', },
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXMakeCurrent'],
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, GLXContext ctx', },
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCopyContext'],
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXContext src, GLXContext dst, unsigned long mask', },
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSwapBuffers'],
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable', },
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXPixmap',
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateGLXPixmap'],
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, XVisualInfo* visual, Pixmap pixmap', },
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyGLXPixmap'],
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXPixmap pixmap', },
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryExtension'],
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int* errorb, int* event', },
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryVersion'],
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int* maj, int* min', },
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXIsDirect'],
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXContext ctx', },
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetConfig'],
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, XVisualInfo* visual, int attrib, int* value', },
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentContext'],
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXDrawable',
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentDrawable'],
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXWaitGL'],
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXWaitX'],
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXUseXFont'],
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Font font, int first, int count, int list', },
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryExtensionsString'],
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen', },
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryServerString'],
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen, int name', },
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'const char*',
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetClientString'],
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int name', },
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'Display*',
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentDisplay'],
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXFBConfig*',
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXChooseFBConfig'],
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, int screen, const int* attribList, int* nitems', },
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetFBConfigAttrib'],
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, int attribute, int* value', },
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXFBConfig*',
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetFBConfigs'],
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, int screen, int* nelements', },
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'XVisualInfo*',
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetVisualFromFBConfig'],
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config', },
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXWindow',
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateWindow'],
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXFBConfig config, Window win, const int* attribList', },
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyWindow'],
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXWindow window', },
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXPixmap',
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreatePixmap'],
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, '
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'Pixmap pixmap, const int* attribList', },
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyPixmap'],
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXPixmap pixmap', },
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXPbuffer',
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreatePbuffer'],
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, const int* attribList', },
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXDestroyPbuffer'],
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXPbuffer pbuf', },
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryDrawable'],
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable draw, int attribute, unsigned int* value', },
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateNewContext'],
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXFBConfig config, int renderType, '
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               'GLXContext shareList, int direct', },
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXMakeContextCurrent'],
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx', },
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXDrawable',
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetCurrentReadDrawable'],
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'void', },
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'int',
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXQueryContext'],
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXContext ctx, int attribute, int* value', },
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSelectEvent'],
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long mask', },
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetSelectedEvent'],
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSwapIntervalMESA'],
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'unsigned int interval', },
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'void',
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXSwapIntervalEXT'],
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, GLXDrawable drawable, int interval', },
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXFBConfig',
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetFBConfigFromVisualSGIX'],
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments': 'Display* dpy, XVisualInfo* visualInfo', },
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'GLXContext',
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXCreateContextAttribsARB'],
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXFBConfig config, GLXContext share_context, int direct, '
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'const int* attrib_list', },
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'bool',
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetSyncValuesOML'],
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable drawable, int64* ust, int64* msc, '
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'int64* sbc' },
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 'return_type': 'bool',
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'names': ['glXGetMscRateOML'],
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'arguments':
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'Display* dpy, GLXDrawable drawable, int32* numerator, '
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'int32* denominator' },
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FUNCTION_SETS = [
11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  [GL_FUNCTIONS, 'gl', [
11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GL/glext.h',
11762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLES2/gl2ext.h',
11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # Files below are Chromium-specific and shipped with Chromium sources.
11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GL/glextchromium.h',
11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLES2/gl2chromium.h',
11802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'GLES2/gl2extchromium.h'
11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ], []],
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  [OSMESA_FUNCTIONS, 'osmesa', [], []],
11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  [EGL_FUNCTIONS, 'egl', [
11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGL/eglext.h',
11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # Files below are Chromium-specific and shipped with Chromium sources.
11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      'EGL/eglextchromium.h',
11872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ],
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    [
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGL_ANGLE_d3d_share_handle_client_buffer',
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'EGL_ANGLE_surface_d3d_texture_2d_share_handle',
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ],
11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  [WGL_FUNCTIONS, 'wgl', ['GL/wglext.h'], []],
11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  [GLX_FUNCTIONS, 'glx', ['GL/glx.h', 'GL/glxext.h'], []],
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GenerateHeader(file, functions, set_name, used_extension_functions):
11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_bindings_autogen_x.h"""
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write file header.
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_GL_GL_BINDINGS_AUTOGEN_%(name)s_H_
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_GL_GL_BINDINGS_AUTOGEN_%(name)s_H_
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLContext;
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % {'name': set_name.upper()})
12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write typedefs for function pointer types. Always use the GL name for the
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # typedef.
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('typedef %s (GL_BINDING_CALL *%sProc)(%s);\n' %
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (func['return_type'], func['names'][0], func['arguments']))
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write declarations for booleans indicating which extensions are available.
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("struct Extensions%s {\n" % set_name.upper())
12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for extension, ext_functions in used_extension_functions:
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  bool b_%s;\n' % extension)
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('};\n')
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write Procs struct.
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("struct Procs%s {\n" % set_name.upper())
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  %sProc %sFn;\n' % (func['names'][0], func['names'][0]))
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('};\n')
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write Api class.
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""class GL_EXPORT %(name)sApi {
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  %(name)sApi();
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~%(name)sApi();
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % {'name': set_name.upper()})
12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  virtual %s %sFn(%s) = 0;\n' %
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (func['return_type'], func['names'][0], func['arguments']))
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('};\n')
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write( '}  // namespace gfx\n')
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write macros to invoke function pointers. Always use the GL name for the
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # macro.
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('#define %s ::gfx::g_current_%s_context->%sFn\n' %
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (func['names'][0], set_name.lower(), func['names'][0]))
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('#endif  //  UI_GFX_GL_GL_BINDINGS_AUTOGEN_%s_H_\n' %
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      set_name.upper())
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GenerateAPIHeader(file, functions, set_name, used_extension_functions):
12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_bindings_api_autogen_x.h"""
12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write file header.
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % {'name': set_name.upper()})
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write API declaration.
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  virtual %s %sFn(%s) OVERRIDE;\n' %
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (func['return_type'], func['names'][0], func['arguments']))
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def GenerateMockHeader(file, functions, set_name, used_extension_functions):
12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_mock_autogen_x.h"""
12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write file header.
12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  file.write(
12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is automatically generated.
12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" % {'name': set_name.upper()})
13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write API declaration.
13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for func in functions:
13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    args = func['arguments']
13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if args == 'void':
13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      args = ''
13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    arg_count = 0
13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if len(args):
13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      arg_count = func['arguments'].count(',') + 1
13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('  MOCK_METHOD%d(%s, %s(%s));\n' %
13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      (arg_count, func['names'][0][2:], func['return_type'], args))
13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  file.write('\n')
13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def GenerateInterfaceHeader(
13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file, functions, set_name, used_extension_functions):
13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_interface_autogen_x.h"""
13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write file header.
13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  file.write(
13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""// Copyright (c) 2012 The Chromium Authors. All rights reserved.
13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
13242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is automatically generated.
13262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" % {'name': set_name.upper()})
13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write API declaration.
13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for func in functions:
13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    args = func['arguments']
13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if args == 'void':
13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      args = ''
13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('  virtual %s %s(%s) = 0;\n' %
13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      (func['return_type'], func['names'][0][2:], args))
13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  file.write('\n')
13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GenerateSource(file, functions, set_name, used_extension_functions):
13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  """Generates gl_bindings_autogen_x.cc"""
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write file header.
13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2011 The Chromium Authors. All rights reserved.
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/debug/trace_event.h"
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h"
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_bindings.h"
13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_context.h"
13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h"
13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_%s_api_implementation.h"
13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using gpu::gles2::GLES2Util;
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % set_name.lower())
13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write definitions of function pointers.
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('static bool g_debugBindingsInitialized;\n')
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('Driver%s g_driver_%s;\n' % (set_name.upper(), set_name.lower()))
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to initialize the core function pointers. The code assumes
13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # any non-NULL pointer returned by GetGLCoreProcAddress() is valid, although
13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # it may be overwritten by an extension function pointer later.
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('void Driver%s::InitializeBindings() {\n' %
13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             set_name.upper())
13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_name = func['names'][0]
13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for i, name in enumerate(func['names']):
13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if i:
13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write('  if (!fn.%sFn)\n  ' % first_name)
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write(
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          '  fn.%sFn = reinterpret_cast<%sProc>('
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          'GetGLCoreProcAddress("%s"));\n' %
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (first_name, first_name, name))
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to initialize the extension function pointers. This function
13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # uses a current context to query which extensions are actually supported.
13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("""void Driver%s::InitializeExtensionBindings(
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GLContext* context) {
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % set_name.upper())
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  DCHECK(context && context->IsCurrent(NULL));\n')
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for extension, ext_functions in used_extension_functions:
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  ext.b_%s = context->HasExtension("%s");\n' %
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (extension, extension))
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  if (ext.b_%s) {\n' %
13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (extension))
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    queried_entry_points = set()
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for entry_point_name, function_name in ext_functions:
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      # Replace the pointer unconditionally unless this extension has several
14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      # alternatives for the same entry point (e.g.,
14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      # GL_ARB_blend_func_extended).
14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if entry_point_name in queried_entry_points:
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write('    if (!fn.%sFn)\n  ' % entry_point_name)
14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write(
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         '    fn.%sFn = reinterpret_cast<%sProc>(GetGLProcAddress("%s"));\n' %
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             (entry_point_name, entry_point_name, function_name))
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      queried_entry_points.add(entry_point_name)
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  }\n')
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  if (g_debugBindingsInitialized)\n')
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('    UpdateDebugExtensionBindings();\n')
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write logging wrappers for each function.
14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('extern "C" {\n')
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    names = func['names']
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return_type = func['return_type']
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    arguments = func['arguments']
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('\n')
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('static %s GL_BINDING_CALL Debug_%s(%s) {\n' %
14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (return_type, names[0], arguments))
14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument_names = re.sub(
14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', arguments)
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument_names = re.sub(
14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', argument_names)
14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'const char\* ([a-zA-Z0-9_]+)', r'CONSTCHAR_\1', arguments)
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\* ([a-zA-Z0-9_]+)',
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'CONSTVOID_\2', log_argument_names)
14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(?<!E)GLenum ([a-zA-Z0-9_]+)', r'GLenum_\1', log_argument_names)
14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(?<!E)GLboolean ([a-zA-Z0-9_]+)', r'GLboolean_\1', log_argument_names)
14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2',
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2',
14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'CONSTVOID_([a-zA-Z0-9_]+)',
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'static_cast<const void*>(\1)', log_argument_names);
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'CONSTCHAR_([a-zA-Z0-9_]+)', r'\1', log_argument_names);
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'GLenum_([a-zA-Z0-9_]+)', r'GLES2Util::GetStringEnum(\1)',
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = re.sub(
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'GLboolean_([a-zA-Z0-9_]+)', r'GLES2Util::GetStringBool(\1)',
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log_argument_names)
14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    log_argument_names = log_argument_names.replace(',', ' << ", " <<')
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if argument_names == 'void' or argument_names == '':
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      argument_names = ''
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      log_argument_names = ''
14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      log_argument_names = " << " + log_argument_names
14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    function_name = names[0]
14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if return_type == 'void':
14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  GL_SERVICE_LOG("%s" << "(" %s << ")");\n' %
14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, log_argument_names))
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  g_driver_%s.debug_fn.%sFn(%s);\n' %
14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (set_name.lower(), function_name, argument_names))
14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if 'logging_code' in func:
14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write("%s\n" % func['logging_code'])
14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  GL_SERVICE_LOG("%s" << "(" %s << ")");\n' %
14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, log_argument_names))
14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  %s result = g_driver_%s.debug_fn.%sFn(%s);\n' %
14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (return_type, set_name.lower(), function_name, argument_names))
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if 'logging_code' in func:
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write("%s\n" % func['logging_code'])
14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else:
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        file.write('  GL_SERVICE_LOG("GL_RESULT: " << result);\n');
14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  return result;\n')
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('}\n')
14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}  // extern "C"\n')
14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to initialize the debug function pointers.
14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('void Driver%s::InitializeDebugBindings() {\n' %
14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             set_name.upper())
14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_name = func['names'][0]
14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  if (!debug_fn.%sFn) {\n' % first_name)
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('    debug_fn.%sFn = fn.%sFn;\n' % (first_name, first_name))
14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('    fn.%sFn = Debug_%s;\n' % (first_name, first_name))
14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  }\n')
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  g_debugBindingsInitialized = true;\n')
14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to update the debug function pointers to extension functions
14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # after the extensions have been initialized.
14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('void Driver%s::UpdateDebugExtensionBindings() {\n' %
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             set_name.upper())
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for extension, ext_functions in used_extension_functions:
15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for name, _ in ext_functions:
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  if (debug_fn.%sFn != fn.%sFn &&\n' % (name, name))
15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('      fn.%sFn != Debug_%s) {\n' % (name, name))
15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('    debug_fn.%sFn = fn.%sFn;\n' % (name, name))
15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('    fn.%sFn = Debug_%s;\n' % (name, name))
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  }\n')
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function to clear all function pointers.
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write("""void Driver%s::ClearBindings() {
15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  memset(this, 0, sizeof(*this));
15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" % set_name.upper())
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write GLApiBase functions
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    names = func['names']
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return_type = func['return_type']
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    arguments = func['arguments']
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('\n')
15222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('%s %sApiBase::%sFn(%s) {\n' %
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (return_type, set_name.upper(), names[0], arguments))
15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument_names = re.sub(
15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', arguments)
15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument_names = re.sub(
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', argument_names)
15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if argument_names == 'void' or argument_names == '':
15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      argument_names = ''
15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    function_name = names[0]
15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if return_type == 'void':
15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  driver_->fn.%sFn(%s);\n' %
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  return driver_->fn.%sFn(%s);\n' %
15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('}\n')
15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Write TraceGLApi functions
15402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for func in functions:
15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    names = func['names']
15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return_type = func['return_type']
15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    arguments = func['arguments']
15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('\n')
15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('%s Trace%sApi::%sFn(%s) {\n' %
15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        (return_type, set_name.upper(), names[0], arguments))
15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    argument_names = re.sub(
15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', arguments)
15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    argument_names = re.sub(
15502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', argument_names)
15512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if argument_names == 'void' or argument_names == '':
15522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      argument_names = ''
15532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    function_name = names[0]
15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::%s")\n' %
15552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               function_name)
15562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if return_type == 'void':
15572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      file.write('  %s_api_->%sFn(%s);\n' %
15582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          (set_name.lower(), function_name, argument_names))
15592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    else:
15602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      file.write('  return %s_api_->%sFn(%s);\n' %
15612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          (set_name.lower(), function_name, argument_names))
15622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    file.write('}\n')
15632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}  // namespace gfx\n')
15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GenerateMockSource(file, functions):
15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Generates functions that invoke a mock GLInterface"""
15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write(
15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""// Copyright (c) 2011 The Chromium Authors. All rights reserved.
15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated.
15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_interface.h"
15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""")
15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write function that trampoline into the GLInterface.
15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('\n')
15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('%s GL_BINDING_CALL Mock_%s(%s) {\n' %
15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (func['return_type'], func['names'][0], func['arguments']))
15892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    argument_names = re.sub(r'(const )?[a-zA-Z0-9]+((\s*const\s*)?\*)* ([a-zA-Z0-9]+)', r'\4',
15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              func['arguments'])
15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if argument_names == 'void':
15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      argument_names = ''
15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    function_name = func['names'][0][2:]
15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if func['return_type'] == 'void':
15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  GLInterface::GetGLInterface()->%s(%s);\n' %
15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file.write('  return GLInterface::GetGLInterface()->%s(%s);\n' %
15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (function_name, argument_names))
16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('}\n')
16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write an 'invalid' function to catch code calling through uninitialized
16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # function pointers or trying to interpret the return value of
16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # GLProcAddress().
16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('static void MockInvalidFunction() {\n')
16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  NOTREACHED();\n')
16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n')
16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Write a function to lookup a mock GL function based on its name.
16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('void* GL_BINDING_CALL GetMockGLProcAddress(const char* name) {\n')
16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_name = func['names'][0]
16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('  if (strcmp(name, "%s") == 0)\n' % first_name)
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file.write('    return reinterpret_cast<void*>(Mock_%s);\n' % first_name)
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Always return a non-NULL pointer like some EGL implementations do.
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('  return reinterpret_cast<void*>(&MockInvalidFunction);\n')
16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}\n');
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('\n')
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file.write('}  // namespace gfx\n')
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ParseExtensionFunctionsFromHeader(header_file):
16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Parse a C extension header file and return a map from extension names to
16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  a list of functions.
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file: Line-iterable C header file.
16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Map of extension name => functions.
16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
16342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extension_start = re.compile(
16352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      r'#ifndef ((?:GL|EGL|WGL|GLX)_[A-Z]+_[a-zA-Z]\w+)')
16362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extension_function = re.compile(r'.+\s+([a-z]+\w+)\s*\(')
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef = re.compile(r'typedef .*')
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  macro_start = re.compile(r'^#(if|ifdef|ifndef).*')
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  macro_end = re.compile(r'^#endif.*')
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  macro_depth = 0
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current_extension = None
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current_extension_depth = 0
16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions = collections.defaultdict(lambda: [])
16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for line in header_file:
16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if macro_start.match(line):
16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      macro_depth += 1
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    elif macro_end.match(line):
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      macro_depth -= 1
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if macro_depth < current_extension_depth:
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        current_extension = None
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = extension_start.match(line)
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_extension = match.group(1)
16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_extension_depth = macro_depth
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      assert current_extension not in extensions, \
16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "Duplicate extension: " + current_extension
16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = extension_function.match(line)
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match and current_extension and not typedef.match(line):
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extensions[current_extension].append(match.group(1))
16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return extensions
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetExtensionFunctions(extension_headers):
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Parse extension functions from a list of header files.
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extension_headers: List of header file names.
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Map of extension name => list of functions.
16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions = {}
16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for header in extension_headers:
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions.update(ParseExtensionFunctionsFromHeader(open(header)))
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return extensions
16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetFunctionToExtensionMap(extensions):
16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Construct map from a function names to extensions which define the
16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function.
16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions: Map of extension name => functions.
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Map of function name => extension name.
16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function_to_extensions = {}
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for extension, functions in extensions.items():
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for function in functions:
16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if not function in function_to_extensions:
16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        function_to_extensions[function] = []
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      function_to_extensions[function].append(extension)
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return function_to_extensions
16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def LooksLikeExtensionFunction(function):
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Heuristic to see if a function name is consistent with extension function
16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  naming."""
16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  vendor = re.match(r'\w+?([A-Z][A-Z]+)$', function)
16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return vendor is not None and not vendor.group(1) in ['GL', 'API', 'DC']
17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetUsedExtensionFunctions(functions, extension_headers, extra_extensions):
17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Determine which functions belong to extensions.
17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Args:
17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    functions: List of (return type, function names, arguments).
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extension_headers: List of header file names.
17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns:
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    List of (extension name, [function name alternatives]) sorted with least
17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    preferred extensions first.
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Parse known extensions.
17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions = GetExtensionFunctions(extension_headers)
17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  functions_to_extensions = GetFunctionToExtensionMap(extensions)
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Collect all used extension functions.
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  used_extension_functions = collections.defaultdict(lambda: [])
17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for func in functions:
17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for name in func['names']:
17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      # Make sure we know about all extension functions.
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (LooksLikeExtensionFunction(name) and
17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          not name in functions_to_extensions):
17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        raise RuntimeError('%s looks like an extension function but does not '
17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'belong to any of the known extensions.' % name)
17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if name in functions_to_extensions:
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        extensions = functions_to_extensions[name][:]
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if 'other_extensions' in func:
17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          extensions.extend(func['other_extensions'])
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for extension in extensions:
17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          used_extension_functions[extension].append((func['names'][0], name))
17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Add extensions that do not have any functions.
17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  used_extension_functions.update(dict(
17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [(e, []) for e in extra_extensions if e not in used_extension_functions]))
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def ExtensionSortKey(name):
17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Prefer ratified extensions and EXTs.
17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    preferences = ['_ARB_', '_OES_', '_EXT_', '']
17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for i, category in enumerate(preferences):
17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if category in name:
17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return -i
17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  used_extension_functions = sorted(used_extension_functions.items(),
17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      key = lambda item: ExtensionSortKey(item[0]))
17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return used_extension_functions
17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def ResolveHeader(header, header_paths):
17482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  paths = header_paths.split(':')
17492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # Always use a path for Chromium-specific extensions. They are extracted
17512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  # to separate files.
17522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  paths.append('.')
17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  paths.append('../../gpu')
17542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  root = os.path.abspath(os.path.dirname(__file__))
17562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for path in paths:
17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    result = os.path.join(path, header)
17592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if not os.path.isabs(path):
17602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      result = os.path.relpath(os.path.join(root, result), os.getcwd())
17612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if os.path.exists(result):
17622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # Always use forward slashes as path separators. Otherwise backslashes
17632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      # may be incorrectly interpreted as escape characters.
17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return result.replace(os.path.sep, '/')
17652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  raise Exception('Header %s not found.' % header)
17672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main(argv):
17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """This is the main function."""
17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser = optparse.OptionParser()
17732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser.add_option('--inputs', action='store_true')
17742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser.add_option('--header-paths')
17752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  options, args = parser.parse_args(argv)
17772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if options.inputs:
17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for [_, _, headers, _] in FUNCTION_SETS:
17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for header in headers:
17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        print ResolveHeader(header, options.header_paths)
17822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0
17832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if len(args) >= 1:
17852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    dir = args[0]
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dir = '.'
17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for [functions, set_name, extension_headers, extensions] in FUNCTION_SETS:
17902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    extension_headers = [ResolveHeader(h, options.header_paths)
17912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         for h in extension_headers]
17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    used_extension_functions = GetUsedExtensionFunctions(
17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        functions, extension_headers, extensions)
17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file = open(
17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        os.path.join(dir, 'gl_bindings_autogen_%s.h' % set_name), 'wb')
17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GenerateHeader(header_file, functions, set_name, used_extension_functions)
17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file.close()
17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file = open(
18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        os.path.join(dir, 'gl_bindings_api_autogen_%s.h' % set_name), 'wb')
18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GenerateAPIHeader(
18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        header_file, functions, set_name, used_extension_functions)
18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_file.close()
18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    source_file = open(
18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        os.path.join(dir, 'gl_bindings_autogen_%s.cc' % set_name), 'wb')
18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GenerateSource(source_file, functions, set_name, used_extension_functions)
18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    source_file.close()
18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    header_file = open(
18122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        os.path.join(dir, 'gl_interface_autogen_%s.h' % set_name), 'wb')
18132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GenerateInterfaceHeader(
18142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        header_file, functions, set_name, used_extension_functions)
18152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    header_file.close()
18162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
18172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    header_file = open(
18182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        os.path.join(dir, 'gl_mock_autogen_%s.h' % set_name), 'wb')
18192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GenerateMockHeader(
18202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        header_file, functions, set_name, used_extension_functions)
18212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    header_file.close()
18222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  source_file = open(os.path.join(dir, 'gl_bindings_autogen_mock.cc'), 'wb')
18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GenerateMockSource(source_file, GL_FUNCTIONS)
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  source_file.close()
18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0
18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(main(sys.argv[1:]))
1831