Commit 7bba553d authored by hamaji's avatar hamaji Committed by Commit bot

Generate Pepper IDL for OpenGLES2

Previously, we were directly generating header files for
OpenGLES2 interface. This is not aligned with other Pepper
APIs. The header file generated from the generated IDL file
should be compatible with the previous one. To keep OpenGLES2
interfaces in struct namespace, this change introduces
"force_struct_namespace" attribute to the generator script.

TEST=trybots
BUG=411799

Review URL: https://codereview.chromium.org/538903002

Cr-Commit-Position: refs/heads/master@{#293904}
parent 5cdbf79d
...@@ -6946,6 +6946,36 @@ class Function(object): ...@@ -6946,6 +6946,36 @@ class Function(object):
else: else:
return self.MakeTypedOriginalArgString(prefix, False) 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): def GetPepperName(self):
if self.GetInfo("pepper_name"): if self.GetInfo("pepper_name"):
return self.GetInfo("pepper_name") return self.GetInfo("pepper_name")
...@@ -8252,10 +8282,28 @@ const size_t GLES2Util::enum_to_string_table_len_ = ...@@ -8252,10 +8282,28 @@ const size_t GLES2Util::enum_to_string_table_len_ =
def WritePepperGLES2Interface(self, filename, dev): def WritePepperGLES2Interface(self, filename, dev):
"""Writes the Pepper OpenGLES interface definition.""" """Writes the Pepper OpenGLES interface definition."""
file = CHeaderWriter( file = CWriter(filename)
filename, file.Write(_LICENSE)
"// OpenGL ES interface.\n") 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") file.Write("#include \"ppapi/c/pp_resource.h\"\n")
if dev: if dev:
file.Write("#include \"ppapi/c/ppb_opengles2.h\"\n\n") file.Write("#include \"ppapi/c/ppb_opengles2.h\"\n\n")
...@@ -8271,28 +8319,29 @@ const size_t GLES2Util::enum_to_string_table_len_ = ...@@ -8271,28 +8319,29 @@ const size_t GLES2Util::enum_to_string_table_len_ =
file.Write("typedef %s %s;\n" % (v, k)) file.Write("typedef %s %s;\n" % (v, k))
file.Write("#endif // _WIN64\n") file.Write("#endif // _WIN64\n")
file.Write("#endif // __gl2_h_\n\n") file.Write("#endif // __gl2_h_\n\n")
file.Write("#endinl\n")
for interface in self.pepper_interfaces: for interface in self.pepper_interfaces:
if interface.dev != dev: if interface.dev != dev:
continue continue
file.Write("#define %s_1_0 \"%s;1.0\"\n" % # Historically, we provide OpenGLES2 interfaces with struct
(interface.GetInterfaceName(), interface.GetInterfaceString())) # namespace. Not to break code which uses the interface as
file.Write("#define %s %s_1_0\n" % # "struct OpenGLES2", we put it in struct namespace.
(interface.GetInterfaceName(), interface.GetInterfaceName())) file.Write('\n[macro="%s", force_struct_namespace]\n' %
interface.GetInterfaceName())
file.Write("\nstruct %s {\n" % interface.GetStructName()) file.Write("interface %s {\n" % interface.GetStructName())
for func in self.original_functions: for func in self.original_functions:
if not func.InPepperInterface(interface): if not func.InPepperInterface(interface):
continue continue
original_arg = func.MakeTypedPepperArgString("") ret_type = func.MapCTypeToPepperIdlType(func.return_type,
context_arg = "PP_Resource context" is_for_return_type=True)
if len(original_arg): func_prefix = " %s %s(" % (ret_type, func.GetPepperName())
arg = context_arg + ", " + original_arg file.Write(func_prefix)
else: file.Write("[in] PP_Resource context")
arg = context_arg for arg in func.MakeTypedPepperIdlArgStrings():
file.Write(" %s (*%s)(%s);\n" % file.Write(",\n" + " " * len(func_prefix) + arg)
(func.return_type, func.GetPepperName(), arg)) file.Write(");\n")
file.Write("};\n\n") file.Write("};\n\n")
...@@ -8497,8 +8546,8 @@ def main(argv): ...@@ -8497,8 +8546,8 @@ def main(argv):
if options.output_dir != None: if options.output_dir != None:
os.chdir(options.output_dir) os.chdir(options.output_dir)
gen.WritePepperGLES2Interface("ppapi/c/ppb_opengles2.h", False) gen.WritePepperGLES2Interface("ppapi/api/ppb_opengles2.idl", False)
gen.WritePepperGLES2Interface("ppapi/c/dev/ppb_opengles2ext_dev.h", True) gen.WritePepperGLES2Interface("ppapi/api/dev/ppb_opengles2ext_dev.idl", True)
gen.WriteGLES2ToPPAPIBridge("ppapi/lib/gl/gles2/gles2.c") gen.WriteGLES2ToPPAPIBridge("ppapi/lib/gl/gles2/gles2.c")
gen.WritePepperGLES2Implementation( gen.WritePepperGLES2Implementation(
"ppapi/shared_impl/ppb_opengles2_shared.cc") "ppapi/shared_impl/ppb_opengles2_shared.cc")
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
// It's formatted by clang-format using chromium coding style:
// clang-format -i -style=chromium filename
// DO NOT EDIT!
label Chrome {
M39 = 1.0
};
#inline c
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/ppb_opengles2.h"
#endinl
[macro="PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE", force_struct_namespace]
interface PPB_OpenGLES2DrawBuffers_Dev {
void DrawBuffersEXT([in] PP_Resource context,
[in] GLsizei count,
[in] GLenum_ptr_t bufs);
};
This diff is collapsed.
// Copyright 2014 The Chromium Authors. All rights reserved. /* Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be * Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. * found in the LICENSE file. */
// This file is auto-generated from /* From dev/ppb_opengles2ext_dev.idl modified Fri Sep 5 14:52:51 2014. */
// gpu/command_buffer/build_gles2_cmd_buffer.py
// It's formatted by clang-format using chromium coding style:
// clang-format -i -style=chromium filename
// DO NOT EDIT!
// OpenGL ES interface.
#ifndef PPAPI_C_DEV_PPB_OPENGLES2EXT_DEV_H_ #ifndef PPAPI_C_DEV_PPB_OPENGLES2EXT_DEV_H_
#define PPAPI_C_DEV_PPB_OPENGLES2EXT_DEV_H_ #define PPAPI_C_DEV_PPB_OPENGLES2EXT_DEV_H_
#include "ppapi/c/pp_macros.h"
#include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/ppb_opengles2.h" #include "ppapi/c/ppb_opengles2.h"
#define PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0 \ #define PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0 \
"PPB_OpenGLES2DrawBuffers(Dev);1.0" "PPB_OpenGLES2DrawBuffers(Dev);1.0"
#define PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE \ #define PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE \
PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0 PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0
/**
* @file
* This file is auto-generated from
* gpu/command_buffer/build_gles2_cmd_buffer.py
* It's formatted by clang-format using chromium coding style:
* clang-format -i -style=chromium filename
* DO NOT EDIT! */
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/ppb_opengles2.h"
/**
* @addtogroup Interfaces
* @{
*/
struct PPB_OpenGLES2DrawBuffers_Dev_1_0 {
void (*DrawBuffersEXT)(PP_Resource context,
GLsizei count,
const GLenum* bufs);
};
struct PPB_OpenGLES2DrawBuffers_Dev { struct PPB_OpenGLES2DrawBuffers_Dev {
void (*DrawBuffersEXT)(PP_Resource context, void (*DrawBuffersEXT)(PP_Resource context,
GLsizei count, GLsizei count,
const GLenum* bufs); const GLenum* bufs);
}; };
/**
* @}
*/
#endif /* PPAPI_C_DEV_PPB_OPENGLES2EXT_DEV_H_ */
#endif // PPAPI_C_DEV_PPB_OPENGLES2EXT_DEV_H_
This diff is collapsed.
...@@ -174,6 +174,21 @@ class CGen(object): ...@@ -174,6 +174,21 @@ class CGen(object):
'interface_t' : 'const void*' 'interface_t' : 'const void*'
} }
# Tell how to handle pointers to GL types.
for gltype in ['GLbitfield', 'GLboolean', 'GLbyte', 'GLclampf',
'GLclampx', 'GLenum', 'GLfixed', 'GLfloat', 'GLint',
'GLintptr', 'GLshort', 'GLsizei', 'GLsizeiptr',
'GLubyte', 'GLuint', 'GLushort']:
ptrtype = gltype + '_ptr_t'
TypeMap[ptrtype] = {
'in': 'const %s',
'inout': '%s',
'out': '%s',
'return': 'const %s',
'store': '%s'
}
RemapName[ptrtype] = '%s*' % gltype
def __init__(self): def __init__(self):
self.dbg_depth = 0 self.dbg_depth = 0
...@@ -571,6 +586,22 @@ class CGen(object): ...@@ -571,6 +586,22 @@ class CGen(object):
return out return out
def DefineUnversionedInterface(self, node, rel):
out = '\n'
if node.GetProperty('force_struct_namespace'):
# Duplicate the definition to put it in struct namespace. This
# attribute is only for legacy APIs like OpenGLES2 and new APIs
# must not use this. See http://crbug.com/411799
out += self.DefineStructInternals(node, rel,
include_version=False, comment=True)
else:
# Define an unversioned typedef for the most recent version
out += 'typedef struct %s %s;\n' % (
self.GetStructName(node, rel, include_version=True),
self.GetStructName(node, rel, include_version=False))
return out
def DefineStruct(self, node, releases, prefix='', comment=False): def DefineStruct(self, node, releases, prefix='', comment=False):
__pychecker__ = 'unusednames=comment,prefix' __pychecker__ = 'unusednames=comment,prefix'
self.LogEnter('DefineStruct %s' % node) self.LogEnter('DefineStruct %s' % node)
...@@ -601,10 +632,7 @@ class CGen(object): ...@@ -601,10 +632,7 @@ class CGen(object):
out = self.DefineStructInternals(node, last_rel, out = self.DefineStructInternals(node, last_rel,
include_version=True, comment=True) include_version=True, comment=True)
if last_rel == newest_stable: if last_rel == newest_stable:
# Define an unversioned typedef for the most recent version out += self.DefineUnversionedInterface(node, last_rel)
out += '\ntypedef struct %s %s;\n' % (
self.GetStructName(node, last_rel, include_version=True),
self.GetStructName(node, last_rel, include_version=False))
# Build the rest without comments and with the version number appended # Build the rest without comments and with the version number appended
for rel in build_list[0:-1]: for rel in build_list[0:-1]:
...@@ -619,10 +647,7 @@ class CGen(object): ...@@ -619,10 +647,7 @@ class CGen(object):
include_version=True, include_version=True,
comment=False) comment=False)
if rel == newest_stable: if rel == newest_stable:
# Define an unversioned typedef for the most recent version out += self.DefineUnversionedInterface(node, rel)
out += '\ntypedef struct %s %s;\n' % (
self.GetStructName(node, rel, include_version=True),
self.GetStructName(node, rel, include_version=False))
self.LogExit('Exit DefineStruct') self.LogExit('Exit DefineStruct')
return out return out
...@@ -790,4 +815,3 @@ def main(args): ...@@ -790,4 +815,3 @@ def main(args):
if __name__ == '__main__': if __name__ == '__main__':
sys.exit(main(sys.argv[1:])) sys.exit(main(sys.argv[1:]))
...@@ -1475,6 +1475,22 @@ static int32_t Pnacl_M29_PPB_NetworkProxy_GetProxyForURL(PP_Instance instance, s ...@@ -1475,6 +1475,22 @@ static int32_t Pnacl_M29_PPB_NetworkProxy_GetProxyForURL(PP_Instance instance, s
/* End wrapper methods for PPB_NetworkProxy_1_0 */ /* End wrapper methods for PPB_NetworkProxy_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2InstancedArrays_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2FramebufferBlit_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2FramebufferMultisample_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2ChromiumEnableFeature_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2ChromiumMapSub_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2Query_1_0 */
/* Not generating wrapper methods for PPB_OpenGLES2VertexArrayObject_1_0 */
/* Begin wrapper methods for PPB_TCPSocket_1_0 */ /* Begin wrapper methods for PPB_TCPSocket_1_0 */
static PP_Resource Pnacl_M29_PPB_TCPSocket_Create(PP_Instance instance) { static PP_Resource Pnacl_M29_PPB_TCPSocket_Create(PP_Instance instance) {
...@@ -2419,6 +2435,8 @@ static void Pnacl_M21_PPB_IMEInputEvent_Dev_GetSelection(PP_Resource ime_event, ...@@ -2419,6 +2435,8 @@ static void Pnacl_M21_PPB_IMEInputEvent_Dev_GetSelection(PP_Resource ime_event,
/* Not generating wrapper methods for PPB_Memory_Dev_0_1 */ /* Not generating wrapper methods for PPB_Memory_Dev_0_1 */
/* Not generating wrapper methods for PPB_OpenGLES2DrawBuffers_Dev_1_0 */
/* Begin wrapper methods for PPB_Printing_Dev_0_7 */ /* Begin wrapper methods for PPB_Printing_Dev_0_7 */
static PP_Resource Pnacl_M23_PPB_Printing_Dev_Create(PP_Instance instance) { static PP_Resource Pnacl_M23_PPB_Printing_Dev_Create(PP_Instance instance) {
...@@ -4845,6 +4863,22 @@ static const struct PPB_NetworkProxy_1_0 Pnacl_Wrappers_PPB_NetworkProxy_1_0 = { ...@@ -4845,6 +4863,22 @@ static const struct PPB_NetworkProxy_1_0 Pnacl_Wrappers_PPB_NetworkProxy_1_0 = {
.GetProxyForURL = (int32_t (*)(PP_Instance instance, struct PP_Var url, struct PP_Var* proxy_string, struct PP_CompletionCallback callback))&Pnacl_M29_PPB_NetworkProxy_GetProxyForURL .GetProxyForURL = (int32_t (*)(PP_Instance instance, struct PP_Var url, struct PP_Var* proxy_string, struct PP_CompletionCallback callback))&Pnacl_M29_PPB_NetworkProxy_GetProxyForURL
}; };
/* Not generating wrapper interface for PPB_OpenGLES2_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2InstancedArrays_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2FramebufferBlit_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2FramebufferMultisample_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2ChromiumEnableFeature_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2ChromiumMapSub_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2Query_1_0 */
/* Not generating wrapper interface for PPB_OpenGLES2VertexArrayObject_1_0 */
static const struct PPB_TCPSocket_1_0 Pnacl_Wrappers_PPB_TCPSocket_1_0 = { static const struct PPB_TCPSocket_1_0 Pnacl_Wrappers_PPB_TCPSocket_1_0 = {
.Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M29_PPB_TCPSocket_Create, .Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M29_PPB_TCPSocket_Create,
.IsTCPSocket = (PP_Bool (*)(PP_Resource resource))&Pnacl_M29_PPB_TCPSocket_IsTCPSocket, .IsTCPSocket = (PP_Bool (*)(PP_Resource resource))&Pnacl_M29_PPB_TCPSocket_IsTCPSocket,
...@@ -5122,6 +5156,8 @@ static const struct PPB_IMEInputEvent_Dev_0_2 Pnacl_Wrappers_PPB_IMEInputEvent_D ...@@ -5122,6 +5156,8 @@ static const struct PPB_IMEInputEvent_Dev_0_2 Pnacl_Wrappers_PPB_IMEInputEvent_D
/* Not generating wrapper interface for PPB_Memory_Dev_0_1 */ /* Not generating wrapper interface for PPB_Memory_Dev_0_1 */
/* Not generating wrapper interface for PPB_OpenGLES2DrawBuffers_Dev_1_0 */
static const struct PPB_Printing_Dev_0_7 Pnacl_Wrappers_PPB_Printing_Dev_0_7 = { static const struct PPB_Printing_Dev_0_7 Pnacl_Wrappers_PPB_Printing_Dev_0_7 = {
.Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M23_PPB_Printing_Dev_Create, .Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M23_PPB_Printing_Dev_Create,
.GetDefaultPrintSettings = (int32_t (*)(PP_Resource resource, struct PP_PrintSettings_Dev* print_settings, struct PP_CompletionCallback callback))&Pnacl_M23_PPB_Printing_Dev_GetDefaultPrintSettings .GetDefaultPrintSettings = (int32_t (*)(PP_Resource resource, struct PP_PrintSettings_Dev* print_settings, struct PP_CompletionCallback callback))&Pnacl_M23_PPB_Printing_Dev_GetDefaultPrintSettings
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment