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

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

Issue 169403005: command_buffer: Implement path rendering functions for CHROMIUM_path_rendering (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nv-pr-02-texgen
Patch Set: Created 5 years, 5 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
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 optparse 8 import optparse
9 import os 9 import os
10 import collections 10 import collections
(...skipping 17 matching lines...) Expand all
28 'GL_CHROMIUM_glgetstringi_hack', # crbug.com/470396 28 'GL_CHROMIUM_glgetstringi_hack', # crbug.com/470396
29 ]) 29 ])
30 30
31 """Function binding conditions can be specified manually by supplying a versions 31 """Function binding conditions can be specified manually by supplying a versions
32 array instead of the names array. Each version has the following keys: 32 array instead of the names array. Each version has the following keys:
33 name: Mandatory. Name of the function. Multiple versions can have the same 33 name: Mandatory. Name of the function. Multiple versions can have the same
34 name but different conditions. 34 name but different conditions.
35 extensions: Extra Extensions for which the function is bound. Only needed 35 extensions: Extra Extensions for which the function is bound. Only needed
36 in some cases where the extension cannot be parsed from the 36 in some cases where the extension cannot be parsed from the
37 headers. 37 headers.
38 is_optional: Set to True if the function might be missing even if
39 the the extension string is present. This can happen
40 when the extension is updated with new functions, but
41 the extension string does not change.
38 42
39 By default, the function gets its name from the first name in its names or 43 By default, the function gets its name from the first name in its names or
40 versions array. This can be overridden by supplying a 'known_as' key. 44 versions array. This can be overridden by supplying a 'known_as' key.
45
41 """ 46 """
42 GL_FUNCTIONS = [ 47 GL_FUNCTIONS = [
43 { 'return_type': 'void', 48 { 'return_type': 'void',
44 'names': ['glActiveTexture'], 49 'names': ['glActiveTexture'],
45 'arguments': 'GLenum texture', }, 50 'arguments': 'GLenum texture', },
46 { 'return_type': 'void', 51 { 'return_type': 'void',
47 'names': ['glAttachShader'], 52 'names': ['glAttachShader'],
48 'arguments': 'GLuint program, GLuint shader', }, 53 'arguments': 'GLuint program, GLuint shader', },
49 { 'return_type': 'void', 54 { 'return_type': 'void',
50 'versions': [{ 'name': 'glBeginQuery' }, 55 'versions': [{ 'name': 'glBeginQuery' },
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 { 'return_type': 'void', 232 { 'return_type': 'void',
228 'names': ['glCopyTexSubImage2D'], 233 'names': ['glCopyTexSubImage2D'],
229 'arguments': 234 'arguments':
230 'GLenum target, GLint level, GLint xoffset, ' 235 'GLenum target, GLint level, GLint xoffset, '
231 'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height', }, 236 'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
232 { 'return_type': 'void', 237 { 'return_type': 'void',
233 'versions': [{ 'name': 'glCopyTexSubImage3D' }], 238 'versions': [{ 'name': 'glCopyTexSubImage3D' }],
234 'arguments': 239 'arguments':
235 'GLenum target, GLint level, GLint xoffset, GLint yoffset, ' 240 'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
236 'GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height', }, 241 'GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
242 { 'return_type': 'void',
243 'names': ['glCoverFillPathNV'],
244 'arguments': 'GLuint path, GLenum coverMode' },
245 { 'return_type': 'void',
246 'names': ['glCoverStrokePathNV'],
247 'arguments': 'GLuint name, GLenum coverMode' },
237 { 'return_type': 'GLuint', 248 { 'return_type': 'GLuint',
238 'names': ['glCreateProgram'], 249 'names': ['glCreateProgram'],
239 'arguments': 'void', }, 250 'arguments': 'void', },
240 { 'return_type': 'GLuint', 251 { 'return_type': 'GLuint',
241 'names': ['glCreateShader'], 252 'names': ['glCreateShader'],
242 'arguments': 'GLenum type', }, 253 'arguments': 'GLenum type', },
243 { 'return_type': 'void', 254 { 'return_type': 'void',
244 'names': ['glCullFace'], 255 'names': ['glCullFace'],
245 'arguments': 'GLenum mode', }, 256 'arguments': 'GLenum mode', },
246 { 'return_type': 'void', 257 { 'return_type': 'void',
247 'names': ['glDeleteBuffers'], 258 'names': ['glDeleteBuffers'],
248 'known_as': 'glDeleteBuffersARB', 259 'known_as': 'glDeleteBuffersARB',
249 'arguments': 'GLsizei n, const GLuint* buffers', }, 260 'arguments': 'GLsizei n, const GLuint* buffers', },
250 { 'return_type': 'void', 261 { 'return_type': 'void',
251 'known_as': 'glDeleteFencesAPPLE', 262 'known_as': 'glDeleteFencesAPPLE',
252 'versions': [{ 'name': 'glDeleteFencesAPPLE', 263 'versions': [{ 'name': 'glDeleteFencesAPPLE',
253 'extensions': ['GL_APPLE_fence'] }], 264 'extensions': ['GL_APPLE_fence'] }],
254 'arguments': 'GLsizei n, const GLuint* fences', }, 265 'arguments': 'GLsizei n, const GLuint* fences', },
255 { 'return_type': 'void', 266 { 'return_type': 'void',
256 'names': ['glDeleteFencesNV'], 267 'names': ['glDeleteFencesNV'],
257 'arguments': 'GLsizei n, const GLuint* fences', }, 268 'arguments': 'GLsizei n, const GLuint* fences', },
258 { 'return_type': 'void', 269 { 'return_type': 'void',
259 'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'], 270 'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'],
260 'arguments': 'GLsizei n, const GLuint* framebuffers', }, 271 'arguments': 'GLsizei n, const GLuint* framebuffers', },
261 { 'return_type': 'void', 272 { 'return_type': 'void',
273 'names': ['glDeletePathsNV'],
274 'arguments': 'GLuint path, GLsizei range' },
275 { 'return_type': 'void',
262 'names': ['glDeleteProgram'], 276 'names': ['glDeleteProgram'],
263 'arguments': 'GLuint program', }, 277 'arguments': 'GLuint program', },
264 { 'return_type': 'void', 278 { 'return_type': 'void',
265 'versions': [{ 'name': 'glDeleteQueries' }, 279 'versions': [{ 'name': 'glDeleteQueries' },
266 { 'name': 'glDeleteQueriesARB'}, 280 { 'name': 'glDeleteQueriesARB'},
267 { 'name': 'glDeleteQueriesEXT', 281 { 'name': 'glDeleteQueriesEXT',
268 'extensions': ['GL_EXT_occlusion_query_boolean'] }], 282 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
269 'arguments': 'GLsizei n, const GLuint* ids', }, 283 'arguments': 'GLsizei n, const GLuint* ids', },
270 { 'return_type': 'void', 284 { 'return_type': 'void',
271 'names': ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'], 285 'names': ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'],
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 'known_as': 'glGenFencesAPPLE', 444 'known_as': 'glGenFencesAPPLE',
431 'versions': [{ 'name': 'glGenFencesAPPLE', 445 'versions': [{ 'name': 'glGenFencesAPPLE',
432 'extensions': ['GL_APPLE_fence'] }], 446 'extensions': ['GL_APPLE_fence'] }],
433 'arguments': 'GLsizei n, GLuint* fences', }, 447 'arguments': 'GLsizei n, GLuint* fences', },
434 { 'return_type': 'void', 448 { 'return_type': 'void',
435 'names': ['glGenFencesNV'], 449 'names': ['glGenFencesNV'],
436 'arguments': 'GLsizei n, GLuint* fences', }, 450 'arguments': 'GLsizei n, GLuint* fences', },
437 { 'return_type': 'void', 451 { 'return_type': 'void',
438 'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'], 452 'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'],
439 'arguments': 'GLsizei n, GLuint* framebuffers', }, 453 'arguments': 'GLsizei n, GLuint* framebuffers', },
454 { 'return_type': 'GLuint',
455 'names': ['glGenPathsNV'],
456 'arguments': 'GLsizei range' },
440 { 'return_type': 'void', 457 { 'return_type': 'void',
441 'versions': [{ 'name': 'glGenQueries' }, 458 'versions': [{ 'name': 'glGenQueries' },
442 { 'name': 'glGenQueriesARB', }, 459 { 'name': 'glGenQueriesARB', },
443 { 'name' : 'glGenQueriesEXT', 460 { 'name' : 'glGenQueriesEXT',
444 'extensions': ['GL_EXT_occlusion_query_boolean'] }], 461 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
445 'arguments': 'GLsizei n, GLuint* ids', }, 462 'arguments': 'GLsizei n, GLuint* ids', },
446 { 'return_type': 'void', 463 { 'return_type': 'void',
447 'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'], 464 'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'],
448 'arguments': 'GLsizei n, GLuint* renderbuffers', }, 465 'arguments': 'GLsizei n, GLuint* renderbuffers', },
449 { 'return_type': 'void', 466 { 'return_type': 'void',
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 'versions': [{ 'name': 'glIsFenceAPPLE', 714 'versions': [{ 'name': 'glIsFenceAPPLE',
698 'extensions': ['GL_APPLE_fence'] }], 715 'extensions': ['GL_APPLE_fence'] }],
699 'arguments': 'GLuint fence', }, 716 'arguments': 'GLuint fence', },
700 { 'return_type': 'GLboolean', 717 { 'return_type': 'GLboolean',
701 'names': ['glIsFenceNV'], 718 'names': ['glIsFenceNV'],
702 'arguments': 'GLuint fence', }, 719 'arguments': 'GLuint fence', },
703 { 'return_type': 'GLboolean', 720 { 'return_type': 'GLboolean',
704 'names': ['glIsFramebufferEXT', 'glIsFramebuffer'], 721 'names': ['glIsFramebufferEXT', 'glIsFramebuffer'],
705 'arguments': 'GLuint framebuffer', }, 722 'arguments': 'GLuint framebuffer', },
706 { 'return_type': 'GLboolean', 723 { 'return_type': 'GLboolean',
724 'names': ['glIsPathNV'],
725 'arguments': 'GLuint path' },
726 { 'return_type': 'GLboolean',
707 'names': ['glIsProgram'], 727 'names': ['glIsProgram'],
708 'arguments': 'GLuint program', }, 728 'arguments': 'GLuint program', },
709 { 'return_type': 'GLboolean', 729 { 'return_type': 'GLboolean',
710 'versions': [{ 'name': 'glIsQuery' }, 730 'versions': [{ 'name': 'glIsQuery' },
711 { 'name': 'glIsQueryARB' }, 731 { 'name': 'glIsQueryARB' },
712 { 'name': 'glIsQueryEXT', 732 { 'name': 'glIsQueryEXT',
713 'extensions': ['GL_EXT_occlusion_query_boolean'] }], 733 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
714 'arguments': 'GLuint query', }, 734 'arguments': 'GLuint query', },
715 { 'return_type': 'GLboolean', 735 { 'return_type': 'GLboolean',
716 'names': ['glIsRenderbufferEXT', 'glIsRenderbuffer'], 736 'names': ['glIsRenderbufferEXT', 'glIsRenderbuffer'],
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 'extensions': ['GL_EXT_direct_state_access', 783 'extensions': ['GL_EXT_direct_state_access',
764 'GL_NV_path_rendering'] }], 784 'GL_NV_path_rendering'] }],
765 'arguments': 'GLenum matrixMode, const GLfloat* m' }, 785 'arguments': 'GLenum matrixMode, const GLfloat* m' },
766 { 'return_type': 'void', 786 { 'return_type': 'void',
767 'known_as': 'glMatrixLoadIdentityEXT', 787 'known_as': 'glMatrixLoadIdentityEXT',
768 'versions': [{ 'name': 'glMatrixLoadIdentityEXT', 788 'versions': [{ 'name': 'glMatrixLoadIdentityEXT',
769 'extensions': ['GL_EXT_direct_state_access', 789 'extensions': ['GL_EXT_direct_state_access',
770 'GL_NV_path_rendering'] },], 790 'GL_NV_path_rendering'] },],
771 'arguments': 'GLenum matrixMode' }, 791 'arguments': 'GLenum matrixMode' },
772 { 'return_type': 'void', 792 { 'return_type': 'void',
793 'names': ['glPathCommandsNV'],
794 'arguments': 'GLuint path, GLsizei numCommands, const GLubyte* commands, '
795 'GLsizei numCoords, GLenum coordType, const GLvoid* coords' },
796 { 'return_type': 'void',
797 'names': ['glPathParameterfNV'],
798 'arguments': 'GLuint path, GLenum pname, GLfloat value' },
799 { 'return_type': 'void',
800 'names': ['glPathParameteriNV'],
801 'arguments': 'GLuint path, GLenum pname, GLint value' },
802 { 'return_type': 'void',
803 'names': ['glPathStencilFuncNV'],
804 'arguments': 'GLenum func, GLint ref, GLuint mask' },
805 { 'return_type': 'void',
773 'versions': [{ 'name': 'glPauseTransformFeedback' }], 806 'versions': [{ 'name': 'glPauseTransformFeedback' }],
774 'arguments': 'void', }, 807 'arguments': 'void', },
775 { 'return_type': 'void', 808 { 'return_type': 'void',
776 'names': ['glPixelStorei'], 809 'names': ['glPixelStorei'],
777 'arguments': 'GLenum pname, GLint param', }, 810 'arguments': 'GLenum pname, GLint param', },
778 { 'return_type': 'void', 811 { 'return_type': 'void',
779 'names': ['glPointParameteri'], 812 'names': ['glPointParameteri'],
780 'arguments': 'GLenum pname, GLint param', }, 813 'arguments': 'GLenum pname, GLint param', },
781 { 'return_type': 'void', 814 { 'return_type': 'void',
782 'names': ['glPolygonOffset'], 815 'names': ['glPolygonOffset'],
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 } else { 914 } else {
882 GL_SERVICE_LOG(" " << ii << ": ---\\n" << str[ii] << "\\n---"); 915 GL_SERVICE_LOG(" " << ii << ": ---\\n" << str[ii] << "\\n---");
883 } 916 }
884 } else { 917 } else {
885 GL_SERVICE_LOG(" " << ii << ": NULL"); 918 GL_SERVICE_LOG(" " << ii << ": NULL");
886 } 919 }
887 } 920 }
888 }); 921 });
889 """, }, 922 """, },
890 { 'return_type': 'void', 923 { 'return_type': 'void',
924 'names': ['glStencilFillPathNV'],
925 'arguments': 'GLuint path, GLenum fillMode, GLuint mask' },
926 { 'return_type': 'void',
891 'names': ['glStencilFunc'], 927 'names': ['glStencilFunc'],
892 'arguments': 'GLenum func, GLint ref, GLuint mask', }, 928 'arguments': 'GLenum func, GLint ref, GLuint mask', },
893 { 'return_type': 'void', 929 { 'return_type': 'void',
894 'names': ['glStencilFuncSeparate'], 930 'names': ['glStencilFuncSeparate'],
895 'arguments': 'GLenum face, GLenum func, GLint ref, GLuint mask', }, 931 'arguments': 'GLenum face, GLenum func, GLint ref, GLuint mask', },
896 { 'return_type': 'void', 932 { 'return_type': 'void',
897 'names': ['glStencilMask'], 933 'names': ['glStencilMask'],
898 'arguments': 'GLuint mask', }, 934 'arguments': 'GLuint mask', },
899 { 'return_type': 'void', 935 { 'return_type': 'void',
900 'names': ['glStencilMaskSeparate'], 936 'names': ['glStencilMaskSeparate'],
901 'arguments': 'GLenum face, GLuint mask', }, 937 'arguments': 'GLenum face, GLuint mask', },
902 { 'return_type': 'void', 938 { 'return_type': 'void',
903 'names': ['glStencilOp'], 939 'names': ['glStencilOp'],
904 'arguments': 'GLenum fail, GLenum zfail, GLenum zpass', }, 940 'arguments': 'GLenum fail, GLenum zfail, GLenum zpass', },
905 { 'return_type': 'void', 941 { 'return_type': 'void',
906 'names': ['glStencilOpSeparate'], 942 'names': ['glStencilOpSeparate'],
907 'arguments': 'GLenum face, GLenum fail, GLenum zfail, GLenum zpass', }, 943 'arguments': 'GLenum face, GLenum fail, GLenum zfail, GLenum zpass', },
944 { 'return_type': 'void',
945 'names': ['glStencilStrokePathNV'],
946 'arguments': 'GLuint path, GLint reference, GLuint mask' },
947 { 'return_type': 'void',
948 'names': ['glStencilThenCoverFillPathNV'],
949 'arguments': 'GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode',
950 'is_optional': True, },
951 { 'return_type': 'void',
952 'names': ['glStencilThenCoverStrokePathNV'],
953 'arguments': 'GLuint path, GLint reference, GLuint mask, GLenum coverMode',
954 'is_optional': True, },
908 { 'return_type': 'GLboolean', 955 { 'return_type': 'GLboolean',
909 'known_as': 'glTestFenceAPPLE', 956 'known_as': 'glTestFenceAPPLE',
910 'versions': [{ 'name': 'glTestFenceAPPLE', 957 'versions': [{ 'name': 'glTestFenceAPPLE',
911 'extensions': ['GL_APPLE_fence'] }], 958 'extensions': ['GL_APPLE_fence'] }],
912 'arguments': 'GLuint fence', }, 959 'arguments': 'GLuint fence', },
913 { 'return_type': 'GLboolean', 960 { 'return_type': 'GLboolean',
914 'names': ['glTestFenceNV'], 961 'names': ['glTestFenceNV'],
915 'arguments': 'GLuint fence', }, 962 'arguments': 'GLuint fence', },
916 { 'return_type': 'void', 963 { 'return_type': 'void',
917 'names': ['glTexImage2D'], 964 'names': ['glTexImage2D'],
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
1885 first_version = True 1932 first_version = True
1886 while i < len(func['versions']): 1933 while i < len(func['versions']):
1887 version = func['versions'][i] 1934 version = func['versions'][i]
1888 cond = GetBindingCondition(version) 1935 cond = GetBindingCondition(version)
1889 if first_version: 1936 if first_version:
1890 file.write(' if (%s) {\n ' % cond) 1937 file.write(' if (%s) {\n ' % cond)
1891 else: 1938 else:
1892 file.write(' else if (%s) {\n ' % (cond)) 1939 file.write(' else if (%s) {\n ' % (cond))
1893 1940
1894 WriteFuncBinding(file, known_as, version['name']) 1941 WriteFuncBinding(file, known_as, version['name'])
1895 file.write('DCHECK(fn.%sFn);\n' % known_as) 1942 if not 'is_optional' in func or not func['is_optional']:
1943 file.write('DCHECK(fn.%sFn);\n' % known_as)
1896 file.write('}\n') 1944 file.write('}\n')
1897 i += 1 1945 i += 1
1898 first_version = False 1946 first_version = False
1899 1947
1900 # TODO(jmadill): make more robust 1948 # TODO(jmadill): make more robust
1901 def IsClientExtensionFunc(func): 1949 def IsClientExtensionFunc(func):
1902 assert len(func['versions']) > 0 1950 assert len(func['versions']) > 0
1903 if 'client_extensions' in func['versions'][0]: 1951 if 'client_extensions' in func['versions'][0]:
1904 assert len(func['versions']) == 1 1952 assert len(func['versions']) == 1
1905 return True 1953 return True
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
2607 'gl_enums_implementation_autogen.h'), 2655 'gl_enums_implementation_autogen.h'),
2608 'wb') 2656 'wb')
2609 GenerateEnumUtils(header_file, enum_header_filenames) 2657 GenerateEnumUtils(header_file, enum_header_filenames)
2610 header_file.close() 2658 header_file.close()
2611 ClangFormat(header_file.name) 2659 ClangFormat(header_file.name)
2612 return 0 2660 return 0
2613 2661
2614 2662
2615 if __name__ == '__main__': 2663 if __name__ == '__main__':
2616 sys.exit(main(sys.argv[1:])) 2664 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698