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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ppapi/api/dev/ppb_opengles2ext_dev.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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")
« 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