Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: ui/gfx/gl/generate_bindings.py

Issue 9321002: Expose more glQuery functions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add macros back in to make linker happy Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/khronos/README.chromium ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """code generator for GL/GLES extension wrangler.""" 6 """code generator for GL/GLES extension wrangler."""
7 7
8 import os 8 import os
9 import collections 9 import collections
10 import re 10 import re
11 import sys 11 import sys
12 12
13 GL_FUNCTIONS = [ 13 GL_FUNCTIONS = [
14 { 'return_type': 'void', 14 { 'return_type': 'void',
15 'names': ['glActiveTexture'], 15 'names': ['glActiveTexture'],
16 'arguments': 'GLenum texture', }, 16 'arguments': 'GLenum texture', },
17 { 'return_type': 'void', 17 { 'return_type': 'void',
18 'names': ['glAttachShader'], 18 'names': ['glAttachShader'],
19 'arguments': 'GLuint program, GLuint shader', }, 19 'arguments': 'GLuint program, GLuint shader', },
20 { 'return_type': 'void', 20 { 'return_type': 'void',
21 'names': ['glBeginQuery'], 21 'names': ['glBeginQuery', 'glBeginQueryEXT', 'glBeginQueryARB'],
22 'arguments': 'GLenum target, GLuint id', }, 22 'arguments': 'GLenum target, GLuint id', },
23 { 'return_type': 'void', 23 { 'return_type': 'void',
24 'names': ['glBindAttribLocation'], 24 'names': ['glBindAttribLocation'],
25 'arguments': 'GLuint program, GLuint index, const char* name', }, 25 'arguments': 'GLuint program, GLuint index, const char* name', },
26 { 'return_type': 'void', 26 { 'return_type': 'void',
27 'names': ['glBindBuffer'], 27 'names': ['glBindBuffer'],
28 'arguments': 'GLenum target, GLuint buffer', }, 28 'arguments': 'GLenum target, GLuint buffer', },
29 { 'return_type': 'void', 29 { 'return_type': 'void',
30 'names': ['glBindFragDataLocation'], 30 'names': ['glBindFragDataLocation'],
31 'arguments': 'GLuint program, GLuint colorNumber, const char* name', }, 31 'arguments': 'GLuint program, GLuint colorNumber, const char* name', },
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 { 'return_type': 'GLuint', 127 { 'return_type': 'GLuint',
128 'names': ['glCreateProgram'], 128 'names': ['glCreateProgram'],
129 'arguments': 'void', }, 129 'arguments': 'void', },
130 { 'return_type': 'GLuint', 130 { 'return_type': 'GLuint',
131 'names': ['glCreateShader'], 131 'names': ['glCreateShader'],
132 'arguments': 'GLenum type', }, 132 'arguments': 'GLenum type', },
133 { 'return_type': 'void', 133 { 'return_type': 'void',
134 'names': ['glCullFace'], 134 'names': ['glCullFace'],
135 'arguments': 'GLenum mode', }, 135 'arguments': 'GLenum mode', },
136 { 'return_type': 'void', 136 { 'return_type': 'void',
137 'names': ['glDeleteBuffersARB', 'glDeleteBuffers'], 137 'names': ['glDeleteBuffersARB', 'glDeleteBuffers', 'glDeleteQueriesEXT'],
138 'arguments': 'GLsizei n, const GLuint* buffers', }, 138 'arguments': 'GLsizei n, const GLuint* buffers', },
139 { 'return_type': 'void', 139 { 'return_type': 'void',
140 'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'], 140 'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'],
141 'arguments': 'GLsizei n, const GLuint* framebuffers', }, 141 'arguments': 'GLsizei n, const GLuint* framebuffers', },
142 { 'return_type': 'void', 142 { 'return_type': 'void',
143 'names': ['glDeleteProgram'], 143 'names': ['glDeleteProgram'],
144 'arguments': 'GLuint program', }, 144 'arguments': 'GLuint program', },
145 { 'return_type': 'void', 145 { 'return_type': 'void',
146 'names': ['glDeleteQueries'], 146 'names': ['glDeleteQueries'],
147 'arguments': 'GLsizei n, const GLuint* ids', }, 147 'arguments': 'GLsizei n, const GLuint* ids', },
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 { 'return_type': 'void', 194 { 'return_type': 'void',
195 'names': ['glEGLImageTargetRenderbufferStorageOES'], 195 'names': ['glEGLImageTargetRenderbufferStorageOES'],
196 'arguments': 'GLenum target, GLeglImageOES image', }, 196 'arguments': 'GLenum target, GLeglImageOES image', },
197 { 'return_type': 'void', 197 { 'return_type': 'void',
198 'names': ['glEnable'], 198 'names': ['glEnable'],
199 'arguments': 'GLenum cap', }, 199 'arguments': 'GLenum cap', },
200 { 'return_type': 'void', 200 { 'return_type': 'void',
201 'names': ['glEnableVertexAttribArray'], 201 'names': ['glEnableVertexAttribArray'],
202 'arguments': 'GLuint index', }, 202 'arguments': 'GLuint index', },
203 { 'return_type': 'void', 203 { 'return_type': 'void',
204 'names': ['glEndQuery'], 204 'names': ['glEndQuery', 'glEndQueryARB', 'glEndQueryEXT'],
205 'arguments': 'GLenum target', }, 205 'arguments': 'GLenum target', },
206 { 'return_type': 'void', 206 { 'return_type': 'void',
207 'names': ['glFinish'], 207 'names': ['glFinish'],
208 'arguments': 'void', }, 208 'arguments': 'void', },
209 { 'return_type': 'void', 209 { 'return_type': 'void',
210 'names': ['glFlush'], 210 'names': ['glFlush'],
211 'arguments': 'void', }, 211 'arguments': 'void', },
212 { 'return_type': 'void', 212 { 'return_type': 'void',
213 'names': ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'], 213 'names': ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'],
214 'arguments': \ 214 'arguments': \
215 'GLenum target, GLenum attachment, GLenum renderbuffertarget, ' 215 'GLenum target, GLenum attachment, GLenum renderbuffertarget, '
216 'GLuint renderbuffer', }, 216 'GLuint renderbuffer', },
217 { 'return_type': 'void', 217 { 'return_type': 'void',
218 'names': ['glFramebufferTexture2DEXT', 'glFramebufferTexture2D'], 218 'names': ['glFramebufferTexture2DEXT', 'glFramebufferTexture2D'],
219 'arguments': 219 'arguments':
220 'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, ' 220 'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
221 'GLint level', }, 221 'GLint level', },
222 { 'return_type': 'void', 222 { 'return_type': 'void',
223 'names': ['glFrontFace'], 223 'names': ['glFrontFace'],
224 'arguments': 'GLenum mode', }, 224 'arguments': 'GLenum mode', },
225 { 'return_type': 'void', 225 { 'return_type': 'void',
226 'names': ['glGenBuffersARB', 'glGenBuffers'], 226 'names': ['glGenBuffersARB', 'glGenBuffers'],
227 'arguments': 'GLsizei n, GLuint* buffers', }, 227 'arguments': 'GLsizei n, GLuint* buffers', },
228 { 'return_type': 'void', 228 { 'return_type': 'void',
229 'names': ['glGenQueries'], 229 'names': ['glGenQueries', 'glGenQueriesARB', 'glGenQueriesEXT'],
230 'arguments': 'GLsizei n, GLuint* ids', }, 230 'arguments': 'GLsizei n, GLuint* ids', },
231 { 'return_type': 'void', 231 { 'return_type': 'void',
232 'names': ['glGenerateMipmapEXT', 'glGenerateMipmap'], 232 'names': ['glGenerateMipmapEXT', 'glGenerateMipmap'],
233 'arguments': 'GLenum target', }, 233 'arguments': 'GLenum target', },
234 { 'return_type': 'void', 234 { 'return_type': 'void',
235 'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'], 235 'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'],
236 'arguments': 'GLsizei n, GLuint* framebuffers', }, 236 'arguments': 'GLsizei n, GLuint* framebuffers', },
237 { 'return_type': 'void', 237 { 'return_type': 'void',
238 'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'], 238 'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'],
239 'arguments': 'GLsizei n, GLuint* renderbuffers', }, 239 'arguments': 'GLsizei n, GLuint* renderbuffers', },
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 'names': ['glGetIntegerv'], 284 'names': ['glGetIntegerv'],
285 'arguments': 'GLenum pname, GLint* params', }, 285 'arguments': 'GLenum pname, GLint* params', },
286 { 'return_type': 'void', 286 { 'return_type': 'void',
287 'names': ['glGetProgramiv'], 287 'names': ['glGetProgramiv'],
288 'arguments': 'GLuint program, GLenum pname, GLint* params', }, 288 'arguments': 'GLuint program, GLenum pname, GLint* params', },
289 { 'return_type': 'void', 289 { 'return_type': 'void',
290 'names': ['glGetProgramInfoLog'], 290 'names': ['glGetProgramInfoLog'],
291 'arguments': 291 'arguments':
292 'GLuint program, GLsizei bufsize, GLsizei* length, char* infolog', }, 292 'GLuint program, GLsizei bufsize, GLsizei* length, char* infolog', },
293 { 'return_type': 'void', 293 { 'return_type': 'void',
294 'names': ['glGetQueryiv'], 294 'names': ['glGetQueryiv', 'glGetQueryivARB', 'glGetQueryivEXT'],
295 'arguments': 'GLenum target, GLenum pname, GLint* params', }, 295 'arguments': 'GLenum target, GLenum pname, GLint* params', },
296 { 'return_type': 'void', 296 { 'return_type': 'void',
297 'names': ['glGetQueryObjecti64v'], 297 'names': ['glGetQueryObjecti64v'],
298 'arguments': 'GLuint id, GLenum pname, GLint64* params', }, 298 'arguments': 'GLuint id, GLenum pname, GLint64* params', },
299 { 'return_type': 'void', 299 { 'return_type': 'void',
300 'names': ['glGetQueryObjectiv'], 300 'names': ['glGetQueryObjectiv'],
301 'arguments': 'GLuint id, GLenum pname, GLint* params', }, 301 'arguments': 'GLuint id, GLenum pname, GLint* params', },
302 { 'return_type': 'void', 302 { 'return_type': 'void',
303 'names': ['glGetQueryObjectui64v'], 303 'names': ['glGetQueryObjectui64v'],
304 'arguments': 'GLuint id, GLenum pname, GLuint64* params', }, 304 'arguments': 'GLuint id, GLenum pname, GLuint64* params', },
305 { 'return_type': 'void', 305 { 'return_type': 'void',
306 'names': ['glGetQueryObjectuiv'], 306 'names': ['glGetQueryObjectuiv', 'glGetQueryObjectuivARB',
307 'glGetQueryObjectuivEXT'],
307 'arguments': 'GLuint id, GLenum pname, GLuint* params', }, 308 'arguments': 'GLuint id, GLenum pname, GLuint* params', },
308 { 'return_type': 'void', 309 { 'return_type': 'void',
309 'names': ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'], 310 'names': ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'],
310 'arguments': 'GLenum target, GLenum pname, GLint* params', }, 311 'arguments': 'GLenum target, GLenum pname, GLint* params', },
311 { 'return_type': 'void', 312 { 'return_type': 'void',
312 'names': ['glGetShaderiv'], 313 'names': ['glGetShaderiv'],
313 'arguments': 'GLuint shader, GLenum pname, GLint* params', }, 314 'arguments': 'GLuint shader, GLenum pname, GLint* params', },
314 { 'return_type': 'void', 315 { 'return_type': 'void',
315 'names': ['glGetShaderInfoLog'], 316 'names': ['glGetShaderInfoLog'],
316 'arguments': 317 'arguments':
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 1392
1392 def GetFunctionToExtensionMap(extensions): 1393 def GetFunctionToExtensionMap(extensions):
1393 """Construct map from a function names to extensions which define the 1394 """Construct map from a function names to extensions which define the
1394 function. 1395 function.
1395 1396
1396 Args: 1397 Args:
1397 extensions: Map of extension name => functions. 1398 extensions: Map of extension name => functions.
1398 Returns: 1399 Returns:
1399 Map of function name => extension name. 1400 Map of function name => extension name.
1400 """ 1401 """
1401 function_to_extension = {} 1402 function_to_extensions = {}
1402 for extension, functions in extensions.items(): 1403 for extension, functions in extensions.items():
1403 for function in functions: 1404 for function in functions:
1404 assert function not in function_to_extension, \ 1405 if not function in function_to_extensions:
1405 "Duplicate function: " + function 1406 function_to_extensions[function] = []
1406 function_to_extension[function] = extension 1407 function_to_extensions[function].append(extension)
1407 return function_to_extension 1408 return function_to_extensions
1408 1409
1409 1410
1410 def LooksLikeExtensionFunction(function): 1411 def LooksLikeExtensionFunction(function):
1411 """Heuristic to see if a function name is consistent with extension function 1412 """Heuristic to see if a function name is consistent with extension function
1412 naming.""" 1413 naming."""
1413 vendor = re.match(r'\w+?([A-Z][A-Z]+)$', function) 1414 vendor = re.match(r'\w+?([A-Z][A-Z]+)$', function)
1414 return vendor is not None and not vendor.group(1) in ['GL', 'API', 'DC'] 1415 return vendor is not None and not vendor.group(1) in ['GL', 'API', 'DC']
1415 1416
1416 1417
1417 def GetUsedExtensionFunctions(functions, extension_headers, extra_extensions): 1418 def GetUsedExtensionFunctions(functions, extension_headers, extra_extensions):
1418 """Determine which functions belong to extensions. 1419 """Determine which functions belong to extensions.
1419 1420
1420 Args: 1421 Args:
1421 functions: List of (return type, function names, arguments). 1422 functions: List of (return type, function names, arguments).
1422 extension_headers: List of header file names. 1423 extension_headers: List of header file names.
1423 Returns: 1424 Returns:
1424 List of (extension name, [function name alternatives]) sorted with least 1425 List of (extension name, [function name alternatives]) sorted with least
1425 preferred extensions first. 1426 preferred extensions first.
1426 """ 1427 """
1427 # Parse known extensions. 1428 # Parse known extensions.
1428 extensions = GetExtensionFunctions(extension_headers) 1429 extensions = GetExtensionFunctions(extension_headers)
1429 functions_to_extension = GetFunctionToExtensionMap(extensions) 1430 functions_to_extensions = GetFunctionToExtensionMap(extensions)
1430 1431
1431 # Collect all used extension functions. 1432 # Collect all used extension functions.
1432 used_extension_functions = collections.defaultdict(lambda: []) 1433 used_extension_functions = collections.defaultdict(lambda: [])
1433 for func in functions: 1434 for func in functions:
1434 for name in func['names']: 1435 for name in func['names']:
1435 # Make sure we know about all extension functions. 1436 # Make sure we know about all extension functions.
1436 if (LooksLikeExtensionFunction(name) and 1437 if (LooksLikeExtensionFunction(name) and
1437 not name in functions_to_extension): 1438 not name in functions_to_extensions):
1438 raise RuntimeError('%s looks like an extension function but does not ' 1439 raise RuntimeError('%s looks like an extension function but does not '
1439 'belong to any of the known extensions.' % name) 1440 'belong to any of the known extensions.' % name)
1440 if name in functions_to_extension: 1441 if name in functions_to_extensions:
1441 extensions = [functions_to_extension[name]] 1442 extensions = functions_to_extensions[name][:]
1442 if 'other_extensions' in func: 1443 if 'other_extensions' in func:
1443 extensions.extend(func['other_extensions']) 1444 extensions.extend(func['other_extensions'])
1444 for extension in extensions: 1445 for extension in extensions:
1445 used_extension_functions[extension].append((func['names'][0], name)) 1446 used_extension_functions[extension].append((func['names'][0], name))
1446 1447
1447 # Add extensions that do not have any functions. 1448 # Add extensions that do not have any functions.
1448 used_extension_functions.update(dict( 1449 used_extension_functions.update(dict(
1449 [(e, []) for e in extra_extensions if e not in used_extension_functions])) 1450 [(e, []) for e in extra_extensions if e not in used_extension_functions]))
1450 1451
1451 def ExtensionSortKey(name): 1452 def ExtensionSortKey(name):
(...skipping 30 matching lines...) Expand all
1482 source_file.close() 1483 source_file.close()
1483 1484
1484 source_file = open(os.path.join(dir, 'gl_bindings_autogen_mock.cc'), 'wb') 1485 source_file = open(os.path.join(dir, 'gl_bindings_autogen_mock.cc'), 'wb')
1485 GenerateMockSource(source_file, GL_FUNCTIONS) 1486 GenerateMockSource(source_file, GL_FUNCTIONS)
1486 source_file.close() 1487 source_file.close()
1487 return 0 1488 return 0
1488 1489
1489 1490
1490 if __name__ == '__main__': 1491 if __name__ == '__main__':
1491 sys.exit(main(sys.argv[1:])) 1492 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « third_party/khronos/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698