| Index: gpu/command_buffer/build_gles2_cmd_buffer.py
|
| diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| index 6720998d258605c89f98880ac01d2167c17786b5..4a06d26c45b7c19923459fae2e0ec2de662a032c 100755
|
| --- a/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| @@ -6961,6 +6961,36 @@ class Function(object):
|
| else:
|
| return self.MakeTypedOriginalArgString(prefix, False)
|
|
|
| + def MapCTypeToPepperIdlType(self, ctype, is_for_return_type=False):
|
| + """Converts a C type name to the corresponding Pepper IDL type."""
|
| + idltype = {
|
| + 'char*': '[out] str_t',
|
| + 'const GLchar* const*': '[out] cstr_t',
|
| + 'const char*': 'cstr_t',
|
| + 'const void*': 'mem_t',
|
| + 'void*': '[out] mem_t',
|
| + 'void**': '[out] mem_ptr_t',
|
| + }.get(ctype, ctype)
|
| + # We use "GLxxx_ptr_t" for "GLxxx*".
|
| + matched = re.match(r'(const )?(GL\w+)\*$', ctype)
|
| + if matched:
|
| + idltype = matched.group(2) + '_ptr_t'
|
| + if not matched.group(1):
|
| + idltype = '[out] ' + idltype
|
| + # If an in/out specifier is not specified yet, prepend [in].
|
| + if idltype[0] != '[':
|
| + idltype = '[in] ' + idltype
|
| + # Strip the in/out specifier for a return type.
|
| + if is_for_return_type:
|
| + idltype = re.sub(r'\[\w+\] ', '', idltype)
|
| + return idltype
|
| +
|
| + def MakeTypedPepperIdlArgStrings(self):
|
| + """Gets a list of arguments as they need to be for Pepper IDL."""
|
| + args = self.GetOriginalArgs()
|
| + return ["%s %s" % (self.MapCTypeToPepperIdlType(arg.type), arg.name)
|
| + for arg in args]
|
| +
|
| def GetPepperName(self):
|
| if self.GetInfo("pepper_name"):
|
| return self.GetInfo("pepper_name")
|
| @@ -8267,10 +8297,28 @@ const size_t GLES2Util::enum_to_string_table_len_ =
|
|
|
| def WritePepperGLES2Interface(self, filename, dev):
|
| """Writes the Pepper OpenGLES interface definition."""
|
| - file = CHeaderWriter(
|
| - filename,
|
| - "// OpenGL ES interface.\n")
|
| + file = CWriter(filename)
|
| + file.Write(_LICENSE)
|
| + file.Write(_DO_NOT_EDIT_WARNING)
|
|
|
| + file.Write("label Chrome {\n")
|
| + file.Write(" M39 = 1.0\n")
|
| + file.Write("};\n\n")
|
| +
|
| + if not dev:
|
| + # Declare GL types.
|
| + file.Write("[version=1.0]\n")
|
| + file.Write("describe {\n")
|
| + for gltype in ['GLbitfield', 'GLboolean', 'GLbyte', 'GLclampf',
|
| + 'GLclampx', 'GLenum', 'GLfixed', 'GLfloat', 'GLint',
|
| + 'GLintptr', 'GLshort', 'GLsizei', 'GLsizeiptr',
|
| + 'GLubyte', 'GLuint', 'GLushort']:
|
| + file.Write(" %s;\n" % gltype)
|
| + file.Write(" %s_ptr_t;\n" % gltype)
|
| + file.Write("};\n\n")
|
| +
|
| + # C level typedefs.
|
| + file.Write("#inline c\n")
|
| file.Write("#include \"ppapi/c/pp_resource.h\"\n")
|
| if dev:
|
| file.Write("#include \"ppapi/c/ppb_opengles2.h\"\n\n")
|
| @@ -8286,28 +8334,29 @@ const size_t GLES2Util::enum_to_string_table_len_ =
|
| file.Write("typedef %s %s;\n" % (v, k))
|
| file.Write("#endif // _WIN64\n")
|
| file.Write("#endif // __gl2_h_\n\n")
|
| + file.Write("#endinl\n")
|
|
|
| for interface in self.pepper_interfaces:
|
| if interface.dev != dev:
|
| continue
|
| - file.Write("#define %s_1_0 \"%s;1.0\"\n" %
|
| - (interface.GetInterfaceName(), interface.GetInterfaceString()))
|
| - file.Write("#define %s %s_1_0\n" %
|
| - (interface.GetInterfaceName(), interface.GetInterfaceName()))
|
| -
|
| - file.Write("\nstruct %s {\n" % interface.GetStructName())
|
| + # Historically, we provide OpenGLES2 interfaces with struct
|
| + # namespace. Not to break code which uses the interface as
|
| + # "struct OpenGLES2", we put it in struct namespace.
|
| + file.Write('\n[macro="%s", force_struct_namespace]\n' %
|
| + interface.GetInterfaceName())
|
| + file.Write("interface %s {\n" % interface.GetStructName())
|
| for func in self.original_functions:
|
| if not func.InPepperInterface(interface):
|
| continue
|
|
|
| - original_arg = func.MakeTypedPepperArgString("")
|
| - context_arg = "PP_Resource context"
|
| - if len(original_arg):
|
| - arg = context_arg + ", " + original_arg
|
| - else:
|
| - arg = context_arg
|
| - file.Write(" %s (*%s)(%s);\n" %
|
| - (func.return_type, func.GetPepperName(), arg))
|
| + ret_type = func.MapCTypeToPepperIdlType(func.return_type,
|
| + is_for_return_type=True)
|
| + func_prefix = " %s %s(" % (ret_type, func.GetPepperName())
|
| + file.Write(func_prefix)
|
| + file.Write("[in] PP_Resource context")
|
| + for arg in func.MakeTypedPepperIdlArgStrings():
|
| + file.Write(",\n" + " " * len(func_prefix) + arg)
|
| + file.Write(");\n")
|
| file.Write("};\n\n")
|
|
|
|
|
| @@ -8512,8 +8561,8 @@ def main(argv):
|
| if options.output_dir != None:
|
| os.chdir(options.output_dir)
|
|
|
| - gen.WritePepperGLES2Interface("ppapi/c/ppb_opengles2.h", False)
|
| - gen.WritePepperGLES2Interface("ppapi/c/dev/ppb_opengles2ext_dev.h", True)
|
| + gen.WritePepperGLES2Interface("ppapi/api/ppb_opengles2.idl", False)
|
| + gen.WritePepperGLES2Interface("ppapi/api/dev/ppb_opengles2ext_dev.idl", True)
|
| gen.WriteGLES2ToPPAPIBridge("ppapi/lib/gl/gles2/gles2.c")
|
| gen.WritePepperGLES2Implementation(
|
| "ppapi/shared_impl/ppb_opengles2_shared.cc")
|
|
|