X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fgpu%2Fcommand_buffer%2Fbuild_gles2_cmd_buffer.py;h=09099d55ba5056ffb70a3ccd7a8c768a7f739d4c;hb=3545e9f2671f595d2a2f3ee75ca0393b01e35ef6;hp=56f59fcfde1df1d68d99ac1a6cb696033892f0fd;hpb=7d210d4c7e9ba36e635eabc5b5780495f8a63292;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/gpu/command_buffer/build_gles2_cmd_buffer.py b/src/gpu/command_buffer/build_gles2_cmd_buffer.py index 56f59fc..09099d5 100755 --- a/src/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/src/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -506,6 +506,36 @@ _STATES = { }, ], }, + 'MatrixValuesCHROMIUM': { + 'type': 'NamedParameter', + 'func': 'MatrixLoadfEXT', + 'states': [ + { 'enum': 'GL_PATH_MODELVIEW_MATRIX_CHROMIUM', + 'enum_set': 'GL_PATH_MODELVIEW_CHROMIUM', + 'name': 'modelview_matrix', + 'type': 'GLfloat', + 'default': [ + '1.0f', '0.0f','0.0f','0.0f', + '0.0f', '1.0f','0.0f','0.0f', + '0.0f', '0.0f','1.0f','0.0f', + '0.0f', '0.0f','0.0f','1.0f', + ], + 'extension_flag': 'chromium_path_rendering', + }, + { 'enum': 'GL_PATH_PROJECTION_MATRIX_CHROMIUM', + 'enum_set': 'GL_PATH_PROJECTION_CHROMIUM', + 'name': 'projection_matrix', + 'type': 'GLfloat', + 'default': [ + '1.0f', '0.0f','0.0f','0.0f', + '0.0f', '1.0f','0.0f','0.0f', + '0.0f', '0.0f','1.0f','0.0f', + '0.0f', '0.0f','0.0f','1.0f', + ], + 'extension_flag': 'chromium_path_rendering', + }, + ], + }, } # Named type info object represents a named type that is used in OpenGL call @@ -839,6 +869,13 @@ _NAMED_TYPE_INFO = { 'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE', ], }, + 'MatrixMode': { + 'type': 'GLenum', + 'valid': [ + 'GL_PATH_PROJECTION_CHROMIUM', + 'GL_PATH_MODELVIEW_CHROMIUM', + ], + }, 'ProgramParameter': { 'type': 'GLenum', 'valid': [ @@ -2584,6 +2621,23 @@ _FUNCTION_INFO = { 'extension': True, 'chromium': True, }, + 'MatrixLoadfCHROMIUM': { + 'type': 'PUT', + 'count': 16, + 'data_type': 'GLfloat', + 'decoder_func': 'DoMatrixLoadfCHROMIUM', + 'gl_test_func': 'glMatrixLoadfEXT', + 'chromium': True, + 'extension': True, + 'extension_flag': 'chromium_path_rendering', + }, + 'MatrixLoadIdentityCHROMIUM': { + 'decoder_func': 'DoMatrixLoadIdentityCHROMIUM', + 'gl_test_func': 'glMatrixLoadIdentityEXT', + 'chromium': True, + 'extension': True, + 'extension_flag': 'chromium_path_rendering', + }, } @@ -2638,19 +2692,51 @@ def CachedStateName(item): return 'cached_' + item['name'] return item['name'] +def ToGLExtensionString(extension_flag): + """Returns GL-type extension string of a extension flag.""" + if extension_flag == "oes_compressed_etc1_rgb8_texture": + return "OES_compressed_ETC1_RGB8_texture" # Fixup inconsitency with rgb8, + # unfortunate. + uppercase_words = [ 'img', 'ext', 'arb', 'chromium', 'oes', 'amd', 'bgra8888', + 'egl', 'atc', 'etc1', 'angle'] + parts = extension_flag.split('_') + return "_".join( + [part.upper() if part in uppercase_words else part for part in parts]) + +def ToCamelCase(input_string): + """converts ABC_underscore_case to ABCUnderscoreCase.""" + return ''.join(w[0].upper() + w[1:] for w in input_string.split('_')) + +def GetGLGetTypeConversion(result_type, value_type, value): + """Makes a gl compatible type conversion string for accessing state variables. + + Useful when accessing state variables through glGetXXX calls. + glGet documetation (for example, the manual pages): + [...] If glGetIntegerv is called, [...] most floating-point values are + rounded to the nearest integer value. [...] + + Args: + result_type: the gl type to be obtained + value_type: the GL type of the state variable + value: the name of the state variable + + Returns: + String that converts the state variable to desired GL type according to GL + rules. + """ + + if result_type == 'GLint': + if value_type == 'GLfloat': + return 'static_cast(round(%s))' % value + return 'static_cast<%s>(%s)' % (result_type, value) class CWriter(object): """Writes to a file formatting it for Google's style guidelines.""" def __init__(self, filename): self.filename = filename - self.file_num = 0 self.content = [] - def SetFileNum(self, num): - """Used to help write number files and tests.""" - self.file_num = num - def Write(self, string): """Writes a string to a file spliting if it's > 80 characters.""" lines = string.splitlines() @@ -2848,13 +2934,18 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, file.Write(" %s(%s);\n" % (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) + def WriteServiceHandlerFunctionHeader(self, func, file): + """Writes function header for service implementation handlers.""" + file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( + uint32_t immediate_data_size, const void* cmd_data) { + const gles2::cmds::%(name)s& c = + *static_cast(cmd_data); + (void)c; + """ % {'name': func.name}) + def WriteServiceImplementation(self, func, file): """Writes the service implementation for a command.""" - file.Write( - "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) - file.Write( - " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % - func.name) + self.WriteServiceHandlerFunctionHeader(func, file) self.WriteHandlerExtensionCheck(func, file) self.WriteHandlerDeferReadWrite(func, file); if len(func.GetOriginalArgs()) > 0: @@ -2872,11 +2963,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, def WriteImmediateServiceImplementation(self, func, file): """Writes the service implementation for an immediate version of command.""" - file.Write( - "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) - file.Write( - " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % - func.name) + self.WriteServiceHandlerFunctionHeader(func, file) self.WriteHandlerExtensionCheck(func, file) self.WriteHandlerDeferReadWrite(func, file); last_arg = func.GetLastOriginalArg() @@ -2893,11 +2980,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, def WriteBucketServiceImplementation(self, func, file): """Writes the service implementation for a bucket version of command.""" - file.Write( - "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) - file.Write( - " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % - func.name) + self.WriteServiceHandlerFunctionHeader(func, file) self.WriteHandlerExtensionCheck(func, file) self.WriteHandlerDeferReadWrite(func, file); last_arg = func.GetLastOriginalArg() @@ -2935,7 +3018,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, file.Write(" if (error != error::kNoError)\n") file.Write(" return error;\n") - def WriteValidUnitTest(self, func, file, test, extra = {}): + def WriteValidUnitTest(self, func, file, test, *extras): """Writes a valid unit test for the service implementation.""" if func.GetInfo('expectation') == False: test = self._remove_expected_call_re.sub('', test) @@ -2950,20 +3033,20 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, ] gl_func_name = func.GetGLTestFunctionName() vars = { - 'test_name': 'GLES2DecoderTest%d' % file.file_num, 'name':name, 'gl_func_name': gl_func_name, 'args': ", ".join(arg_strings), 'gl_args': ", ".join(gl_arg_strings), } - vars.update(extra) + for extra in extras: + vars.update(extra) old_test = "" while (old_test != test): old_test = test test = test % vars file.Write(test % vars) - def WriteInvalidUnitTest(self, func, file, test, extra = {}): + def WriteInvalidUnitTest(self, func, file, test, *extras): """Writes an invalid unit test for the service implementation.""" for invalid_arg_index, invalid_arg in enumerate(func.GetOriginalArgs()): # Service implementation does not test constants, as they are not part of @@ -2994,7 +3077,6 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, gl_error_test = '\n EXPECT_EQ(%s, GetGLError());' % gl_error vars = { - 'test_name': 'GLES2DecoderTest%d' % file.file_num , 'name': func.name, 'arg_index': invalid_arg_index, 'value_index': value_index, @@ -3005,10 +3087,11 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, 'parse_result': parse_result, 'gl_error_test': gl_error_test, } - vars.update(extra) + for extra in extras: + vars.update(extra) file.Write(test % vars) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Writes the service unit test for a command.""" if func.name == 'Enable': @@ -3044,7 +3127,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { EXPECT_EQ(GL_NO_ERROR, GetGLError()); } """ - self.WriteValidUnitTest(func, file, valid_test) + self.WriteValidUnitTest(func, file, valid_test, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -3055,9 +3138,9 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s } """ - self.WriteInvalidUnitTest(func, file, invalid_test) + self.WriteInvalidUnitTest(func, file, invalid_test, *extras) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Writes the service unit test for an immediate command.""" file.Write("// TODO(gman): %s\n" % func.name) @@ -3065,7 +3148,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { """Writes the validation code for an immediate version of a command.""" pass - def WriteBucketServiceUnitTest(self, func, file): + def WriteBucketServiceUnitTest(self, func, file, *extras): """Writes the service unit test for a bucket command.""" file.Write("// TODO(gman): %s\n" % func.name) @@ -3363,9 +3446,9 @@ class StateSetHandler(TypeHandler): (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) file.Write(" }\n") - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" - TypeHandler.WriteServiceUnitTest(self, func, file) + TypeHandler.WriteServiceUnitTest(self, func, file, *extras) state_name = func.GetInfo('state') state = _STATES[state_name] states = state['states'] @@ -3389,12 +3472,13 @@ TEST_P(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) { arg_strings[ndx] = range_check['test_value'] vars = { - 'test_name': 'GLES2DecoderTest%d' % file.file_num, 'name': name, 'ndx': ndx, 'check_ndx': check_ndx, 'args': ", ".join(arg_strings), } + for extra in extras: + vars.update(extra) file.Write(valid_test % vars) if 'nan_check' in item: valid_test = """ @@ -3414,11 +3498,12 @@ TEST_P(%(test_name)s, %(name)sNaNValue%(ndx)d) { arg_strings[ndx] = 'nanf("")' vars = { - 'test_name': 'GLES2DecoderTest%d' % file.file_num, 'name': name, 'ndx': ndx, 'args': ", ".join(arg_strings), } + for extra in extras: + vars.update(extra) file.Write(valid_test % vars) @@ -3566,11 +3651,11 @@ class CustomHandler(TypeHandler): """Overrriden from TypeHandler.""" pass - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) @@ -3635,11 +3720,7 @@ class TodoHandler(CustomHandler): def WriteServiceImplementation(self, func, file): """Overrriden from TypeHandler.""" - file.Write( - "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) - file.Write( - " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % - func.name) + self.WriteServiceHandlerFunctionHeader(func, file) file.Write(" // TODO: for now this is a no-op\n") file.Write( " LOCAL_SET_GL_ERROR(" @@ -3673,15 +3754,15 @@ class HandWrittenHandler(CustomHandler): """Overrriden from TypeHandler.""" pass - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) - def WriteBucketServiceUnitTest(self, func, file): + def WriteBucketServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) @@ -3745,11 +3826,11 @@ class ManualHandler(CustomHandler): """Overrriden from TypeHandler.""" pass - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) @@ -3855,11 +3936,11 @@ class DataHandler(TypeHandler): file.Write("// TODO(gman): Implement test for %s\n" % func.name) return - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" file.Write("// TODO(gman): %s\n\n" % func.name) @@ -3875,7 +3956,7 @@ class BindHandler(TypeHandler): def __init__(self): TypeHandler.__init__(self) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" if len(func.GetOriginalArgs()) == 1: @@ -3906,7 +3987,7 @@ TEST_P(%(test_name)s, %(name)sValidArgsNewId) { self.WriteValidUnitTest(func, file, valid_test, { 'resource_type': func.GetOriginalArgs()[0].resource_type, 'gl_gen_func_name': func.GetInfo("gen_func"), - }) + }, *extras) else: valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -3937,7 +4018,7 @@ TEST_P(%(test_name)s, %(name)sValidArgsNewId) { 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func), 'resource_type': func.GetOriginalArgs()[1].resource_type, 'gl_gen_func_name': func.GetInfo("gen_func"), - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -3948,7 +4029,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s } """ - self.WriteInvalidUnitTest(func, file, invalid_test) + self.WriteInvalidUnitTest(func, file, invalid_test, *extras) def WriteGLES2Implementation(self, func, file): """Writes the GLES2 Implemention.""" @@ -4135,7 +4216,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) { 'types': func.GetInfo('resource_types'), }) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4152,7 +4233,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { """ self.WriteValidUnitTest(func, file, valid_test, { 'resource_name': func.GetInfo('resource_type'), - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs) { EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); @@ -4165,9 +4246,9 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) { """ self.WriteValidUnitTest(func, file, invalid_test, { 'resource_name': func.GetInfo('resource_type').lower(), - }) + }, *extras) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4185,7 +4266,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { """ self.WriteValidUnitTest(func, file, valid_test, { 'resource_name': func.GetInfo('resource_type'), - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs) { EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); @@ -4198,7 +4279,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) { """ self.WriteValidUnitTest(func, file, invalid_test, { 'resource_name': func.GetInfo('resource_type').lower(), - }) + }, *extras) def WriteImmediateCmdComputeSize(self, func, file): """Overrriden from TypeHandler.""" @@ -4301,7 +4382,7 @@ class CreateHandler(TypeHandler): """Overrriden from TypeHandler.""" func.AddCmdArg(Argument("client_id", 'uint32_t')) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4321,7 +4402,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { self.WriteValidUnitTest(func, file, valid_test, { 'comma': comma, 'resource_type': func.name[6:], - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); @@ -4333,7 +4414,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { """ self.WriteInvalidUnitTest(func, file, invalid_test, { 'comma': comma, - }) + }, *extras) def WriteHandlerImplementation (self, func, file): """Overrriden from TypeHandler.""" @@ -4432,7 +4513,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) { 'types': func.GetInfo('resource_types'), }) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4453,7 +4534,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { self.WriteValidUnitTest(func, file, valid_test, { 'resource_name': func.GetInfo('resource_type').lower(), 'upper_resource_name': func.GetInfo('resource_type'), - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs) { GetSharedMemoryAs()[0] = kInvalidClientId; @@ -4463,9 +4544,9 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) { EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); } """ - self.WriteValidUnitTest(func, file, invalid_test) + self.WriteValidUnitTest(func, file, invalid_test, *extras) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4486,7 +4567,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { self.WriteValidUnitTest(func, file, valid_test, { 'resource_name': func.GetInfo('resource_type').lower(), 'upper_resource_name': func.GetInfo('resource_type'), - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs) { cmds::%(name)s& cmd = *GetImmediateAs(); @@ -4497,7 +4578,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) { ExecuteImmediateCmd(cmd, sizeof(temp))); } """ - self.WriteValidUnitTest(func, file, invalid_test) + self.WriteValidUnitTest(func, file, invalid_test, *extras) def WriteHandlerImplementation (self, func, file): """Overrriden from TypeHandler.""" @@ -4651,11 +4732,7 @@ class GETnHandler(TypeHandler): def WriteServiceImplementation(self, func, file): """Overrriden from TypeHandler.""" - file.Write( - "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) - file.Write( - " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % - func.name) + self.WriteServiceHandlerFunctionHeader(func, file) last_arg = func.GetLastOriginalArg() all_but_last_args = func.GetOriginalArgs()[:-1] @@ -4787,7 +4864,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) { 'cmd_args': ", ".join(cmd_arg_strings), }) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4824,7 +4901,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { self.WriteValidUnitTest(func, file, valid_test, { 'local_gl_args': ", ".join(gl_arg_strings), 'valid_pname': valid_pname, - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -4839,7 +4916,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { EXPECT_EQ(0u, result->size);%(gl_error_test)s } """ - self.WriteInvalidUnitTest(func, file, invalid_test) + self.WriteInvalidUnitTest(func, file, invalid_test, *extras) class ArrayArgTypeHandler(TypeHandler): """Base class for type handlers that handle args that are arrays""" @@ -4871,7 +4948,7 @@ class PUTHandler(ArrayArgTypeHandler): def __init__(self): ArrayArgTypeHandler.__init__(self) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Writes the service unit test for a command.""" expected_call = "EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));" if func.GetInfo("first_element_only"): @@ -4897,7 +4974,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { 'data_value': func.GetInfo('data_value') or '0', 'expected_call': expected_call, } - self.WriteValidUnitTest(func, file, valid_test, extra) + self.WriteValidUnitTest(func, file, valid_test, extra, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -4909,9 +4986,9 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s } """ - self.WriteInvalidUnitTest(func, file, invalid_test, extra) + self.WriteInvalidUnitTest(func, file, invalid_test, extra, *extras) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Writes the service unit test for a command.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -4941,7 +5018,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { 'gl_args': ", ".join(gl_arg_strings), 'gl_any_args': ", ".join(gl_any_strings), } - self.WriteValidUnitTest(func, file, valid_test, extra) + self.WriteValidUnitTest(func, file, valid_test, extra, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -4954,7 +5031,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s } """ - self.WriteInvalidUnitTest(func, file, invalid_test, extra) + self.WriteInvalidUnitTest(func, file, invalid_test, extra, *extras) def WriteGetDataSizeCode(self, func, file): """Overrriden from TypeHandler.""" @@ -5142,9 +5219,9 @@ class PUTnHandler(ArrayArgTypeHandler): def __init__(self): ArrayArgTypeHandler.__init__(self) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overridden from TypeHandler.""" - ArrayArgTypeHandler.WriteServiceUnitTest(self, func, file) + ArrayArgTypeHandler.WriteServiceUnitTest(self, func, file, *extras) valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) { @@ -5178,9 +5255,9 @@ TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) { 'gl_args': ", ".join(gl_arg_strings), 'args': ", ".join(arg_strings), } - self.WriteValidUnitTest(func, file, valid_test, extra) + self.WriteValidUnitTest(func, file, valid_test, extra, *extras) - def WriteImmediateServiceUnitTest(self, func, file): + def WriteImmediateServiceUnitTest(self, func, file, *extras): """Overridden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -5212,7 +5289,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { 'gl_args': ", ".join(gl_arg_strings), 'gl_any_args': ", ".join(gl_any_strings), } - self.WriteValidUnitTest(func, file, valid_test, extra) + self.WriteValidUnitTest(func, file, valid_test, extra, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -5225,7 +5302,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s } """ - self.WriteInvalidUnitTest(func, file, invalid_test, extra) + self.WriteInvalidUnitTest(func, file, invalid_test, extra, *extras) def WriteGetDataSizeCode(self, func, file): """Overrriden from TypeHandler.""" @@ -5487,7 +5564,7 @@ class PUTXnHandler(ArrayArgTypeHandler): 'values': values, }) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -5505,7 +5582,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { 'name': func.name, 'count': self.GetArrayCount(func), 'local_args': local_args, - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -5661,8 +5738,8 @@ class GLcharNHandler(CustomHandler): def WriteServiceImplementation(self, func, file): """Overrriden from TypeHandler.""" - file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( - uint32_t immediate_data_size, const gles2::cmds::%(name)s& c) { + self.WriteServiceHandlerFunctionHeader(func, file) + file.Write(""" GLuint bucket_id = static_cast(c.%(bucket_id)s); Bucket* bucket = GetBucket(bucket_id); if (!bucket || bucket->size() == 0) { @@ -5696,7 +5773,7 @@ class IsHandler(TypeHandler): if func.GetInfo('result') == None: func.AddInfo('result', ['uint32_t']) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -5713,7 +5790,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { comma =", " self.WriteValidUnitTest(func, file, valid_test, { 'comma': comma, - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { @@ -5726,7 +5803,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { """ self.WriteInvalidUnitTest(func, file, invalid_test, { 'comma': comma, - }) + }, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) { @@ -5741,15 +5818,11 @@ TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) { """ self.WriteValidUnitTest(func, file, invalid_test, { 'comma': comma, - }) + }, *extras) def WriteServiceImplementation(self, func, file): """Overrriden from TypeHandler.""" - file.Write( - "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) - file.Write( - " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % - func.name) + self.WriteServiceHandlerFunctionHeader(func, file) args = func.GetOriginalArgs() for arg in args: arg.WriteGetCode(file) @@ -5895,7 +5968,7 @@ class STRnHandler(TypeHandler): func.WriteDestinationInitalizationValidation(file) file.Write(code_2 % str_args) - def WriteServiceUnitTest(self, func, file): + def WriteServiceUnitTest(self, func, file, *extras): """Overrriden from TypeHandler.""" valid_test = """ TEST_P(%(test_name)s, %(name)sValidArgs) { @@ -5935,7 +6008,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { " EXPECT_CALL(*gl_, %s(%s, %s, _))\n" " .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1));") % ( get_len_func[2:], id_name, get_len_enum) - self.WriteValidUnitTest(func, file, valid_test, sub) + self.WriteValidUnitTest(func, file, valid_test, sub, *extras) invalid_test = """ TEST_P(%(test_name)s, %(name)sInvalidArgs) { @@ -5948,7 +6021,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) { EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); } """ - self.WriteValidUnitTest(func, file, invalid_test) + self.WriteValidUnitTest(func, file, invalid_test, *extras) def WriteServiceImplementation(self, func, file): """Overrriden from TypeHandler.""" @@ -6873,6 +6946,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") @@ -7000,9 +7103,9 @@ class Function(object): """Writes the service implementation for a command.""" self.type_handler.WriteServiceImplementation(self, file) - def WriteServiceUnitTest(self, file): + def WriteServiceUnitTest(self, file, *extras): """Writes the service implementation for a command.""" - self.type_handler.WriteServiceUnitTest(self, file) + self.type_handler.WriteServiceUnitTest(self, file, *extras) def WriteGLES2CLibImplementation(self, file): """Writes the GLES2 C Lib Implemention.""" @@ -7131,9 +7234,9 @@ class ImmediateFunction(Function): """Overridden from Function""" self.type_handler.WriteImmediateHandlerImplementation(self, file) - def WriteServiceUnitTest(self, file): + def WriteServiceUnitTest(self, file, *extras): """Writes the service implementation for a command.""" - self.type_handler.WriteImmediateServiceUnitTest(self, file) + self.type_handler.WriteImmediateServiceUnitTest(self, file, *extras) def WriteValidationCode(self, file): """Overridden from Function""" @@ -7211,9 +7314,9 @@ class BucketFunction(Function): """Overridden from Function""" self.type_handler.WriteBucketHandlerImplementation(self, file) - def WriteServiceUnitTest(self, file): + def WriteServiceUnitTest(self, file, *extras): """Writes the service implementation for a command.""" - self.type_handler.WriteBucketServiceUnitTest(self, file) + self.type_handler.WriteBucketServiceUnitTest(self, file, *extras) def CreateArg(arg_string): @@ -7457,9 +7560,19 @@ class GLGenerator(object): for state_name in sorted(_STATES.keys()): state = _STATES[state_name] for item in state['states']: - file.Write("%s %s;\n" % (item['type'], item['name'])) + if isinstance(item['default'], list): + file.Write("%s %s[%d];\n" % (item['type'], item['name'], + len(item['default']))) + else: + file.Write("%s %s;\n" % (item['type'], item['name'])) + if item.get('cached', False): - file.Write("%s cached_%s;\n" % (item['type'], item['name'])) + if isinstance(item['default'], list): + file.Write("%s cached_%s[%d];\n" % (item['type'], item['name'], + len(item['default']))) + else: + file.Write("%s cached_%s;\n" % (item['type'], item['name'])) + file.Write("\n") file.Write(""" @@ -7527,10 +7640,26 @@ bool %s::GetStateAs%s( else: for item in state['states']: file.Write(" case %s:\n" % item['enum']) - file.Write(" *num_written = 1;\n") - file.Write(" if (params) {\n") - file.Write(" params[0] = static_cast<%s>(%s);\n" % - (gl_type, item['name'])) + if isinstance(item['default'], list): + item_len = len(item['default']) + file.Write(" *num_written = %d;\n" % item_len) + file.Write(" if (params) {\n") + if item['type'] == gl_type: + file.Write(" memcpy(params, %s, sizeof(%s) * %d);\n" % + (item['name'], item['type'], item_len)) + else: + file.Write(" for (size_t i = 0; i < %s; ++i) {\n" % + item_len) + file.Write(" params[i] = %s;\n" % + (GetGLGetTypeConversion(gl_type, item['type'], + "%s[i]" % item['name']))) + file.Write(" }\n"); + else: + file.Write(" *num_written = 1;\n") + file.Write(" if (params) {\n") + file.Write(" params[0] = %s;\n" % + (GetGLGetTypeConversion(gl_type, item['type'], + item['name']))) file.Write(" }\n") file.Write(" return true;\n") for capability in _CAPABILITY_FLAGS: @@ -7569,9 +7698,17 @@ bool %s::GetStateAs%s( for state_name in sorted(_STATES.keys()): state = _STATES[state_name] for item in state['states']: - file.Write(" %s = %s;\n" % (item['name'], item['default'])) + if isinstance(item['default'], list): + for ndx, value in enumerate(item['default']): + file.Write(" %s[%d] = %s;\n" % (item['name'], ndx, value)) + else: + file.Write(" %s = %s;\n" % (item['name'], item['default'])) if item.get('cached', False): - file.Write(" cached_%s = %s;\n" % (item['name'], item['default'])) + if isinstance(item['default'], list): + for ndx, value in enumerate(item['default']): + file.Write(" cached_%s[%d] = %s;\n" % (item['name'], ndx, value)) + else: + file.Write(" cached_%s = %s;\n" % (item['name'], item['default'])) file.Write("}\n") file.Write(""" @@ -7625,14 +7762,32 @@ void ContextState::InitState(const ContextState *prev_state) const { item_name = CachedStateName(item) if 'extension_flag' in item: - file.Write(" if (feature_info_->feature_flags().%s)\n " % + file.Write(" if (feature_info_->feature_flags().%s) {\n " % item['extension_flag']) if test_prev: - file.Write(" if (prev_state->%s != %s)\n" % - (item_name, item_name)) + if isinstance(item['default'], list): + file.Write(" if (memcmp(prev_state->%s, %s, " + "sizeof(%s) * %d)) {\n" % + (item_name, item_name, item['type'], + len(item['default']))) + else: + file.Write(" if (prev_state->%s != %s) {\n " % + (item_name, item_name)) file.Write(" gl%s(%s, %s);\n" % - (state['func'], item['enum'], item_name)) + (state['func'], + (item['enum_set'] + if 'enum_set' in item else item['enum']), + item['name'])) + if test_prev: + if 'extension_flag' in item: + file.Write(" ") + file.Write(" }") + if 'extension_flag' in item: + file.Write(" }") else: + if 'extension_flag' in state: + file.Write(" if (feature_info_->feature_flags().%s)\n " % + state['extension_flag']) if test_prev: file.Write(" if (") args = [] @@ -7653,7 +7808,6 @@ void ContextState::InitState(const ContextState *prev_state) const { file.Write(" } else {") WriteStates(False) file.Write(" }") - file.Write("}\n") file.Write("""bool ContextState::GetEnabled(GLenum cap) const { @@ -7778,19 +7932,28 @@ bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { file = CHeaderWriter( name, "// It is included by gles2_cmd_decoder_unittest_%d.cc\n" % count) - file.SetFileNum(count) + test_name = 'GLES2DecoderTest%d' % count end = test_num + FUNCTIONS_PER_FILE if end > num_tests: end = num_tests for idx in range(test_num, end): func = self.functions[idx] + + # Do any filtering of the functions here, so that the functions + # will not move between the numbered files if filtering properties + # are changed. + if func.GetInfo('extension_flag'): + continue + if True: #gen_cmd = func.GetInfo('gen_cmd') #if gen_cmd == True or gen_cmd == None: if func.GetInfo('unit_test') == False: file.Write("// TODO(gman): %s\n" % func.name) else: - func.WriteServiceUnitTest(file) + func.WriteServiceUnitTest(file, { + 'test_name': test_name + }) file.Close() file = CHeaderWriter( @@ -7828,27 +7991,70 @@ void GLES2DecoderTestBase::SetupInitStateExpectations() { elif state['type'] == 'NamedParameter': for item in state['states']: if 'extension_flag' in item: - continue + file.Write(" if (group_->feature_info()->feature_flags().%s) {\n" % + item['extension_flag']) + file.Write(" ") + expect_value = item['default'] + if isinstance(expect_value, list): + # TODO: Currently we do not check array values. + expect_value = "_" + file.Write( " EXPECT_CALL(*gl_, %s(%s, %s))\n" % - (state['func'], item['enum'], item['default'])) + (state['func'], + (item['enum_set'] + if 'enum_set' in item else item['enum']), + expect_value)) file.Write(" .Times(1)\n") file.Write(" .RetiresOnSaturation();\n") + if 'extension_flag' in item: + file.Write(" }\n") else: + if 'extension_flag' in state: + file.Write(" if (group_->feature_info()->feature_flags().%s) {\n" % + state['extension_flag']) + file.Write(" ") args = [] for item in state['states']: if 'expected' in item: args.append(item['expected']) else: args.append(item['default']) + # TODO: Currently we do not check array values. + args = ["_" if isinstance(arg, list) else arg for arg in args] file.Write(" EXPECT_CALL(*gl_, %s(%s))\n" % (state['func'], ", ".join(args))) file.Write(" .Times(1)\n") file.Write(" .RetiresOnSaturation();\n") + if 'extension_flag' in state: + file.Write(" }\n") file.Write("""} """) file.Close() + def WriteServiceUnitTestsForExtensions(self, filename): + """Writes the service decorder unit tests for functions with extension_flag. + + The functions are special in that they need a specific unit test + baseclass to turn on the extension. + """ + functions = [f for f in self.functions if f.GetInfo('extension_flag')] + file = CHeaderWriter( + filename, + "// It is included by gles2_cmd_decoder_unittest_extensions.cc\n") + for func in functions: + if True: + if func.GetInfo('unit_test') == False: + file.Write("// TODO(gman): %s\n" % func.name) + else: + extension = ToCamelCase( + ToGLExtensionString(func.GetInfo('extension_flag'))) + func.WriteServiceUnitTest(file, { + 'test_name': 'GLES2DecoderTestWith%s' % extension + }) + + file.Close() + def WriteGLES2Header(self, filename): """Writes the GLES2 header.""" file = CHeaderWriter( @@ -8076,10 +8282,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") @@ -8095,28 +8319,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") @@ -8295,6 +8520,8 @@ def main(argv): gl_state_valid = _NAMED_TYPE_INFO['GLState']['valid'] for state_name in sorted(_STATES.keys()): state = _STATES[state_name] + if 'extension_flag' in state: + continue if 'enum' in state: if not state['enum'] in gl_state_valid: gl_state_valid.append(state['enum']) @@ -8319,8 +8546,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") @@ -8349,6 +8576,8 @@ def main(argv): gen.WriteClientContextStateImpl( "client/client_context_state_impl_autogen.h") gen.WriteServiceUnitTests("service/gles2_cmd_decoder_unittest_%d_autogen.h") + gen.WriteServiceUnitTestsForExtensions( + "service/gles2_cmd_decoder_unittest_extensions_autogen.h") gen.WriteServiceUtilsHeader("service/gles2_cmd_validation_autogen.h") gen.WriteServiceUtilsImplementation( "service/gles2_cmd_validation_implementation_autogen.h") @@ -8398,8 +8627,6 @@ def main(argv): mojo_gles2_prefix + "_autogen.h", mojo_gles2_prefix + "_chromium_texture_mailbox_autogen.h", mojo_gles2_prefix + "_chromium_sync_point_autogen.h", - "ppapi/c/dev/ppb_opengles2ext_dev.h", - "ppapi/c/ppb_opengles2.h", "ppapi/lib/gl/gles2/gles2.c", "ppapi/shared_impl/ppb_opengles2_shared.cc"])