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

Side by Side Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 538903002: Generate Pepper IDL for OpenGLES2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more comments Created 6 years, 3 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
« no previous file with comments | « no previous file | ppapi/api/dev/ppb_opengles2ext_dev.idl » ('j') | 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 GLES2 command buffers.""" 6 """code generator for GLES2 command buffers."""
7 7
8 import itertools 8 import itertools
9 import os 9 import os
10 import os.path 10 import os.path
(...skipping 6943 matching lines...) Expand 10 before | Expand all | Expand 10 after
6954 for arg in args if not arg.IsConstant()]) 6954 for arg in args if not arg.IsConstant()])
6955 return self.__MaybePrependComma(arg_string, add_comma) 6955 return self.__MaybePrependComma(arg_string, add_comma)
6956 6956
6957 def MakeTypedPepperArgString(self, prefix): 6957 def MakeTypedPepperArgString(self, prefix):
6958 """Gets a list of arguments as they need to be for Pepper.""" 6958 """Gets a list of arguments as they need to be for Pepper."""
6959 if self.GetInfo("pepper_args"): 6959 if self.GetInfo("pepper_args"):
6960 return self.GetInfo("pepper_args") 6960 return self.GetInfo("pepper_args")
6961 else: 6961 else:
6962 return self.MakeTypedOriginalArgString(prefix, False) 6962 return self.MakeTypedOriginalArgString(prefix, False)
6963 6963
6964 def MapCTypeToPepperIdlType(self, ctype, is_for_return_type=False):
6965 """Converts a C type name to the corresponding Pepper IDL type."""
6966 idltype = {
6967 'char*': '[out] str_t',
6968 'const GLchar* const*': '[out] cstr_t',
6969 'const char*': 'cstr_t',
6970 'const void*': 'mem_t',
6971 'void*': '[out] mem_t',
6972 'void**': '[out] mem_ptr_t',
6973 }.get(ctype, ctype)
6974 # We use "GLxxx_ptr_t" for "GLxxx*".
6975 matched = re.match(r'(const )?(GL\w+)\*$', ctype)
6976 if matched:
6977 idltype = matched.group(2) + '_ptr_t'
6978 if not matched.group(1):
6979 idltype = '[out] ' + idltype
6980 # If an in/out specifier is not specified yet, prepend [in].
6981 if idltype[0] != '[':
6982 idltype = '[in] ' + idltype
6983 # Strip the in/out specifier for a return type.
6984 if is_for_return_type:
6985 idltype = re.sub(r'\[\w+\] ', '', idltype)
6986 return idltype
6987
6988 def MakeTypedPepperIdlArgStrings(self):
6989 """Gets a list of arguments as they need to be for Pepper IDL."""
6990 args = self.GetOriginalArgs()
6991 return ["%s %s" % (self.MapCTypeToPepperIdlType(arg.type), arg.name)
6992 for arg in args]
6993
6964 def GetPepperName(self): 6994 def GetPepperName(self):
6965 if self.GetInfo("pepper_name"): 6995 if self.GetInfo("pepper_name"):
6966 return self.GetInfo("pepper_name") 6996 return self.GetInfo("pepper_name")
6967 return self.name 6997 return self.name
6968 6998
6969 def MakeTypedCmdArgString(self, prefix, add_comma = False): 6999 def MakeTypedCmdArgString(self, prefix, add_comma = False):
6970 """Gets a typed list of arguments as they need to be for command buffers.""" 7000 """Gets a typed list of arguments as they need to be for command buffers."""
6971 args = self.GetCmdArgs() 7001 args = self.GetCmdArgs()
6972 arg_string = ", ".join( 7002 arg_string = ", ".join(
6973 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) 7003 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args])
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after
8260 else: 8290 else:
8261 file.Write(""" return GLES2Util::GetQualifiedEnumString( 8291 file.Write(""" return GLES2Util::GetQualifiedEnumString(
8262 NULL, 0, value); 8292 NULL, 0, value);
8263 } 8293 }
8264 8294
8265 """) 8295 """)
8266 file.Close() 8296 file.Close()
8267 8297
8268 def WritePepperGLES2Interface(self, filename, dev): 8298 def WritePepperGLES2Interface(self, filename, dev):
8269 """Writes the Pepper OpenGLES interface definition.""" 8299 """Writes the Pepper OpenGLES interface definition."""
8270 file = CHeaderWriter( 8300 file = CWriter(filename)
8271 filename, 8301 file.Write(_LICENSE)
8272 "// OpenGL ES interface.\n") 8302 file.Write(_DO_NOT_EDIT_WARNING)
8273 8303
8304 file.Write("label Chrome {\n")
8305 file.Write(" M39 = 1.0\n")
8306 file.Write("};\n\n")
8307
8308 if not dev:
8309 # Declare GL types.
8310 file.Write("[version=1.0]\n")
8311 file.Write("describe {\n")
8312 for gltype in ['GLbitfield', 'GLboolean', 'GLbyte', 'GLclampf',
8313 'GLclampx', 'GLenum', 'GLfixed', 'GLfloat', 'GLint',
8314 'GLintptr', 'GLshort', 'GLsizei', 'GLsizeiptr',
8315 'GLubyte', 'GLuint', 'GLushort']:
8316 file.Write(" %s;\n" % gltype)
8317 file.Write(" %s_ptr_t;\n" % gltype)
8318 file.Write("};\n\n")
8319
8320 # C level typedefs.
8321 file.Write("#inline c\n")
8274 file.Write("#include \"ppapi/c/pp_resource.h\"\n") 8322 file.Write("#include \"ppapi/c/pp_resource.h\"\n")
8275 if dev: 8323 if dev:
8276 file.Write("#include \"ppapi/c/ppb_opengles2.h\"\n\n") 8324 file.Write("#include \"ppapi/c/ppb_opengles2.h\"\n\n")
8277 else: 8325 else:
8278 file.Write("\n#ifndef __gl2_h_\n") 8326 file.Write("\n#ifndef __gl2_h_\n")
8279 for (k, v) in _GL_TYPES.iteritems(): 8327 for (k, v) in _GL_TYPES.iteritems():
8280 file.Write("typedef %s %s;\n" % (v, k)) 8328 file.Write("typedef %s %s;\n" % (v, k))
8281 file.Write("#ifdef _WIN64\n") 8329 file.Write("#ifdef _WIN64\n")
8282 for (k, v) in _GL_TYPES_64.iteritems(): 8330 for (k, v) in _GL_TYPES_64.iteritems():
8283 file.Write("typedef %s %s;\n" % (v, k)) 8331 file.Write("typedef %s %s;\n" % (v, k))
8284 file.Write("#else\n") 8332 file.Write("#else\n")
8285 for (k, v) in _GL_TYPES_32.iteritems(): 8333 for (k, v) in _GL_TYPES_32.iteritems():
8286 file.Write("typedef %s %s;\n" % (v, k)) 8334 file.Write("typedef %s %s;\n" % (v, k))
8287 file.Write("#endif // _WIN64\n") 8335 file.Write("#endif // _WIN64\n")
8288 file.Write("#endif // __gl2_h_\n\n") 8336 file.Write("#endif // __gl2_h_\n\n")
8337 file.Write("#endinl\n")
8289 8338
8290 for interface in self.pepper_interfaces: 8339 for interface in self.pepper_interfaces:
8291 if interface.dev != dev: 8340 if interface.dev != dev:
8292 continue 8341 continue
8293 file.Write("#define %s_1_0 \"%s;1.0\"\n" % 8342 # Historically, we provide OpenGLES2 interfaces with struct
8294 (interface.GetInterfaceName(), interface.GetInterfaceString())) 8343 # namespace. Not to break code which uses the interface as
8295 file.Write("#define %s %s_1_0\n" % 8344 # "struct OpenGLES2", we put it in struct namespace.
8296 (interface.GetInterfaceName(), interface.GetInterfaceName())) 8345 file.Write('\n[macro="%s", force_struct_namespace]\n' %
8297 8346 interface.GetInterfaceName())
8298 file.Write("\nstruct %s {\n" % interface.GetStructName()) 8347 file.Write("interface %s {\n" % interface.GetStructName())
8299 for func in self.original_functions: 8348 for func in self.original_functions:
8300 if not func.InPepperInterface(interface): 8349 if not func.InPepperInterface(interface):
8301 continue 8350 continue
8302 8351
8303 original_arg = func.MakeTypedPepperArgString("") 8352 ret_type = func.MapCTypeToPepperIdlType(func.return_type,
8304 context_arg = "PP_Resource context" 8353 is_for_return_type=True)
8305 if len(original_arg): 8354 func_prefix = " %s %s(" % (ret_type, func.GetPepperName())
8306 arg = context_arg + ", " + original_arg 8355 file.Write(func_prefix)
8307 else: 8356 file.Write("[in] PP_Resource context")
8308 arg = context_arg 8357 for arg in func.MakeTypedPepperIdlArgStrings():
8309 file.Write(" %s (*%s)(%s);\n" % 8358 file.Write(",\n" + " " * len(func_prefix) + arg)
8310 (func.return_type, func.GetPepperName(), arg)) 8359 file.Write(");\n")
8311 file.Write("};\n\n") 8360 file.Write("};\n\n")
8312 8361
8313 8362
8314 file.Close() 8363 file.Close()
8315 8364
8316 def WritePepperGLES2Implementation(self, filename): 8365 def WritePepperGLES2Implementation(self, filename):
8317 """Writes the Pepper OpenGLES interface implementation.""" 8366 """Writes the Pepper OpenGLES interface implementation."""
8318 8367
8319 file = CWriter(filename) 8368 file = CWriter(filename)
8320 file.Write(_LICENSE) 8369 file.Write(_LICENSE)
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
8505 # This script lives under gpu/command_buffer, cd to base directory. 8554 # This script lives under gpu/command_buffer, cd to base directory.
8506 os.chdir(os.path.dirname(__file__) + "/../..") 8555 os.chdir(os.path.dirname(__file__) + "/../..")
8507 8556
8508 gen = GLGenerator(options.verbose) 8557 gen = GLGenerator(options.verbose)
8509 gen.ParseGLH("gpu/command_buffer/cmd_buffer_functions.txt") 8558 gen.ParseGLH("gpu/command_buffer/cmd_buffer_functions.txt")
8510 8559
8511 # Support generating files under gen/ 8560 # Support generating files under gen/
8512 if options.output_dir != None: 8561 if options.output_dir != None:
8513 os.chdir(options.output_dir) 8562 os.chdir(options.output_dir)
8514 8563
8515 gen.WritePepperGLES2Interface("ppapi/c/ppb_opengles2.h", False) 8564 gen.WritePepperGLES2Interface("ppapi/api/ppb_opengles2.idl", False)
8516 gen.WritePepperGLES2Interface("ppapi/c/dev/ppb_opengles2ext_dev.h", True) 8565 gen.WritePepperGLES2Interface("ppapi/api/dev/ppb_opengles2ext_dev.idl", True)
8517 gen.WriteGLES2ToPPAPIBridge("ppapi/lib/gl/gles2/gles2.c") 8566 gen.WriteGLES2ToPPAPIBridge("ppapi/lib/gl/gles2/gles2.c")
8518 gen.WritePepperGLES2Implementation( 8567 gen.WritePepperGLES2Implementation(
8519 "ppapi/shared_impl/ppb_opengles2_shared.cc") 8568 "ppapi/shared_impl/ppb_opengles2_shared.cc")
8520 os.chdir("gpu/command_buffer") 8569 os.chdir("gpu/command_buffer")
8521 gen.WriteCommandIds("common/gles2_cmd_ids_autogen.h") 8570 gen.WriteCommandIds("common/gles2_cmd_ids_autogen.h")
8522 gen.WriteFormat("common/gles2_cmd_format_autogen.h") 8571 gen.WriteFormat("common/gles2_cmd_format_autogen.h")
8523 gen.WriteFormatTest("common/gles2_cmd_format_test_autogen.h") 8572 gen.WriteFormatTest("common/gles2_cmd_format_test_autogen.h")
8524 gen.WriteGLES2InterfaceHeader("client/gles2_interface_autogen.h") 8573 gen.WriteGLES2InterfaceHeader("client/gles2_interface_autogen.h")
8525 gen.WriteGLES2InterfaceStub("client/gles2_interface_stub_autogen.h") 8574 gen.WriteGLES2InterfaceStub("client/gles2_interface_stub_autogen.h")
8526 gen.WriteGLES2InterfaceStubImpl( 8575 gen.WriteGLES2InterfaceStubImpl(
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
8599 "ppapi/shared_impl/ppb_opengles2_shared.cc"]) 8648 "ppapi/shared_impl/ppb_opengles2_shared.cc"])
8600 8649
8601 if gen.errors > 0: 8650 if gen.errors > 0:
8602 print "%d errors" % gen.errors 8651 print "%d errors" % gen.errors
8603 return 1 8652 return 1
8604 return 0 8653 return 0
8605 8654
8606 8655
8607 if __name__ == '__main__': 8656 if __name__ == '__main__':
8608 sys.exit(main(sys.argv[1:])) 8657 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | ppapi/api/dev/ppb_opengles2ext_dev.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698