OLD | NEW |
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 4233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4244 return 'static_cast<GLint>(round(%s))' % value | 4244 return 'static_cast<GLint>(round(%s))' % value |
4245 return 'static_cast<%s>(%s)' % (result_type, value) | 4245 return 'static_cast<%s>(%s)' % (result_type, value) |
4246 | 4246 |
4247 class CWriter(object): | 4247 class CWriter(object): |
4248 """Writes to a file formatting it for Google's style guidelines.""" | 4248 """Writes to a file formatting it for Google's style guidelines.""" |
4249 | 4249 |
4250 def __init__(self, filename): | 4250 def __init__(self, filename): |
4251 self.filename = filename | 4251 self.filename = filename |
4252 self.content = [] | 4252 self.content = [] |
4253 | 4253 |
4254 def Write(self, string): | 4254 def write(self, string): |
4255 """Writes a string to a file spliting if it's > 80 characters.""" | 4255 """Writes a string to a file spliting if it's > 80 characters.""" |
4256 lines = string.splitlines() | 4256 lines = string.splitlines() |
4257 num_lines = len(lines) | 4257 num_lines = len(lines) |
4258 for ii in range(0, num_lines): | 4258 for ii in range(0, num_lines): |
4259 self.content.append(lines[ii]) | 4259 self.content.append(lines[ii]) |
4260 if ii < (num_lines - 1) or string[-1] == '\n': | 4260 if ii < (num_lines - 1) or string[-1] == '\n': |
4261 self.content.append('\n') | 4261 self.content.append('\n') |
4262 | 4262 |
4263 def Close(self): | 4263 def close(self): |
4264 """Close the file.""" | 4264 """Close the file.""" |
4265 content = "".join(self.content) | 4265 content = "".join(self.content) |
4266 write_file = True | 4266 write_file = True |
4267 if os.path.exists(self.filename): | 4267 if os.path.exists(self.filename): |
4268 old_file = open(self.filename, "rb"); | 4268 old_file = open(self.filename, "rb"); |
4269 old_content = old_file.read() | 4269 old_content = old_file.read() |
4270 old_file.close(); | 4270 old_file.close(); |
4271 if content == old_content: | 4271 if content == old_content: |
4272 write_file = False | 4272 write_file = False |
4273 if write_file: | 4273 if write_file: |
4274 file = open(self.filename, "wb") | 4274 f = open(self.filename, "wb") |
4275 file.write(content) | 4275 f.write(content) |
4276 file.close() | 4276 f.close() |
4277 | 4277 |
4278 | 4278 |
4279 class CHeaderWriter(CWriter): | 4279 class CHeaderWriter(CWriter): |
4280 """Writes a C Header file.""" | 4280 """Writes a C Header file.""" |
4281 | 4281 |
4282 _non_alnum_re = re.compile(r'[^a-zA-Z0-9]') | 4282 _non_alnum_re = re.compile(r'[^a-zA-Z0-9]') |
4283 | 4283 |
4284 def __init__(self, filename, file_comment = None): | 4284 def __init__(self, filename, file_comment = None): |
4285 CWriter.__init__(self, filename) | 4285 CWriter.__init__(self, filename) |
4286 | 4286 |
4287 base = os.path.abspath(filename) | 4287 base = os.path.abspath(filename) |
4288 while os.path.basename(base) != 'src': | 4288 while os.path.basename(base) != 'src': |
4289 new_base = os.path.dirname(base) | 4289 new_base = os.path.dirname(base) |
4290 assert new_base != base # Prevent infinite loop. | 4290 assert new_base != base # Prevent infinite loop. |
4291 base = new_base | 4291 base = new_base |
4292 | 4292 |
4293 hpath = os.path.relpath(filename, base) | 4293 hpath = os.path.relpath(filename, base) |
4294 self.guard = self._non_alnum_re.sub('_', hpath).upper() + '_' | 4294 self.guard = self._non_alnum_re.sub('_', hpath).upper() + '_' |
4295 | 4295 |
4296 self.Write(_LICENSE) | 4296 self.write(_LICENSE) |
4297 self.Write(_DO_NOT_EDIT_WARNING) | 4297 self.write(_DO_NOT_EDIT_WARNING) |
4298 if not file_comment == None: | 4298 if not file_comment == None: |
4299 self.Write(file_comment) | 4299 self.write(file_comment) |
4300 self.Write("#ifndef %s\n" % self.guard) | 4300 self.write("#ifndef %s\n" % self.guard) |
4301 self.Write("#define %s\n\n" % self.guard) | 4301 self.write("#define %s\n\n" % self.guard) |
4302 | 4302 |
4303 def Close(self): | 4303 def close(self): |
4304 self.Write("#endif // %s\n\n" % self.guard) | 4304 self.write("#endif // %s\n\n" % self.guard) |
4305 CWriter.Close(self) | 4305 CWriter.close(self) |
4306 | 4306 |
4307 class TypeHandler(object): | 4307 class TypeHandler(object): |
4308 """This class emits code for a particular type of function.""" | 4308 """This class emits code for a particular type of function.""" |
4309 | 4309 |
4310 _remove_expected_call_re = re.compile(r' EXPECT_CALL.*?;\n', re.S) | 4310 _remove_expected_call_re = re.compile(r' EXPECT_CALL.*?;\n', re.S) |
4311 | 4311 |
4312 def __init__(self): | 4312 def __init__(self): |
4313 pass | 4313 pass |
4314 | 4314 |
4315 def InitFunction(self, func): | 4315 def InitFunction(self, func): |
4316 """Add or adjust anything type specific for this function.""" | 4316 """Add or adjust anything type specific for this function.""" |
4317 if func.GetInfo('needs_size') and not func.name.endswith('Bucket'): | 4317 if func.GetInfo('needs_size') and not func.name.endswith('Bucket'): |
4318 func.AddCmdArg(DataSizeArgument('data_size')) | 4318 func.AddCmdArg(DataSizeArgument('data_size')) |
4319 | 4319 |
4320 def NeedsDataTransferFunction(self, func): | 4320 def NeedsDataTransferFunction(self, func): |
4321 """Overriden from TypeHandler.""" | 4321 """Overriden from TypeHandler.""" |
4322 return func.num_pointer_args >= 1 | 4322 return func.num_pointer_args >= 1 |
4323 | 4323 |
4324 def WriteStruct(self, func, file): | 4324 def WriteStruct(self, func, f): |
4325 """Writes a structure that matches the arguments to a function.""" | 4325 """Writes a structure that matches the arguments to a function.""" |
4326 comment = func.GetInfo('cmd_comment') | 4326 comment = func.GetInfo('cmd_comment') |
4327 if not comment == None: | 4327 if not comment == None: |
4328 file.Write(comment) | 4328 f.write(comment) |
4329 file.Write("struct %s {\n" % func.name) | 4329 f.write("struct %s {\n" % func.name) |
4330 file.Write(" typedef %s ValueType;\n" % func.name) | 4330 f.write(" typedef %s ValueType;\n" % func.name) |
4331 file.Write(" static const CommandId kCmdId = k%s;\n" % func.name) | 4331 f.write(" static const CommandId kCmdId = k%s;\n" % func.name) |
4332 func.WriteCmdArgFlag(file) | 4332 func.WriteCmdArgFlag(f) |
4333 func.WriteCmdFlag(file) | 4333 func.WriteCmdFlag(f) |
4334 file.Write("\n") | 4334 f.write("\n") |
4335 result = func.GetInfo('result') | 4335 result = func.GetInfo('result') |
4336 if not result == None: | 4336 if not result == None: |
4337 if len(result) == 1: | 4337 if len(result) == 1: |
4338 file.Write(" typedef %s Result;\n\n" % result[0]) | 4338 f.write(" typedef %s Result;\n\n" % result[0]) |
4339 else: | 4339 else: |
4340 file.Write(" struct Result {\n") | 4340 f.write(" struct Result {\n") |
4341 for line in result: | 4341 for line in result: |
4342 file.Write(" %s;\n" % line) | 4342 f.write(" %s;\n" % line) |
4343 file.Write(" };\n\n") | 4343 f.write(" };\n\n") |
4344 | 4344 |
4345 func.WriteCmdComputeSize(file) | 4345 func.WriteCmdComputeSize(f) |
4346 func.WriteCmdSetHeader(file) | 4346 func.WriteCmdSetHeader(f) |
4347 func.WriteCmdInit(file) | 4347 func.WriteCmdInit(f) |
4348 func.WriteCmdSet(file) | 4348 func.WriteCmdSet(f) |
4349 | 4349 |
4350 file.Write(" gpu::CommandHeader header;\n") | 4350 f.write(" gpu::CommandHeader header;\n") |
4351 args = func.GetCmdArgs() | 4351 args = func.GetCmdArgs() |
4352 for arg in args: | 4352 for arg in args: |
4353 file.Write(" %s %s;\n" % (arg.cmd_type, arg.name)) | 4353 f.write(" %s %s;\n" % (arg.cmd_type, arg.name)) |
4354 | 4354 |
4355 consts = func.GetCmdConstants() | 4355 consts = func.GetCmdConstants() |
4356 for const in consts: | 4356 for const in consts: |
4357 file.Write(" static const %s %s = %s;\n" % | 4357 f.write(" static const %s %s = %s;\n" % |
4358 (const.cmd_type, const.name, const.GetConstantValue())) | 4358 (const.cmd_type, const.name, const.GetConstantValue())) |
4359 | 4359 |
4360 file.Write("};\n") | 4360 f.write("};\n") |
4361 file.Write("\n") | 4361 f.write("\n") |
4362 | 4362 |
4363 size = len(args) * _SIZE_OF_UINT32 + _SIZE_OF_COMMAND_HEADER | 4363 size = len(args) * _SIZE_OF_UINT32 + _SIZE_OF_COMMAND_HEADER |
4364 file.Write("static_assert(sizeof(%s) == %d,\n" % (func.name, size)) | 4364 f.write("static_assert(sizeof(%s) == %d,\n" % (func.name, size)) |
4365 file.Write(" \"size of %s should be %d\");\n" % | 4365 f.write(" \"size of %s should be %d\");\n" % |
4366 (func.name, size)) | 4366 (func.name, size)) |
4367 file.Write("static_assert(offsetof(%s, header) == 0,\n" % func.name) | 4367 f.write("static_assert(offsetof(%s, header) == 0,\n" % func.name) |
4368 file.Write(" \"offset of %s header should be 0\");\n" % | 4368 f.write(" \"offset of %s header should be 0\");\n" % |
4369 func.name) | 4369 func.name) |
4370 offset = _SIZE_OF_COMMAND_HEADER | 4370 offset = _SIZE_OF_COMMAND_HEADER |
4371 for arg in args: | 4371 for arg in args: |
4372 file.Write("static_assert(offsetof(%s, %s) == %d,\n" % | 4372 f.write("static_assert(offsetof(%s, %s) == %d,\n" % |
4373 (func.name, arg.name, offset)) | 4373 (func.name, arg.name, offset)) |
4374 file.Write(" \"offset of %s %s should be %d\");\n" % | 4374 f.write(" \"offset of %s %s should be %d\");\n" % |
4375 (func.name, arg.name, offset)) | 4375 (func.name, arg.name, offset)) |
4376 offset += _SIZE_OF_UINT32 | 4376 offset += _SIZE_OF_UINT32 |
4377 if not result == None and len(result) > 1: | 4377 if not result == None and len(result) > 1: |
4378 offset = 0; | 4378 offset = 0; |
4379 for line in result: | 4379 for line in result: |
4380 parts = line.split() | 4380 parts = line.split() |
4381 name = parts[-1] | 4381 name = parts[-1] |
4382 check = """ | 4382 check = """ |
4383 static_assert(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, | 4383 static_assert(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d, |
4384 "offset of %(cmd_name)s Result %(field_name)s should be " | 4384 "offset of %(cmd_name)s Result %(field_name)s should be " |
4385 "%(offset)d"); | 4385 "%(offset)d"); |
4386 """ | 4386 """ |
4387 file.Write((check.strip() + "\n") % { | 4387 f.write((check.strip() + "\n") % { |
4388 'cmd_name': func.name, | 4388 'cmd_name': func.name, |
4389 'field_name': name, | 4389 'field_name': name, |
4390 'offset': offset, | 4390 'offset': offset, |
4391 }) | 4391 }) |
4392 offset += _SIZE_OF_UINT32 | 4392 offset += _SIZE_OF_UINT32 |
4393 file.Write("\n") | 4393 f.write("\n") |
4394 | 4394 |
4395 def WriteHandlerImplementation(self, func, file): | 4395 def WriteHandlerImplementation(self, func, f): |
4396 """Writes the handler implementation for this command.""" | 4396 """Writes the handler implementation for this command.""" |
4397 if func.IsUnsafe() and func.GetInfo('id_mapping'): | 4397 if func.IsUnsafe() and func.GetInfo('id_mapping'): |
4398 code_no_gen = """ if (!group_->Get%(type)sServiceId( | 4398 code_no_gen = """ if (!group_->Get%(type)sServiceId( |
4399 %(var)s, &%(service_var)s)) { | 4399 %(var)s, &%(service_var)s)) { |
4400 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "%(func)s", "invalid %(var)s id"); | 4400 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "%(func)s", "invalid %(var)s id"); |
4401 return error::kNoError; | 4401 return error::kNoError; |
4402 } | 4402 } |
4403 """ | 4403 """ |
4404 code_gen = """ if (!group_->Get%(type)sServiceId( | 4404 code_gen = """ if (!group_->Get%(type)sServiceId( |
4405 %(var)s, &%(service_var)s)) { | 4405 %(var)s, &%(service_var)s)) { |
4406 if (!group_->bind_generates_resource()) { | 4406 if (!group_->bind_generates_resource()) { |
4407 LOCAL_SET_GL_ERROR( | 4407 LOCAL_SET_GL_ERROR( |
4408 GL_INVALID_OPERATION, "%(func)s", "invalid %(var)s id"); | 4408 GL_INVALID_OPERATION, "%(func)s", "invalid %(var)s id"); |
4409 return error::kNoError; | 4409 return error::kNoError; |
4410 } | 4410 } |
4411 GLuint client_id = %(var)s; | 4411 GLuint client_id = %(var)s; |
4412 gl%(gen_func)s(1, &%(service_var)s); | 4412 gl%(gen_func)s(1, &%(service_var)s); |
4413 Create%(type)s(client_id, %(service_var)s); | 4413 Create%(type)s(client_id, %(service_var)s); |
4414 } | 4414 } |
4415 """ | 4415 """ |
4416 gen_func = func.GetInfo('gen_func') | 4416 gen_func = func.GetInfo('gen_func') |
4417 for id_type in func.GetInfo('id_mapping'): | 4417 for id_type in func.GetInfo('id_mapping'): |
4418 service_var = id_type.lower() | 4418 service_var = id_type.lower() |
4419 if id_type == 'Sync': | 4419 if id_type == 'Sync': |
4420 service_var = "service_%s" % service_var | 4420 service_var = "service_%s" % service_var |
4421 file.Write(" GLsync %s = 0;\n" % service_var) | 4421 f.write(" GLsync %s = 0;\n" % service_var) |
4422 if gen_func and id_type in gen_func: | 4422 if gen_func and id_type in gen_func: |
4423 file.Write(code_gen % { 'type': id_type, | 4423 f.write(code_gen % { 'type': id_type, |
4424 'var': id_type.lower(), | 4424 'var': id_type.lower(), |
4425 'service_var': service_var, | 4425 'service_var': service_var, |
4426 'func': func.GetGLFunctionName(), | 4426 'func': func.GetGLFunctionName(), |
4427 'gen_func': gen_func }) | 4427 'gen_func': gen_func }) |
4428 else: | 4428 else: |
4429 file.Write(code_no_gen % { 'type': id_type, | 4429 f.write(code_no_gen % { 'type': id_type, |
4430 'var': id_type.lower(), | 4430 'var': id_type.lower(), |
4431 'service_var': service_var, | 4431 'service_var': service_var, |
4432 'func': func.GetGLFunctionName() }) | 4432 'func': func.GetGLFunctionName() }) |
4433 args = [] | 4433 args = [] |
4434 for arg in func.GetOriginalArgs(): | 4434 for arg in func.GetOriginalArgs(): |
4435 if arg.type == "GLsync": | 4435 if arg.type == "GLsync": |
4436 args.append("service_%s" % arg.name) | 4436 args.append("service_%s" % arg.name) |
4437 elif arg.name.endswith("size") and arg.type == "GLsizei": | 4437 elif arg.name.endswith("size") and arg.type == "GLsizei": |
4438 args.append("num_%s" % func.GetLastOriginalArg().name) | 4438 args.append("num_%s" % func.GetLastOriginalArg().name) |
4439 elif arg.name == "length": | 4439 elif arg.name == "length": |
4440 args.append("nullptr") | 4440 args.append("nullptr") |
4441 else: | 4441 else: |
4442 args.append(arg.name) | 4442 args.append(arg.name) |
4443 file.Write(" %s(%s);\n" % | 4443 f.write(" %s(%s);\n" % |
4444 (func.GetGLFunctionName(), ", ".join(args))) | 4444 (func.GetGLFunctionName(), ", ".join(args))) |
4445 | 4445 |
4446 def WriteCmdSizeTest(self, func, file): | 4446 def WriteCmdSizeTest(self, func, f): |
4447 """Writes the size test for a command.""" | 4447 """Writes the size test for a command.""" |
4448 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);\n") | 4448 f.write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);\n") |
4449 | 4449 |
4450 def WriteFormatTest(self, func, file): | 4450 def WriteFormatTest(self, func, f): |
4451 """Writes a format test for a command.""" | 4451 """Writes a format test for a command.""" |
4452 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 4452 f.write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
4453 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 4453 f.write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
4454 (func.name, func.name)) | 4454 (func.name, func.name)) |
4455 file.Write(" void* next_cmd = cmd.Set(\n") | 4455 f.write(" void* next_cmd = cmd.Set(\n") |
4456 file.Write(" &cmd") | 4456 f.write(" &cmd") |
4457 args = func.GetCmdArgs() | 4457 args = func.GetCmdArgs() |
4458 for value, arg in enumerate(args): | 4458 for value, arg in enumerate(args): |
4459 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 11)) | 4459 f.write(",\n static_cast<%s>(%d)" % (arg.type, value + 11)) |
4460 file.Write(");\n") | 4460 f.write(");\n") |
4461 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % | 4461 f.write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % |
4462 func.name) | 4462 func.name) |
4463 file.Write(" cmd.header.command);\n") | 4463 f.write(" cmd.header.command);\n") |
4464 func.type_handler.WriteCmdSizeTest(func, file) | 4464 func.type_handler.WriteCmdSizeTest(func, f) |
4465 for value, arg in enumerate(args): | 4465 for value, arg in enumerate(args): |
4466 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % | 4466 f.write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % |
4467 (arg.type, value + 11, arg.name)) | 4467 (arg.type, value + 11, arg.name)) |
4468 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 4468 f.write(" CheckBytesWrittenMatchesExpectedSize(\n") |
4469 file.Write(" next_cmd, sizeof(cmd));\n") | 4469 f.write(" next_cmd, sizeof(cmd));\n") |
4470 file.Write("}\n") | 4470 f.write("}\n") |
4471 file.Write("\n") | 4471 f.write("\n") |
4472 | 4472 |
4473 def WriteImmediateFormatTest(self, func, file): | 4473 def WriteImmediateFormatTest(self, func, f): |
4474 """Writes a format test for an immediate version of a command.""" | 4474 """Writes a format test for an immediate version of a command.""" |
4475 pass | 4475 pass |
4476 | 4476 |
4477 def WriteBucketFormatTest(self, func, file): | 4477 def WriteBucketFormatTest(self, func, f): |
4478 """Writes a format test for a bucket version of a command.""" | 4478 """Writes a format test for a bucket version of a command.""" |
4479 pass | 4479 pass |
4480 | 4480 |
4481 def WriteGetDataSizeCode(self, func, file): | 4481 def WriteGetDataSizeCode(self, func, f): |
4482 """Writes the code to set data_size used in validation""" | 4482 """Writes the code to set data_size used in validation""" |
4483 pass | 4483 pass |
4484 | 4484 |
4485 def WriteImmediateCmdSizeTest(self, func, file): | 4485 def WriteImmediateCmdSizeTest(self, func, f): |
4486 """Writes a size test for an immediate version of a command.""" | 4486 """Writes a size test for an immediate version of a command.""" |
4487 file.Write(" // TODO(gman): Compute correct size.\n") | 4487 f.write(" // TODO(gman): Compute correct size.\n") |
4488 file.Write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);\n") | 4488 f.write(" EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);\n") |
4489 | 4489 |
4490 def __WriteIdMapping(self, func, file): | 4490 def __WriteIdMapping(self, func, f): |
4491 """Writes client side / service side ID mapping.""" | 4491 """Writes client side / service side ID mapping.""" |
4492 if not func.IsUnsafe() or not func.GetInfo('id_mapping'): | 4492 if not func.IsUnsafe() or not func.GetInfo('id_mapping'): |
4493 return | 4493 return |
4494 for id_type in func.GetInfo('id_mapping'): | 4494 for id_type in func.GetInfo('id_mapping'): |
4495 file.Write(" group_->Get%sServiceId(%s, &%s);\n" % | 4495 f.write(" group_->Get%sServiceId(%s, &%s);\n" % |
4496 (id_type, id_type.lower(), id_type.lower())) | 4496 (id_type, id_type.lower(), id_type.lower())) |
4497 | 4497 |
4498 def WriteImmediateHandlerImplementation (self, func, file): | 4498 def WriteImmediateHandlerImplementation (self, func, f): |
4499 """Writes the handler impl for the immediate version of a command.""" | 4499 """Writes the handler impl for the immediate version of a command.""" |
4500 self.__WriteIdMapping(func, file) | 4500 self.__WriteIdMapping(func, f) |
4501 file.Write(" %s(%s);\n" % | 4501 f.write(" %s(%s);\n" % |
4502 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 4502 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
4503 | 4503 |
4504 def WriteBucketHandlerImplementation (self, func, file): | 4504 def WriteBucketHandlerImplementation (self, func, f): |
4505 """Writes the handler impl for the bucket version of a command.""" | 4505 """Writes the handler impl for the bucket version of a command.""" |
4506 self.__WriteIdMapping(func, file) | 4506 self.__WriteIdMapping(func, f) |
4507 file.Write(" %s(%s);\n" % | 4507 f.write(" %s(%s);\n" % |
4508 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 4508 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
4509 | 4509 |
4510 def WriteServiceHandlerFunctionHeader(self, func, file): | 4510 def WriteServiceHandlerFunctionHeader(self, func, f): |
4511 """Writes function header for service implementation handlers.""" | 4511 """Writes function header for service implementation handlers.""" |
4512 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( | 4512 f.write("""error::Error GLES2DecoderImpl::Handle%(name)s( |
4513 uint32_t immediate_data_size, const void* cmd_data) { | 4513 uint32_t immediate_data_size, const void* cmd_data) { |
4514 """ % {'name': func.name}) | 4514 """ % {'name': func.name}) |
4515 if func.IsUnsafe(): | 4515 if func.IsUnsafe(): |
4516 file.Write("""if (!unsafe_es3_apis_enabled()) | 4516 f.write("""if (!unsafe_es3_apis_enabled()) |
4517 return error::kUnknownCommand; | 4517 return error::kUnknownCommand; |
4518 """) | 4518 """) |
4519 file.Write("""const gles2::cmds::%(name)s& c = | 4519 f.write("""const gles2::cmds::%(name)s& c = |
4520 *static_cast<const gles2::cmds::%(name)s*>(cmd_data); | 4520 *static_cast<const gles2::cmds::%(name)s*>(cmd_data); |
4521 (void)c; | 4521 (void)c; |
4522 """ % {'name': func.name}) | 4522 """ % {'name': func.name}) |
4523 | 4523 |
4524 def WriteServiceImplementation(self, func, file): | 4524 def WriteServiceImplementation(self, func, f): |
4525 """Writes the service implementation for a command.""" | 4525 """Writes the service implementation for a command.""" |
4526 self.WriteServiceHandlerFunctionHeader(func, file) | 4526 self.WriteServiceHandlerFunctionHeader(func, f) |
4527 self.WriteHandlerExtensionCheck(func, file) | 4527 self.WriteHandlerExtensionCheck(func, f) |
4528 self.WriteHandlerDeferReadWrite(func, file); | 4528 self.WriteHandlerDeferReadWrite(func, f); |
4529 if len(func.GetOriginalArgs()) > 0: | 4529 if len(func.GetOriginalArgs()) > 0: |
4530 last_arg = func.GetLastOriginalArg() | 4530 last_arg = func.GetLastOriginalArg() |
4531 all_but_last_arg = func.GetOriginalArgs()[:-1] | 4531 all_but_last_arg = func.GetOriginalArgs()[:-1] |
4532 for arg in all_but_last_arg: | 4532 for arg in all_but_last_arg: |
4533 arg.WriteGetCode(file) | 4533 arg.WriteGetCode(f) |
4534 self.WriteGetDataSizeCode(func, file) | 4534 self.WriteGetDataSizeCode(func, f) |
4535 last_arg.WriteGetCode(file) | 4535 last_arg.WriteGetCode(f) |
4536 func.WriteHandlerValidation(file) | 4536 func.WriteHandlerValidation(f) |
4537 func.WriteHandlerImplementation(file) | 4537 func.WriteHandlerImplementation(f) |
4538 file.Write(" return error::kNoError;\n") | 4538 f.write(" return error::kNoError;\n") |
4539 file.Write("}\n") | 4539 f.write("}\n") |
4540 file.Write("\n") | 4540 f.write("\n") |
4541 | 4541 |
4542 def WriteImmediateServiceImplementation(self, func, file): | 4542 def WriteImmediateServiceImplementation(self, func, f): |
4543 """Writes the service implementation for an immediate version of command.""" | 4543 """Writes the service implementation for an immediate version of command.""" |
4544 self.WriteServiceHandlerFunctionHeader(func, file) | 4544 self.WriteServiceHandlerFunctionHeader(func, f) |
4545 self.WriteHandlerExtensionCheck(func, file) | 4545 self.WriteHandlerExtensionCheck(func, f) |
4546 self.WriteHandlerDeferReadWrite(func, file); | 4546 self.WriteHandlerDeferReadWrite(func, f); |
4547 for arg in func.GetOriginalArgs(): | 4547 for arg in func.GetOriginalArgs(): |
4548 if arg.IsPointer(): | 4548 if arg.IsPointer(): |
4549 self.WriteGetDataSizeCode(func, file) | 4549 self.WriteGetDataSizeCode(func, f) |
4550 arg.WriteGetCode(file) | 4550 arg.WriteGetCode(f) |
4551 func.WriteHandlerValidation(file) | 4551 func.WriteHandlerValidation(f) |
4552 func.WriteHandlerImplementation(file) | 4552 func.WriteHandlerImplementation(f) |
4553 file.Write(" return error::kNoError;\n") | 4553 f.write(" return error::kNoError;\n") |
4554 file.Write("}\n") | 4554 f.write("}\n") |
4555 file.Write("\n") | 4555 f.write("\n") |
4556 | 4556 |
4557 def WriteBucketServiceImplementation(self, func, file): | 4557 def WriteBucketServiceImplementation(self, func, f): |
4558 """Writes the service implementation for a bucket version of command.""" | 4558 """Writes the service implementation for a bucket version of command.""" |
4559 self.WriteServiceHandlerFunctionHeader(func, file) | 4559 self.WriteServiceHandlerFunctionHeader(func, f) |
4560 self.WriteHandlerExtensionCheck(func, file) | 4560 self.WriteHandlerExtensionCheck(func, f) |
4561 self.WriteHandlerDeferReadWrite(func, file); | 4561 self.WriteHandlerDeferReadWrite(func, f); |
4562 for arg in func.GetCmdArgs(): | 4562 for arg in func.GetCmdArgs(): |
4563 arg.WriteGetCode(file) | 4563 arg.WriteGetCode(f) |
4564 func.WriteHandlerValidation(file) | 4564 func.WriteHandlerValidation(f) |
4565 func.WriteHandlerImplementation(file) | 4565 func.WriteHandlerImplementation(f) |
4566 file.Write(" return error::kNoError;\n") | 4566 f.write(" return error::kNoError;\n") |
4567 file.Write("}\n") | 4567 f.write("}\n") |
4568 file.Write("\n") | 4568 f.write("\n") |
4569 | 4569 |
4570 def WriteHandlerExtensionCheck(self, func, file): | 4570 def WriteHandlerExtensionCheck(self, func, f): |
4571 if func.GetInfo('extension_flag'): | 4571 if func.GetInfo('extension_flag'): |
4572 file.Write(" if (!features().%s) {\n" % func.GetInfo('extension_flag')) | 4572 f.write(" if (!features().%s) {\n" % func.GetInfo('extension_flag')) |
4573 file.Write(" LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, \"gl%s\"," | 4573 f.write(" LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, \"gl%s\"," |
4574 " \"function not available\");\n" % func.original_name) | 4574 " \"function not available\");\n" % func.original_name) |
4575 file.Write(" return error::kNoError;") | 4575 f.write(" return error::kNoError;") |
4576 file.Write(" }\n\n") | 4576 f.write(" }\n\n") |
4577 | 4577 |
4578 def WriteHandlerDeferReadWrite(self, func, file): | 4578 def WriteHandlerDeferReadWrite(self, func, f): |
4579 """Writes the code to handle deferring reads or writes.""" | 4579 """Writes the code to handle deferring reads or writes.""" |
4580 defer_draws = func.GetInfo('defer_draws') | 4580 defer_draws = func.GetInfo('defer_draws') |
4581 defer_reads = func.GetInfo('defer_reads') | 4581 defer_reads = func.GetInfo('defer_reads') |
4582 if defer_draws or defer_reads: | 4582 if defer_draws or defer_reads: |
4583 file.Write(" error::Error error;\n") | 4583 f.write(" error::Error error;\n") |
4584 if defer_draws: | 4584 if defer_draws: |
4585 file.Write(" error = WillAccessBoundFramebufferForDraw();\n") | 4585 f.write(" error = WillAccessBoundFramebufferForDraw();\n") |
4586 file.Write(" if (error != error::kNoError)\n") | 4586 f.write(" if (error != error::kNoError)\n") |
4587 file.Write(" return error;\n") | 4587 f.write(" return error;\n") |
4588 if defer_reads: | 4588 if defer_reads: |
4589 file.Write(" error = WillAccessBoundFramebufferForRead();\n") | 4589 f.write(" error = WillAccessBoundFramebufferForRead();\n") |
4590 file.Write(" if (error != error::kNoError)\n") | 4590 f.write(" if (error != error::kNoError)\n") |
4591 file.Write(" return error;\n") | 4591 f.write(" return error;\n") |
4592 | 4592 |
4593 def WriteValidUnitTest(self, func, file, test, *extras): | 4593 def WriteValidUnitTest(self, func, f, test, *extras): |
4594 """Writes a valid unit test for the service implementation.""" | 4594 """Writes a valid unit test for the service implementation.""" |
4595 if func.GetInfo('expectation') == False: | 4595 if func.GetInfo('expectation') == False: |
4596 test = self._remove_expected_call_re.sub('', test) | 4596 test = self._remove_expected_call_re.sub('', test) |
4597 name = func.name | 4597 name = func.name |
4598 arg_strings = [ | 4598 arg_strings = [ |
4599 arg.GetValidArg(func) \ | 4599 arg.GetValidArg(func) \ |
4600 for arg in func.GetOriginalArgs() if not arg.IsConstant() | 4600 for arg in func.GetOriginalArgs() if not arg.IsConstant() |
4601 ] | 4601 ] |
4602 gl_arg_strings = [ | 4602 gl_arg_strings = [ |
4603 arg.GetValidGLArg(func) \ | 4603 arg.GetValidGLArg(func) \ |
4604 for arg in func.GetOriginalArgs() | 4604 for arg in func.GetOriginalArgs() |
4605 ] | 4605 ] |
4606 gl_func_name = func.GetGLTestFunctionName() | 4606 gl_func_name = func.GetGLTestFunctionName() |
4607 vars = { | 4607 vars = { |
4608 'name':name, | 4608 'name':name, |
4609 'gl_func_name': gl_func_name, | 4609 'gl_func_name': gl_func_name, |
4610 'args': ", ".join(arg_strings), | 4610 'args': ", ".join(arg_strings), |
4611 'gl_args': ", ".join(gl_arg_strings), | 4611 'gl_args': ", ".join(gl_arg_strings), |
4612 } | 4612 } |
4613 for extra in extras: | 4613 for extra in extras: |
4614 vars.update(extra) | 4614 vars.update(extra) |
4615 old_test = "" | 4615 old_test = "" |
4616 while (old_test != test): | 4616 while (old_test != test): |
4617 old_test = test | 4617 old_test = test |
4618 test = test % vars | 4618 test = test % vars |
4619 file.Write(test % vars) | 4619 f.write(test % vars) |
4620 | 4620 |
4621 def WriteInvalidUnitTest(self, func, file, test, *extras): | 4621 def WriteInvalidUnitTest(self, func, f, test, *extras): |
4622 """Writes an invalid unit test for the service implementation.""" | 4622 """Writes an invalid unit test for the service implementation.""" |
4623 if func.IsUnsafe(): | 4623 if func.IsUnsafe(): |
4624 return | 4624 return |
4625 for invalid_arg_index, invalid_arg in enumerate(func.GetOriginalArgs()): | 4625 for invalid_arg_index, invalid_arg in enumerate(func.GetOriginalArgs()): |
4626 # Service implementation does not test constants, as they are not part of | 4626 # Service implementation does not test constants, as they are not part of |
4627 # the call in the service side. | 4627 # the call in the service side. |
4628 if invalid_arg.IsConstant(): | 4628 if invalid_arg.IsConstant(): |
4629 continue | 4629 continue |
4630 | 4630 |
4631 num_invalid_values = invalid_arg.GetNumInvalidValues(func) | 4631 num_invalid_values = invalid_arg.GetNumInvalidValues(func) |
(...skipping 24 matching lines...) Expand all Loading... |
4656 'value_index': value_index, | 4656 'value_index': value_index, |
4657 'gl_func_name': gl_func_name, | 4657 'gl_func_name': gl_func_name, |
4658 'args': ", ".join(arg_strings), | 4658 'args': ", ".join(arg_strings), |
4659 'all_but_last_args': ", ".join(arg_strings[:-1]), | 4659 'all_but_last_args': ", ".join(arg_strings[:-1]), |
4660 'gl_args': ", ".join(gl_arg_strings), | 4660 'gl_args': ", ".join(gl_arg_strings), |
4661 'parse_result': parse_result, | 4661 'parse_result': parse_result, |
4662 'gl_error_test': gl_error_test, | 4662 'gl_error_test': gl_error_test, |
4663 } | 4663 } |
4664 for extra in extras: | 4664 for extra in extras: |
4665 vars.update(extra) | 4665 vars.update(extra) |
4666 file.Write(test % vars) | 4666 f.write(test % vars) |
4667 | 4667 |
4668 def WriteServiceUnitTest(self, func, file, *extras): | 4668 def WriteServiceUnitTest(self, func, f, *extras): |
4669 """Writes the service unit test for a command.""" | 4669 """Writes the service unit test for a command.""" |
4670 | 4670 |
4671 if func.name == 'Enable': | 4671 if func.name == 'Enable': |
4672 valid_test = """ | 4672 valid_test = """ |
4673 TEST_P(%(test_name)s, %(name)sValidArgs) { | 4673 TEST_P(%(test_name)s, %(name)sValidArgs) { |
4674 SetupExpectationsForEnableDisable(%(gl_args)s, true); | 4674 SetupExpectationsForEnableDisable(%(gl_args)s, true); |
4675 SpecializedSetup<cmds::%(name)s, 0>(true); | 4675 SpecializedSetup<cmds::%(name)s, 0>(true); |
4676 cmds::%(name)s cmd; | 4676 cmds::%(name)s cmd; |
4677 cmd.Init(%(args)s);""" | 4677 cmd.Init(%(args)s);""" |
4678 elif func.name == 'Disable': | 4678 elif func.name == 'Disable': |
(...skipping 18 matching lines...) Expand all Loading... |
4697 decoder_->set_unsafe_es3_apis_enabled(false); | 4697 decoder_->set_unsafe_es3_apis_enabled(false); |
4698 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 4698 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
4699 } | 4699 } |
4700 """ | 4700 """ |
4701 else: | 4701 else: |
4702 valid_test += """ | 4702 valid_test += """ |
4703 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 4703 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
4704 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 4704 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
4705 } | 4705 } |
4706 """ | 4706 """ |
4707 self.WriteValidUnitTest(func, file, valid_test, *extras) | 4707 self.WriteValidUnitTest(func, f, valid_test, *extras) |
4708 | 4708 |
4709 if not func.IsUnsafe(): | 4709 if not func.IsUnsafe(): |
4710 invalid_test = """ | 4710 invalid_test = """ |
4711 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 4711 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
4712 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 4712 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
4713 SpecializedSetup<cmds::%(name)s, 0>(false); | 4713 SpecializedSetup<cmds::%(name)s, 0>(false); |
4714 cmds::%(name)s cmd; | 4714 cmds::%(name)s cmd; |
4715 cmd.Init(%(args)s); | 4715 cmd.Init(%(args)s); |
4716 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s | 4716 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s |
4717 } | 4717 } |
4718 """ | 4718 """ |
4719 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) | 4719 self.WriteInvalidUnitTest(func, f, invalid_test, *extras) |
4720 | 4720 |
4721 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 4721 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
4722 """Writes the service unit test for an immediate command.""" | 4722 """Writes the service unit test for an immediate command.""" |
4723 file.Write("// TODO(gman): %s\n" % func.name) | 4723 f.write("// TODO(gman): %s\n" % func.name) |
4724 | 4724 |
4725 def WriteImmediateValidationCode(self, func, file): | 4725 def WriteImmediateValidationCode(self, func, f): |
4726 """Writes the validation code for an immediate version of a command.""" | 4726 """Writes the validation code for an immediate version of a command.""" |
4727 pass | 4727 pass |
4728 | 4728 |
4729 def WriteBucketServiceUnitTest(self, func, file, *extras): | 4729 def WriteBucketServiceUnitTest(self, func, f, *extras): |
4730 """Writes the service unit test for a bucket command.""" | 4730 """Writes the service unit test for a bucket command.""" |
4731 file.Write("// TODO(gman): %s\n" % func.name) | 4731 f.write("// TODO(gman): %s\n" % func.name) |
4732 | 4732 |
4733 def WriteBucketValidationCode(self, func, file): | 4733 def WriteBucketValidationCode(self, func, f): |
4734 """Writes the validation code for a bucket version of a command.""" | 4734 """Writes the validation code for a bucket version of a command.""" |
4735 file.Write("// TODO(gman): %s\n" % func.name) | 4735 f.write("// TODO(gman): %s\n" % func.name) |
4736 | 4736 |
4737 def WriteGLES2ImplementationDeclaration(self, func, file): | 4737 def WriteGLES2ImplementationDeclaration(self, func, f): |
4738 """Writes the GLES2 Implemention declaration.""" | 4738 """Writes the GLES2 Implemention declaration.""" |
4739 impl_decl = func.GetInfo('impl_decl') | 4739 impl_decl = func.GetInfo('impl_decl') |
4740 if impl_decl == None or impl_decl == True: | 4740 if impl_decl == None or impl_decl == True: |
4741 file.Write("%s %s(%s) override;\n" % | 4741 f.write("%s %s(%s) override;\n" % |
4742 (func.return_type, func.original_name, | 4742 (func.return_type, func.original_name, |
4743 func.MakeTypedOriginalArgString(""))) | 4743 func.MakeTypedOriginalArgString(""))) |
4744 file.Write("\n") | 4744 f.write("\n") |
4745 | 4745 |
4746 def WriteGLES2CLibImplementation(self, func, file): | 4746 def WriteGLES2CLibImplementation(self, func, f): |
4747 file.Write("%s GLES2%s(%s) {\n" % | 4747 f.write("%s GLES2%s(%s) {\n" % |
4748 (func.return_type, func.name, | 4748 (func.return_type, func.name, |
4749 func.MakeTypedOriginalArgString(""))) | 4749 func.MakeTypedOriginalArgString(""))) |
4750 result_string = "return " | 4750 result_string = "return " |
4751 if func.return_type == "void": | 4751 if func.return_type == "void": |
4752 result_string = "" | 4752 result_string = "" |
4753 file.Write(" %sgles2::GetGLContext()->%s(%s);\n" % | 4753 f.write(" %sgles2::GetGLContext()->%s(%s);\n" % |
4754 (result_string, func.original_name, | 4754 (result_string, func.original_name, |
4755 func.MakeOriginalArgString(""))) | 4755 func.MakeOriginalArgString(""))) |
4756 file.Write("}\n") | 4756 f.write("}\n") |
4757 | 4757 |
4758 def WriteGLES2Header(self, func, file): | 4758 def WriteGLES2Header(self, func, f): |
4759 """Writes a re-write macro for GLES""" | 4759 """Writes a re-write macro for GLES""" |
4760 file.Write("#define gl%s GLES2_GET_FUN(%s)\n" %(func.name, func.name)) | 4760 f.write("#define gl%s GLES2_GET_FUN(%s)\n" %(func.name, func.name)) |
4761 | 4761 |
4762 def WriteClientGLCallLog(self, func, file): | 4762 def WriteClientGLCallLog(self, func, f): |
4763 """Writes a logging macro for the client side code.""" | 4763 """Writes a logging macro for the client side code.""" |
4764 comma = "" | 4764 comma = "" |
4765 if len(func.GetOriginalArgs()): | 4765 if len(func.GetOriginalArgs()): |
4766 comma = " << " | 4766 comma = " << " |
4767 file.Write( | 4767 f.write( |
4768 ' GPU_CLIENT_LOG("[" << GetLogPrefix() << "] gl%s("%s%s << ")");\n' % | 4768 ' GPU_CLIENT_LOG("[" << GetLogPrefix() << "] gl%s("%s%s << ")");\n' % |
4769 (func.original_name, comma, func.MakeLogArgString())) | 4769 (func.original_name, comma, func.MakeLogArgString())) |
4770 | 4770 |
4771 def WriteClientGLReturnLog(self, func, file): | 4771 def WriteClientGLReturnLog(self, func, f): |
4772 """Writes the return value logging code.""" | 4772 """Writes the return value logging code.""" |
4773 if func.return_type != "void": | 4773 if func.return_type != "void": |
4774 file.Write(' GPU_CLIENT_LOG("return:" << result)\n') | 4774 f.write(' GPU_CLIENT_LOG("return:" << result)\n') |
4775 | 4775 |
4776 def WriteGLES2ImplementationHeader(self, func, file): | 4776 def WriteGLES2ImplementationHeader(self, func, f): |
4777 """Writes the GLES2 Implemention.""" | 4777 """Writes the GLES2 Implemention.""" |
4778 self.WriteGLES2ImplementationDeclaration(func, file) | 4778 self.WriteGLES2ImplementationDeclaration(func, f) |
4779 | 4779 |
4780 def WriteGLES2TraceImplementationHeader(self, func, file): | 4780 def WriteGLES2TraceImplementationHeader(self, func, f): |
4781 """Writes the GLES2 Trace Implemention header.""" | 4781 """Writes the GLES2 Trace Implemention header.""" |
4782 file.Write("%s %s(%s) override;\n" % | 4782 f.write("%s %s(%s) override;\n" % |
4783 (func.return_type, func.original_name, | 4783 (func.return_type, func.original_name, |
4784 func.MakeTypedOriginalArgString(""))) | 4784 func.MakeTypedOriginalArgString(""))) |
4785 | 4785 |
4786 def WriteGLES2TraceImplementation(self, func, file): | 4786 def WriteGLES2TraceImplementation(self, func, f): |
4787 """Writes the GLES2 Trace Implemention.""" | 4787 """Writes the GLES2 Trace Implemention.""" |
4788 file.Write("%s GLES2TraceImplementation::%s(%s) {\n" % | 4788 f.write("%s GLES2TraceImplementation::%s(%s) {\n" % |
4789 (func.return_type, func.original_name, | 4789 (func.return_type, func.original_name, |
4790 func.MakeTypedOriginalArgString(""))) | 4790 func.MakeTypedOriginalArgString(""))) |
4791 result_string = "return " | 4791 result_string = "return " |
4792 if func.return_type == "void": | 4792 if func.return_type == "void": |
4793 result_string = "" | 4793 result_string = "" |
4794 file.Write(' TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::%s");\n' % | 4794 f.write(' TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::%s");\n' % |
4795 func.name) | 4795 func.name) |
4796 file.Write(" %sgl_->%s(%s);\n" % | 4796 f.write(" %sgl_->%s(%s);\n" % |
4797 (result_string, func.name, func.MakeOriginalArgString(""))) | 4797 (result_string, func.name, func.MakeOriginalArgString(""))) |
4798 file.Write("}\n") | 4798 f.write("}\n") |
4799 file.Write("\n") | 4799 f.write("\n") |
4800 | 4800 |
4801 def WriteGLES2Implementation(self, func, file): | 4801 def WriteGLES2Implementation(self, func, f): |
4802 """Writes the GLES2 Implemention.""" | 4802 """Writes the GLES2 Implemention.""" |
4803 impl_func = func.GetInfo('impl_func') | 4803 impl_func = func.GetInfo('impl_func') |
4804 impl_decl = func.GetInfo('impl_decl') | 4804 impl_decl = func.GetInfo('impl_decl') |
4805 gen_cmd = func.GetInfo('gen_cmd') | 4805 gen_cmd = func.GetInfo('gen_cmd') |
4806 if (func.can_auto_generate and | 4806 if (func.can_auto_generate and |
4807 (impl_func == None or impl_func == True) and | 4807 (impl_func == None or impl_func == True) and |
4808 (impl_decl == None or impl_decl == True) and | 4808 (impl_decl == None or impl_decl == True) and |
4809 (gen_cmd == None or gen_cmd == True)): | 4809 (gen_cmd == None or gen_cmd == True)): |
4810 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 4810 f.write("%s GLES2Implementation::%s(%s) {\n" % |
4811 (func.return_type, func.original_name, | 4811 (func.return_type, func.original_name, |
4812 func.MakeTypedOriginalArgString(""))) | 4812 func.MakeTypedOriginalArgString(""))) |
4813 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 4813 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
4814 self.WriteClientGLCallLog(func, file) | 4814 self.WriteClientGLCallLog(func, f) |
4815 func.WriteDestinationInitalizationValidation(file) | 4815 func.WriteDestinationInitalizationValidation(f) |
4816 for arg in func.GetOriginalArgs(): | 4816 for arg in func.GetOriginalArgs(): |
4817 arg.WriteClientSideValidationCode(file, func) | 4817 arg.WriteClientSideValidationCode(f, func) |
4818 file.Write(" helper_->%s(%s);\n" % | 4818 f.write(" helper_->%s(%s);\n" % |
4819 (func.name, func.MakeHelperArgString(""))) | 4819 (func.name, func.MakeHelperArgString(""))) |
4820 file.Write(" CheckGLError();\n") | 4820 f.write(" CheckGLError();\n") |
4821 self.WriteClientGLReturnLog(func, file) | 4821 self.WriteClientGLReturnLog(func, f) |
4822 file.Write("}\n") | 4822 f.write("}\n") |
4823 file.Write("\n") | 4823 f.write("\n") |
4824 | 4824 |
4825 def WriteGLES2InterfaceHeader(self, func, file): | 4825 def WriteGLES2InterfaceHeader(self, func, f): |
4826 """Writes the GLES2 Interface.""" | 4826 """Writes the GLES2 Interface.""" |
4827 file.Write("virtual %s %s(%s) = 0;\n" % | 4827 f.write("virtual %s %s(%s) = 0;\n" % |
4828 (func.return_type, func.original_name, | 4828 (func.return_type, func.original_name, |
4829 func.MakeTypedOriginalArgString(""))) | 4829 func.MakeTypedOriginalArgString(""))) |
4830 | 4830 |
4831 def WriteMojoGLES2ImplHeader(self, func, file): | 4831 def WriteMojoGLES2ImplHeader(self, func, f): |
4832 """Writes the Mojo GLES2 implementation header.""" | 4832 """Writes the Mojo GLES2 implementation header.""" |
4833 file.Write("%s %s(%s) override;\n" % | 4833 f.write("%s %s(%s) override;\n" % |
4834 (func.return_type, func.original_name, | 4834 (func.return_type, func.original_name, |
4835 func.MakeTypedOriginalArgString(""))) | 4835 func.MakeTypedOriginalArgString(""))) |
4836 | 4836 |
4837 def WriteMojoGLES2Impl(self, func, file): | 4837 def WriteMojoGLES2Impl(self, func, f): |
4838 """Writes the Mojo GLES2 implementation.""" | 4838 """Writes the Mojo GLES2 implementation.""" |
4839 file.Write("%s MojoGLES2Impl::%s(%s) {\n" % | 4839 f.write("%s MojoGLES2Impl::%s(%s) {\n" % |
4840 (func.return_type, func.original_name, | 4840 (func.return_type, func.original_name, |
4841 func.MakeTypedOriginalArgString(""))) | 4841 func.MakeTypedOriginalArgString(""))) |
4842 extensions = ["CHROMIUM_sync_point", "CHROMIUM_texture_mailbox", | 4842 extensions = ["CHROMIUM_sync_point", "CHROMIUM_texture_mailbox", |
4843 "CHROMIUM_sub_image", "CHROMIUM_miscellaneous", | 4843 "CHROMIUM_sub_image", "CHROMIUM_miscellaneous", |
4844 "occlusion_query_EXT", "CHROMIUM_image", | 4844 "occlusion_query_EXT", "CHROMIUM_image", |
4845 "CHROMIUM_copy_texture", | 4845 "CHROMIUM_copy_texture", |
4846 "CHROMIUM_pixel_transfer_buffer_object"] | 4846 "CHROMIUM_pixel_transfer_buffer_object"] |
4847 if func.IsCoreGLFunction() or func.GetInfo("extension") in extensions: | 4847 if func.IsCoreGLFunction() or func.GetInfo("extension") in extensions: |
4848 file.Write("MojoGLES2MakeCurrent(context_);"); | 4848 f.write("MojoGLES2MakeCurrent(context_);"); |
4849 func_return = "gl" + func.original_name + "(" + \ | 4849 func_return = "gl" + func.original_name + "(" + \ |
4850 func.MakeOriginalArgString("") + ");" | 4850 func.MakeOriginalArgString("") + ");" |
4851 if func.return_type == "void": | 4851 if func.return_type == "void": |
4852 file.Write(func_return); | 4852 f.write(func_return); |
4853 else: | 4853 else: |
4854 file.Write("return " + func_return); | 4854 f.write("return " + func_return); |
4855 else: | 4855 else: |
4856 file.Write("NOTREACHED() << \"Unimplemented %s.\";\n" % | 4856 f.write("NOTREACHED() << \"Unimplemented %s.\";\n" % |
4857 func.original_name); | 4857 func.original_name); |
4858 if func.return_type != "void": | 4858 if func.return_type != "void": |
4859 file.Write("return 0;") | 4859 f.write("return 0;") |
4860 file.Write("}") | 4860 f.write("}") |
4861 | 4861 |
4862 def WriteGLES2InterfaceStub(self, func, file): | 4862 def WriteGLES2InterfaceStub(self, func, f): |
4863 """Writes the GLES2 Interface stub declaration.""" | 4863 """Writes the GLES2 Interface stub declaration.""" |
4864 file.Write("%s %s(%s) override;\n" % | 4864 f.write("%s %s(%s) override;\n" % |
4865 (func.return_type, func.original_name, | 4865 (func.return_type, func.original_name, |
4866 func.MakeTypedOriginalArgString(""))) | 4866 func.MakeTypedOriginalArgString(""))) |
4867 | 4867 |
4868 def WriteGLES2InterfaceStubImpl(self, func, file): | 4868 def WriteGLES2InterfaceStubImpl(self, func, f): |
4869 """Writes the GLES2 Interface stub declaration.""" | 4869 """Writes the GLES2 Interface stub declaration.""" |
4870 args = func.GetOriginalArgs() | 4870 args = func.GetOriginalArgs() |
4871 arg_string = ", ".join( | 4871 arg_string = ", ".join( |
4872 ["%s /* %s */" % (arg.type, arg.name) for arg in args]) | 4872 ["%s /* %s */" % (arg.type, arg.name) for arg in args]) |
4873 file.Write("%s GLES2InterfaceStub::%s(%s) {\n" % | 4873 f.write("%s GLES2InterfaceStub::%s(%s) {\n" % |
4874 (func.return_type, func.original_name, arg_string)) | 4874 (func.return_type, func.original_name, arg_string)) |
4875 if func.return_type != "void": | 4875 if func.return_type != "void": |
4876 file.Write(" return 0;\n") | 4876 f.write(" return 0;\n") |
4877 file.Write("}\n") | 4877 f.write("}\n") |
4878 | 4878 |
4879 def WriteGLES2ImplementationUnitTest(self, func, file): | 4879 def WriteGLES2ImplementationUnitTest(self, func, f): |
4880 """Writes the GLES2 Implemention unit test.""" | 4880 """Writes the GLES2 Implemention unit test.""" |
4881 client_test = func.GetInfo('client_test') | 4881 client_test = func.GetInfo('client_test') |
4882 if (func.can_auto_generate and | 4882 if (func.can_auto_generate and |
4883 (client_test == None or client_test == True)): | 4883 (client_test == None or client_test == True)): |
4884 code = """ | 4884 code = """ |
4885 TEST_F(GLES2ImplementationTest, %(name)s) { | 4885 TEST_F(GLES2ImplementationTest, %(name)s) { |
4886 struct Cmds { | 4886 struct Cmds { |
4887 cmds::%(name)s cmd; | 4887 cmds::%(name)s cmd; |
4888 }; | 4888 }; |
4889 Cmds expected; | 4889 Cmds expected; |
4890 expected.cmd.Init(%(cmd_args)s); | 4890 expected.cmd.Init(%(cmd_args)s); |
4891 | 4891 |
4892 gl_->%(name)s(%(args)s); | 4892 gl_->%(name)s(%(args)s); |
4893 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 4893 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
4894 } | 4894 } |
4895 """ | 4895 """ |
4896 cmd_arg_strings = [ | 4896 cmd_arg_strings = [ |
4897 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs() | 4897 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs() |
4898 ] | 4898 ] |
4899 | 4899 |
4900 gl_arg_strings = [ | 4900 gl_arg_strings = [ |
4901 arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs() | 4901 arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs() |
4902 ] | 4902 ] |
4903 | 4903 |
4904 file.Write(code % { | 4904 f.write(code % { |
4905 'name': func.name, | 4905 'name': func.name, |
4906 'args': ", ".join(gl_arg_strings), | 4906 'args': ", ".join(gl_arg_strings), |
4907 'cmd_args': ", ".join(cmd_arg_strings), | 4907 'cmd_args': ", ".join(cmd_arg_strings), |
4908 }) | 4908 }) |
4909 | 4909 |
4910 # Test constants for invalid values, as they are not tested by the | 4910 # Test constants for invalid values, as they are not tested by the |
4911 # service. | 4911 # service. |
4912 constants = [arg for arg in func.GetOriginalArgs() if arg.IsConstant()] | 4912 constants = [arg for arg in func.GetOriginalArgs() if arg.IsConstant()] |
4913 if constants: | 4913 if constants: |
4914 code = """ | 4914 code = """ |
4915 TEST_F(GLES2ImplementationTest, %(name)sInvalidConstantArg%(invalid_index)d) { | 4915 TEST_F(GLES2ImplementationTest, %(name)sInvalidConstantArg%(invalid_index)d) { |
4916 gl_->%(name)s(%(args)s); | 4916 gl_->%(name)s(%(args)s); |
4917 EXPECT_TRUE(NoCommandsWritten()); | 4917 EXPECT_TRUE(NoCommandsWritten()); |
4918 EXPECT_EQ(%(gl_error)s, CheckError()); | 4918 EXPECT_EQ(%(gl_error)s, CheckError()); |
4919 } | 4919 } |
4920 """ | 4920 """ |
4921 for invalid_arg in constants: | 4921 for invalid_arg in constants: |
4922 gl_arg_strings = [] | 4922 gl_arg_strings = [] |
4923 invalid = invalid_arg.GetInvalidArg(func) | 4923 invalid = invalid_arg.GetInvalidArg(func) |
4924 for arg in func.GetOriginalArgs(): | 4924 for arg in func.GetOriginalArgs(): |
4925 if arg is invalid_arg: | 4925 if arg is invalid_arg: |
4926 gl_arg_strings.append(invalid[0]) | 4926 gl_arg_strings.append(invalid[0]) |
4927 else: | 4927 else: |
4928 gl_arg_strings.append(arg.GetValidClientSideArg(func)) | 4928 gl_arg_strings.append(arg.GetValidClientSideArg(func)) |
4929 | 4929 |
4930 file.Write(code % { | 4930 f.write(code % { |
4931 'name': func.name, | 4931 'name': func.name, |
4932 'invalid_index': func.GetOriginalArgs().index(invalid_arg), | 4932 'invalid_index': func.GetOriginalArgs().index(invalid_arg), |
4933 'args': ", ".join(gl_arg_strings), | 4933 'args': ", ".join(gl_arg_strings), |
4934 'gl_error': invalid[2], | 4934 'gl_error': invalid[2], |
4935 }) | 4935 }) |
4936 else: | 4936 else: |
4937 if client_test != False: | 4937 if client_test != False: |
4938 file.Write("// TODO(zmo): Implement unit test for %s\n" % func.name) | 4938 f.write("// TODO(zmo): Implement unit test for %s\n" % func.name) |
4939 | 4939 |
4940 def WriteDestinationInitalizationValidation(self, func, file): | 4940 def WriteDestinationInitalizationValidation(self, func, f): |
4941 """Writes the client side destintion initialization validation.""" | 4941 """Writes the client side destintion initialization validation.""" |
4942 for arg in func.GetOriginalArgs(): | 4942 for arg in func.GetOriginalArgs(): |
4943 arg.WriteDestinationInitalizationValidation(file, func) | 4943 arg.WriteDestinationInitalizationValidation(f, func) |
4944 | 4944 |
4945 def WriteTraceEvent(self, func, file): | 4945 def WriteTraceEvent(self, func, f): |
4946 file.Write(' TRACE_EVENT0("gpu", "GLES2Implementation::%s");\n' % | 4946 f.write(' TRACE_EVENT0("gpu", "GLES2Implementation::%s");\n' % |
4947 func.original_name) | 4947 func.original_name) |
4948 | 4948 |
4949 def WriteImmediateCmdComputeSize(self, func, file): | 4949 def WriteImmediateCmdComputeSize(self, func, f): |
4950 """Writes the size computation code for the immediate version of a cmd.""" | 4950 """Writes the size computation code for the immediate version of a cmd.""" |
4951 file.Write(" static uint32_t ComputeSize(uint32_t size_in_bytes) {\n") | 4951 f.write(" static uint32_t ComputeSize(uint32_t size_in_bytes) {\n") |
4952 file.Write(" return static_cast<uint32_t>(\n") | 4952 f.write(" return static_cast<uint32_t>(\n") |
4953 file.Write(" sizeof(ValueType) + // NOLINT\n") | 4953 f.write(" sizeof(ValueType) + // NOLINT\n") |
4954 file.Write(" RoundSizeToMultipleOfEntries(size_in_bytes));\n") | 4954 f.write(" RoundSizeToMultipleOfEntries(size_in_bytes));\n") |
4955 file.Write(" }\n") | 4955 f.write(" }\n") |
4956 file.Write("\n") | 4956 f.write("\n") |
4957 | 4957 |
4958 def WriteImmediateCmdSetHeader(self, func, file): | 4958 def WriteImmediateCmdSetHeader(self, func, f): |
4959 """Writes the SetHeader function for the immediate version of a cmd.""" | 4959 """Writes the SetHeader function for the immediate version of a cmd.""" |
4960 file.Write(" void SetHeader(uint32_t size_in_bytes) {\n") | 4960 f.write(" void SetHeader(uint32_t size_in_bytes) {\n") |
4961 file.Write(" header.SetCmdByTotalSize<ValueType>(size_in_bytes);\n") | 4961 f.write(" header.SetCmdByTotalSize<ValueType>(size_in_bytes);\n") |
4962 file.Write(" }\n") | 4962 f.write(" }\n") |
4963 file.Write("\n") | 4963 f.write("\n") |
4964 | 4964 |
4965 def WriteImmediateCmdInit(self, func, file): | 4965 def WriteImmediateCmdInit(self, func, f): |
4966 """Writes the Init function for the immediate version of a command.""" | 4966 """Writes the Init function for the immediate version of a command.""" |
4967 raise NotImplementedError(func.name) | 4967 raise NotImplementedError(func.name) |
4968 | 4968 |
4969 def WriteImmediateCmdSet(self, func, file): | 4969 def WriteImmediateCmdSet(self, func, f): |
4970 """Writes the Set function for the immediate version of a command.""" | 4970 """Writes the Set function for the immediate version of a command.""" |
4971 raise NotImplementedError(func.name) | 4971 raise NotImplementedError(func.name) |
4972 | 4972 |
4973 def WriteCmdHelper(self, func, file): | 4973 def WriteCmdHelper(self, func, f): |
4974 """Writes the cmd helper definition for a cmd.""" | 4974 """Writes the cmd helper definition for a cmd.""" |
4975 code = """ void %(name)s(%(typed_args)s) { | 4975 code = """ void %(name)s(%(typed_args)s) { |
4976 gles2::cmds::%(name)s* c = GetCmdSpace<gles2::cmds::%(name)s>(); | 4976 gles2::cmds::%(name)s* c = GetCmdSpace<gles2::cmds::%(name)s>(); |
4977 if (c) { | 4977 if (c) { |
4978 c->Init(%(args)s); | 4978 c->Init(%(args)s); |
4979 } | 4979 } |
4980 } | 4980 } |
4981 | 4981 |
4982 """ | 4982 """ |
4983 file.Write(code % { | 4983 f.write(code % { |
4984 "name": func.name, | 4984 "name": func.name, |
4985 "typed_args": func.MakeTypedCmdArgString(""), | 4985 "typed_args": func.MakeTypedCmdArgString(""), |
4986 "args": func.MakeCmdArgString(""), | 4986 "args": func.MakeCmdArgString(""), |
4987 }) | 4987 }) |
4988 | 4988 |
4989 def WriteImmediateCmdHelper(self, func, file): | 4989 def WriteImmediateCmdHelper(self, func, f): |
4990 """Writes the cmd helper definition for the immediate version of a cmd.""" | 4990 """Writes the cmd helper definition for the immediate version of a cmd.""" |
4991 code = """ void %(name)s(%(typed_args)s) { | 4991 code = """ void %(name)s(%(typed_args)s) { |
4992 const uint32_t s = 0; // TODO(gman): compute correct size | 4992 const uint32_t s = 0; // TODO(gman): compute correct size |
4993 gles2::cmds::%(name)s* c = | 4993 gles2::cmds::%(name)s* c = |
4994 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(s); | 4994 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(s); |
4995 if (c) { | 4995 if (c) { |
4996 c->Init(%(args)s); | 4996 c->Init(%(args)s); |
4997 } | 4997 } |
4998 } | 4998 } |
4999 | 4999 |
5000 """ | 5000 """ |
5001 file.Write(code % { | 5001 f.write(code % { |
5002 "name": func.name, | 5002 "name": func.name, |
5003 "typed_args": func.MakeTypedCmdArgString(""), | 5003 "typed_args": func.MakeTypedCmdArgString(""), |
5004 "args": func.MakeCmdArgString(""), | 5004 "args": func.MakeCmdArgString(""), |
5005 }) | 5005 }) |
5006 | 5006 |
5007 | 5007 |
5008 class StateSetHandler(TypeHandler): | 5008 class StateSetHandler(TypeHandler): |
5009 """Handler for commands that simply set state.""" | 5009 """Handler for commands that simply set state.""" |
5010 | 5010 |
5011 def __init__(self): | 5011 def __init__(self): |
5012 TypeHandler.__init__(self) | 5012 TypeHandler.__init__(self) |
5013 | 5013 |
5014 def WriteHandlerImplementation(self, func, file): | 5014 def WriteHandlerImplementation(self, func, f): |
5015 """Overrriden from TypeHandler.""" | 5015 """Overrriden from TypeHandler.""" |
5016 state_name = func.GetInfo('state') | 5016 state_name = func.GetInfo('state') |
5017 state = _STATES[state_name] | 5017 state = _STATES[state_name] |
5018 states = state['states'] | 5018 states = state['states'] |
5019 args = func.GetOriginalArgs() | 5019 args = func.GetOriginalArgs() |
5020 for ndx,item in enumerate(states): | 5020 for ndx,item in enumerate(states): |
5021 code = [] | 5021 code = [] |
5022 if 'range_checks' in item: | 5022 if 'range_checks' in item: |
5023 for range_check in item['range_checks']: | 5023 for range_check in item['range_checks']: |
5024 code.append("%s %s" % (args[ndx].name, range_check['check'])) | 5024 code.append("%s %s" % (args[ndx].name, range_check['check'])) |
5025 if 'nan_check' in item: | 5025 if 'nan_check' in item: |
5026 # Drivers might generate an INVALID_VALUE error when a value is set | 5026 # Drivers might generate an INVALID_VALUE error when a value is set |
5027 # to NaN. This is allowed behavior under GLES 3.0 section 2.1.1 or | 5027 # to NaN. This is allowed behavior under GLES 3.0 section 2.1.1 or |
5028 # OpenGL 4.5 section 2.3.4.1 - providing NaN allows undefined results. | 5028 # OpenGL 4.5 section 2.3.4.1 - providing NaN allows undefined results. |
5029 # Make this behavior consistent within Chromium, and avoid leaking GL | 5029 # Make this behavior consistent within Chromium, and avoid leaking GL |
5030 # errors by generating the error in the command buffer instead of | 5030 # errors by generating the error in the command buffer instead of |
5031 # letting the GL driver generate it. | 5031 # letting the GL driver generate it. |
5032 code.append("std::isnan(%s)" % args[ndx].name) | 5032 code.append("std::isnan(%s)" % args[ndx].name) |
5033 if len(code): | 5033 if len(code): |
5034 file.Write(" if (%s) {\n" % " ||\n ".join(code)) | 5034 f.write(" if (%s) {\n" % " ||\n ".join(code)) |
5035 file.Write( | 5035 f.write( |
5036 ' LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,' | 5036 ' LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,' |
5037 ' "%s", "%s out of range");\n' % | 5037 ' "%s", "%s out of range");\n' % |
5038 (func.name, args[ndx].name)) | 5038 (func.name, args[ndx].name)) |
5039 file.Write(" return error::kNoError;\n") | 5039 f.write(" return error::kNoError;\n") |
5040 file.Write(" }\n") | 5040 f.write(" }\n") |
5041 code = [] | 5041 code = [] |
5042 for ndx,item in enumerate(states): | 5042 for ndx,item in enumerate(states): |
5043 code.append("state_.%s != %s" % (item['name'], args[ndx].name)) | 5043 code.append("state_.%s != %s" % (item['name'], args[ndx].name)) |
5044 file.Write(" if (%s) {\n" % " ||\n ".join(code)) | 5044 f.write(" if (%s) {\n" % " ||\n ".join(code)) |
5045 for ndx,item in enumerate(states): | 5045 for ndx,item in enumerate(states): |
5046 file.Write(" state_.%s = %s;\n" % (item['name'], args[ndx].name)) | 5046 f.write(" state_.%s = %s;\n" % (item['name'], args[ndx].name)) |
5047 if 'state_flag' in state: | 5047 if 'state_flag' in state: |
5048 file.Write(" %s = true;\n" % state['state_flag']) | 5048 f.write(" %s = true;\n" % state['state_flag']) |
5049 if not func.GetInfo("no_gl"): | 5049 if not func.GetInfo("no_gl"): |
5050 for ndx,item in enumerate(states): | 5050 for ndx,item in enumerate(states): |
5051 if item.get('cached', False): | 5051 if item.get('cached', False): |
5052 file.Write(" state_.%s = %s;\n" % | 5052 f.write(" state_.%s = %s;\n" % |
5053 (CachedStateName(item), args[ndx].name)) | 5053 (CachedStateName(item), args[ndx].name)) |
5054 file.Write(" %s(%s);\n" % | 5054 f.write(" %s(%s);\n" % |
5055 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 5055 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
5056 file.Write(" }\n") | 5056 f.write(" }\n") |
5057 | 5057 |
5058 def WriteServiceUnitTest(self, func, file, *extras): | 5058 def WriteServiceUnitTest(self, func, f, *extras): |
5059 """Overrriden from TypeHandler.""" | 5059 """Overrriden from TypeHandler.""" |
5060 TypeHandler.WriteServiceUnitTest(self, func, file, *extras) | 5060 TypeHandler.WriteServiceUnitTest(self, func, f, *extras) |
5061 state_name = func.GetInfo('state') | 5061 state_name = func.GetInfo('state') |
5062 state = _STATES[state_name] | 5062 state = _STATES[state_name] |
5063 states = state['states'] | 5063 states = state['states'] |
5064 for ndx,item in enumerate(states): | 5064 for ndx,item in enumerate(states): |
5065 if 'range_checks' in item: | 5065 if 'range_checks' in item: |
5066 for check_ndx, range_check in enumerate(item['range_checks']): | 5066 for check_ndx, range_check in enumerate(item['range_checks']): |
5067 valid_test = """ | 5067 valid_test = """ |
5068 TEST_P(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) { | 5068 TEST_P(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) { |
5069 SpecializedSetup<cmds::%(name)s, 0>(false); | 5069 SpecializedSetup<cmds::%(name)s, 0>(false); |
5070 cmds::%(name)s cmd; | 5070 cmds::%(name)s cmd; |
(...skipping 10 matching lines...) Expand all Loading... |
5081 | 5081 |
5082 arg_strings[ndx] = range_check['test_value'] | 5082 arg_strings[ndx] = range_check['test_value'] |
5083 vars = { | 5083 vars = { |
5084 'name': name, | 5084 'name': name, |
5085 'ndx': ndx, | 5085 'ndx': ndx, |
5086 'check_ndx': check_ndx, | 5086 'check_ndx': check_ndx, |
5087 'args': ", ".join(arg_strings), | 5087 'args': ", ".join(arg_strings), |
5088 } | 5088 } |
5089 for extra in extras: | 5089 for extra in extras: |
5090 vars.update(extra) | 5090 vars.update(extra) |
5091 file.Write(valid_test % vars) | 5091 f.write(valid_test % vars) |
5092 if 'nan_check' in item: | 5092 if 'nan_check' in item: |
5093 valid_test = """ | 5093 valid_test = """ |
5094 TEST_P(%(test_name)s, %(name)sNaNValue%(ndx)d) { | 5094 TEST_P(%(test_name)s, %(name)sNaNValue%(ndx)d) { |
5095 SpecializedSetup<cmds::%(name)s, 0>(false); | 5095 SpecializedSetup<cmds::%(name)s, 0>(false); |
5096 cmds::%(name)s cmd; | 5096 cmds::%(name)s cmd; |
5097 cmd.Init(%(args)s); | 5097 cmd.Init(%(args)s); |
5098 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5098 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
5099 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 5099 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
5100 } | 5100 } |
5101 """ | 5101 """ |
5102 name = func.name | 5102 name = func.name |
5103 arg_strings = [ | 5103 arg_strings = [ |
5104 arg.GetValidArg(func) \ | 5104 arg.GetValidArg(func) \ |
5105 for arg in func.GetOriginalArgs() if not arg.IsConstant() | 5105 for arg in func.GetOriginalArgs() if not arg.IsConstant() |
5106 ] | 5106 ] |
5107 | 5107 |
5108 arg_strings[ndx] = 'nanf("")' | 5108 arg_strings[ndx] = 'nanf("")' |
5109 vars = { | 5109 vars = { |
5110 'name': name, | 5110 'name': name, |
5111 'ndx': ndx, | 5111 'ndx': ndx, |
5112 'args': ", ".join(arg_strings), | 5112 'args': ", ".join(arg_strings), |
5113 } | 5113 } |
5114 for extra in extras: | 5114 for extra in extras: |
5115 vars.update(extra) | 5115 vars.update(extra) |
5116 file.Write(valid_test % vars) | 5116 f.write(valid_test % vars) |
5117 | 5117 |
5118 | 5118 |
5119 class StateSetRGBAlphaHandler(TypeHandler): | 5119 class StateSetRGBAlphaHandler(TypeHandler): |
5120 """Handler for commands that simply set state that have rgb/alpha.""" | 5120 """Handler for commands that simply set state that have rgb/alpha.""" |
5121 | 5121 |
5122 def __init__(self): | 5122 def __init__(self): |
5123 TypeHandler.__init__(self) | 5123 TypeHandler.__init__(self) |
5124 | 5124 |
5125 def WriteHandlerImplementation(self, func, file): | 5125 def WriteHandlerImplementation(self, func, f): |
5126 """Overrriden from TypeHandler.""" | 5126 """Overrriden from TypeHandler.""" |
5127 state_name = func.GetInfo('state') | 5127 state_name = func.GetInfo('state') |
5128 state = _STATES[state_name] | 5128 state = _STATES[state_name] |
5129 states = state['states'] | 5129 states = state['states'] |
5130 args = func.GetOriginalArgs() | 5130 args = func.GetOriginalArgs() |
5131 num_args = len(args) | 5131 num_args = len(args) |
5132 code = [] | 5132 code = [] |
5133 for ndx,item in enumerate(states): | 5133 for ndx,item in enumerate(states): |
5134 code.append("state_.%s != %s" % (item['name'], args[ndx % num_args].name)) | 5134 code.append("state_.%s != %s" % (item['name'], args[ndx % num_args].name)) |
5135 file.Write(" if (%s) {\n" % " ||\n ".join(code)) | 5135 f.write(" if (%s) {\n" % " ||\n ".join(code)) |
5136 for ndx, item in enumerate(states): | 5136 for ndx, item in enumerate(states): |
5137 file.Write(" state_.%s = %s;\n" % | 5137 f.write(" state_.%s = %s;\n" % |
5138 (item['name'], args[ndx % num_args].name)) | 5138 (item['name'], args[ndx % num_args].name)) |
5139 if 'state_flag' in state: | 5139 if 'state_flag' in state: |
5140 file.Write(" %s = true;\n" % state['state_flag']) | 5140 f.write(" %s = true;\n" % state['state_flag']) |
5141 if not func.GetInfo("no_gl"): | 5141 if not func.GetInfo("no_gl"): |
5142 file.Write(" %s(%s);\n" % | 5142 f.write(" %s(%s);\n" % |
5143 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 5143 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
5144 file.Write(" }\n") | 5144 f.write(" }\n") |
5145 | 5145 |
5146 | 5146 |
5147 class StateSetFrontBackSeparateHandler(TypeHandler): | 5147 class StateSetFrontBackSeparateHandler(TypeHandler): |
5148 """Handler for commands that simply set state that have front/back.""" | 5148 """Handler for commands that simply set state that have front/back.""" |
5149 | 5149 |
5150 def __init__(self): | 5150 def __init__(self): |
5151 TypeHandler.__init__(self) | 5151 TypeHandler.__init__(self) |
5152 | 5152 |
5153 def WriteHandlerImplementation(self, func, file): | 5153 def WriteHandlerImplementation(self, func, f): |
5154 """Overrriden from TypeHandler.""" | 5154 """Overrriden from TypeHandler.""" |
5155 state_name = func.GetInfo('state') | 5155 state_name = func.GetInfo('state') |
5156 state = _STATES[state_name] | 5156 state = _STATES[state_name] |
5157 states = state['states'] | 5157 states = state['states'] |
5158 args = func.GetOriginalArgs() | 5158 args = func.GetOriginalArgs() |
5159 face = args[0].name | 5159 face = args[0].name |
5160 num_args = len(args) | 5160 num_args = len(args) |
5161 file.Write(" bool changed = false;\n") | 5161 f.write(" bool changed = false;\n") |
5162 for group_ndx, group in enumerate(Grouper(num_args - 1, states)): | 5162 for group_ndx, group in enumerate(Grouper(num_args - 1, states)): |
5163 file.Write(" if (%s == %s || %s == GL_FRONT_AND_BACK) {\n" % | 5163 f.write(" if (%s == %s || %s == GL_FRONT_AND_BACK) {\n" % |
5164 (face, ('GL_FRONT', 'GL_BACK')[group_ndx], face)) | 5164 (face, ('GL_FRONT', 'GL_BACK')[group_ndx], face)) |
5165 code = [] | 5165 code = [] |
5166 for ndx, item in enumerate(group): | 5166 for ndx, item in enumerate(group): |
5167 code.append("state_.%s != %s" % (item['name'], args[ndx + 1].name)) | 5167 code.append("state_.%s != %s" % (item['name'], args[ndx + 1].name)) |
5168 file.Write(" changed |= %s;\n" % " ||\n ".join(code)) | 5168 f.write(" changed |= %s;\n" % " ||\n ".join(code)) |
5169 file.Write(" }\n") | 5169 f.write(" }\n") |
5170 file.Write(" if (changed) {\n") | 5170 f.write(" if (changed) {\n") |
5171 for group_ndx, group in enumerate(Grouper(num_args - 1, states)): | 5171 for group_ndx, group in enumerate(Grouper(num_args - 1, states)): |
5172 file.Write(" if (%s == %s || %s == GL_FRONT_AND_BACK) {\n" % | 5172 f.write(" if (%s == %s || %s == GL_FRONT_AND_BACK) {\n" % |
5173 (face, ('GL_FRONT', 'GL_BACK')[group_ndx], face)) | 5173 (face, ('GL_FRONT', 'GL_BACK')[group_ndx], face)) |
5174 for ndx, item in enumerate(group): | 5174 for ndx, item in enumerate(group): |
5175 file.Write(" state_.%s = %s;\n" % | 5175 f.write(" state_.%s = %s;\n" % |
5176 (item['name'], args[ndx + 1].name)) | 5176 (item['name'], args[ndx + 1].name)) |
5177 file.Write(" }\n") | 5177 f.write(" }\n") |
5178 if 'state_flag' in state: | 5178 if 'state_flag' in state: |
5179 file.Write(" %s = true;\n" % state['state_flag']) | 5179 f.write(" %s = true;\n" % state['state_flag']) |
5180 if not func.GetInfo("no_gl"): | 5180 if not func.GetInfo("no_gl"): |
5181 file.Write(" %s(%s);\n" % | 5181 f.write(" %s(%s);\n" % |
5182 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 5182 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
5183 file.Write(" }\n") | 5183 f.write(" }\n") |
5184 | 5184 |
5185 | 5185 |
5186 class StateSetFrontBackHandler(TypeHandler): | 5186 class StateSetFrontBackHandler(TypeHandler): |
5187 """Handler for commands that simply set state that set both front/back.""" | 5187 """Handler for commands that simply set state that set both front/back.""" |
5188 | 5188 |
5189 def __init__(self): | 5189 def __init__(self): |
5190 TypeHandler.__init__(self) | 5190 TypeHandler.__init__(self) |
5191 | 5191 |
5192 def WriteHandlerImplementation(self, func, file): | 5192 def WriteHandlerImplementation(self, func, f): |
5193 """Overrriden from TypeHandler.""" | 5193 """Overrriden from TypeHandler.""" |
5194 state_name = func.GetInfo('state') | 5194 state_name = func.GetInfo('state') |
5195 state = _STATES[state_name] | 5195 state = _STATES[state_name] |
5196 states = state['states'] | 5196 states = state['states'] |
5197 args = func.GetOriginalArgs() | 5197 args = func.GetOriginalArgs() |
5198 num_args = len(args) | 5198 num_args = len(args) |
5199 code = [] | 5199 code = [] |
5200 for group_ndx, group in enumerate(Grouper(num_args, states)): | 5200 for group_ndx, group in enumerate(Grouper(num_args, states)): |
5201 for ndx, item in enumerate(group): | 5201 for ndx, item in enumerate(group): |
5202 code.append("state_.%s != %s" % (item['name'], args[ndx].name)) | 5202 code.append("state_.%s != %s" % (item['name'], args[ndx].name)) |
5203 file.Write(" if (%s) {\n" % " ||\n ".join(code)) | 5203 f.write(" if (%s) {\n" % " ||\n ".join(code)) |
5204 for group_ndx, group in enumerate(Grouper(num_args, states)): | 5204 for group_ndx, group in enumerate(Grouper(num_args, states)): |
5205 for ndx, item in enumerate(group): | 5205 for ndx, item in enumerate(group): |
5206 file.Write(" state_.%s = %s;\n" % (item['name'], args[ndx].name)) | 5206 f.write(" state_.%s = %s;\n" % (item['name'], args[ndx].name)) |
5207 if 'state_flag' in state: | 5207 if 'state_flag' in state: |
5208 file.Write(" %s = true;\n" % state['state_flag']) | 5208 f.write(" %s = true;\n" % state['state_flag']) |
5209 if not func.GetInfo("no_gl"): | 5209 if not func.GetInfo("no_gl"): |
5210 file.Write(" %s(%s);\n" % | 5210 f.write(" %s(%s);\n" % |
5211 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 5211 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
5212 file.Write(" }\n") | 5212 f.write(" }\n") |
5213 | 5213 |
5214 | 5214 |
5215 class StateSetNamedParameter(TypeHandler): | 5215 class StateSetNamedParameter(TypeHandler): |
5216 """Handler for commands that set a state chosen with an enum parameter.""" | 5216 """Handler for commands that set a state chosen with an enum parameter.""" |
5217 | 5217 |
5218 def __init__(self): | 5218 def __init__(self): |
5219 TypeHandler.__init__(self) | 5219 TypeHandler.__init__(self) |
5220 | 5220 |
5221 def WriteHandlerImplementation(self, func, file): | 5221 def WriteHandlerImplementation(self, func, f): |
5222 """Overridden from TypeHandler.""" | 5222 """Overridden from TypeHandler.""" |
5223 state_name = func.GetInfo('state') | 5223 state_name = func.GetInfo('state') |
5224 state = _STATES[state_name] | 5224 state = _STATES[state_name] |
5225 states = state['states'] | 5225 states = state['states'] |
5226 args = func.GetOriginalArgs() | 5226 args = func.GetOriginalArgs() |
5227 num_args = len(args) | 5227 num_args = len(args) |
5228 assert num_args == 2 | 5228 assert num_args == 2 |
5229 file.Write(" switch (%s) {\n" % args[0].name) | 5229 f.write(" switch (%s) {\n" % args[0].name) |
5230 for state in states: | 5230 for state in states: |
5231 file.Write(" case %s:\n" % state['enum']) | 5231 f.write(" case %s:\n" % state['enum']) |
5232 file.Write(" if (state_.%s != %s) {\n" % | 5232 f.write(" if (state_.%s != %s) {\n" % |
5233 (state['name'], args[1].name)) | 5233 (state['name'], args[1].name)) |
5234 file.Write(" state_.%s = %s;\n" % (state['name'], args[1].name)) | 5234 f.write(" state_.%s = %s;\n" % (state['name'], args[1].name)) |
5235 if not func.GetInfo("no_gl"): | 5235 if not func.GetInfo("no_gl"): |
5236 file.Write(" %s(%s);\n" % | 5236 f.write(" %s(%s);\n" % |
5237 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 5237 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
5238 file.Write(" }\n") | 5238 f.write(" }\n") |
5239 file.Write(" break;\n") | 5239 f.write(" break;\n") |
5240 file.Write(" default:\n") | 5240 f.write(" default:\n") |
5241 file.Write(" NOTREACHED();\n") | 5241 f.write(" NOTREACHED();\n") |
5242 file.Write(" }\n") | 5242 f.write(" }\n") |
5243 | 5243 |
5244 | 5244 |
5245 class CustomHandler(TypeHandler): | 5245 class CustomHandler(TypeHandler): |
5246 """Handler for commands that are auto-generated but require minor tweaks.""" | 5246 """Handler for commands that are auto-generated but require minor tweaks.""" |
5247 | 5247 |
5248 def __init__(self): | 5248 def __init__(self): |
5249 TypeHandler.__init__(self) | 5249 TypeHandler.__init__(self) |
5250 | 5250 |
5251 def WriteServiceImplementation(self, func, file): | 5251 def WriteServiceImplementation(self, func, f): |
5252 """Overrriden from TypeHandler.""" | 5252 """Overrriden from TypeHandler.""" |
5253 pass | 5253 pass |
5254 | 5254 |
5255 def WriteImmediateServiceImplementation(self, func, file): | 5255 def WriteImmediateServiceImplementation(self, func, f): |
5256 """Overrriden from TypeHandler.""" | 5256 """Overrriden from TypeHandler.""" |
5257 pass | 5257 pass |
5258 | 5258 |
5259 def WriteBucketServiceImplementation(self, func, file): | 5259 def WriteBucketServiceImplementation(self, func, f): |
5260 """Overrriden from TypeHandler.""" | 5260 """Overrriden from TypeHandler.""" |
5261 pass | 5261 pass |
5262 | 5262 |
5263 def WriteServiceUnitTest(self, func, file, *extras): | 5263 def WriteServiceUnitTest(self, func, f, *extras): |
5264 """Overrriden from TypeHandler.""" | 5264 """Overrriden from TypeHandler.""" |
5265 file.Write("// TODO(gman): %s\n\n" % func.name) | 5265 f.write("// TODO(gman): %s\n\n" % func.name) |
5266 | 5266 |
5267 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 5267 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
5268 """Overrriden from TypeHandler.""" | 5268 """Overrriden from TypeHandler.""" |
5269 file.Write("// TODO(gman): %s\n\n" % func.name) | 5269 f.write("// TODO(gman): %s\n\n" % func.name) |
5270 | 5270 |
5271 def WriteImmediateCmdGetTotalSize(self, func, file): | 5271 def WriteImmediateCmdGetTotalSize(self, func, f): |
5272 """Overrriden from TypeHandler.""" | 5272 """Overrriden from TypeHandler.""" |
5273 file.Write( | 5273 f.write( |
5274 " uint32_t total_size = 0; // TODO(gman): get correct size.\n") | 5274 " uint32_t total_size = 0; // TODO(gman): get correct size.\n") |
5275 | 5275 |
5276 def WriteImmediateCmdInit(self, func, file): | 5276 def WriteImmediateCmdInit(self, func, f): |
5277 """Overrriden from TypeHandler.""" | 5277 """Overrriden from TypeHandler.""" |
5278 file.Write(" void Init(%s) {\n" % func.MakeTypedCmdArgString("_")) | 5278 f.write(" void Init(%s) {\n" % func.MakeTypedCmdArgString("_")) |
5279 self.WriteImmediateCmdGetTotalSize(func, file) | 5279 self.WriteImmediateCmdGetTotalSize(func, f) |
5280 file.Write(" SetHeader(total_size);\n") | 5280 f.write(" SetHeader(total_size);\n") |
5281 args = func.GetCmdArgs() | 5281 args = func.GetCmdArgs() |
5282 for arg in args: | 5282 for arg in args: |
5283 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 5283 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
5284 file.Write(" }\n") | 5284 f.write(" }\n") |
5285 file.Write("\n") | 5285 f.write("\n") |
5286 | 5286 |
5287 def WriteImmediateCmdSet(self, func, file): | 5287 def WriteImmediateCmdSet(self, func, f): |
5288 """Overrriden from TypeHandler.""" | 5288 """Overrriden from TypeHandler.""" |
5289 copy_args = func.MakeCmdArgString("_", False) | 5289 copy_args = func.MakeCmdArgString("_", False) |
5290 file.Write(" void* Set(void* cmd%s) {\n" % | 5290 f.write(" void* Set(void* cmd%s) {\n" % |
5291 func.MakeTypedCmdArgString("_", True)) | 5291 func.MakeTypedCmdArgString("_", True)) |
5292 self.WriteImmediateCmdGetTotalSize(func, file) | 5292 self.WriteImmediateCmdGetTotalSize(func, f) |
5293 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) | 5293 f.write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) |
5294 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 5294 f.write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
5295 "cmd, total_size);\n") | 5295 "cmd, total_size);\n") |
5296 file.Write(" }\n") | 5296 f.write(" }\n") |
5297 file.Write("\n") | 5297 f.write("\n") |
5298 | 5298 |
5299 | 5299 |
5300 class TodoHandler(CustomHandler): | 5300 class TodoHandler(CustomHandler): |
5301 """Handle for commands that are not yet implemented.""" | 5301 """Handle for commands that are not yet implemented.""" |
5302 | 5302 |
5303 def NeedsDataTransferFunction(self, func): | 5303 def NeedsDataTransferFunction(self, func): |
5304 """Overriden from TypeHandler.""" | 5304 """Overriden from TypeHandler.""" |
5305 return False | 5305 return False |
5306 | 5306 |
5307 def WriteImmediateFormatTest(self, func, file): | 5307 def WriteImmediateFormatTest(self, func, f): |
5308 """Overrriden from TypeHandler.""" | 5308 """Overrriden from TypeHandler.""" |
5309 pass | 5309 pass |
5310 | 5310 |
5311 def WriteGLES2ImplementationUnitTest(self, func, file): | 5311 def WriteGLES2ImplementationUnitTest(self, func, f): |
5312 """Overrriden from TypeHandler.""" | 5312 """Overrriden from TypeHandler.""" |
5313 pass | 5313 pass |
5314 | 5314 |
5315 def WriteGLES2Implementation(self, func, file): | 5315 def WriteGLES2Implementation(self, func, f): |
5316 """Overrriden from TypeHandler.""" | 5316 """Overrriden from TypeHandler.""" |
5317 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 5317 f.write("%s GLES2Implementation::%s(%s) {\n" % |
5318 (func.return_type, func.original_name, | 5318 (func.return_type, func.original_name, |
5319 func.MakeTypedOriginalArgString(""))) | 5319 func.MakeTypedOriginalArgString(""))) |
5320 file.Write(" // TODO: for now this is a no-op\n") | 5320 f.write(" // TODO: for now this is a no-op\n") |
5321 file.Write( | 5321 f.write( |
5322 " SetGLError(" | 5322 " SetGLError(" |
5323 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % | 5323 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % |
5324 func.name) | 5324 func.name) |
5325 if func.return_type != "void": | 5325 if func.return_type != "void": |
5326 file.Write(" return 0;\n") | 5326 f.write(" return 0;\n") |
5327 file.Write("}\n") | 5327 f.write("}\n") |
5328 file.Write("\n") | 5328 f.write("\n") |
5329 | 5329 |
5330 def WriteServiceImplementation(self, func, file): | 5330 def WriteServiceImplementation(self, func, f): |
5331 """Overrriden from TypeHandler.""" | 5331 """Overrriden from TypeHandler.""" |
5332 self.WriteServiceHandlerFunctionHeader(func, file) | 5332 self.WriteServiceHandlerFunctionHeader(func, f) |
5333 file.Write(" // TODO: for now this is a no-op\n") | 5333 f.write(" // TODO: for now this is a no-op\n") |
5334 file.Write( | 5334 f.write( |
5335 " LOCAL_SET_GL_ERROR(" | 5335 " LOCAL_SET_GL_ERROR(" |
5336 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % | 5336 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % |
5337 func.name) | 5337 func.name) |
5338 file.Write(" return error::kNoError;\n") | 5338 f.write(" return error::kNoError;\n") |
5339 file.Write("}\n") | 5339 f.write("}\n") |
5340 file.Write("\n") | 5340 f.write("\n") |
5341 | 5341 |
5342 | 5342 |
5343 class HandWrittenHandler(CustomHandler): | 5343 class HandWrittenHandler(CustomHandler): |
5344 """Handler for comands where everything must be written by hand.""" | 5344 """Handler for comands where everything must be written by hand.""" |
5345 | 5345 |
5346 def InitFunction(self, func): | 5346 def InitFunction(self, func): |
5347 """Add or adjust anything type specific for this function.""" | 5347 """Add or adjust anything type specific for this function.""" |
5348 CustomHandler.InitFunction(self, func) | 5348 CustomHandler.InitFunction(self, func) |
5349 func.can_auto_generate = False | 5349 func.can_auto_generate = False |
5350 | 5350 |
5351 def NeedsDataTransferFunction(self, func): | 5351 def NeedsDataTransferFunction(self, func): |
5352 """Overriden from TypeHandler.""" | 5352 """Overriden from TypeHandler.""" |
5353 # If specified explicitly, force the data transfer method. | 5353 # If specified explicitly, force the data transfer method. |
5354 if func.GetInfo('data_transfer_methods'): | 5354 if func.GetInfo('data_transfer_methods'): |
5355 return True | 5355 return True |
5356 return False | 5356 return False |
5357 | 5357 |
5358 def WriteStruct(self, func, file): | 5358 def WriteStruct(self, func, f): |
5359 """Overrriden from TypeHandler.""" | 5359 """Overrriden from TypeHandler.""" |
5360 pass | 5360 pass |
5361 | 5361 |
5362 def WriteDocs(self, func, file): | 5362 def WriteDocs(self, func, f): |
5363 """Overrriden from TypeHandler.""" | 5363 """Overrriden from TypeHandler.""" |
5364 pass | 5364 pass |
5365 | 5365 |
5366 def WriteServiceUnitTest(self, func, file, *extras): | 5366 def WriteServiceUnitTest(self, func, f, *extras): |
5367 """Overrriden from TypeHandler.""" | 5367 """Overrriden from TypeHandler.""" |
5368 file.Write("// TODO(gman): %s\n\n" % func.name) | 5368 f.write("// TODO(gman): %s\n\n" % func.name) |
5369 | 5369 |
5370 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 5370 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
5371 """Overrriden from TypeHandler.""" | 5371 """Overrriden from TypeHandler.""" |
5372 file.Write("// TODO(gman): %s\n\n" % func.name) | 5372 f.write("// TODO(gman): %s\n\n" % func.name) |
5373 | 5373 |
5374 def WriteBucketServiceUnitTest(self, func, file, *extras): | 5374 def WriteBucketServiceUnitTest(self, func, f, *extras): |
5375 """Overrriden from TypeHandler.""" | 5375 """Overrriden from TypeHandler.""" |
5376 file.Write("// TODO(gman): %s\n\n" % func.name) | 5376 f.write("// TODO(gman): %s\n\n" % func.name) |
5377 | 5377 |
5378 def WriteServiceImplementation(self, func, file): | 5378 def WriteServiceImplementation(self, func, f): |
5379 """Overrriden from TypeHandler.""" | 5379 """Overrriden from TypeHandler.""" |
5380 pass | 5380 pass |
5381 | 5381 |
5382 def WriteImmediateServiceImplementation(self, func, file): | 5382 def WriteImmediateServiceImplementation(self, func, f): |
5383 """Overrriden from TypeHandler.""" | 5383 """Overrriden from TypeHandler.""" |
5384 pass | 5384 pass |
5385 | 5385 |
5386 def WriteBucketServiceImplementation(self, func, file): | 5386 def WriteBucketServiceImplementation(self, func, f): |
5387 """Overrriden from TypeHandler.""" | 5387 """Overrriden from TypeHandler.""" |
5388 pass | 5388 pass |
5389 | 5389 |
5390 def WriteImmediateCmdHelper(self, func, file): | 5390 def WriteImmediateCmdHelper(self, func, f): |
5391 """Overrriden from TypeHandler.""" | 5391 """Overrriden from TypeHandler.""" |
5392 pass | 5392 pass |
5393 | 5393 |
5394 def WriteCmdHelper(self, func, file): | 5394 def WriteCmdHelper(self, func, f): |
5395 """Overrriden from TypeHandler.""" | 5395 """Overrriden from TypeHandler.""" |
5396 pass | 5396 pass |
5397 | 5397 |
5398 def WriteFormatTest(self, func, file): | 5398 def WriteFormatTest(self, func, f): |
5399 """Overrriden from TypeHandler.""" | 5399 """Overrriden from TypeHandler.""" |
5400 file.Write("// TODO(gman): Write test for %s\n" % func.name) | 5400 f.write("// TODO(gman): Write test for %s\n" % func.name) |
5401 | 5401 |
5402 def WriteImmediateFormatTest(self, func, file): | 5402 def WriteImmediateFormatTest(self, func, f): |
5403 """Overrriden from TypeHandler.""" | 5403 """Overrriden from TypeHandler.""" |
5404 file.Write("// TODO(gman): Write test for %s\n" % func.name) | 5404 f.write("// TODO(gman): Write test for %s\n" % func.name) |
5405 | 5405 |
5406 def WriteBucketFormatTest(self, func, file): | 5406 def WriteBucketFormatTest(self, func, f): |
5407 """Overrriden from TypeHandler.""" | 5407 """Overrriden from TypeHandler.""" |
5408 file.Write("// TODO(gman): Write test for %s\n" % func.name) | 5408 f.write("// TODO(gman): Write test for %s\n" % func.name) |
5409 | 5409 |
5410 | 5410 |
5411 | 5411 |
5412 class ManualHandler(CustomHandler): | 5412 class ManualHandler(CustomHandler): |
5413 """Handler for commands who's handlers must be written by hand.""" | 5413 """Handler for commands who's handlers must be written by hand.""" |
5414 | 5414 |
5415 def __init__(self): | 5415 def __init__(self): |
5416 CustomHandler.__init__(self) | 5416 CustomHandler.__init__(self) |
5417 | 5417 |
5418 def InitFunction(self, func): | 5418 def InitFunction(self, func): |
5419 """Overrriden from TypeHandler.""" | 5419 """Overrriden from TypeHandler.""" |
5420 if (func.name == 'CompressedTexImage2DBucket' or | 5420 if (func.name == 'CompressedTexImage2DBucket' or |
5421 func.name == 'CompressedTexImage3DBucket'): | 5421 func.name == 'CompressedTexImage3DBucket'): |
5422 func.cmd_args = func.cmd_args[:-1] | 5422 func.cmd_args = func.cmd_args[:-1] |
5423 func.AddCmdArg(Argument('bucket_id', 'GLuint')) | 5423 func.AddCmdArg(Argument('bucket_id', 'GLuint')) |
5424 else: | 5424 else: |
5425 CustomHandler.InitFunction(self, func) | 5425 CustomHandler.InitFunction(self, func) |
5426 | 5426 |
5427 def WriteServiceImplementation(self, func, file): | 5427 def WriteServiceImplementation(self, func, f): |
5428 """Overrriden from TypeHandler.""" | 5428 """Overrriden from TypeHandler.""" |
5429 pass | 5429 pass |
5430 | 5430 |
5431 def WriteBucketServiceImplementation(self, func, file): | 5431 def WriteBucketServiceImplementation(self, func, f): |
5432 """Overrriden from TypeHandler.""" | 5432 """Overrriden from TypeHandler.""" |
5433 pass | 5433 pass |
5434 | 5434 |
5435 def WriteServiceUnitTest(self, func, file, *extras): | 5435 def WriteServiceUnitTest(self, func, f, *extras): |
5436 """Overrriden from TypeHandler.""" | 5436 """Overrriden from TypeHandler.""" |
5437 file.Write("// TODO(gman): %s\n\n" % func.name) | 5437 f.write("// TODO(gman): %s\n\n" % func.name) |
5438 | 5438 |
5439 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 5439 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
5440 """Overrriden from TypeHandler.""" | 5440 """Overrriden from TypeHandler.""" |
5441 file.Write("// TODO(gman): %s\n\n" % func.name) | 5441 f.write("// TODO(gman): %s\n\n" % func.name) |
5442 | 5442 |
5443 def WriteImmediateServiceImplementation(self, func, file): | 5443 def WriteImmediateServiceImplementation(self, func, f): |
5444 """Overrriden from TypeHandler.""" | 5444 """Overrriden from TypeHandler.""" |
5445 pass | 5445 pass |
5446 | 5446 |
5447 def WriteImmediateFormatTest(self, func, file): | 5447 def WriteImmediateFormatTest(self, func, f): |
5448 """Overrriden from TypeHandler.""" | 5448 """Overrriden from TypeHandler.""" |
5449 file.Write("// TODO(gman): Implement test for %s\n" % func.name) | 5449 f.write("// TODO(gman): Implement test for %s\n" % func.name) |
5450 | 5450 |
5451 def WriteGLES2Implementation(self, func, file): | 5451 def WriteGLES2Implementation(self, func, f): |
5452 """Overrriden from TypeHandler.""" | 5452 """Overrriden from TypeHandler.""" |
5453 if func.GetInfo('impl_func'): | 5453 if func.GetInfo('impl_func'): |
5454 super(ManualHandler, self).WriteGLES2Implementation(func, file) | 5454 super(ManualHandler, self).WriteGLES2Implementation(func, f) |
5455 | 5455 |
5456 def WriteGLES2ImplementationHeader(self, func, file): | 5456 def WriteGLES2ImplementationHeader(self, func, f): |
5457 """Overrriden from TypeHandler.""" | 5457 """Overrriden from TypeHandler.""" |
5458 file.Write("%s %s(%s) override;\n" % | 5458 f.write("%s %s(%s) override;\n" % |
5459 (func.return_type, func.original_name, | 5459 (func.return_type, func.original_name, |
5460 func.MakeTypedOriginalArgString(""))) | 5460 func.MakeTypedOriginalArgString(""))) |
5461 file.Write("\n") | 5461 f.write("\n") |
5462 | 5462 |
5463 def WriteImmediateCmdGetTotalSize(self, func, file): | 5463 def WriteImmediateCmdGetTotalSize(self, func, f): |
5464 """Overrriden from TypeHandler.""" | 5464 """Overrriden from TypeHandler.""" |
5465 # TODO(gman): Move this data to _FUNCTION_INFO? | 5465 # TODO(gman): Move this data to _FUNCTION_INFO? |
5466 CustomHandler.WriteImmediateCmdGetTotalSize(self, func, file) | 5466 CustomHandler.WriteImmediateCmdGetTotalSize(self, func, f) |
5467 | 5467 |
5468 | 5468 |
5469 class DataHandler(TypeHandler): | 5469 class DataHandler(TypeHandler): |
5470 """Handler for glBufferData, glBufferSubData, glTexImage*D, glTexSubImage*D, | 5470 """Handler for glBufferData, glBufferSubData, glTexImage*D, glTexSubImage*D, |
5471 glCompressedTexImage*D, glCompressedTexImageSub*D.""" | 5471 glCompressedTexImage*D, glCompressedTexImageSub*D.""" |
5472 def __init__(self): | 5472 def __init__(self): |
5473 TypeHandler.__init__(self) | 5473 TypeHandler.__init__(self) |
5474 | 5474 |
5475 def InitFunction(self, func): | 5475 def InitFunction(self, func): |
5476 """Overrriden from TypeHandler.""" | 5476 """Overrriden from TypeHandler.""" |
5477 if (func.name == 'CompressedTexSubImage2DBucket' or | 5477 if (func.name == 'CompressedTexSubImage2DBucket' or |
5478 func.name == 'CompressedTexSubImage3DBucket'): | 5478 func.name == 'CompressedTexSubImage3DBucket'): |
5479 func.cmd_args = func.cmd_args[:-1] | 5479 func.cmd_args = func.cmd_args[:-1] |
5480 func.AddCmdArg(Argument('bucket_id', 'GLuint')) | 5480 func.AddCmdArg(Argument('bucket_id', 'GLuint')) |
5481 | 5481 |
5482 def WriteGetDataSizeCode(self, func, file): | 5482 def WriteGetDataSizeCode(self, func, f): |
5483 """Overrriden from TypeHandler.""" | 5483 """Overrriden from TypeHandler.""" |
5484 # TODO(gman): Move this data to _FUNCTION_INFO? | 5484 # TODO(gman): Move this data to _FUNCTION_INFO? |
5485 name = func.name | 5485 name = func.name |
5486 if name.endswith("Immediate"): | 5486 if name.endswith("Immediate"): |
5487 name = name[0:-9] | 5487 name = name[0:-9] |
5488 if name == 'BufferData' or name == 'BufferSubData': | 5488 if name == 'BufferData' or name == 'BufferSubData': |
5489 file.Write(" uint32_t data_size = size;\n") | 5489 f.write(" uint32_t data_size = size;\n") |
5490 elif (name == 'CompressedTexImage2D' or | 5490 elif (name == 'CompressedTexImage2D' or |
5491 name == 'CompressedTexSubImage2D' or | 5491 name == 'CompressedTexSubImage2D' or |
5492 name == 'CompressedTexImage3D' or | 5492 name == 'CompressedTexImage3D' or |
5493 name == 'CompressedTexSubImage3D'): | 5493 name == 'CompressedTexSubImage3D'): |
5494 file.Write(" uint32_t data_size = imageSize;\n") | 5494 f.write(" uint32_t data_size = imageSize;\n") |
5495 elif (name == 'CompressedTexSubImage2DBucket' or | 5495 elif (name == 'CompressedTexSubImage2DBucket' or |
5496 name == 'CompressedTexSubImage3DBucket'): | 5496 name == 'CompressedTexSubImage3DBucket'): |
5497 file.Write(" Bucket* bucket = GetBucket(c.bucket_id);\n") | 5497 f.write(" Bucket* bucket = GetBucket(c.bucket_id);\n") |
5498 file.Write(" uint32_t data_size = bucket->size();\n") | 5498 f.write(" uint32_t data_size = bucket->size();\n") |
5499 file.Write(" GLsizei imageSize = data_size;\n") | 5499 f.write(" GLsizei imageSize = data_size;\n") |
5500 elif name == 'TexImage2D' or name == 'TexSubImage2D': | 5500 elif name == 'TexImage2D' or name == 'TexSubImage2D': |
5501 code = """ uint32_t data_size; | 5501 code = """ uint32_t data_size; |
5502 if (!GLES2Util::ComputeImageDataSize( | 5502 if (!GLES2Util::ComputeImageDataSize( |
5503 width, height, format, type, unpack_alignment_, &data_size)) { | 5503 width, height, format, type, unpack_alignment_, &data_size)) { |
5504 return error::kOutOfBounds; | 5504 return error::kOutOfBounds; |
5505 } | 5505 } |
5506 """ | 5506 """ |
5507 file.Write(code) | 5507 f.write(code) |
5508 else: | 5508 else: |
5509 file.Write( | 5509 f.write( |
5510 "// uint32_t data_size = 0; // TODO(gman): get correct size!\n") | 5510 "// uint32_t data_size = 0; // TODO(gman): get correct size!\n") |
5511 | 5511 |
5512 def WriteImmediateCmdGetTotalSize(self, func, file): | 5512 def WriteImmediateCmdGetTotalSize(self, func, f): |
5513 """Overrriden from TypeHandler.""" | 5513 """Overrriden from TypeHandler.""" |
5514 pass | 5514 pass |
5515 | 5515 |
5516 def WriteImmediateCmdSizeTest(self, func, file): | 5516 def WriteImmediateCmdSizeTest(self, func, f): |
5517 """Overrriden from TypeHandler.""" | 5517 """Overrriden from TypeHandler.""" |
5518 file.Write(" EXPECT_EQ(sizeof(cmd), total_size);\n") | 5518 f.write(" EXPECT_EQ(sizeof(cmd), total_size);\n") |
5519 | 5519 |
5520 def WriteImmediateCmdInit(self, func, file): | 5520 def WriteImmediateCmdInit(self, func, f): |
5521 """Overrriden from TypeHandler.""" | 5521 """Overrriden from TypeHandler.""" |
5522 file.Write(" void Init(%s) {\n" % func.MakeTypedCmdArgString("_")) | 5522 f.write(" void Init(%s) {\n" % func.MakeTypedCmdArgString("_")) |
5523 self.WriteImmediateCmdGetTotalSize(func, file) | 5523 self.WriteImmediateCmdGetTotalSize(func, f) |
5524 file.Write(" SetHeader(total_size);\n") | 5524 f.write(" SetHeader(total_size);\n") |
5525 args = func.GetCmdArgs() | 5525 args = func.GetCmdArgs() |
5526 for arg in args: | 5526 for arg in args: |
5527 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 5527 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
5528 file.Write(" }\n") | 5528 f.write(" }\n") |
5529 file.Write("\n") | 5529 f.write("\n") |
5530 | 5530 |
5531 def WriteImmediateCmdSet(self, func, file): | 5531 def WriteImmediateCmdSet(self, func, f): |
5532 """Overrriden from TypeHandler.""" | 5532 """Overrriden from TypeHandler.""" |
5533 copy_args = func.MakeCmdArgString("_", False) | 5533 copy_args = func.MakeCmdArgString("_", False) |
5534 file.Write(" void* Set(void* cmd%s) {\n" % | 5534 f.write(" void* Set(void* cmd%s) {\n" % |
5535 func.MakeTypedCmdArgString("_", True)) | 5535 func.MakeTypedCmdArgString("_", True)) |
5536 self.WriteImmediateCmdGetTotalSize(func, file) | 5536 self.WriteImmediateCmdGetTotalSize(func, f) |
5537 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) | 5537 f.write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) |
5538 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 5538 f.write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
5539 "cmd, total_size);\n") | 5539 "cmd, total_size);\n") |
5540 file.Write(" }\n") | 5540 f.write(" }\n") |
5541 file.Write("\n") | 5541 f.write("\n") |
5542 | 5542 |
5543 def WriteImmediateFormatTest(self, func, file): | 5543 def WriteImmediateFormatTest(self, func, f): |
5544 """Overrriden from TypeHandler.""" | 5544 """Overrriden from TypeHandler.""" |
5545 # TODO(gman): Remove this exception. | 5545 # TODO(gman): Remove this exception. |
5546 file.Write("// TODO(gman): Implement test for %s\n" % func.name) | 5546 f.write("// TODO(gman): Implement test for %s\n" % func.name) |
5547 return | 5547 return |
5548 | 5548 |
5549 def WriteServiceUnitTest(self, func, file, *extras): | 5549 def WriteServiceUnitTest(self, func, f, *extras): |
5550 """Overrriden from TypeHandler.""" | 5550 """Overrriden from TypeHandler.""" |
5551 file.Write("// TODO(gman): %s\n\n" % func.name) | 5551 f.write("// TODO(gman): %s\n\n" % func.name) |
5552 | 5552 |
5553 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 5553 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
5554 """Overrriden from TypeHandler.""" | 5554 """Overrriden from TypeHandler.""" |
5555 file.Write("// TODO(gman): %s\n\n" % func.name) | 5555 f.write("// TODO(gman): %s\n\n" % func.name) |
5556 | 5556 |
5557 def WriteBucketServiceImplementation(self, func, file): | 5557 def WriteBucketServiceImplementation(self, func, f): |
5558 """Overrriden from TypeHandler.""" | 5558 """Overrriden from TypeHandler.""" |
5559 if ((not func.name == 'CompressedTexSubImage2DBucket') and | 5559 if ((not func.name == 'CompressedTexSubImage2DBucket') and |
5560 (not func.name == 'CompressedTexSubImage3DBucket')): | 5560 (not func.name == 'CompressedTexSubImage3DBucket')): |
5561 TypeHandler.WriteBucketServiceImplemenation(self, func, file) | 5561 TypeHandler.WriteBucketServiceImplemenation(self, func, f) |
5562 | 5562 |
5563 | 5563 |
5564 class BindHandler(TypeHandler): | 5564 class BindHandler(TypeHandler): |
5565 """Handler for glBind___ type functions.""" | 5565 """Handler for glBind___ type functions.""" |
5566 | 5566 |
5567 def __init__(self): | 5567 def __init__(self): |
5568 TypeHandler.__init__(self) | 5568 TypeHandler.__init__(self) |
5569 | 5569 |
5570 def WriteServiceUnitTest(self, func, file, *extras): | 5570 def WriteServiceUnitTest(self, func, f, *extras): |
5571 """Overrriden from TypeHandler.""" | 5571 """Overrriden from TypeHandler.""" |
5572 | 5572 |
5573 if len(func.GetOriginalArgs()) == 1: | 5573 if len(func.GetOriginalArgs()) == 1: |
5574 valid_test = """ | 5574 valid_test = """ |
5575 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5575 TEST_P(%(test_name)s, %(name)sValidArgs) { |
5576 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); | 5576 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); |
5577 SpecializedSetup<cmds::%(name)s, 0>(true); | 5577 SpecializedSetup<cmds::%(name)s, 0>(true); |
5578 cmds::%(name)s cmd; | 5578 cmds::%(name)s cmd; |
5579 cmd.Init(%(args)s);""" | 5579 cmd.Init(%(args)s);""" |
5580 if func.IsUnsafe(): | 5580 if func.IsUnsafe(): |
(...skipping 18 matching lines...) Expand all Loading... |
5599 EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _)) | 5599 EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _)) |
5600 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); | 5600 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); |
5601 SpecializedSetup<cmds::%(name)s, 0>(true); | 5601 SpecializedSetup<cmds::%(name)s, 0>(true); |
5602 cmds::%(name)s cmd; | 5602 cmds::%(name)s cmd; |
5603 cmd.Init(kNewClientId); | 5603 cmd.Init(kNewClientId); |
5604 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5604 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
5605 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 5605 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
5606 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); | 5606 EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL); |
5607 } | 5607 } |
5608 """ | 5608 """ |
5609 self.WriteValidUnitTest(func, file, valid_test, { | 5609 self.WriteValidUnitTest(func, f, valid_test, { |
5610 'resource_type': func.GetOriginalArgs()[0].resource_type, | 5610 'resource_type': func.GetOriginalArgs()[0].resource_type, |
5611 'gl_gen_func_name': func.GetInfo("gen_func"), | 5611 'gl_gen_func_name': func.GetInfo("gen_func"), |
5612 }, *extras) | 5612 }, *extras) |
5613 else: | 5613 else: |
5614 valid_test = """ | 5614 valid_test = """ |
5615 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5615 TEST_P(%(test_name)s, %(name)sValidArgs) { |
5616 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); | 5616 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); |
5617 SpecializedSetup<cmds::%(name)s, 0>(true); | 5617 SpecializedSetup<cmds::%(name)s, 0>(true); |
5618 cmds::%(name)s cmd; | 5618 cmds::%(name)s cmd; |
5619 cmd.Init(%(args)s);""" | 5619 cmd.Init(%(args)s);""" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5662 | 5662 |
5663 gl_args_with_new_id = [] | 5663 gl_args_with_new_id = [] |
5664 args_with_new_id = [] | 5664 args_with_new_id = [] |
5665 for arg in func.GetOriginalArgs(): | 5665 for arg in func.GetOriginalArgs(): |
5666 if hasattr(arg, 'resource_type'): | 5666 if hasattr(arg, 'resource_type'): |
5667 gl_args_with_new_id.append('kNewServiceId') | 5667 gl_args_with_new_id.append('kNewServiceId') |
5668 args_with_new_id.append('kNewClientId') | 5668 args_with_new_id.append('kNewClientId') |
5669 else: | 5669 else: |
5670 gl_args_with_new_id.append(arg.GetValidGLArg(func)) | 5670 gl_args_with_new_id.append(arg.GetValidGLArg(func)) |
5671 args_with_new_id.append(arg.GetValidArg(func)) | 5671 args_with_new_id.append(arg.GetValidArg(func)) |
5672 self.WriteValidUnitTest(func, file, valid_test, { | 5672 self.WriteValidUnitTest(func, f, valid_test, { |
5673 'args_with_new_id': ", ".join(args_with_new_id), | 5673 'args_with_new_id': ", ".join(args_with_new_id), |
5674 'gl_args_with_new_id': ", ".join(gl_args_with_new_id), | 5674 'gl_args_with_new_id': ", ".join(gl_args_with_new_id), |
5675 'resource_type': func.GetResourceIdArg().resource_type, | 5675 'resource_type': func.GetResourceIdArg().resource_type, |
5676 'gl_gen_func_name': func.GetInfo("gen_func"), | 5676 'gl_gen_func_name': func.GetInfo("gen_func"), |
5677 }, *extras) | 5677 }, *extras) |
5678 | 5678 |
5679 invalid_test = """ | 5679 invalid_test = """ |
5680 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 5680 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
5681 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 5681 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
5682 SpecializedSetup<cmds::%(name)s, 0>(false); | 5682 SpecializedSetup<cmds::%(name)s, 0>(false); |
5683 cmds::%(name)s cmd; | 5683 cmds::%(name)s cmd; |
5684 cmd.Init(%(args)s); | 5684 cmd.Init(%(args)s); |
5685 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s | 5685 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s |
5686 } | 5686 } |
5687 """ | 5687 """ |
5688 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) | 5688 self.WriteInvalidUnitTest(func, f, invalid_test, *extras) |
5689 | 5689 |
5690 def WriteGLES2Implementation(self, func, file): | 5690 def WriteGLES2Implementation(self, func, f): |
5691 """Writes the GLES2 Implemention.""" | 5691 """Writes the GLES2 Implemention.""" |
5692 | 5692 |
5693 impl_func = func.GetInfo('impl_func') | 5693 impl_func = func.GetInfo('impl_func') |
5694 impl_decl = func.GetInfo('impl_decl') | 5694 impl_decl = func.GetInfo('impl_decl') |
5695 | 5695 |
5696 if (func.can_auto_generate and | 5696 if (func.can_auto_generate and |
5697 (impl_func == None or impl_func == True) and | 5697 (impl_func == None or impl_func == True) and |
5698 (impl_decl == None or impl_decl == True)): | 5698 (impl_decl == None or impl_decl == True)): |
5699 | 5699 |
5700 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 5700 f.write("%s GLES2Implementation::%s(%s) {\n" % |
5701 (func.return_type, func.original_name, | 5701 (func.return_type, func.original_name, |
5702 func.MakeTypedOriginalArgString(""))) | 5702 func.MakeTypedOriginalArgString(""))) |
5703 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 5703 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
5704 func.WriteDestinationInitalizationValidation(file) | 5704 func.WriteDestinationInitalizationValidation(f) |
5705 self.WriteClientGLCallLog(func, file) | 5705 self.WriteClientGLCallLog(func, f) |
5706 for arg in func.GetOriginalArgs(): | 5706 for arg in func.GetOriginalArgs(): |
5707 arg.WriteClientSideValidationCode(file, func) | 5707 arg.WriteClientSideValidationCode(f, func) |
5708 | 5708 |
5709 code = """ if (Is%(type)sReservedId(%(id)s)) { | 5709 code = """ if (Is%(type)sReservedId(%(id)s)) { |
5710 SetGLError(GL_INVALID_OPERATION, "%(name)s\", \"%(id)s reserved id"); | 5710 SetGLError(GL_INVALID_OPERATION, "%(name)s\", \"%(id)s reserved id"); |
5711 return; | 5711 return; |
5712 } | 5712 } |
5713 %(name)sHelper(%(arg_string)s); | 5713 %(name)sHelper(%(arg_string)s); |
5714 CheckGLError(); | 5714 CheckGLError(); |
5715 } | 5715 } |
5716 | 5716 |
5717 """ | 5717 """ |
5718 name_arg = func.GetResourceIdArg() | 5718 name_arg = func.GetResourceIdArg() |
5719 file.Write(code % { | 5719 f.write(code % { |
5720 'name': func.name, | 5720 'name': func.name, |
5721 'arg_string': func.MakeOriginalArgString(""), | 5721 'arg_string': func.MakeOriginalArgString(""), |
5722 'id': name_arg.name, | 5722 'id': name_arg.name, |
5723 'type': name_arg.resource_type, | 5723 'type': name_arg.resource_type, |
5724 'lc_type': name_arg.resource_type.lower(), | 5724 'lc_type': name_arg.resource_type.lower(), |
5725 }) | 5725 }) |
5726 | 5726 |
5727 def WriteGLES2ImplementationUnitTest(self, func, file): | 5727 def WriteGLES2ImplementationUnitTest(self, func, f): |
5728 """Overrriden from TypeHandler.""" | 5728 """Overrriden from TypeHandler.""" |
5729 client_test = func.GetInfo('client_test') | 5729 client_test = func.GetInfo('client_test') |
5730 if client_test == False: | 5730 if client_test == False: |
5731 return | 5731 return |
5732 code = """ | 5732 code = """ |
5733 TEST_F(GLES2ImplementationTest, %(name)s) { | 5733 TEST_F(GLES2ImplementationTest, %(name)s) { |
5734 struct Cmds { | 5734 struct Cmds { |
5735 cmds::%(name)s cmd; | 5735 cmds::%(name)s cmd; |
5736 }; | 5736 }; |
5737 Cmds expected; | 5737 Cmds expected; |
5738 expected.cmd.Init(%(cmd_args)s); | 5738 expected.cmd.Init(%(cmd_args)s); |
5739 | 5739 |
5740 gl_->%(name)s(%(args)s); | 5740 gl_->%(name)s(%(args)s); |
5741 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));""" | 5741 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));""" |
5742 if not func.IsUnsafe(): | 5742 if not func.IsUnsafe(): |
5743 code += """ | 5743 code += """ |
5744 ClearCommands(); | 5744 ClearCommands(); |
5745 gl_->%(name)s(%(args)s); | 5745 gl_->%(name)s(%(args)s); |
5746 EXPECT_TRUE(NoCommandsWritten());""" | 5746 EXPECT_TRUE(NoCommandsWritten());""" |
5747 code += """ | 5747 code += """ |
5748 } | 5748 } |
5749 """ | 5749 """ |
5750 cmd_arg_strings = [ | 5750 cmd_arg_strings = [ |
5751 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs() | 5751 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs() |
5752 ] | 5752 ] |
5753 gl_arg_strings = [ | 5753 gl_arg_strings = [ |
5754 arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs() | 5754 arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs() |
5755 ] | 5755 ] |
5756 | 5756 |
5757 file.Write(code % { | 5757 f.write(code % { |
5758 'name': func.name, | 5758 'name': func.name, |
5759 'args': ", ".join(gl_arg_strings), | 5759 'args': ", ".join(gl_arg_strings), |
5760 'cmd_args': ", ".join(cmd_arg_strings), | 5760 'cmd_args': ", ".join(cmd_arg_strings), |
5761 }) | 5761 }) |
5762 | 5762 |
5763 | 5763 |
5764 class GENnHandler(TypeHandler): | 5764 class GENnHandler(TypeHandler): |
5765 """Handler for glGen___ type functions.""" | 5765 """Handler for glGen___ type functions.""" |
5766 | 5766 |
5767 def __init__(self): | 5767 def __init__(self): |
5768 TypeHandler.__init__(self) | 5768 TypeHandler.__init__(self) |
5769 | 5769 |
5770 def InitFunction(self, func): | 5770 def InitFunction(self, func): |
5771 """Overrriden from TypeHandler.""" | 5771 """Overrriden from TypeHandler.""" |
5772 pass | 5772 pass |
5773 | 5773 |
5774 def WriteGetDataSizeCode(self, func, file): | 5774 def WriteGetDataSizeCode(self, func, f): |
5775 """Overrriden from TypeHandler.""" | 5775 """Overrriden from TypeHandler.""" |
5776 code = """ uint32_t data_size; | 5776 code = """ uint32_t data_size; |
5777 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 5777 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
5778 return error::kOutOfBounds; | 5778 return error::kOutOfBounds; |
5779 } | 5779 } |
5780 """ | 5780 """ |
5781 file.Write(code) | 5781 f.write(code) |
5782 | 5782 |
5783 def WriteHandlerImplementation (self, func, file): | 5783 def WriteHandlerImplementation (self, func, f): |
5784 """Overrriden from TypeHandler.""" | 5784 """Overrriden from TypeHandler.""" |
5785 file.Write(" if (!%sHelper(n, %s)) {\n" | 5785 f.write(" if (!%sHelper(n, %s)) {\n" |
5786 " return error::kInvalidArguments;\n" | 5786 " return error::kInvalidArguments;\n" |
5787 " }\n" % | 5787 " }\n" % |
5788 (func.name, func.GetLastOriginalArg().name)) | 5788 (func.name, func.GetLastOriginalArg().name)) |
5789 | 5789 |
5790 def WriteImmediateHandlerImplementation(self, func, file): | 5790 def WriteImmediateHandlerImplementation(self, func, f): |
5791 """Overrriden from TypeHandler.""" | 5791 """Overrriden from TypeHandler.""" |
5792 if func.IsUnsafe(): | 5792 if func.IsUnsafe(): |
5793 file.Write(""" for (GLsizei ii = 0; ii < n; ++ii) { | 5793 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
5794 if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { | 5794 if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { |
5795 return error::kInvalidArguments; | 5795 return error::kInvalidArguments; |
5796 } | 5796 } |
5797 } | 5797 } |
5798 scoped_ptr<GLuint[]> service_ids(new GLuint[n]); | 5798 scoped_ptr<GLuint[]> service_ids(new GLuint[n]); |
5799 gl%(func_name)s(n, service_ids.get()); | 5799 gl%(func_name)s(n, service_ids.get()); |
5800 for (GLsizei ii = 0; ii < n; ++ii) { | 5800 for (GLsizei ii = 0; ii < n; ++ii) { |
5801 group_->Add%(resource_name)sId(%(last_arg_name)s[ii], service_ids[ii]); | 5801 group_->Add%(resource_name)sId(%(last_arg_name)s[ii], service_ids[ii]); |
5802 } | 5802 } |
5803 """ % { 'func_name': func.original_name, | 5803 """ % { 'func_name': func.original_name, |
5804 'last_arg_name': func.GetLastOriginalArg().name, | 5804 'last_arg_name': func.GetLastOriginalArg().name, |
5805 'resource_name': func.GetInfo('resource_type') }) | 5805 'resource_name': func.GetInfo('resource_type') }) |
5806 else: | 5806 else: |
5807 file.Write(" if (!%sHelper(n, %s)) {\n" | 5807 f.write(" if (!%sHelper(n, %s)) {\n" |
5808 " return error::kInvalidArguments;\n" | 5808 " return error::kInvalidArguments;\n" |
5809 " }\n" % | 5809 " }\n" % |
5810 (func.original_name, func.GetLastOriginalArg().name)) | 5810 (func.original_name, func.GetLastOriginalArg().name)) |
5811 | 5811 |
5812 def WriteGLES2Implementation(self, func, file): | 5812 def WriteGLES2Implementation(self, func, f): |
5813 """Overrriden from TypeHandler.""" | 5813 """Overrriden from TypeHandler.""" |
5814 log_code = (""" GPU_CLIENT_LOG_CODE_BLOCK({ | 5814 log_code = (""" GPU_CLIENT_LOG_CODE_BLOCK({ |
5815 for (GLsizei i = 0; i < n; ++i) { | 5815 for (GLsizei i = 0; i < n; ++i) { |
5816 GPU_CLIENT_LOG(" " << i << ": " << %s[i]); | 5816 GPU_CLIENT_LOG(" " << i << ": " << %s[i]); |
5817 } | 5817 } |
5818 });""" % func.GetOriginalArgs()[1].name) | 5818 });""" % func.GetOriginalArgs()[1].name) |
5819 args = { | 5819 args = { |
5820 'log_code': log_code, | 5820 'log_code': log_code, |
5821 'return_type': func.return_type, | 5821 'return_type': func.return_type, |
5822 'name': func.original_name, | 5822 'name': func.original_name, |
5823 'typed_args': func.MakeTypedOriginalArgString(""), | 5823 'typed_args': func.MakeTypedOriginalArgString(""), |
5824 'args': func.MakeOriginalArgString(""), | 5824 'args': func.MakeOriginalArgString(""), |
5825 'resource_types': func.GetInfo('resource_types'), | 5825 'resource_types': func.GetInfo('resource_types'), |
5826 'count_name': func.GetOriginalArgs()[0].name, | 5826 'count_name': func.GetOriginalArgs()[0].name, |
5827 } | 5827 } |
5828 file.Write( | 5828 f.write( |
5829 "%(return_type)s GLES2Implementation::%(name)s(%(typed_args)s) {\n" % | 5829 "%(return_type)s GLES2Implementation::%(name)s(%(typed_args)s) {\n" % |
5830 args) | 5830 args) |
5831 func.WriteDestinationInitalizationValidation(file) | 5831 func.WriteDestinationInitalizationValidation(f) |
5832 self.WriteClientGLCallLog(func, file) | 5832 self.WriteClientGLCallLog(func, f) |
5833 for arg in func.GetOriginalArgs(): | 5833 for arg in func.GetOriginalArgs(): |
5834 arg.WriteClientSideValidationCode(file, func) | 5834 arg.WriteClientSideValidationCode(f, func) |
5835 not_shared = func.GetInfo('not_shared') | 5835 not_shared = func.GetInfo('not_shared') |
5836 if not_shared: | 5836 if not_shared: |
5837 alloc_code = ( | 5837 alloc_code = ( |
5838 | 5838 |
5839 """ IdAllocator* id_allocator = GetIdAllocator(id_namespaces::k%s); | 5839 """ IdAllocator* id_allocator = GetIdAllocator(id_namespaces::k%s); |
5840 for (GLsizei ii = 0; ii < n; ++ii) | 5840 for (GLsizei ii = 0; ii < n; ++ii) |
5841 %s[ii] = id_allocator->AllocateID();""" % | 5841 %s[ii] = id_allocator->AllocateID();""" % |
5842 (func.GetInfo('resource_types'), func.GetOriginalArgs()[1].name)) | 5842 (func.GetInfo('resource_types'), func.GetOriginalArgs()[1].name)) |
5843 else: | 5843 else: |
5844 alloc_code = (""" GetIdHandler(id_namespaces::k%(resource_types)s)-> | 5844 alloc_code = (""" GetIdHandler(id_namespaces::k%(resource_types)s)-> |
5845 MakeIds(this, 0, %(args)s);""" % args) | 5845 MakeIds(this, 0, %(args)s);""" % args) |
5846 args['alloc_code'] = alloc_code | 5846 args['alloc_code'] = alloc_code |
5847 | 5847 |
5848 code = """ GPU_CLIENT_SINGLE_THREAD_CHECK(); | 5848 code = """ GPU_CLIENT_SINGLE_THREAD_CHECK(); |
5849 %(alloc_code)s | 5849 %(alloc_code)s |
5850 %(name)sHelper(%(args)s); | 5850 %(name)sHelper(%(args)s); |
5851 helper_->%(name)sImmediate(%(args)s); | 5851 helper_->%(name)sImmediate(%(args)s); |
5852 if (share_group_->bind_generates_resource()) | 5852 if (share_group_->bind_generates_resource()) |
5853 helper_->CommandBufferHelper::Flush(); | 5853 helper_->CommandBufferHelper::Flush(); |
5854 %(log_code)s | 5854 %(log_code)s |
5855 CheckGLError(); | 5855 CheckGLError(); |
5856 } | 5856 } |
5857 | 5857 |
5858 """ | 5858 """ |
5859 file.Write(code % args) | 5859 f.write(code % args) |
5860 | 5860 |
5861 def WriteGLES2ImplementationUnitTest(self, func, file): | 5861 def WriteGLES2ImplementationUnitTest(self, func, f): |
5862 """Overrriden from TypeHandler.""" | 5862 """Overrriden from TypeHandler.""" |
5863 code = """ | 5863 code = """ |
5864 TEST_F(GLES2ImplementationTest, %(name)s) { | 5864 TEST_F(GLES2ImplementationTest, %(name)s) { |
5865 GLuint ids[2] = { 0, }; | 5865 GLuint ids[2] = { 0, }; |
5866 struct Cmds { | 5866 struct Cmds { |
5867 cmds::%(name)sImmediate gen; | 5867 cmds::%(name)sImmediate gen; |
5868 GLuint data[2]; | 5868 GLuint data[2]; |
5869 }; | 5869 }; |
5870 Cmds expected; | 5870 Cmds expected; |
5871 expected.gen.Init(arraysize(ids), &ids[0]); | 5871 expected.gen.Init(arraysize(ids), &ids[0]); |
5872 expected.data[0] = k%(types)sStartId; | 5872 expected.data[0] = k%(types)sStartId; |
5873 expected.data[1] = k%(types)sStartId + 1; | 5873 expected.data[1] = k%(types)sStartId + 1; |
5874 gl_->%(name)s(arraysize(ids), &ids[0]); | 5874 gl_->%(name)s(arraysize(ids), &ids[0]); |
5875 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 5875 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
5876 EXPECT_EQ(k%(types)sStartId, ids[0]); | 5876 EXPECT_EQ(k%(types)sStartId, ids[0]); |
5877 EXPECT_EQ(k%(types)sStartId + 1, ids[1]); | 5877 EXPECT_EQ(k%(types)sStartId + 1, ids[1]); |
5878 } | 5878 } |
5879 """ | 5879 """ |
5880 file.Write(code % { | 5880 f.write(code % { |
5881 'name': func.name, | 5881 'name': func.name, |
5882 'types': func.GetInfo('resource_types'), | 5882 'types': func.GetInfo('resource_types'), |
5883 }) | 5883 }) |
5884 | 5884 |
5885 def WriteServiceUnitTest(self, func, file, *extras): | 5885 def WriteServiceUnitTest(self, func, f, *extras): |
5886 """Overrriden from TypeHandler.""" | 5886 """Overrriden from TypeHandler.""" |
5887 valid_test = """ | 5887 valid_test = """ |
5888 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5888 TEST_P(%(test_name)s, %(name)sValidArgs) { |
5889 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) | 5889 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) |
5890 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); | 5890 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); |
5891 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; | 5891 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; |
5892 SpecializedSetup<cmds::%(name)s, 0>(true); | 5892 SpecializedSetup<cmds::%(name)s, 0>(true); |
5893 cmds::%(name)s cmd; | 5893 cmds::%(name)s cmd; |
5894 cmd.Init(%(args)s); | 5894 cmd.Init(%(args)s); |
5895 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5895 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
5896 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 5896 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
5897 if func.IsUnsafe(): | 5897 if func.IsUnsafe(): |
5898 valid_test += """ | 5898 valid_test += """ |
5899 GLuint service_id; | 5899 GLuint service_id; |
5900 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); | 5900 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
5901 EXPECT_EQ(kNewServiceId, service_id) | 5901 EXPECT_EQ(kNewServiceId, service_id) |
5902 } | 5902 } |
5903 """ | 5903 """ |
5904 else: | 5904 else: |
5905 valid_test += """ | 5905 valid_test += """ |
5906 EXPECT_TRUE(Get%(resource_name)s(kNewClientId, &service_id) != NULL); | 5906 EXPECT_TRUE(Get%(resource_name)s(kNewClientId, &service_id) != NULL); |
5907 } | 5907 } |
5908 """ | 5908 """ |
5909 self.WriteValidUnitTest(func, file, valid_test, { | 5909 self.WriteValidUnitTest(func, f, valid_test, { |
5910 'resource_name': func.GetInfo('resource_type'), | 5910 'resource_name': func.GetInfo('resource_type'), |
5911 }, *extras) | 5911 }, *extras) |
5912 invalid_test = """ | 5912 invalid_test = """ |
5913 TEST_P(%(test_name)s, %(name)sInvalidArgs) { | 5913 TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
5914 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); | 5914 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); |
5915 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_; | 5915 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_; |
5916 SpecializedSetup<cmds::%(name)s, 0>(false); | 5916 SpecializedSetup<cmds::%(name)s, 0>(false); |
5917 cmds::%(name)s cmd; | 5917 cmds::%(name)s cmd; |
5918 cmd.Init(%(args)s); | 5918 cmd.Init(%(args)s); |
5919 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); | 5919 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); |
5920 } | 5920 } |
5921 """ | 5921 """ |
5922 self.WriteValidUnitTest(func, file, invalid_test, { | 5922 self.WriteValidUnitTest(func, f, invalid_test, { |
5923 'resource_name': func.GetInfo('resource_type').lower(), | 5923 'resource_name': func.GetInfo('resource_type').lower(), |
5924 }, *extras) | 5924 }, *extras) |
5925 | 5925 |
5926 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 5926 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
5927 """Overrriden from TypeHandler.""" | 5927 """Overrriden from TypeHandler.""" |
5928 valid_test = """ | 5928 valid_test = """ |
5929 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5929 TEST_P(%(test_name)s, %(name)sValidArgs) { |
5930 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) | 5930 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) |
5931 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); | 5931 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); |
5932 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>(); | 5932 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>(); |
5933 GLuint temp = kNewClientId; | 5933 GLuint temp = kNewClientId; |
5934 SpecializedSetup<cmds::%(name)s, 0>(true);""" | 5934 SpecializedSetup<cmds::%(name)s, 0>(true);""" |
5935 if func.IsUnsafe(): | 5935 if func.IsUnsafe(): |
5936 valid_test += """ | 5936 valid_test += """ |
(...skipping 11 matching lines...) Expand all Loading... |
5948 decoder_->set_unsafe_es3_apis_enabled(false); | 5948 decoder_->set_unsafe_es3_apis_enabled(false); |
5949 EXPECT_EQ(error::kUnknownCommand, | 5949 EXPECT_EQ(error::kUnknownCommand, |
5950 ExecuteImmediateCmd(*cmd, sizeof(temp))); | 5950 ExecuteImmediateCmd(*cmd, sizeof(temp))); |
5951 } | 5951 } |
5952 """ | 5952 """ |
5953 else: | 5953 else: |
5954 valid_test += """ | 5954 valid_test += """ |
5955 EXPECT_TRUE(Get%(resource_name)s(kNewClientId) != NULL); | 5955 EXPECT_TRUE(Get%(resource_name)s(kNewClientId) != NULL); |
5956 } | 5956 } |
5957 """ | 5957 """ |
5958 self.WriteValidUnitTest(func, file, valid_test, { | 5958 self.WriteValidUnitTest(func, f, valid_test, { |
5959 'resource_name': func.GetInfo('resource_type'), | 5959 'resource_name': func.GetInfo('resource_type'), |
5960 }, *extras) | 5960 }, *extras) |
5961 invalid_test = """ | 5961 invalid_test = """ |
5962 TEST_P(%(test_name)s, %(name)sInvalidArgs) { | 5962 TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
5963 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); | 5963 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0); |
5964 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>(); | 5964 cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>(); |
5965 SpecializedSetup<cmds::%(name)s, 0>(false); | 5965 SpecializedSetup<cmds::%(name)s, 0>(false); |
5966 cmd->Init(1, &client_%(resource_name)s_id_);""" | 5966 cmd->Init(1, &client_%(resource_name)s_id_);""" |
5967 if func.IsUnsafe(): | 5967 if func.IsUnsafe(): |
5968 invalid_test += """ | 5968 invalid_test += """ |
5969 decoder_->set_unsafe_es3_apis_enabled(true); | 5969 decoder_->set_unsafe_es3_apis_enabled(true); |
5970 EXPECT_EQ(error::kInvalidArguments, | 5970 EXPECT_EQ(error::kInvalidArguments, |
5971 ExecuteImmediateCmd(*cmd, sizeof(&client_%(resource_name)s_id_))); | 5971 ExecuteImmediateCmd(*cmd, sizeof(&client_%(resource_name)s_id_))); |
5972 decoder_->set_unsafe_es3_apis_enabled(false); | 5972 decoder_->set_unsafe_es3_apis_enabled(false); |
5973 } | 5973 } |
5974 """ | 5974 """ |
5975 else: | 5975 else: |
5976 invalid_test += """ | 5976 invalid_test += """ |
5977 EXPECT_EQ(error::kInvalidArguments, | 5977 EXPECT_EQ(error::kInvalidArguments, |
5978 ExecuteImmediateCmd(*cmd, sizeof(&client_%(resource_name)s_id_))); | 5978 ExecuteImmediateCmd(*cmd, sizeof(&client_%(resource_name)s_id_))); |
5979 } | 5979 } |
5980 """ | 5980 """ |
5981 self.WriteValidUnitTest(func, file, invalid_test, { | 5981 self.WriteValidUnitTest(func, f, invalid_test, { |
5982 'resource_name': func.GetInfo('resource_type').lower(), | 5982 'resource_name': func.GetInfo('resource_type').lower(), |
5983 }, *extras) | 5983 }, *extras) |
5984 | 5984 |
5985 def WriteImmediateCmdComputeSize(self, func, file): | 5985 def WriteImmediateCmdComputeSize(self, func, f): |
5986 """Overrriden from TypeHandler.""" | 5986 """Overrriden from TypeHandler.""" |
5987 file.Write(" static uint32_t ComputeDataSize(GLsizei n) {\n") | 5987 f.write(" static uint32_t ComputeDataSize(GLsizei n) {\n") |
5988 file.Write( | 5988 f.write( |
5989 " return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT\n") | 5989 " return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT\n") |
5990 file.Write(" }\n") | 5990 f.write(" }\n") |
5991 file.Write("\n") | 5991 f.write("\n") |
5992 file.Write(" static uint32_t ComputeSize(GLsizei n) {\n") | 5992 f.write(" static uint32_t ComputeSize(GLsizei n) {\n") |
5993 file.Write(" return static_cast<uint32_t>(\n") | 5993 f.write(" return static_cast<uint32_t>(\n") |
5994 file.Write(" sizeof(ValueType) + ComputeDataSize(n)); // NOLINT\n") | 5994 f.write(" sizeof(ValueType) + ComputeDataSize(n)); // NOLINT\n") |
5995 file.Write(" }\n") | 5995 f.write(" }\n") |
5996 file.Write("\n") | 5996 f.write("\n") |
5997 | 5997 |
5998 def WriteImmediateCmdSetHeader(self, func, file): | 5998 def WriteImmediateCmdSetHeader(self, func, f): |
5999 """Overrriden from TypeHandler.""" | 5999 """Overrriden from TypeHandler.""" |
6000 file.Write(" void SetHeader(GLsizei n) {\n") | 6000 f.write(" void SetHeader(GLsizei n) {\n") |
6001 file.Write(" header.SetCmdByTotalSize<ValueType>(ComputeSize(n));\n") | 6001 f.write(" header.SetCmdByTotalSize<ValueType>(ComputeSize(n));\n") |
6002 file.Write(" }\n") | 6002 f.write(" }\n") |
6003 file.Write("\n") | 6003 f.write("\n") |
6004 | 6004 |
6005 def WriteImmediateCmdInit(self, func, file): | 6005 def WriteImmediateCmdInit(self, func, f): |
6006 """Overrriden from TypeHandler.""" | 6006 """Overrriden from TypeHandler.""" |
6007 last_arg = func.GetLastOriginalArg() | 6007 last_arg = func.GetLastOriginalArg() |
6008 file.Write(" void Init(%s, %s _%s) {\n" % | 6008 f.write(" void Init(%s, %s _%s) {\n" % |
6009 (func.MakeTypedCmdArgString("_"), | 6009 (func.MakeTypedCmdArgString("_"), |
6010 last_arg.type, last_arg.name)) | 6010 last_arg.type, last_arg.name)) |
6011 file.Write(" SetHeader(_n);\n") | 6011 f.write(" SetHeader(_n);\n") |
6012 args = func.GetCmdArgs() | 6012 args = func.GetCmdArgs() |
6013 for arg in args: | 6013 for arg in args: |
6014 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 6014 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
6015 file.Write(" memcpy(ImmediateDataAddress(this),\n") | 6015 f.write(" memcpy(ImmediateDataAddress(this),\n") |
6016 file.Write(" _%s, ComputeDataSize(_n));\n" % last_arg.name) | 6016 f.write(" _%s, ComputeDataSize(_n));\n" % last_arg.name) |
6017 file.Write(" }\n") | 6017 f.write(" }\n") |
6018 file.Write("\n") | 6018 f.write("\n") |
6019 | 6019 |
6020 def WriteImmediateCmdSet(self, func, file): | 6020 def WriteImmediateCmdSet(self, func, f): |
6021 """Overrriden from TypeHandler.""" | 6021 """Overrriden from TypeHandler.""" |
6022 last_arg = func.GetLastOriginalArg() | 6022 last_arg = func.GetLastOriginalArg() |
6023 copy_args = func.MakeCmdArgString("_", False) | 6023 copy_args = func.MakeCmdArgString("_", False) |
6024 file.Write(" void* Set(void* cmd%s, %s _%s) {\n" % | 6024 f.write(" void* Set(void* cmd%s, %s _%s) {\n" % |
6025 (func.MakeTypedCmdArgString("_", True), | 6025 (func.MakeTypedCmdArgString("_", True), |
6026 last_arg.type, last_arg.name)) | 6026 last_arg.type, last_arg.name)) |
6027 file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % | 6027 f.write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % |
6028 (copy_args, last_arg.name)) | 6028 (copy_args, last_arg.name)) |
6029 file.Write(" const uint32_t size = ComputeSize(_n);\n") | 6029 f.write(" const uint32_t size = ComputeSize(_n);\n") |
6030 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 6030 f.write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
6031 "cmd, size);\n") | 6031 "cmd, size);\n") |
6032 file.Write(" }\n") | 6032 f.write(" }\n") |
6033 file.Write("\n") | 6033 f.write("\n") |
6034 | 6034 |
6035 def WriteImmediateCmdHelper(self, func, file): | 6035 def WriteImmediateCmdHelper(self, func, f): |
6036 """Overrriden from TypeHandler.""" | 6036 """Overrriden from TypeHandler.""" |
6037 code = """ void %(name)s(%(typed_args)s) { | 6037 code = """ void %(name)s(%(typed_args)s) { |
6038 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(n); | 6038 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(n); |
6039 gles2::cmds::%(name)s* c = | 6039 gles2::cmds::%(name)s* c = |
6040 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); | 6040 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); |
6041 if (c) { | 6041 if (c) { |
6042 c->Init(%(args)s); | 6042 c->Init(%(args)s); |
6043 } | 6043 } |
6044 } | 6044 } |
6045 | 6045 |
6046 """ | 6046 """ |
6047 file.Write(code % { | 6047 f.write(code % { |
6048 "name": func.name, | 6048 "name": func.name, |
6049 "typed_args": func.MakeTypedOriginalArgString(""), | 6049 "typed_args": func.MakeTypedOriginalArgString(""), |
6050 "args": func.MakeOriginalArgString(""), | 6050 "args": func.MakeOriginalArgString(""), |
6051 }) | 6051 }) |
6052 | 6052 |
6053 def WriteImmediateFormatTest(self, func, file): | 6053 def WriteImmediateFormatTest(self, func, f): |
6054 """Overrriden from TypeHandler.""" | 6054 """Overrriden from TypeHandler.""" |
6055 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 6055 f.write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
6056 file.Write(" static GLuint ids[] = { 12, 23, 34, };\n") | 6056 f.write(" static GLuint ids[] = { 12, 23, 34, };\n") |
6057 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 6057 f.write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
6058 (func.name, func.name)) | 6058 (func.name, func.name)) |
6059 file.Write(" void* next_cmd = cmd.Set(\n") | 6059 f.write(" void* next_cmd = cmd.Set(\n") |
6060 file.Write(" &cmd, static_cast<GLsizei>(arraysize(ids)), ids);\n") | 6060 f.write(" &cmd, static_cast<GLsizei>(arraysize(ids)), ids);\n") |
6061 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % | 6061 f.write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % |
6062 func.name) | 6062 func.name) |
6063 file.Write(" cmd.header.command);\n") | 6063 f.write(" cmd.header.command);\n") |
6064 file.Write(" EXPECT_EQ(sizeof(cmd) +\n") | 6064 f.write(" EXPECT_EQ(sizeof(cmd) +\n") |
6065 file.Write(" RoundSizeToMultipleOfEntries(cmd.n * 4u),\n") | 6065 f.write(" RoundSizeToMultipleOfEntries(cmd.n * 4u),\n") |
6066 file.Write(" cmd.header.size * 4u);\n") | 6066 f.write(" cmd.header.size * 4u);\n") |
6067 file.Write(" EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);\n"); | 6067 f.write(" EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);\n"); |
6068 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 6068 f.write(" CheckBytesWrittenMatchesExpectedSize(\n") |
6069 file.Write(" next_cmd, sizeof(cmd) +\n") | 6069 f.write(" next_cmd, sizeof(cmd) +\n") |
6070 file.Write(" RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));\n") | 6070 f.write(" RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));\n") |
6071 file.Write(" // TODO(gman): Check that ids were inserted;\n") | 6071 f.write(" // TODO(gman): Check that ids were inserted;\n") |
6072 file.Write("}\n") | 6072 f.write("}\n") |
6073 file.Write("\n") | 6073 f.write("\n") |
6074 | 6074 |
6075 | 6075 |
6076 class CreateHandler(TypeHandler): | 6076 class CreateHandler(TypeHandler): |
6077 """Handler for glCreate___ type functions.""" | 6077 """Handler for glCreate___ type functions.""" |
6078 | 6078 |
6079 def __init__(self): | 6079 def __init__(self): |
6080 TypeHandler.__init__(self) | 6080 TypeHandler.__init__(self) |
6081 | 6081 |
6082 def InitFunction(self, func): | 6082 def InitFunction(self, func): |
6083 """Overrriden from TypeHandler.""" | 6083 """Overrriden from TypeHandler.""" |
6084 func.AddCmdArg(Argument("client_id", 'uint32_t')) | 6084 func.AddCmdArg(Argument("client_id", 'uint32_t')) |
6085 | 6085 |
6086 def __GetResourceType(self, func): | 6086 def __GetResourceType(self, func): |
6087 if func.return_type == "GLsync": | 6087 if func.return_type == "GLsync": |
6088 return "Sync" | 6088 return "Sync" |
6089 else: | 6089 else: |
6090 return func.name[6:] # Create* | 6090 return func.name[6:] # Create* |
6091 | 6091 |
6092 def WriteServiceUnitTest(self, func, file, *extras): | 6092 def WriteServiceUnitTest(self, func, f, *extras): |
6093 """Overrriden from TypeHandler.""" | 6093 """Overrriden from TypeHandler.""" |
6094 valid_test = """ | 6094 valid_test = """ |
6095 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6095 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6096 %(id_type_cast)sEXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) | 6096 %(id_type_cast)sEXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) |
6097 .WillOnce(Return(%(const_service_id)s)); | 6097 .WillOnce(Return(%(const_service_id)s)); |
6098 SpecializedSetup<cmds::%(name)s, 0>(true); | 6098 SpecializedSetup<cmds::%(name)s, 0>(true); |
6099 cmds::%(name)s cmd; | 6099 cmds::%(name)s cmd; |
6100 cmd.Init(%(args)s%(comma)skNewClientId);""" | 6100 cmd.Init(%(args)s%(comma)skNewClientId);""" |
6101 if func.IsUnsafe(): | 6101 if func.IsUnsafe(): |
6102 valid_test += """ | 6102 valid_test += """ |
(...skipping 22 matching lines...) Expand all Loading... |
6125 cmd_arg_count += 1 | 6125 cmd_arg_count += 1 |
6126 if cmd_arg_count: | 6126 if cmd_arg_count: |
6127 comma = ", " | 6127 comma = ", " |
6128 if func.return_type == 'GLsync': | 6128 if func.return_type == 'GLsync': |
6129 id_type_cast = ("const GLsync kNewServiceIdGLuint = reinterpret_cast" | 6129 id_type_cast = ("const GLsync kNewServiceIdGLuint = reinterpret_cast" |
6130 "<GLsync>(kNewServiceId);\n ") | 6130 "<GLsync>(kNewServiceId);\n ") |
6131 const_service_id = "kNewServiceIdGLuint" | 6131 const_service_id = "kNewServiceIdGLuint" |
6132 else: | 6132 else: |
6133 id_type_cast = "" | 6133 id_type_cast = "" |
6134 const_service_id = "kNewServiceId" | 6134 const_service_id = "kNewServiceId" |
6135 self.WriteValidUnitTest(func, file, valid_test, { | 6135 self.WriteValidUnitTest(func, f, valid_test, { |
6136 'comma': comma, | 6136 'comma': comma, |
6137 'resource_type': self.__GetResourceType(func), | 6137 'resource_type': self.__GetResourceType(func), |
6138 'return_type': func.return_type, | 6138 'return_type': func.return_type, |
6139 'id_type_cast': id_type_cast, | 6139 'id_type_cast': id_type_cast, |
6140 'const_service_id': const_service_id, | 6140 'const_service_id': const_service_id, |
6141 }, *extras) | 6141 }, *extras) |
6142 invalid_test = """ | 6142 invalid_test = """ |
6143 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 6143 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
6144 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 6144 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
6145 SpecializedSetup<cmds::%(name)s, 0>(false); | 6145 SpecializedSetup<cmds::%(name)s, 0>(false); |
6146 cmds::%(name)s cmd; | 6146 cmds::%(name)s cmd; |
6147 cmd.Init(%(args)s%(comma)skNewClientId); | 6147 cmd.Init(%(args)s%(comma)skNewClientId); |
6148 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s | 6148 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));%(gl_error_test)s |
6149 } | 6149 } |
6150 """ | 6150 """ |
6151 self.WriteInvalidUnitTest(func, file, invalid_test, { | 6151 self.WriteInvalidUnitTest(func, f, invalid_test, { |
6152 'comma': comma, | 6152 'comma': comma, |
6153 }, *extras) | 6153 }, *extras) |
6154 | 6154 |
6155 def WriteHandlerImplementation (self, func, file): | 6155 def WriteHandlerImplementation (self, func, f): |
6156 """Overrriden from TypeHandler.""" | 6156 """Overrriden from TypeHandler.""" |
6157 if func.IsUnsafe(): | 6157 if func.IsUnsafe(): |
6158 code = """ uint32_t client_id = c.client_id; | 6158 code = """ uint32_t client_id = c.client_id; |
6159 %(return_type)s service_id = 0; | 6159 %(return_type)s service_id = 0; |
6160 if (group_->Get%(resource_name)sServiceId(client_id, &service_id)) { | 6160 if (group_->Get%(resource_name)sServiceId(client_id, &service_id)) { |
6161 return error::kInvalidArguments; | 6161 return error::kInvalidArguments; |
6162 } | 6162 } |
6163 service_id = %(gl_func_name)s(%(gl_args)s); | 6163 service_id = %(gl_func_name)s(%(gl_args)s); |
6164 if (service_id) { | 6164 if (service_id) { |
6165 group_->Add%(resource_name)sId(client_id, service_id); | 6165 group_->Add%(resource_name)sId(client_id, service_id); |
6166 } | 6166 } |
6167 """ | 6167 """ |
6168 else: | 6168 else: |
6169 code = """ uint32_t client_id = c.client_id; | 6169 code = """ uint32_t client_id = c.client_id; |
6170 if (Get%(resource_name)s(client_id)) { | 6170 if (Get%(resource_name)s(client_id)) { |
6171 return error::kInvalidArguments; | 6171 return error::kInvalidArguments; |
6172 } | 6172 } |
6173 %(return_type)s service_id = %(gl_func_name)s(%(gl_args)s); | 6173 %(return_type)s service_id = %(gl_func_name)s(%(gl_args)s); |
6174 if (service_id) { | 6174 if (service_id) { |
6175 Create%(resource_name)s(client_id, service_id%(gl_args_with_comma)s); | 6175 Create%(resource_name)s(client_id, service_id%(gl_args_with_comma)s); |
6176 } | 6176 } |
6177 """ | 6177 """ |
6178 file.Write(code % { | 6178 f.write(code % { |
6179 'resource_name': self.__GetResourceType(func), | 6179 'resource_name': self.__GetResourceType(func), |
6180 'return_type': func.return_type, | 6180 'return_type': func.return_type, |
6181 'gl_func_name': func.GetGLFunctionName(), | 6181 'gl_func_name': func.GetGLFunctionName(), |
6182 'gl_args': func.MakeOriginalArgString(""), | 6182 'gl_args': func.MakeOriginalArgString(""), |
6183 'gl_args_with_comma': func.MakeOriginalArgString("", True) }) | 6183 'gl_args_with_comma': func.MakeOriginalArgString("", True) }) |
6184 | 6184 |
6185 def WriteGLES2Implementation(self, func, file): | 6185 def WriteGLES2Implementation(self, func, f): |
6186 """Overrriden from TypeHandler.""" | 6186 """Overrriden from TypeHandler.""" |
6187 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 6187 f.write("%s GLES2Implementation::%s(%s) {\n" % |
6188 (func.return_type, func.original_name, | 6188 (func.return_type, func.original_name, |
6189 func.MakeTypedOriginalArgString(""))) | 6189 func.MakeTypedOriginalArgString(""))) |
6190 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 6190 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
6191 func.WriteDestinationInitalizationValidation(file) | 6191 func.WriteDestinationInitalizationValidation(f) |
6192 self.WriteClientGLCallLog(func, file) | 6192 self.WriteClientGLCallLog(func, f) |
6193 for arg in func.GetOriginalArgs(): | 6193 for arg in func.GetOriginalArgs(): |
6194 arg.WriteClientSideValidationCode(file, func) | 6194 arg.WriteClientSideValidationCode(f, func) |
6195 file.Write(" GLuint client_id;\n") | 6195 f.write(" GLuint client_id;\n") |
6196 if func.return_type == "GLsync": | 6196 if func.return_type == "GLsync": |
6197 file.Write( | 6197 f.write( |
6198 " GetIdHandler(id_namespaces::kSyncs)->\n") | 6198 " GetIdHandler(id_namespaces::kSyncs)->\n") |
6199 else: | 6199 else: |
6200 file.Write( | 6200 f.write( |
6201 " GetIdHandler(id_namespaces::kProgramsAndShaders)->\n") | 6201 " GetIdHandler(id_namespaces::kProgramsAndShaders)->\n") |
6202 file.Write(" MakeIds(this, 0, 1, &client_id);\n") | 6202 f.write(" MakeIds(this, 0, 1, &client_id);\n") |
6203 file.Write(" helper_->%s(%s);\n" % | 6203 f.write(" helper_->%s(%s);\n" % |
6204 (func.name, func.MakeCmdArgString(""))) | 6204 (func.name, func.MakeCmdArgString(""))) |
6205 file.Write(' GPU_CLIENT_LOG("returned " << client_id);\n') | 6205 f.write(' GPU_CLIENT_LOG("returned " << client_id);\n') |
6206 file.Write(" CheckGLError();\n") | 6206 f.write(" CheckGLError();\n") |
6207 if func.return_type == "GLsync": | 6207 if func.return_type == "GLsync": |
6208 file.Write(" return reinterpret_cast<GLsync>(client_id);\n") | 6208 f.write(" return reinterpret_cast<GLsync>(client_id);\n") |
6209 else: | 6209 else: |
6210 file.Write(" return client_id;\n") | 6210 f.write(" return client_id;\n") |
6211 file.Write("}\n") | 6211 f.write("}\n") |
6212 file.Write("\n") | 6212 f.write("\n") |
6213 | 6213 |
6214 | 6214 |
6215 class DeleteHandler(TypeHandler): | 6215 class DeleteHandler(TypeHandler): |
6216 """Handler for glDelete___ single resource type functions.""" | 6216 """Handler for glDelete___ single resource type functions.""" |
6217 | 6217 |
6218 def __init__(self): | 6218 def __init__(self): |
6219 TypeHandler.__init__(self) | 6219 TypeHandler.__init__(self) |
6220 | 6220 |
6221 def WriteServiceImplementation(self, func, file): | 6221 def WriteServiceImplementation(self, func, f): |
6222 """Overrriden from TypeHandler.""" | 6222 """Overrriden from TypeHandler.""" |
6223 if func.IsUnsafe(): | 6223 if func.IsUnsafe(): |
6224 TypeHandler.WriteServiceImplementation(self, func, file) | 6224 TypeHandler.WriteServiceImplementation(self, func, f) |
6225 # HandleDeleteShader and HandleDeleteProgram are manually written. | 6225 # HandleDeleteShader and HandleDeleteProgram are manually written. |
6226 pass | 6226 pass |
6227 | 6227 |
6228 def WriteGLES2Implementation(self, func, file): | 6228 def WriteGLES2Implementation(self, func, f): |
6229 """Overrriden from TypeHandler.""" | 6229 """Overrriden from TypeHandler.""" |
6230 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 6230 f.write("%s GLES2Implementation::%s(%s) {\n" % |
6231 (func.return_type, func.original_name, | 6231 (func.return_type, func.original_name, |
6232 func.MakeTypedOriginalArgString(""))) | 6232 func.MakeTypedOriginalArgString(""))) |
6233 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 6233 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
6234 func.WriteDestinationInitalizationValidation(file) | 6234 func.WriteDestinationInitalizationValidation(f) |
6235 self.WriteClientGLCallLog(func, file) | 6235 self.WriteClientGLCallLog(func, f) |
6236 for arg in func.GetOriginalArgs(): | 6236 for arg in func.GetOriginalArgs(): |
6237 arg.WriteClientSideValidationCode(file, func) | 6237 arg.WriteClientSideValidationCode(f, func) |
6238 file.Write( | 6238 f.write( |
6239 " GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name) | 6239 " GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name) |
6240 file.Write(" %sHelper(%s);\n" % | 6240 f.write(" %sHelper(%s);\n" % |
6241 (func.original_name, func.GetOriginalArgs()[-1].name)) | 6241 (func.original_name, func.GetOriginalArgs()[-1].name)) |
6242 file.Write(" CheckGLError();\n") | 6242 f.write(" CheckGLError();\n") |
6243 file.Write("}\n") | 6243 f.write("}\n") |
6244 file.Write("\n") | 6244 f.write("\n") |
6245 | 6245 |
6246 def WriteHandlerImplementation (self, func, file): | 6246 def WriteHandlerImplementation (self, func, f): |
6247 """Overrriden from TypeHandler.""" | 6247 """Overrriden from TypeHandler.""" |
6248 assert len(func.GetOriginalArgs()) == 1 | 6248 assert len(func.GetOriginalArgs()) == 1 |
6249 arg = func.GetOriginalArgs()[0] | 6249 arg = func.GetOriginalArgs()[0] |
6250 if func.IsUnsafe(): | 6250 if func.IsUnsafe(): |
6251 file.Write(""" %(arg_type)s service_id = 0; | 6251 f.write(""" %(arg_type)s service_id = 0; |
6252 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { | 6252 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { |
6253 glDelete%(resource_type)s(service_id); | 6253 glDelete%(resource_type)s(service_id); |
6254 group_->Remove%(resource_type)sId(%(arg_name)s); | 6254 group_->Remove%(resource_type)sId(%(arg_name)s); |
6255 } else { | 6255 } else { |
6256 LOCAL_SET_GL_ERROR( | 6256 LOCAL_SET_GL_ERROR( |
6257 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); | 6257 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); |
6258 } | 6258 } |
6259 """ % { 'resource_type': func.GetInfo('resource_type'), | 6259 """ % { 'resource_type': func.GetInfo('resource_type'), |
6260 'arg_name': arg.name, | 6260 'arg_name': arg.name, |
6261 'arg_type': arg.type, | 6261 'arg_type': arg.type, |
6262 'func_name': func.original_name }) | 6262 'func_name': func.original_name }) |
6263 else: | 6263 else: |
6264 file.Write(" %sHelper(%s);\n" % (func.original_name, arg.name)) | 6264 f.write(" %sHelper(%s);\n" % (func.original_name, arg.name)) |
6265 | 6265 |
6266 class DELnHandler(TypeHandler): | 6266 class DELnHandler(TypeHandler): |
6267 """Handler for glDelete___ type functions.""" | 6267 """Handler for glDelete___ type functions.""" |
6268 | 6268 |
6269 def __init__(self): | 6269 def __init__(self): |
6270 TypeHandler.__init__(self) | 6270 TypeHandler.__init__(self) |
6271 | 6271 |
6272 def WriteGetDataSizeCode(self, func, file): | 6272 def WriteGetDataSizeCode(self, func, f): |
6273 """Overrriden from TypeHandler.""" | 6273 """Overrriden from TypeHandler.""" |
6274 code = """ uint32_t data_size; | 6274 code = """ uint32_t data_size; |
6275 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { | 6275 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { |
6276 return error::kOutOfBounds; | 6276 return error::kOutOfBounds; |
6277 } | 6277 } |
6278 """ | 6278 """ |
6279 file.Write(code) | 6279 f.write(code) |
6280 | 6280 |
6281 def WriteGLES2ImplementationUnitTest(self, func, file): | 6281 def WriteGLES2ImplementationUnitTest(self, func, f): |
6282 """Overrriden from TypeHandler.""" | 6282 """Overrriden from TypeHandler.""" |
6283 code = """ | 6283 code = """ |
6284 TEST_F(GLES2ImplementationTest, %(name)s) { | 6284 TEST_F(GLES2ImplementationTest, %(name)s) { |
6285 GLuint ids[2] = { k%(types)sStartId, k%(types)sStartId + 1 }; | 6285 GLuint ids[2] = { k%(types)sStartId, k%(types)sStartId + 1 }; |
6286 struct Cmds { | 6286 struct Cmds { |
6287 cmds::%(name)sImmediate del; | 6287 cmds::%(name)sImmediate del; |
6288 GLuint data[2]; | 6288 GLuint data[2]; |
6289 }; | 6289 }; |
6290 Cmds expected; | 6290 Cmds expected; |
6291 expected.del.Init(arraysize(ids), &ids[0]); | 6291 expected.del.Init(arraysize(ids), &ids[0]); |
6292 expected.data[0] = k%(types)sStartId; | 6292 expected.data[0] = k%(types)sStartId; |
6293 expected.data[1] = k%(types)sStartId + 1; | 6293 expected.data[1] = k%(types)sStartId + 1; |
6294 gl_->%(name)s(arraysize(ids), &ids[0]); | 6294 gl_->%(name)s(arraysize(ids), &ids[0]); |
6295 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 6295 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
6296 } | 6296 } |
6297 """ | 6297 """ |
6298 file.Write(code % { | 6298 f.write(code % { |
6299 'name': func.name, | 6299 'name': func.name, |
6300 'types': func.GetInfo('resource_types'), | 6300 'types': func.GetInfo('resource_types'), |
6301 }) | 6301 }) |
6302 | 6302 |
6303 def WriteServiceUnitTest(self, func, file, *extras): | 6303 def WriteServiceUnitTest(self, func, f, *extras): |
6304 """Overrriden from TypeHandler.""" | 6304 """Overrriden from TypeHandler.""" |
6305 valid_test = """ | 6305 valid_test = """ |
6306 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6306 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6307 EXPECT_CALL( | 6307 EXPECT_CALL( |
6308 *gl_, | 6308 *gl_, |
6309 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId))) | 6309 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId))) |
6310 .Times(1); | 6310 .Times(1); |
6311 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_; | 6311 GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_; |
6312 SpecializedSetup<cmds::%(name)s, 0>(true); | 6312 SpecializedSetup<cmds::%(name)s, 0>(true); |
6313 cmds::%(name)s cmd; | 6313 cmds::%(name)s cmd; |
6314 cmd.Init(%(args)s); | 6314 cmd.Init(%(args)s); |
6315 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 6315 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
6316 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 6316 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
6317 EXPECT_TRUE( | 6317 EXPECT_TRUE( |
6318 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL); | 6318 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL); |
6319 } | 6319 } |
6320 """ | 6320 """ |
6321 self.WriteValidUnitTest(func, file, valid_test, { | 6321 self.WriteValidUnitTest(func, f, valid_test, { |
6322 'resource_name': func.GetInfo('resource_type').lower(), | 6322 'resource_name': func.GetInfo('resource_type').lower(), |
6323 'upper_resource_name': func.GetInfo('resource_type'), | 6323 'upper_resource_name': func.GetInfo('resource_type'), |
6324 }, *extras) | 6324 }, *extras) |
6325 invalid_test = """ | 6325 invalid_test = """ |
6326 TEST_P(%(test_name)s, %(name)sInvalidArgs) { | 6326 TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
6327 GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId; | 6327 GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId; |
6328 SpecializedSetup<cmds::%(name)s, 0>(false); | 6328 SpecializedSetup<cmds::%(name)s, 0>(false); |
6329 cmds::%(name)s cmd; | 6329 cmds::%(name)s cmd; |
6330 cmd.Init(%(args)s); | 6330 cmd.Init(%(args)s); |
6331 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 6331 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
6332 } | 6332 } |
6333 """ | 6333 """ |
6334 self.WriteValidUnitTest(func, file, invalid_test, *extras) | 6334 self.WriteValidUnitTest(func, f, invalid_test, *extras) |
6335 | 6335 |
6336 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 6336 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
6337 """Overrriden from TypeHandler.""" | 6337 """Overrriden from TypeHandler.""" |
6338 valid_test = """ | 6338 valid_test = """ |
6339 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6339 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6340 EXPECT_CALL( | 6340 EXPECT_CALL( |
6341 *gl_, | 6341 *gl_, |
6342 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId))) | 6342 %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId))) |
6343 .Times(1); | 6343 .Times(1); |
6344 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 6344 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
6345 SpecializedSetup<cmds::%(name)s, 0>(true); | 6345 SpecializedSetup<cmds::%(name)s, 0>(true); |
6346 cmd.Init(1, &client_%(resource_name)s_id_);""" | 6346 cmd.Init(1, &client_%(resource_name)s_id_);""" |
(...skipping 12 matching lines...) Expand all Loading... |
6359 EXPECT_EQ(error::kUnknownCommand, | 6359 EXPECT_EQ(error::kUnknownCommand, |
6360 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); | 6360 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); |
6361 } | 6361 } |
6362 """ | 6362 """ |
6363 else: | 6363 else: |
6364 valid_test += """ | 6364 valid_test += """ |
6365 EXPECT_TRUE( | 6365 EXPECT_TRUE( |
6366 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL); | 6366 Get%(upper_resource_name)s(client_%(resource_name)s_id_) == NULL); |
6367 } | 6367 } |
6368 """ | 6368 """ |
6369 self.WriteValidUnitTest(func, file, valid_test, { | 6369 self.WriteValidUnitTest(func, f, valid_test, { |
6370 'resource_name': func.GetInfo('resource_type').lower(), | 6370 'resource_name': func.GetInfo('resource_type').lower(), |
6371 'upper_resource_name': func.GetInfo('resource_type'), | 6371 'upper_resource_name': func.GetInfo('resource_type'), |
6372 }, *extras) | 6372 }, *extras) |
6373 invalid_test = """ | 6373 invalid_test = """ |
6374 TEST_P(%(test_name)s, %(name)sInvalidArgs) { | 6374 TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
6375 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 6375 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
6376 SpecializedSetup<cmds::%(name)s, 0>(false); | 6376 SpecializedSetup<cmds::%(name)s, 0>(false); |
6377 GLuint temp = kInvalidClientId; | 6377 GLuint temp = kInvalidClientId; |
6378 cmd.Init(1, &temp);""" | 6378 cmd.Init(1, &temp);""" |
6379 if func.IsUnsafe(): | 6379 if func.IsUnsafe(): |
6380 invalid_test += """ | 6380 invalid_test += """ |
6381 decoder_->set_unsafe_es3_apis_enabled(true); | 6381 decoder_->set_unsafe_es3_apis_enabled(true); |
6382 EXPECT_EQ(error::kNoError, | 6382 EXPECT_EQ(error::kNoError, |
6383 ExecuteImmediateCmd(cmd, sizeof(temp))); | 6383 ExecuteImmediateCmd(cmd, sizeof(temp))); |
6384 decoder_->set_unsafe_es3_apis_enabled(false); | 6384 decoder_->set_unsafe_es3_apis_enabled(false); |
6385 EXPECT_EQ(error::kUnknownCommand, | 6385 EXPECT_EQ(error::kUnknownCommand, |
6386 ExecuteImmediateCmd(cmd, sizeof(temp))); | 6386 ExecuteImmediateCmd(cmd, sizeof(temp))); |
6387 } | 6387 } |
6388 """ | 6388 """ |
6389 else: | 6389 else: |
6390 invalid_test += """ | 6390 invalid_test += """ |
6391 EXPECT_EQ(error::kNoError, | 6391 EXPECT_EQ(error::kNoError, |
6392 ExecuteImmediateCmd(cmd, sizeof(temp))); | 6392 ExecuteImmediateCmd(cmd, sizeof(temp))); |
6393 } | 6393 } |
6394 """ | 6394 """ |
6395 self.WriteValidUnitTest(func, file, invalid_test, *extras) | 6395 self.WriteValidUnitTest(func, f, invalid_test, *extras) |
6396 | 6396 |
6397 def WriteHandlerImplementation (self, func, file): | 6397 def WriteHandlerImplementation (self, func, f): |
6398 """Overrriden from TypeHandler.""" | 6398 """Overrriden from TypeHandler.""" |
6399 file.Write(" %sHelper(n, %s);\n" % | 6399 f.write(" %sHelper(n, %s);\n" % |
6400 (func.name, func.GetLastOriginalArg().name)) | 6400 (func.name, func.GetLastOriginalArg().name)) |
6401 | 6401 |
6402 def WriteImmediateHandlerImplementation (self, func, file): | 6402 def WriteImmediateHandlerImplementation (self, func, f): |
6403 """Overrriden from TypeHandler.""" | 6403 """Overrriden from TypeHandler.""" |
6404 if func.IsUnsafe(): | 6404 if func.IsUnsafe(): |
6405 file.Write(""" for (GLsizei ii = 0; ii < n; ++ii) { | 6405 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
6406 GLuint service_id = 0; | 6406 GLuint service_id = 0; |
6407 if (group_->Get%(resource_type)sServiceId( | 6407 if (group_->Get%(resource_type)sServiceId( |
6408 %(last_arg_name)s[ii], &service_id)) { | 6408 %(last_arg_name)s[ii], &service_id)) { |
6409 glDelete%(resource_type)ss(1, &service_id); | 6409 glDelete%(resource_type)ss(1, &service_id); |
6410 group_->Remove%(resource_type)sId(%(last_arg_name)s[ii]); | 6410 group_->Remove%(resource_type)sId(%(last_arg_name)s[ii]); |
6411 } | 6411 } |
6412 } | 6412 } |
6413 """ % { 'resource_type': func.GetInfo('resource_type'), | 6413 """ % { 'resource_type': func.GetInfo('resource_type'), |
6414 'last_arg_name': func.GetLastOriginalArg().name }) | 6414 'last_arg_name': func.GetLastOriginalArg().name }) |
6415 else: | 6415 else: |
6416 file.Write(" %sHelper(n, %s);\n" % | 6416 f.write(" %sHelper(n, %s);\n" % |
6417 (func.original_name, func.GetLastOriginalArg().name)) | 6417 (func.original_name, func.GetLastOriginalArg().name)) |
6418 | 6418 |
6419 def WriteGLES2Implementation(self, func, file): | 6419 def WriteGLES2Implementation(self, func, f): |
6420 """Overrriden from TypeHandler.""" | 6420 """Overrriden from TypeHandler.""" |
6421 impl_decl = func.GetInfo('impl_decl') | 6421 impl_decl = func.GetInfo('impl_decl') |
6422 if impl_decl == None or impl_decl == True: | 6422 if impl_decl == None or impl_decl == True: |
6423 args = { | 6423 args = { |
6424 'return_type': func.return_type, | 6424 'return_type': func.return_type, |
6425 'name': func.original_name, | 6425 'name': func.original_name, |
6426 'typed_args': func.MakeTypedOriginalArgString(""), | 6426 'typed_args': func.MakeTypedOriginalArgString(""), |
6427 'args': func.MakeOriginalArgString(""), | 6427 'args': func.MakeOriginalArgString(""), |
6428 'resource_type': func.GetInfo('resource_type').lower(), | 6428 'resource_type': func.GetInfo('resource_type').lower(), |
6429 'count_name': func.GetOriginalArgs()[0].name, | 6429 'count_name': func.GetOriginalArgs()[0].name, |
6430 } | 6430 } |
6431 file.Write( | 6431 f.write( |
6432 "%(return_type)s GLES2Implementation::%(name)s(%(typed_args)s) {\n" % | 6432 "%(return_type)s GLES2Implementation::%(name)s(%(typed_args)s) {\n" % |
6433 args) | 6433 args) |
6434 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 6434 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
6435 func.WriteDestinationInitalizationValidation(file) | 6435 func.WriteDestinationInitalizationValidation(f) |
6436 self.WriteClientGLCallLog(func, file) | 6436 self.WriteClientGLCallLog(func, f) |
6437 file.Write(""" GPU_CLIENT_LOG_CODE_BLOCK({ | 6437 f.write(""" GPU_CLIENT_LOG_CODE_BLOCK({ |
6438 for (GLsizei i = 0; i < n; ++i) { | 6438 for (GLsizei i = 0; i < n; ++i) { |
6439 GPU_CLIENT_LOG(" " << i << ": " << %s[i]); | 6439 GPU_CLIENT_LOG(" " << i << ": " << %s[i]); |
6440 } | 6440 } |
6441 }); | 6441 }); |
6442 """ % func.GetOriginalArgs()[1].name) | 6442 """ % func.GetOriginalArgs()[1].name) |
6443 file.Write(""" GPU_CLIENT_DCHECK_CODE_BLOCK({ | 6443 f.write(""" GPU_CLIENT_DCHECK_CODE_BLOCK({ |
6444 for (GLsizei i = 0; i < n; ++i) { | 6444 for (GLsizei i = 0; i < n; ++i) { |
6445 DCHECK(%s[i] != 0); | 6445 DCHECK(%s[i] != 0); |
6446 } | 6446 } |
6447 }); | 6447 }); |
6448 """ % func.GetOriginalArgs()[1].name) | 6448 """ % func.GetOriginalArgs()[1].name) |
6449 for arg in func.GetOriginalArgs(): | 6449 for arg in func.GetOriginalArgs(): |
6450 arg.WriteClientSideValidationCode(file, func) | 6450 arg.WriteClientSideValidationCode(f, func) |
6451 code = """ %(name)sHelper(%(args)s); | 6451 code = """ %(name)sHelper(%(args)s); |
6452 CheckGLError(); | 6452 CheckGLError(); |
6453 } | 6453 } |
6454 | 6454 |
6455 """ | 6455 """ |
6456 file.Write(code % args) | 6456 f.write(code % args) |
6457 | 6457 |
6458 def WriteImmediateCmdComputeSize(self, func, file): | 6458 def WriteImmediateCmdComputeSize(self, func, f): |
6459 """Overrriden from TypeHandler.""" | 6459 """Overrriden from TypeHandler.""" |
6460 file.Write(" static uint32_t ComputeDataSize(GLsizei n) {\n") | 6460 f.write(" static uint32_t ComputeDataSize(GLsizei n) {\n") |
6461 file.Write( | 6461 f.write( |
6462 " return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT\n") | 6462 " return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT\n") |
6463 file.Write(" }\n") | 6463 f.write(" }\n") |
6464 file.Write("\n") | 6464 f.write("\n") |
6465 file.Write(" static uint32_t ComputeSize(GLsizei n) {\n") | 6465 f.write(" static uint32_t ComputeSize(GLsizei n) {\n") |
6466 file.Write(" return static_cast<uint32_t>(\n") | 6466 f.write(" return static_cast<uint32_t>(\n") |
6467 file.Write(" sizeof(ValueType) + ComputeDataSize(n)); // NOLINT\n") | 6467 f.write(" sizeof(ValueType) + ComputeDataSize(n)); // NOLINT\n") |
6468 file.Write(" }\n") | 6468 f.write(" }\n") |
6469 file.Write("\n") | 6469 f.write("\n") |
6470 | 6470 |
6471 def WriteImmediateCmdSetHeader(self, func, file): | 6471 def WriteImmediateCmdSetHeader(self, func, f): |
6472 """Overrriden from TypeHandler.""" | 6472 """Overrriden from TypeHandler.""" |
6473 file.Write(" void SetHeader(GLsizei n) {\n") | 6473 f.write(" void SetHeader(GLsizei n) {\n") |
6474 file.Write(" header.SetCmdByTotalSize<ValueType>(ComputeSize(n));\n") | 6474 f.write(" header.SetCmdByTotalSize<ValueType>(ComputeSize(n));\n") |
6475 file.Write(" }\n") | 6475 f.write(" }\n") |
6476 file.Write("\n") | 6476 f.write("\n") |
6477 | 6477 |
6478 def WriteImmediateCmdInit(self, func, file): | 6478 def WriteImmediateCmdInit(self, func, f): |
6479 """Overrriden from TypeHandler.""" | 6479 """Overrriden from TypeHandler.""" |
6480 last_arg = func.GetLastOriginalArg() | 6480 last_arg = func.GetLastOriginalArg() |
6481 file.Write(" void Init(%s, %s _%s) {\n" % | 6481 f.write(" void Init(%s, %s _%s) {\n" % |
6482 (func.MakeTypedCmdArgString("_"), | 6482 (func.MakeTypedCmdArgString("_"), |
6483 last_arg.type, last_arg.name)) | 6483 last_arg.type, last_arg.name)) |
6484 file.Write(" SetHeader(_n);\n") | 6484 f.write(" SetHeader(_n);\n") |
6485 args = func.GetCmdArgs() | 6485 args = func.GetCmdArgs() |
6486 for arg in args: | 6486 for arg in args: |
6487 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 6487 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
6488 file.Write(" memcpy(ImmediateDataAddress(this),\n") | 6488 f.write(" memcpy(ImmediateDataAddress(this),\n") |
6489 file.Write(" _%s, ComputeDataSize(_n));\n" % last_arg.name) | 6489 f.write(" _%s, ComputeDataSize(_n));\n" % last_arg.name) |
6490 file.Write(" }\n") | 6490 f.write(" }\n") |
6491 file.Write("\n") | 6491 f.write("\n") |
6492 | 6492 |
6493 def WriteImmediateCmdSet(self, func, file): | 6493 def WriteImmediateCmdSet(self, func, f): |
6494 """Overrriden from TypeHandler.""" | 6494 """Overrriden from TypeHandler.""" |
6495 last_arg = func.GetLastOriginalArg() | 6495 last_arg = func.GetLastOriginalArg() |
6496 copy_args = func.MakeCmdArgString("_", False) | 6496 copy_args = func.MakeCmdArgString("_", False) |
6497 file.Write(" void* Set(void* cmd%s, %s _%s) {\n" % | 6497 f.write(" void* Set(void* cmd%s, %s _%s) {\n" % |
6498 (func.MakeTypedCmdArgString("_", True), | 6498 (func.MakeTypedCmdArgString("_", True), |
6499 last_arg.type, last_arg.name)) | 6499 last_arg.type, last_arg.name)) |
6500 file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % | 6500 f.write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % |
6501 (copy_args, last_arg.name)) | 6501 (copy_args, last_arg.name)) |
6502 file.Write(" const uint32_t size = ComputeSize(_n);\n") | 6502 f.write(" const uint32_t size = ComputeSize(_n);\n") |
6503 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 6503 f.write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
6504 "cmd, size);\n") | 6504 "cmd, size);\n") |
6505 file.Write(" }\n") | 6505 f.write(" }\n") |
6506 file.Write("\n") | 6506 f.write("\n") |
6507 | 6507 |
6508 def WriteImmediateCmdHelper(self, func, file): | 6508 def WriteImmediateCmdHelper(self, func, f): |
6509 """Overrriden from TypeHandler.""" | 6509 """Overrriden from TypeHandler.""" |
6510 code = """ void %(name)s(%(typed_args)s) { | 6510 code = """ void %(name)s(%(typed_args)s) { |
6511 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(n); | 6511 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(n); |
6512 gles2::cmds::%(name)s* c = | 6512 gles2::cmds::%(name)s* c = |
6513 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); | 6513 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); |
6514 if (c) { | 6514 if (c) { |
6515 c->Init(%(args)s); | 6515 c->Init(%(args)s); |
6516 } | 6516 } |
6517 } | 6517 } |
6518 | 6518 |
6519 """ | 6519 """ |
6520 file.Write(code % { | 6520 f.write(code % { |
6521 "name": func.name, | 6521 "name": func.name, |
6522 "typed_args": func.MakeTypedOriginalArgString(""), | 6522 "typed_args": func.MakeTypedOriginalArgString(""), |
6523 "args": func.MakeOriginalArgString(""), | 6523 "args": func.MakeOriginalArgString(""), |
6524 }) | 6524 }) |
6525 | 6525 |
6526 def WriteImmediateFormatTest(self, func, file): | 6526 def WriteImmediateFormatTest(self, func, f): |
6527 """Overrriden from TypeHandler.""" | 6527 """Overrriden from TypeHandler.""" |
6528 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 6528 f.write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
6529 file.Write(" static GLuint ids[] = { 12, 23, 34, };\n") | 6529 f.write(" static GLuint ids[] = { 12, 23, 34, };\n") |
6530 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 6530 f.write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
6531 (func.name, func.name)) | 6531 (func.name, func.name)) |
6532 file.Write(" void* next_cmd = cmd.Set(\n") | 6532 f.write(" void* next_cmd = cmd.Set(\n") |
6533 file.Write(" &cmd, static_cast<GLsizei>(arraysize(ids)), ids);\n") | 6533 f.write(" &cmd, static_cast<GLsizei>(arraysize(ids)), ids);\n") |
6534 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % | 6534 f.write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % |
6535 func.name) | 6535 func.name) |
6536 file.Write(" cmd.header.command);\n") | 6536 f.write(" cmd.header.command);\n") |
6537 file.Write(" EXPECT_EQ(sizeof(cmd) +\n") | 6537 f.write(" EXPECT_EQ(sizeof(cmd) +\n") |
6538 file.Write(" RoundSizeToMultipleOfEntries(cmd.n * 4u),\n") | 6538 f.write(" RoundSizeToMultipleOfEntries(cmd.n * 4u),\n") |
6539 file.Write(" cmd.header.size * 4u);\n") | 6539 f.write(" cmd.header.size * 4u);\n") |
6540 file.Write(" EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);\n"); | 6540 f.write(" EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);\n"); |
6541 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 6541 f.write(" CheckBytesWrittenMatchesExpectedSize(\n") |
6542 file.Write(" next_cmd, sizeof(cmd) +\n") | 6542 f.write(" next_cmd, sizeof(cmd) +\n") |
6543 file.Write(" RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));\n") | 6543 f.write(" RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));\n") |
6544 file.Write(" // TODO(gman): Check that ids were inserted;\n") | 6544 f.write(" // TODO(gman): Check that ids were inserted;\n") |
6545 file.Write("}\n") | 6545 f.write("}\n") |
6546 file.Write("\n") | 6546 f.write("\n") |
6547 | 6547 |
6548 | 6548 |
6549 class GETnHandler(TypeHandler): | 6549 class GETnHandler(TypeHandler): |
6550 """Handler for GETn for glGetBooleanv, glGetFloatv, ... type functions.""" | 6550 """Handler for GETn for glGetBooleanv, glGetFloatv, ... type functions.""" |
6551 | 6551 |
6552 def __init__(self): | 6552 def __init__(self): |
6553 TypeHandler.__init__(self) | 6553 TypeHandler.__init__(self) |
6554 | 6554 |
6555 def NeedsDataTransferFunction(self, func): | 6555 def NeedsDataTransferFunction(self, func): |
6556 """Overriden from TypeHandler.""" | 6556 """Overriden from TypeHandler.""" |
6557 return False | 6557 return False |
6558 | 6558 |
6559 def WriteServiceImplementation(self, func, file): | 6559 def WriteServiceImplementation(self, func, f): |
6560 """Overrriden from TypeHandler.""" | 6560 """Overrriden from TypeHandler.""" |
6561 self.WriteServiceHandlerFunctionHeader(func, file) | 6561 self.WriteServiceHandlerFunctionHeader(func, f) |
6562 last_arg = func.GetLastOriginalArg() | 6562 last_arg = func.GetLastOriginalArg() |
6563 # All except shm_id and shm_offset. | 6563 # All except shm_id and shm_offset. |
6564 all_but_last_args = func.GetCmdArgs()[:-2] | 6564 all_but_last_args = func.GetCmdArgs()[:-2] |
6565 for arg in all_but_last_args: | 6565 for arg in all_but_last_args: |
6566 arg.WriteGetCode(file) | 6566 arg.WriteGetCode(f) |
6567 | 6567 |
6568 code = """ typedef cmds::%(func_name)s::Result Result; | 6568 code = """ typedef cmds::%(func_name)s::Result Result; |
6569 GLsizei num_values = 0; | 6569 GLsizei num_values = 0; |
6570 GetNumValuesReturnedForGLGet(pname, &num_values); | 6570 GetNumValuesReturnedForGLGet(pname, &num_values); |
6571 Result* result = GetSharedMemoryAs<Result*>( | 6571 Result* result = GetSharedMemoryAs<Result*>( |
6572 c.%(last_arg_name)s_shm_id, c.%(last_arg_name)s_shm_offset, | 6572 c.%(last_arg_name)s_shm_id, c.%(last_arg_name)s_shm_offset, |
6573 Result::ComputeSize(num_values)); | 6573 Result::ComputeSize(num_values)); |
6574 %(last_arg_type)s %(last_arg_name)s = result ? result->GetData() : NULL; | 6574 %(last_arg_type)s %(last_arg_name)s = result ? result->GetData() : NULL; |
6575 """ | 6575 """ |
6576 file.Write(code % { | 6576 f.write(code % { |
6577 'last_arg_type': last_arg.type, | 6577 'last_arg_type': last_arg.type, |
6578 'last_arg_name': last_arg.name, | 6578 'last_arg_name': last_arg.name, |
6579 'func_name': func.name, | 6579 'func_name': func.name, |
6580 }) | 6580 }) |
6581 func.WriteHandlerValidation(file) | 6581 func.WriteHandlerValidation(f) |
6582 code = """ // Check that the client initialized the result. | 6582 code = """ // Check that the client initialized the result. |
6583 if (result->size != 0) { | 6583 if (result->size != 0) { |
6584 return error::kInvalidArguments; | 6584 return error::kInvalidArguments; |
6585 } | 6585 } |
6586 """ | 6586 """ |
6587 shadowed = func.GetInfo('shadowed') | 6587 shadowed = func.GetInfo('shadowed') |
6588 if not shadowed: | 6588 if not shadowed: |
6589 file.Write(' LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("%s");\n' % func.name) | 6589 f.write(' LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("%s");\n' % func.name) |
6590 file.Write(code) | 6590 f.write(code) |
6591 func.WriteHandlerImplementation(file) | 6591 func.WriteHandlerImplementation(f) |
6592 if shadowed: | 6592 if shadowed: |
6593 code = """ result->SetNumResults(num_values); | 6593 code = """ result->SetNumResults(num_values); |
6594 return error::kNoError; | 6594 return error::kNoError; |
6595 } | 6595 } |
6596 """ | 6596 """ |
6597 else: | 6597 else: |
6598 code = """ GLenum error = LOCAL_PEEK_GL_ERROR("%(func_name)s"); | 6598 code = """ GLenum error = LOCAL_PEEK_GL_ERROR("%(func_name)s"); |
6599 if (error == GL_NO_ERROR) { | 6599 if (error == GL_NO_ERROR) { |
6600 result->SetNumResults(num_values); | 6600 result->SetNumResults(num_values); |
6601 } | 6601 } |
6602 return error::kNoError; | 6602 return error::kNoError; |
6603 } | 6603 } |
6604 | 6604 |
6605 """ | 6605 """ |
6606 file.Write(code % {'func_name': func.name}) | 6606 f.write(code % {'func_name': func.name}) |
6607 | 6607 |
6608 def WriteGLES2Implementation(self, func, file): | 6608 def WriteGLES2Implementation(self, func, f): |
6609 """Overrriden from TypeHandler.""" | 6609 """Overrriden from TypeHandler.""" |
6610 impl_decl = func.GetInfo('impl_decl') | 6610 impl_decl = func.GetInfo('impl_decl') |
6611 if impl_decl == None or impl_decl == True: | 6611 if impl_decl == None or impl_decl == True: |
6612 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 6612 f.write("%s GLES2Implementation::%s(%s) {\n" % |
6613 (func.return_type, func.original_name, | 6613 (func.return_type, func.original_name, |
6614 func.MakeTypedOriginalArgString(""))) | 6614 func.MakeTypedOriginalArgString(""))) |
6615 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 6615 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
6616 func.WriteDestinationInitalizationValidation(file) | 6616 func.WriteDestinationInitalizationValidation(f) |
6617 self.WriteClientGLCallLog(func, file) | 6617 self.WriteClientGLCallLog(func, f) |
6618 for arg in func.GetOriginalArgs(): | 6618 for arg in func.GetOriginalArgs(): |
6619 arg.WriteClientSideValidationCode(file, func) | 6619 arg.WriteClientSideValidationCode(f, func) |
6620 all_but_last_args = func.GetOriginalArgs()[:-1] | 6620 all_but_last_args = func.GetOriginalArgs()[:-1] |
6621 args = [] | 6621 args = [] |
6622 has_length_arg = False | 6622 has_length_arg = False |
6623 for arg in all_but_last_args: | 6623 for arg in all_but_last_args: |
6624 if arg.type == 'GLsync': | 6624 if arg.type == 'GLsync': |
6625 args.append('ToGLuint(%s)' % arg.name) | 6625 args.append('ToGLuint(%s)' % arg.name) |
6626 elif arg.name.endswith('size') and arg.type == 'GLsizei': | 6626 elif arg.name.endswith('size') and arg.type == 'GLsizei': |
6627 continue | 6627 continue |
6628 elif arg.name == 'length': | 6628 elif arg.name == 'length': |
6629 has_length_arg = True | 6629 has_length_arg = True |
6630 continue | 6630 continue |
6631 else: | 6631 else: |
6632 args.append(arg.name) | 6632 args.append(arg.name) |
6633 arg_string = ", ".join(args) | 6633 arg_string = ", ".join(args) |
6634 all_arg_string = ( | 6634 all_arg_string = ( |
6635 ", ".join([ | 6635 ", ".join([ |
6636 "%s" % arg.name | 6636 "%s" % arg.name |
6637 for arg in func.GetOriginalArgs() if not arg.IsConstant()])) | 6637 for arg in func.GetOriginalArgs() if not arg.IsConstant()])) |
6638 self.WriteTraceEvent(func, file) | 6638 self.WriteTraceEvent(func, f) |
6639 code = """ if (%(func_name)sHelper(%(all_arg_string)s)) { | 6639 code = """ if (%(func_name)sHelper(%(all_arg_string)s)) { |
6640 return; | 6640 return; |
6641 } | 6641 } |
6642 typedef cmds::%(func_name)s::Result Result; | 6642 typedef cmds::%(func_name)s::Result Result; |
6643 Result* result = GetResultAs<Result*>(); | 6643 Result* result = GetResultAs<Result*>(); |
6644 if (!result) { | 6644 if (!result) { |
6645 return; | 6645 return; |
6646 } | 6646 } |
6647 result->SetNumResults(0); | 6647 result->SetNumResults(0); |
6648 helper_->%(func_name)s(%(arg_string)s, | 6648 helper_->%(func_name)s(%(arg_string)s, |
6649 GetResultShmId(), GetResultShmOffset()); | 6649 GetResultShmId(), GetResultShmOffset()); |
6650 WaitForCmd(); | 6650 WaitForCmd(); |
6651 result->CopyResult(%(last_arg_name)s); | 6651 result->CopyResult(%(last_arg_name)s); |
6652 GPU_CLIENT_LOG_CODE_BLOCK({ | 6652 GPU_CLIENT_LOG_CODE_BLOCK({ |
6653 for (int32_t i = 0; i < result->GetNumResults(); ++i) { | 6653 for (int32_t i = 0; i < result->GetNumResults(); ++i) { |
6654 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); | 6654 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); |
6655 } | 6655 } |
6656 });""" | 6656 });""" |
6657 if has_length_arg: | 6657 if has_length_arg: |
6658 code += """ | 6658 code += """ |
6659 if (length) { | 6659 if (length) { |
6660 *length = result->GetNumResults(); | 6660 *length = result->GetNumResults(); |
6661 }""" | 6661 }""" |
6662 code += """ | 6662 code += """ |
6663 CheckGLError(); | 6663 CheckGLError(); |
6664 } | 6664 } |
6665 """ | 6665 """ |
6666 file.Write(code % { | 6666 f.write(code % { |
6667 'func_name': func.name, | 6667 'func_name': func.name, |
6668 'arg_string': arg_string, | 6668 'arg_string': arg_string, |
6669 'all_arg_string': all_arg_string, | 6669 'all_arg_string': all_arg_string, |
6670 'last_arg_name': func.GetLastOriginalArg().name, | 6670 'last_arg_name': func.GetLastOriginalArg().name, |
6671 }) | 6671 }) |
6672 | 6672 |
6673 def WriteGLES2ImplementationUnitTest(self, func, file): | 6673 def WriteGLES2ImplementationUnitTest(self, func, f): |
6674 """Writes the GLES2 Implemention unit test.""" | 6674 """Writes the GLES2 Implemention unit test.""" |
6675 code = """ | 6675 code = """ |
6676 TEST_F(GLES2ImplementationTest, %(name)s) { | 6676 TEST_F(GLES2ImplementationTest, %(name)s) { |
6677 struct Cmds { | 6677 struct Cmds { |
6678 cmds::%(name)s cmd; | 6678 cmds::%(name)s cmd; |
6679 }; | 6679 }; |
6680 typedef cmds::%(name)s::Result::Type ResultType; | 6680 typedef cmds::%(name)s::Result::Type ResultType; |
6681 ResultType result = 0; | 6681 ResultType result = 0; |
6682 Cmds expected; | 6682 Cmds expected; |
6683 ExpectedMemoryInfo result1 = GetExpectedResultMemory( | 6683 ExpectedMemoryInfo result1 = GetExpectedResultMemory( |
(...skipping 14 matching lines...) Expand all Loading... |
6698 first_gl_arg = func.GetOriginalArgs()[0].GetValidNonCachedClientSideArg( | 6698 first_gl_arg = func.GetOriginalArgs()[0].GetValidNonCachedClientSideArg( |
6699 func) | 6699 func) |
6700 | 6700 |
6701 cmd_arg_strings = [first_cmd_arg] | 6701 cmd_arg_strings = [first_cmd_arg] |
6702 for arg in func.GetCmdArgs()[1:-2]: | 6702 for arg in func.GetCmdArgs()[1:-2]: |
6703 cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func)) | 6703 cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func)) |
6704 gl_arg_strings = [first_gl_arg] | 6704 gl_arg_strings = [first_gl_arg] |
6705 for arg in func.GetOriginalArgs()[1:-1]: | 6705 for arg in func.GetOriginalArgs()[1:-1]: |
6706 gl_arg_strings.append(arg.GetValidClientSideArg(func)) | 6706 gl_arg_strings.append(arg.GetValidClientSideArg(func)) |
6707 | 6707 |
6708 file.Write(code % { | 6708 f.write(code % { |
6709 'name': func.name, | 6709 'name': func.name, |
6710 'args': ", ".join(gl_arg_strings), | 6710 'args': ", ".join(gl_arg_strings), |
6711 'cmd_args': ", ".join(cmd_arg_strings), | 6711 'cmd_args': ", ".join(cmd_arg_strings), |
6712 }) | 6712 }) |
6713 | 6713 |
6714 def WriteServiceUnitTest(self, func, file, *extras): | 6714 def WriteServiceUnitTest(self, func, f, *extras): |
6715 """Overrriden from TypeHandler.""" | 6715 """Overrriden from TypeHandler.""" |
6716 valid_test = """ | 6716 valid_test = """ |
6717 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6717 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6718 EXPECT_CALL(*gl_, GetError()) | 6718 EXPECT_CALL(*gl_, GetError()) |
6719 .WillOnce(Return(GL_NO_ERROR)) | 6719 .WillOnce(Return(GL_NO_ERROR)) |
6720 .WillOnce(Return(GL_NO_ERROR)) | 6720 .WillOnce(Return(GL_NO_ERROR)) |
6721 .RetiresOnSaturation(); | 6721 .RetiresOnSaturation(); |
6722 SpecializedSetup<cmds::%(name)s, 0>(true); | 6722 SpecializedSetup<cmds::%(name)s, 0>(true); |
6723 typedef cmds::%(name)s::Result Result; | 6723 typedef cmds::%(name)s::Result Result; |
6724 Result* result = static_cast<Result*>(shared_memory_address_); | 6724 Result* result = static_cast<Result*>(shared_memory_address_); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6765 else: | 6765 else: |
6766 arg_value = arg.GetValidArg(func) | 6766 arg_value = arg.GetValidArg(func) |
6767 cmd_arg_strings.append(arg_value) | 6767 cmd_arg_strings.append(arg_value) |
6768 if func.GetInfo('gl_test_func') == 'glGetIntegerv': | 6768 if func.GetInfo('gl_test_func') == 'glGetIntegerv': |
6769 gl_arg_strings.append("_") | 6769 gl_arg_strings.append("_") |
6770 else: | 6770 else: |
6771 gl_arg_strings.append("result->GetData()") | 6771 gl_arg_strings.append("result->GetData()") |
6772 cmd_arg_strings.append("shared_memory_id_") | 6772 cmd_arg_strings.append("shared_memory_id_") |
6773 cmd_arg_strings.append("shared_memory_offset_") | 6773 cmd_arg_strings.append("shared_memory_offset_") |
6774 | 6774 |
6775 self.WriteValidUnitTest(func, file, valid_test, { | 6775 self.WriteValidUnitTest(func, f, valid_test, { |
6776 'local_gl_args': ", ".join(gl_arg_strings), | 6776 'local_gl_args': ", ".join(gl_arg_strings), |
6777 'cmd_args': ", ".join(cmd_arg_strings), | 6777 'cmd_args': ", ".join(cmd_arg_strings), |
6778 'valid_pname': valid_pname, | 6778 'valid_pname': valid_pname, |
6779 }, *extras) | 6779 }, *extras) |
6780 | 6780 |
6781 if not func.IsUnsafe(): | 6781 if not func.IsUnsafe(): |
6782 invalid_test = """ | 6782 invalid_test = """ |
6783 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 6783 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
6784 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 6784 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
6785 SpecializedSetup<cmds::%(name)s, 0>(false); | 6785 SpecializedSetup<cmds::%(name)s, 0>(false); |
6786 cmds::%(name)s::Result* result = | 6786 cmds::%(name)s::Result* result = |
6787 static_cast<cmds::%(name)s::Result*>(shared_memory_address_); | 6787 static_cast<cmds::%(name)s::Result*>(shared_memory_address_); |
6788 result->size = 0; | 6788 result->size = 0; |
6789 cmds::%(name)s cmd; | 6789 cmds::%(name)s cmd; |
6790 cmd.Init(%(args)s); | 6790 cmd.Init(%(args)s); |
6791 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd)); | 6791 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd)); |
6792 EXPECT_EQ(0u, result->size);%(gl_error_test)s | 6792 EXPECT_EQ(0u, result->size);%(gl_error_test)s |
6793 } | 6793 } |
6794 """ | 6794 """ |
6795 self.WriteInvalidUnitTest(func, file, invalid_test, *extras) | 6795 self.WriteInvalidUnitTest(func, f, invalid_test, *extras) |
6796 | 6796 |
6797 class ArrayArgTypeHandler(TypeHandler): | 6797 class ArrayArgTypeHandler(TypeHandler): |
6798 """Base class for type handlers that handle args that are arrays""" | 6798 """Base class for type handlers that handle args that are arrays""" |
6799 | 6799 |
6800 def __init__(self): | 6800 def __init__(self): |
6801 TypeHandler.__init__(self) | 6801 TypeHandler.__init__(self) |
6802 | 6802 |
6803 def GetArrayType(self, func): | 6803 def GetArrayType(self, func): |
6804 """Returns the type of the element in the element array being PUT to.""" | 6804 """Returns the type of the element in the element array being PUT to.""" |
6805 for arg in func.GetOriginalArgs(): | 6805 for arg in func.GetOriginalArgs(): |
(...skipping 11 matching lines...) Expand all Loading... |
6817 def GetArrayCount(self, func): | 6817 def GetArrayCount(self, func): |
6818 """Returns the count of the elements in the array being PUT to.""" | 6818 """Returns the count of the elements in the array being PUT to.""" |
6819 return func.GetInfo('count') | 6819 return func.GetInfo('count') |
6820 | 6820 |
6821 class PUTHandler(ArrayArgTypeHandler): | 6821 class PUTHandler(ArrayArgTypeHandler): |
6822 """Handler for glTexParameter_v, glVertexAttrib_v functions.""" | 6822 """Handler for glTexParameter_v, glVertexAttrib_v functions.""" |
6823 | 6823 |
6824 def __init__(self): | 6824 def __init__(self): |
6825 ArrayArgTypeHandler.__init__(self) | 6825 ArrayArgTypeHandler.__init__(self) |
6826 | 6826 |
6827 def WriteServiceUnitTest(self, func, file, *extras): | 6827 def WriteServiceUnitTest(self, func, f, *extras): |
6828 """Writes the service unit test for a command.""" | 6828 """Writes the service unit test for a command.""" |
6829 expected_call = "EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));" | 6829 expected_call = "EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));" |
6830 if func.GetInfo("first_element_only"): | 6830 if func.GetInfo("first_element_only"): |
6831 gl_arg_strings = [ | 6831 gl_arg_strings = [ |
6832 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs() | 6832 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs() |
6833 ] | 6833 ] |
6834 gl_arg_strings[-1] = "*" + gl_arg_strings[-1] | 6834 gl_arg_strings[-1] = "*" + gl_arg_strings[-1] |
6835 expected_call = ("EXPECT_CALL(*gl_, %%(gl_func_name)s(%s));" % | 6835 expected_call = ("EXPECT_CALL(*gl_, %%(gl_func_name)s(%s));" % |
6836 ", ".join(gl_arg_strings)) | 6836 ", ".join(gl_arg_strings)) |
6837 valid_test = """ | 6837 valid_test = """ |
6838 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6838 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6839 SpecializedSetup<cmds::%(name)s, 0>(true); | 6839 SpecializedSetup<cmds::%(name)s, 0>(true); |
6840 cmds::%(name)s cmd; | 6840 cmds::%(name)s cmd; |
6841 cmd.Init(%(args)s); | 6841 cmd.Init(%(args)s); |
6842 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s; | 6842 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s; |
6843 %(expected_call)s | 6843 %(expected_call)s |
6844 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 6844 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
6845 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 6845 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
6846 } | 6846 } |
6847 """ | 6847 """ |
6848 extra = { | 6848 extra = { |
6849 'data_type': self.GetArrayType(func), | 6849 'data_type': self.GetArrayType(func), |
6850 'data_value': func.GetInfo('data_value') or '0', | 6850 'data_value': func.GetInfo('data_value') or '0', |
6851 'expected_call': expected_call, | 6851 'expected_call': expected_call, |
6852 } | 6852 } |
6853 self.WriteValidUnitTest(func, file, valid_test, extra, *extras) | 6853 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) |
6854 | 6854 |
6855 invalid_test = """ | 6855 invalid_test = """ |
6856 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 6856 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
6857 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 6857 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
6858 SpecializedSetup<cmds::%(name)s, 0>(false); | 6858 SpecializedSetup<cmds::%(name)s, 0>(false); |
6859 cmds::%(name)s cmd; | 6859 cmds::%(name)s cmd; |
6860 cmd.Init(%(args)s); | 6860 cmd.Init(%(args)s); |
6861 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s; | 6861 GetSharedMemoryAs<%(data_type)s*>()[0] = %(data_value)s; |
6862 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s | 6862 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s |
6863 } | 6863 } |
6864 """ | 6864 """ |
6865 self.WriteInvalidUnitTest(func, file, invalid_test, extra, *extras) | 6865 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) |
6866 | 6866 |
6867 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 6867 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
6868 """Writes the service unit test for a command.""" | 6868 """Writes the service unit test for a command.""" |
6869 valid_test = """ | 6869 valid_test = """ |
6870 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6870 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6871 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 6871 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
6872 SpecializedSetup<cmds::%(name)s, 0>(true); | 6872 SpecializedSetup<cmds::%(name)s, 0>(true); |
6873 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; | 6873 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; |
6874 cmd.Init(%(gl_args)s, &temp[0]); | 6874 cmd.Init(%(gl_args)s, &temp[0]); |
6875 EXPECT_CALL( | 6875 EXPECT_CALL( |
6876 *gl_, | 6876 *gl_, |
6877 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< | 6877 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< |
(...skipping 19 matching lines...) Expand all Loading... |
6897 gl_any_strings = ["_"] * len(gl_arg_strings) | 6897 gl_any_strings = ["_"] * len(gl_arg_strings) |
6898 | 6898 |
6899 extra = { | 6899 extra = { |
6900 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), | 6900 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), |
6901 'data_type': self.GetArrayType(func), | 6901 'data_type': self.GetArrayType(func), |
6902 'data_count': self.GetArrayCount(func), | 6902 'data_count': self.GetArrayCount(func), |
6903 'data_value': func.GetInfo('data_value') or '0', | 6903 'data_value': func.GetInfo('data_value') or '0', |
6904 'gl_args': ", ".join(gl_arg_strings), | 6904 'gl_args': ", ".join(gl_arg_strings), |
6905 'gl_any_args': ", ".join(gl_any_strings), | 6905 'gl_any_args': ", ".join(gl_any_strings), |
6906 } | 6906 } |
6907 self.WriteValidUnitTest(func, file, valid_test, extra, *extras) | 6907 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) |
6908 | 6908 |
6909 invalid_test = """ | 6909 invalid_test = """ |
6910 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 6910 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
6911 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();""" | 6911 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();""" |
6912 if func.IsUnsafe(): | 6912 if func.IsUnsafe(): |
6913 invalid_test += """ | 6913 invalid_test += """ |
6914 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(1); | 6914 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(1); |
6915 """ | 6915 """ |
6916 else: | 6916 else: |
6917 invalid_test += """ | 6917 invalid_test += """ |
(...skipping 11 matching lines...) Expand all Loading... |
6929 decoder_->set_unsafe_es3_apis_enabled(false); | 6929 decoder_->set_unsafe_es3_apis_enabled(false); |
6930 } | 6930 } |
6931 """ | 6931 """ |
6932 else: | 6932 else: |
6933 invalid_test += """ | 6933 invalid_test += """ |
6934 EXPECT_EQ(error::%(parse_result)s, | 6934 EXPECT_EQ(error::%(parse_result)s, |
6935 ExecuteImmediateCmd(cmd, sizeof(temp))); | 6935 ExecuteImmediateCmd(cmd, sizeof(temp))); |
6936 %(gl_error_test)s | 6936 %(gl_error_test)s |
6937 } | 6937 } |
6938 """ | 6938 """ |
6939 self.WriteInvalidUnitTest(func, file, invalid_test, extra, *extras) | 6939 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) |
6940 | 6940 |
6941 def WriteGetDataSizeCode(self, func, file): | 6941 def WriteGetDataSizeCode(self, func, f): |
6942 """Overrriden from TypeHandler.""" | 6942 """Overrriden from TypeHandler.""" |
6943 code = """ uint32_t data_size; | 6943 code = """ uint32_t data_size; |
6944 if (!ComputeDataSize(1, sizeof(%s), %d, &data_size)) { | 6944 if (!ComputeDataSize(1, sizeof(%s), %d, &data_size)) { |
6945 return error::kOutOfBounds; | 6945 return error::kOutOfBounds; |
6946 } | 6946 } |
6947 """ | 6947 """ |
6948 file.Write(code % (self.GetArrayType(func), self.GetArrayCount(func))) | 6948 f.write(code % (self.GetArrayType(func), self.GetArrayCount(func))) |
6949 if func.IsImmediate(): | 6949 if func.IsImmediate(): |
6950 file.Write(" if (data_size > immediate_data_size) {\n") | 6950 f.write(" if (data_size > immediate_data_size) {\n") |
6951 file.Write(" return error::kOutOfBounds;\n") | 6951 f.write(" return error::kOutOfBounds;\n") |
6952 file.Write(" }\n") | 6952 f.write(" }\n") |
6953 | 6953 |
6954 def __NeedsToCalcDataCount(self, func): | 6954 def __NeedsToCalcDataCount(self, func): |
6955 use_count_func = func.GetInfo('use_count_func') | 6955 use_count_func = func.GetInfo('use_count_func') |
6956 return use_count_func != None and use_count_func != False | 6956 return use_count_func != None and use_count_func != False |
6957 | 6957 |
6958 def WriteGLES2Implementation(self, func, file): | 6958 def WriteGLES2Implementation(self, func, f): |
6959 """Overrriden from TypeHandler.""" | 6959 """Overrriden from TypeHandler.""" |
6960 impl_func = func.GetInfo('impl_func') | 6960 impl_func = func.GetInfo('impl_func') |
6961 if (impl_func != None and impl_func != True): | 6961 if (impl_func != None and impl_func != True): |
6962 return; | 6962 return; |
6963 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 6963 f.write("%s GLES2Implementation::%s(%s) {\n" % |
6964 (func.return_type, func.original_name, | 6964 (func.return_type, func.original_name, |
6965 func.MakeTypedOriginalArgString(""))) | 6965 func.MakeTypedOriginalArgString(""))) |
6966 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 6966 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
6967 func.WriteDestinationInitalizationValidation(file) | 6967 func.WriteDestinationInitalizationValidation(f) |
6968 self.WriteClientGLCallLog(func, file) | 6968 self.WriteClientGLCallLog(func, f) |
6969 | 6969 |
6970 if self.__NeedsToCalcDataCount(func): | 6970 if self.__NeedsToCalcDataCount(func): |
6971 file.Write(" size_t count = GLES2Util::Calc%sDataCount(%s);\n" % | 6971 f.write(" size_t count = GLES2Util::Calc%sDataCount(%s);\n" % |
6972 (func.name, func.GetOriginalArgs()[0].name)) | 6972 (func.name, func.GetOriginalArgs()[0].name)) |
6973 file.Write(" DCHECK_LE(count, %du);\n" % self.GetArrayCount(func)) | 6973 f.write(" DCHECK_LE(count, %du);\n" % self.GetArrayCount(func)) |
6974 else: | 6974 else: |
6975 file.Write(" size_t count = %d;" % self.GetArrayCount(func)) | 6975 f.write(" size_t count = %d;" % self.GetArrayCount(func)) |
6976 file.Write(" for (size_t ii = 0; ii < count; ++ii)\n") | 6976 f.write(" for (size_t ii = 0; ii < count; ++ii)\n") |
6977 file.Write(' GPU_CLIENT_LOG("value[" << ii << "]: " << %s[ii]);\n' % | 6977 f.write(' GPU_CLIENT_LOG("value[" << ii << "]: " << %s[ii]);\n' % |
6978 func.GetLastOriginalArg().name) | 6978 func.GetLastOriginalArg().name) |
6979 for arg in func.GetOriginalArgs(): | 6979 for arg in func.GetOriginalArgs(): |
6980 arg.WriteClientSideValidationCode(file, func) | 6980 arg.WriteClientSideValidationCode(f, func) |
6981 file.Write(" helper_->%sImmediate(%s);\n" % | 6981 f.write(" helper_->%sImmediate(%s);\n" % |
6982 (func.name, func.MakeOriginalArgString(""))) | 6982 (func.name, func.MakeOriginalArgString(""))) |
6983 file.Write(" CheckGLError();\n") | 6983 f.write(" CheckGLError();\n") |
6984 file.Write("}\n") | 6984 f.write("}\n") |
6985 file.Write("\n") | 6985 f.write("\n") |
6986 | 6986 |
6987 def WriteGLES2ImplementationUnitTest(self, func, file): | 6987 def WriteGLES2ImplementationUnitTest(self, func, f): |
6988 """Writes the GLES2 Implemention unit test.""" | 6988 """Writes the GLES2 Implemention unit test.""" |
6989 client_test = func.GetInfo('client_test') | 6989 client_test = func.GetInfo('client_test') |
6990 if (client_test != None and client_test != True): | 6990 if (client_test != None and client_test != True): |
6991 return; | 6991 return; |
6992 code = """ | 6992 code = """ |
6993 TEST_F(GLES2ImplementationTest, %(name)s) { | 6993 TEST_F(GLES2ImplementationTest, %(name)s) { |
6994 %(type)s data[%(count)d] = {0}; | 6994 %(type)s data[%(count)d] = {0}; |
6995 struct Cmds { | 6995 struct Cmds { |
6996 cmds::%(name)sImmediate cmd; | 6996 cmds::%(name)sImmediate cmd; |
6997 %(type)s data[%(count)d]; | 6997 %(type)s data[%(count)d]; |
6998 }; | 6998 }; |
6999 | 6999 |
7000 for (int jj = 0; jj < %(count)d; ++jj) { | 7000 for (int jj = 0; jj < %(count)d; ++jj) { |
7001 data[jj] = static_cast<%(type)s>(jj); | 7001 data[jj] = static_cast<%(type)s>(jj); |
7002 } | 7002 } |
7003 Cmds expected; | 7003 Cmds expected; |
7004 expected.cmd.Init(%(cmd_args)s, &data[0]); | 7004 expected.cmd.Init(%(cmd_args)s, &data[0]); |
7005 gl_->%(name)s(%(args)s, &data[0]); | 7005 gl_->%(name)s(%(args)s, &data[0]); |
7006 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 7006 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
7007 } | 7007 } |
7008 """ | 7008 """ |
7009 cmd_arg_strings = [ | 7009 cmd_arg_strings = [ |
7010 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()[0:-2] | 7010 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()[0:-2] |
7011 ] | 7011 ] |
7012 gl_arg_strings = [ | 7012 gl_arg_strings = [ |
7013 arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs()[0:-1] | 7013 arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs()[0:-1] |
7014 ] | 7014 ] |
7015 | 7015 |
7016 file.Write(code % { | 7016 f.write(code % { |
7017 'name': func.name, | 7017 'name': func.name, |
7018 'type': self.GetArrayType(func), | 7018 'type': self.GetArrayType(func), |
7019 'count': self.GetArrayCount(func), | 7019 'count': self.GetArrayCount(func), |
7020 'args': ", ".join(gl_arg_strings), | 7020 'args': ", ".join(gl_arg_strings), |
7021 'cmd_args': ", ".join(cmd_arg_strings), | 7021 'cmd_args': ", ".join(cmd_arg_strings), |
7022 }) | 7022 }) |
7023 | 7023 |
7024 def WriteImmediateCmdComputeSize(self, func, file): | 7024 def WriteImmediateCmdComputeSize(self, func, f): |
7025 """Overrriden from TypeHandler.""" | 7025 """Overrriden from TypeHandler.""" |
7026 file.Write(" static uint32_t ComputeDataSize() {\n") | 7026 f.write(" static uint32_t ComputeDataSize() {\n") |
7027 file.Write(" return static_cast<uint32_t>(\n") | 7027 f.write(" return static_cast<uint32_t>(\n") |
7028 file.Write(" sizeof(%s) * %d);\n" % | 7028 f.write(" sizeof(%s) * %d);\n" % |
7029 (self.GetArrayType(func), self.GetArrayCount(func))) | 7029 (self.GetArrayType(func), self.GetArrayCount(func))) |
7030 file.Write(" }\n") | 7030 f.write(" }\n") |
7031 file.Write("\n") | 7031 f.write("\n") |
7032 if self.__NeedsToCalcDataCount(func): | 7032 if self.__NeedsToCalcDataCount(func): |
7033 file.Write(" static uint32_t ComputeEffectiveDataSize(%s %s) {\n" % | 7033 f.write(" static uint32_t ComputeEffectiveDataSize(%s %s) {\n" % |
7034 (func.GetOriginalArgs()[0].type, | 7034 (func.GetOriginalArgs()[0].type, |
7035 func.GetOriginalArgs()[0].name)) | 7035 func.GetOriginalArgs()[0].name)) |
7036 file.Write(" return static_cast<uint32_t>(\n") | 7036 f.write(" return static_cast<uint32_t>(\n") |
7037 file.Write(" sizeof(%s) * GLES2Util::Calc%sDataCount(%s));\n" % | 7037 f.write(" sizeof(%s) * GLES2Util::Calc%sDataCount(%s));\n" % |
7038 (self.GetArrayType(func), func.original_name, | 7038 (self.GetArrayType(func), func.original_name, |
7039 func.GetOriginalArgs()[0].name)) | 7039 func.GetOriginalArgs()[0].name)) |
7040 file.Write(" }\n") | 7040 f.write(" }\n") |
7041 file.Write("\n") | 7041 f.write("\n") |
7042 file.Write(" static uint32_t ComputeSize() {\n") | 7042 f.write(" static uint32_t ComputeSize() {\n") |
7043 file.Write(" return static_cast<uint32_t>(\n") | 7043 f.write(" return static_cast<uint32_t>(\n") |
7044 file.Write( | 7044 f.write( |
7045 " sizeof(ValueType) + ComputeDataSize());\n") | 7045 " sizeof(ValueType) + ComputeDataSize());\n") |
7046 file.Write(" }\n") | 7046 f.write(" }\n") |
7047 file.Write("\n") | 7047 f.write("\n") |
7048 | 7048 |
7049 def WriteImmediateCmdSetHeader(self, func, file): | 7049 def WriteImmediateCmdSetHeader(self, func, f): |
7050 """Overrriden from TypeHandler.""" | 7050 """Overrriden from TypeHandler.""" |
7051 file.Write(" void SetHeader() {\n") | 7051 f.write(" void SetHeader() {\n") |
7052 file.Write( | 7052 f.write( |
7053 " header.SetCmdByTotalSize<ValueType>(ComputeSize());\n") | 7053 " header.SetCmdByTotalSize<ValueType>(ComputeSize());\n") |
7054 file.Write(" }\n") | 7054 f.write(" }\n") |
7055 file.Write("\n") | 7055 f.write("\n") |
7056 | 7056 |
7057 def WriteImmediateCmdInit(self, func, file): | 7057 def WriteImmediateCmdInit(self, func, f): |
7058 """Overrriden from TypeHandler.""" | 7058 """Overrriden from TypeHandler.""" |
7059 last_arg = func.GetLastOriginalArg() | 7059 last_arg = func.GetLastOriginalArg() |
7060 file.Write(" void Init(%s, %s _%s) {\n" % | 7060 f.write(" void Init(%s, %s _%s) {\n" % |
7061 (func.MakeTypedCmdArgString("_"), | 7061 (func.MakeTypedCmdArgString("_"), |
7062 last_arg.type, last_arg.name)) | 7062 last_arg.type, last_arg.name)) |
7063 file.Write(" SetHeader();\n") | 7063 f.write(" SetHeader();\n") |
7064 args = func.GetCmdArgs() | 7064 args = func.GetCmdArgs() |
7065 for arg in args: | 7065 for arg in args: |
7066 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 7066 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
7067 file.Write(" memcpy(ImmediateDataAddress(this),\n") | 7067 f.write(" memcpy(ImmediateDataAddress(this),\n") |
7068 if self.__NeedsToCalcDataCount(func): | 7068 if self.__NeedsToCalcDataCount(func): |
7069 file.Write(" _%s, ComputeEffectiveDataSize(%s));" % | 7069 f.write(" _%s, ComputeEffectiveDataSize(%s));" % |
7070 (last_arg.name, func.GetOriginalArgs()[0].name)) | 7070 (last_arg.name, func.GetOriginalArgs()[0].name)) |
7071 file.Write(""" | 7071 f.write(""" |
7072 DCHECK_GE(ComputeDataSize(), ComputeEffectiveDataSize(%(arg)s)); | 7072 DCHECK_GE(ComputeDataSize(), ComputeEffectiveDataSize(%(arg)s)); |
7073 char* pointer = reinterpret_cast<char*>(ImmediateDataAddress(this)) + | 7073 char* pointer = reinterpret_cast<char*>(ImmediateDataAddress(this)) + |
7074 ComputeEffectiveDataSize(%(arg)s); | 7074 ComputeEffectiveDataSize(%(arg)s); |
7075 memset(pointer, 0, ComputeDataSize() - ComputeEffectiveDataSize(%(arg)s)); | 7075 memset(pointer, 0, ComputeDataSize() - ComputeEffectiveDataSize(%(arg)s)); |
7076 """ % { 'arg': func.GetOriginalArgs()[0].name, }) | 7076 """ % { 'arg': func.GetOriginalArgs()[0].name, }) |
7077 else: | 7077 else: |
7078 file.Write(" _%s, ComputeDataSize());\n" % last_arg.name) | 7078 f.write(" _%s, ComputeDataSize());\n" % last_arg.name) |
7079 file.Write(" }\n") | 7079 f.write(" }\n") |
7080 file.Write("\n") | 7080 f.write("\n") |
7081 | 7081 |
7082 def WriteImmediateCmdSet(self, func, file): | 7082 def WriteImmediateCmdSet(self, func, f): |
7083 """Overrriden from TypeHandler.""" | 7083 """Overrriden from TypeHandler.""" |
7084 last_arg = func.GetLastOriginalArg() | 7084 last_arg = func.GetLastOriginalArg() |
7085 copy_args = func.MakeCmdArgString("_", False) | 7085 copy_args = func.MakeCmdArgString("_", False) |
7086 file.Write(" void* Set(void* cmd%s, %s _%s) {\n" % | 7086 f.write(" void* Set(void* cmd%s, %s _%s) {\n" % |
7087 (func.MakeTypedCmdArgString("_", True), | 7087 (func.MakeTypedCmdArgString("_", True), |
7088 last_arg.type, last_arg.name)) | 7088 last_arg.type, last_arg.name)) |
7089 file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % | 7089 f.write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % |
7090 (copy_args, last_arg.name)) | 7090 (copy_args, last_arg.name)) |
7091 file.Write(" const uint32_t size = ComputeSize();\n") | 7091 f.write(" const uint32_t size = ComputeSize();\n") |
7092 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 7092 f.write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
7093 "cmd, size);\n") | 7093 "cmd, size);\n") |
7094 file.Write(" }\n") | 7094 f.write(" }\n") |
7095 file.Write("\n") | 7095 f.write("\n") |
7096 | 7096 |
7097 def WriteImmediateCmdHelper(self, func, file): | 7097 def WriteImmediateCmdHelper(self, func, f): |
7098 """Overrriden from TypeHandler.""" | 7098 """Overrriden from TypeHandler.""" |
7099 code = """ void %(name)s(%(typed_args)s) { | 7099 code = """ void %(name)s(%(typed_args)s) { |
7100 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(); | 7100 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(); |
7101 gles2::cmds::%(name)s* c = | 7101 gles2::cmds::%(name)s* c = |
7102 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); | 7102 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); |
7103 if (c) { | 7103 if (c) { |
7104 c->Init(%(args)s); | 7104 c->Init(%(args)s); |
7105 } | 7105 } |
7106 } | 7106 } |
7107 | 7107 |
7108 """ | 7108 """ |
7109 file.Write(code % { | 7109 f.write(code % { |
7110 "name": func.name, | 7110 "name": func.name, |
7111 "typed_args": func.MakeTypedOriginalArgString(""), | 7111 "typed_args": func.MakeTypedOriginalArgString(""), |
7112 "args": func.MakeOriginalArgString(""), | 7112 "args": func.MakeOriginalArgString(""), |
7113 }) | 7113 }) |
7114 | 7114 |
7115 def WriteImmediateFormatTest(self, func, file): | 7115 def WriteImmediateFormatTest(self, func, f): |
7116 """Overrriden from TypeHandler.""" | 7116 """Overrriden from TypeHandler.""" |
7117 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 7117 f.write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
7118 file.Write(" const int kSomeBaseValueToTestWith = 51;\n") | 7118 f.write(" const int kSomeBaseValueToTestWith = 51;\n") |
7119 file.Write(" static %s data[] = {\n" % self.GetArrayType(func)) | 7119 f.write(" static %s data[] = {\n" % self.GetArrayType(func)) |
7120 for v in range(0, self.GetArrayCount(func)): | 7120 for v in range(0, self.GetArrayCount(func)): |
7121 file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % | 7121 f.write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % |
7122 (self.GetArrayType(func), v)) | 7122 (self.GetArrayType(func), v)) |
7123 file.Write(" };\n") | 7123 f.write(" };\n") |
7124 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 7124 f.write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
7125 (func.name, func.name)) | 7125 (func.name, func.name)) |
7126 file.Write(" void* next_cmd = cmd.Set(\n") | 7126 f.write(" void* next_cmd = cmd.Set(\n") |
7127 file.Write(" &cmd") | 7127 f.write(" &cmd") |
7128 args = func.GetCmdArgs() | 7128 args = func.GetCmdArgs() |
7129 for value, arg in enumerate(args): | 7129 for value, arg in enumerate(args): |
7130 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 11)) | 7130 f.write(",\n static_cast<%s>(%d)" % (arg.type, value + 11)) |
7131 file.Write(",\n data);\n") | 7131 f.write(",\n data);\n") |
7132 args = func.GetCmdArgs() | 7132 args = func.GetCmdArgs() |
7133 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" | 7133 f.write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" |
7134 % func.name) | 7134 % func.name) |
7135 file.Write(" cmd.header.command);\n") | 7135 f.write(" cmd.header.command);\n") |
7136 file.Write(" EXPECT_EQ(sizeof(cmd) +\n") | 7136 f.write(" EXPECT_EQ(sizeof(cmd) +\n") |
7137 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)),\n") | 7137 f.write(" RoundSizeToMultipleOfEntries(sizeof(data)),\n") |
7138 file.Write(" cmd.header.size * 4u);\n") | 7138 f.write(" cmd.header.size * 4u);\n") |
7139 for value, arg in enumerate(args): | 7139 for value, arg in enumerate(args): |
7140 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % | 7140 f.write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % |
7141 (arg.type, value + 11, arg.name)) | 7141 (arg.type, value + 11, arg.name)) |
7142 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 7142 f.write(" CheckBytesWrittenMatchesExpectedSize(\n") |
7143 file.Write(" next_cmd, sizeof(cmd) +\n") | 7143 f.write(" next_cmd, sizeof(cmd) +\n") |
7144 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") | 7144 f.write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") |
7145 file.Write(" // TODO(gman): Check that data was inserted;\n") | 7145 f.write(" // TODO(gman): Check that data was inserted;\n") |
7146 file.Write("}\n") | 7146 f.write("}\n") |
7147 file.Write("\n") | 7147 f.write("\n") |
7148 | 7148 |
7149 | 7149 |
7150 class PUTnHandler(ArrayArgTypeHandler): | 7150 class PUTnHandler(ArrayArgTypeHandler): |
7151 """Handler for PUTn 'glUniform__v' type functions.""" | 7151 """Handler for PUTn 'glUniform__v' type functions.""" |
7152 | 7152 |
7153 def __init__(self): | 7153 def __init__(self): |
7154 ArrayArgTypeHandler.__init__(self) | 7154 ArrayArgTypeHandler.__init__(self) |
7155 | 7155 |
7156 def WriteServiceUnitTest(self, func, file, *extras): | 7156 def WriteServiceUnitTest(self, func, f, *extras): |
7157 """Overridden from TypeHandler.""" | 7157 """Overridden from TypeHandler.""" |
7158 ArrayArgTypeHandler.WriteServiceUnitTest(self, func, file, *extras) | 7158 ArrayArgTypeHandler.WriteServiceUnitTest(self, func, f, *extras) |
7159 | 7159 |
7160 valid_test = """ | 7160 valid_test = """ |
7161 TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) { | 7161 TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) { |
7162 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); | 7162 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); |
7163 SpecializedSetup<cmds::%(name)s, 0>(true); | 7163 SpecializedSetup<cmds::%(name)s, 0>(true); |
7164 cmds::%(name)s cmd; | 7164 cmds::%(name)s cmd; |
7165 cmd.Init(%(args)s); | 7165 cmd.Init(%(args)s); |
7166 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 7166 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
7167 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7167 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7168 } | 7168 } |
(...skipping 13 matching lines...) Expand all Loading... |
7182 # the number of elements requested in the command. | 7182 # the number of elements requested in the command. |
7183 arg_strings.append("5") | 7183 arg_strings.append("5") |
7184 else: | 7184 else: |
7185 gl_arg_strings.append(arg.GetValidGLArg(func)) | 7185 gl_arg_strings.append(arg.GetValidGLArg(func)) |
7186 if not arg.IsConstant(): | 7186 if not arg.IsConstant(): |
7187 arg_strings.append(arg.GetValidArg(func)) | 7187 arg_strings.append(arg.GetValidArg(func)) |
7188 extra = { | 7188 extra = { |
7189 'gl_args': ", ".join(gl_arg_strings), | 7189 'gl_args': ", ".join(gl_arg_strings), |
7190 'args': ", ".join(arg_strings), | 7190 'args': ", ".join(arg_strings), |
7191 } | 7191 } |
7192 self.WriteValidUnitTest(func, file, valid_test, extra, *extras) | 7192 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) |
7193 | 7193 |
7194 def WriteImmediateServiceUnitTest(self, func, file, *extras): | 7194 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
7195 """Overridden from TypeHandler.""" | 7195 """Overridden from TypeHandler.""" |
7196 valid_test = """ | 7196 valid_test = """ |
7197 TEST_P(%(test_name)s, %(name)sValidArgs) { | 7197 TEST_P(%(test_name)s, %(name)sValidArgs) { |
7198 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 7198 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
7199 EXPECT_CALL( | 7199 EXPECT_CALL( |
7200 *gl_, | 7200 *gl_, |
7201 %(gl_func_name)s(%(gl_args)s, | 7201 %(gl_func_name)s(%(gl_args)s, |
7202 reinterpret_cast<%(data_type)s*>(ImmediateDataAddress(&cmd)))); | 7202 reinterpret_cast<%(data_type)s*>(ImmediateDataAddress(&cmd)))); |
7203 SpecializedSetup<cmds::%(name)s, 0>(true); | 7203 SpecializedSetup<cmds::%(name)s, 0>(true); |
7204 %(data_type)s temp[%(data_count)s * 2] = { 0, }; | 7204 %(data_type)s temp[%(data_count)s * 2] = { 0, }; |
(...skipping 21 matching lines...) Expand all Loading... |
7226 gl_any_strings.append("_") | 7226 gl_any_strings.append("_") |
7227 if not arg.IsConstant(): | 7227 if not arg.IsConstant(): |
7228 arg_strings.append(arg.GetValidArg(func)) | 7228 arg_strings.append(arg.GetValidArg(func)) |
7229 extra = { | 7229 extra = { |
7230 'data_type': self.GetArrayType(func), | 7230 'data_type': self.GetArrayType(func), |
7231 'data_count': self.GetArrayCount(func), | 7231 'data_count': self.GetArrayCount(func), |
7232 'args': ", ".join(arg_strings), | 7232 'args': ", ".join(arg_strings), |
7233 'gl_args': ", ".join(gl_arg_strings), | 7233 'gl_args': ", ".join(gl_arg_strings), |
7234 'gl_any_args': ", ".join(gl_any_strings), | 7234 'gl_any_args': ", ".join(gl_any_strings), |
7235 } | 7235 } |
7236 self.WriteValidUnitTest(func, file, valid_test, extra, *extras) | 7236 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) |
7237 | 7237 |
7238 invalid_test = """ | 7238 invalid_test = """ |
7239 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 7239 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
7240 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 7240 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
7241 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0); | 7241 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0); |
7242 SpecializedSetup<cmds::%(name)s, 0>(false); | 7242 SpecializedSetup<cmds::%(name)s, 0>(false); |
7243 %(data_type)s temp[%(data_count)s * 2] = { 0, }; | 7243 %(data_type)s temp[%(data_count)s * 2] = { 0, }; |
7244 cmd.Init(%(all_but_last_args)s, &temp[0]); | 7244 cmd.Init(%(all_but_last_args)s, &temp[0]); |
7245 EXPECT_EQ(error::%(parse_result)s, | 7245 EXPECT_EQ(error::%(parse_result)s, |
7246 ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s | 7246 ExecuteImmediateCmd(cmd, sizeof(temp)));%(gl_error_test)s |
7247 } | 7247 } |
7248 """ | 7248 """ |
7249 self.WriteInvalidUnitTest(func, file, invalid_test, extra, *extras) | 7249 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) |
7250 | 7250 |
7251 def WriteGetDataSizeCode(self, func, file): | 7251 def WriteGetDataSizeCode(self, func, f): |
7252 """Overrriden from TypeHandler.""" | 7252 """Overrriden from TypeHandler.""" |
7253 code = """ uint32_t data_size; | 7253 code = """ uint32_t data_size; |
7254 if (!ComputeDataSize(count, sizeof(%s), %d, &data_size)) { | 7254 if (!ComputeDataSize(count, sizeof(%s), %d, &data_size)) { |
7255 return error::kOutOfBounds; | 7255 return error::kOutOfBounds; |
7256 } | 7256 } |
7257 """ | 7257 """ |
7258 file.Write(code % (self.GetArrayType(func), self.GetArrayCount(func))) | 7258 f.write(code % (self.GetArrayType(func), self.GetArrayCount(func))) |
7259 if func.IsImmediate(): | 7259 if func.IsImmediate(): |
7260 file.Write(" if (data_size > immediate_data_size) {\n") | 7260 f.write(" if (data_size > immediate_data_size) {\n") |
7261 file.Write(" return error::kOutOfBounds;\n") | 7261 f.write(" return error::kOutOfBounds;\n") |
7262 file.Write(" }\n") | 7262 f.write(" }\n") |
7263 | 7263 |
7264 def WriteGLES2Implementation(self, func, file): | 7264 def WriteGLES2Implementation(self, func, f): |
7265 """Overrriden from TypeHandler.""" | 7265 """Overrriden from TypeHandler.""" |
7266 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 7266 f.write("%s GLES2Implementation::%s(%s) {\n" % |
7267 (func.return_type, func.original_name, | 7267 (func.return_type, func.original_name, |
7268 func.MakeTypedOriginalArgString(""))) | 7268 func.MakeTypedOriginalArgString(""))) |
7269 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 7269 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
7270 func.WriteDestinationInitalizationValidation(file) | 7270 func.WriteDestinationInitalizationValidation(f) |
7271 self.WriteClientGLCallLog(func, file) | 7271 self.WriteClientGLCallLog(func, f) |
7272 last_pointer_name = func.GetLastOriginalPointerArg().name | 7272 last_pointer_name = func.GetLastOriginalPointerArg().name |
7273 file.Write(""" GPU_CLIENT_LOG_CODE_BLOCK({ | 7273 f.write(""" GPU_CLIENT_LOG_CODE_BLOCK({ |
7274 for (GLsizei i = 0; i < count; ++i) { | 7274 for (GLsizei i = 0; i < count; ++i) { |
7275 """) | 7275 """) |
7276 values_str = ' << ", " << '.join( | 7276 values_str = ' << ", " << '.join( |
7277 ["%s[%d + i * %d]" % ( | 7277 ["%s[%d + i * %d]" % ( |
7278 last_pointer_name, ndx, self.GetArrayCount(func)) for ndx in range( | 7278 last_pointer_name, ndx, self.GetArrayCount(func)) for ndx in range( |
7279 0, self.GetArrayCount(func))]) | 7279 0, self.GetArrayCount(func))]) |
7280 file.Write(' GPU_CLIENT_LOG(" " << i << ": " << %s);\n' % values_str) | 7280 f.write(' GPU_CLIENT_LOG(" " << i << ": " << %s);\n' % values_str) |
7281 file.Write(" }\n });\n") | 7281 f.write(" }\n });\n") |
7282 for arg in func.GetOriginalArgs(): | 7282 for arg in func.GetOriginalArgs(): |
7283 arg.WriteClientSideValidationCode(file, func) | 7283 arg.WriteClientSideValidationCode(f, func) |
7284 file.Write(" helper_->%sImmediate(%s);\n" % | 7284 f.write(" helper_->%sImmediate(%s);\n" % |
7285 (func.name, func.MakeInitString(""))) | 7285 (func.name, func.MakeInitString(""))) |
7286 file.Write(" CheckGLError();\n") | 7286 f.write(" CheckGLError();\n") |
7287 file.Write("}\n") | 7287 f.write("}\n") |
7288 file.Write("\n") | 7288 f.write("\n") |
7289 | 7289 |
7290 def WriteGLES2ImplementationUnitTest(self, func, file): | 7290 def WriteGLES2ImplementationUnitTest(self, func, f): |
7291 """Writes the GLES2 Implemention unit test.""" | 7291 """Writes the GLES2 Implemention unit test.""" |
7292 code = """ | 7292 code = """ |
7293 TEST_F(GLES2ImplementationTest, %(name)s) { | 7293 TEST_F(GLES2ImplementationTest, %(name)s) { |
7294 %(type)s data[%(count_param)d][%(count)d] = {{0}}; | 7294 %(type)s data[%(count_param)d][%(count)d] = {{0}}; |
7295 struct Cmds { | 7295 struct Cmds { |
7296 cmds::%(name)sImmediate cmd; | 7296 cmds::%(name)sImmediate cmd; |
7297 %(type)s data[%(count_param)d][%(count)d]; | 7297 %(type)s data[%(count_param)d][%(count)d]; |
7298 }; | 7298 }; |
7299 | 7299 |
7300 Cmds expected; | 7300 Cmds expected; |
(...skipping 18 matching lines...) Expand all Loading... |
7319 gl_arg_strings = [] | 7319 gl_arg_strings = [] |
7320 count_param = 0 | 7320 count_param = 0 |
7321 for arg in func.GetOriginalArgs(): | 7321 for arg in func.GetOriginalArgs(): |
7322 if arg.IsPointer(): | 7322 if arg.IsPointer(): |
7323 valid_value = "&data[0][0]" | 7323 valid_value = "&data[0][0]" |
7324 else: | 7324 else: |
7325 valid_value = arg.GetValidClientSideArg(func) | 7325 valid_value = arg.GetValidClientSideArg(func) |
7326 gl_arg_strings.append(valid_value) | 7326 gl_arg_strings.append(valid_value) |
7327 if arg.name == "count": | 7327 if arg.name == "count": |
7328 count_param = int(valid_value) | 7328 count_param = int(valid_value) |
7329 file.Write(code % { | 7329 f.write(code % { |
7330 'name': func.name, | 7330 'name': func.name, |
7331 'type': self.GetArrayType(func), | 7331 'type': self.GetArrayType(func), |
7332 'count': self.GetArrayCount(func), | 7332 'count': self.GetArrayCount(func), |
7333 'args': ", ".join(gl_arg_strings), | 7333 'args': ", ".join(gl_arg_strings), |
7334 'cmd_args': ", ".join(cmd_arg_strings), | 7334 'cmd_args': ", ".join(cmd_arg_strings), |
7335 'count_param': count_param, | 7335 'count_param': count_param, |
7336 }) | 7336 }) |
7337 | 7337 |
7338 # Test constants for invalid values, as they are not tested by the | 7338 # Test constants for invalid values, as they are not tested by the |
7339 # service. | 7339 # service. |
(...skipping 23 matching lines...) Expand all Loading... |
7363 if arg is invalid_arg: | 7363 if arg is invalid_arg: |
7364 gl_arg_strings.append(invalid[0]) | 7364 gl_arg_strings.append(invalid[0]) |
7365 elif arg.IsPointer(): | 7365 elif arg.IsPointer(): |
7366 gl_arg_strings.append("&data[0][0]") | 7366 gl_arg_strings.append("&data[0][0]") |
7367 else: | 7367 else: |
7368 valid_value = arg.GetValidClientSideArg(func) | 7368 valid_value = arg.GetValidClientSideArg(func) |
7369 gl_arg_strings.append(valid_value) | 7369 gl_arg_strings.append(valid_value) |
7370 if arg.name == "count": | 7370 if arg.name == "count": |
7371 count_param = int(valid_value) | 7371 count_param = int(valid_value) |
7372 | 7372 |
7373 file.Write(code % { | 7373 f.write(code % { |
7374 'name': func.name, | 7374 'name': func.name, |
7375 'invalid_index': func.GetOriginalArgs().index(invalid_arg), | 7375 'invalid_index': func.GetOriginalArgs().index(invalid_arg), |
7376 'type': self.GetArrayType(func), | 7376 'type': self.GetArrayType(func), |
7377 'count': self.GetArrayCount(func), | 7377 'count': self.GetArrayCount(func), |
7378 'args': ", ".join(gl_arg_strings), | 7378 'args': ", ".join(gl_arg_strings), |
7379 'gl_error': invalid[2], | 7379 'gl_error': invalid[2], |
7380 'count_param': count_param, | 7380 'count_param': count_param, |
7381 }) | 7381 }) |
7382 | 7382 |
7383 | 7383 |
7384 def WriteImmediateCmdComputeSize(self, func, file): | 7384 def WriteImmediateCmdComputeSize(self, func, f): |
7385 """Overrriden from TypeHandler.""" | 7385 """Overrriden from TypeHandler.""" |
7386 file.Write(" static uint32_t ComputeDataSize(GLsizei count) {\n") | 7386 f.write(" static uint32_t ComputeDataSize(GLsizei count) {\n") |
7387 file.Write(" return static_cast<uint32_t>(\n") | 7387 f.write(" return static_cast<uint32_t>(\n") |
7388 file.Write(" sizeof(%s) * %d * count); // NOLINT\n" % | 7388 f.write(" sizeof(%s) * %d * count); // NOLINT\n" % |
7389 (self.GetArrayType(func), self.GetArrayCount(func))) | 7389 (self.GetArrayType(func), self.GetArrayCount(func))) |
7390 file.Write(" }\n") | 7390 f.write(" }\n") |
7391 file.Write("\n") | 7391 f.write("\n") |
7392 file.Write(" static uint32_t ComputeSize(GLsizei count) {\n") | 7392 f.write(" static uint32_t ComputeSize(GLsizei count) {\n") |
7393 file.Write(" return static_cast<uint32_t>(\n") | 7393 f.write(" return static_cast<uint32_t>(\n") |
7394 file.Write( | 7394 f.write( |
7395 " sizeof(ValueType) + ComputeDataSize(count)); // NOLINT\n") | 7395 " sizeof(ValueType) + ComputeDataSize(count)); // NOLINT\n") |
7396 file.Write(" }\n") | 7396 f.write(" }\n") |
7397 file.Write("\n") | 7397 f.write("\n") |
7398 | 7398 |
7399 def WriteImmediateCmdSetHeader(self, func, file): | 7399 def WriteImmediateCmdSetHeader(self, func, f): |
7400 """Overrriden from TypeHandler.""" | 7400 """Overrriden from TypeHandler.""" |
7401 file.Write(" void SetHeader(GLsizei count) {\n") | 7401 f.write(" void SetHeader(GLsizei count) {\n") |
7402 file.Write( | 7402 f.write( |
7403 " header.SetCmdByTotalSize<ValueType>(ComputeSize(count));\n") | 7403 " header.SetCmdByTotalSize<ValueType>(ComputeSize(count));\n") |
7404 file.Write(" }\n") | 7404 f.write(" }\n") |
7405 file.Write("\n") | 7405 f.write("\n") |
7406 | 7406 |
7407 def WriteImmediateCmdInit(self, func, file): | 7407 def WriteImmediateCmdInit(self, func, f): |
7408 """Overrriden from TypeHandler.""" | 7408 """Overrriden from TypeHandler.""" |
7409 file.Write(" void Init(%s) {\n" % | 7409 f.write(" void Init(%s) {\n" % |
7410 func.MakeTypedInitString("_")) | 7410 func.MakeTypedInitString("_")) |
7411 file.Write(" SetHeader(_count);\n") | 7411 f.write(" SetHeader(_count);\n") |
7412 args = func.GetCmdArgs() | 7412 args = func.GetCmdArgs() |
7413 for arg in args: | 7413 for arg in args: |
7414 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 7414 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
7415 file.Write(" memcpy(ImmediateDataAddress(this),\n") | 7415 f.write(" memcpy(ImmediateDataAddress(this),\n") |
7416 pointer_arg = func.GetLastOriginalPointerArg() | 7416 pointer_arg = func.GetLastOriginalPointerArg() |
7417 file.Write(" _%s, ComputeDataSize(_count));\n" % pointer_arg.name) | 7417 f.write(" _%s, ComputeDataSize(_count));\n" % pointer_arg.name) |
7418 file.Write(" }\n") | 7418 f.write(" }\n") |
7419 file.Write("\n") | 7419 f.write("\n") |
7420 | 7420 |
7421 def WriteImmediateCmdSet(self, func, file): | 7421 def WriteImmediateCmdSet(self, func, f): |
7422 """Overrriden from TypeHandler.""" | 7422 """Overrriden from TypeHandler.""" |
7423 file.Write(" void* Set(void* cmd%s) {\n" % | 7423 f.write(" void* Set(void* cmd%s) {\n" % |
7424 func.MakeTypedInitString("_", True)) | 7424 func.MakeTypedInitString("_", True)) |
7425 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % | 7425 f.write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % |
7426 func.MakeInitString("_")) | 7426 func.MakeInitString("_")) |
7427 file.Write(" const uint32_t size = ComputeSize(_count);\n") | 7427 f.write(" const uint32_t size = ComputeSize(_count);\n") |
7428 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 7428 f.write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
7429 "cmd, size);\n") | 7429 "cmd, size);\n") |
7430 file.Write(" }\n") | 7430 f.write(" }\n") |
7431 file.Write("\n") | 7431 f.write("\n") |
7432 | 7432 |
7433 def WriteImmediateCmdHelper(self, func, file): | 7433 def WriteImmediateCmdHelper(self, func, f): |
7434 """Overrriden from TypeHandler.""" | 7434 """Overrriden from TypeHandler.""" |
7435 code = """ void %(name)s(%(typed_args)s) { | 7435 code = """ void %(name)s(%(typed_args)s) { |
7436 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(count); | 7436 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(count); |
7437 gles2::cmds::%(name)s* c = | 7437 gles2::cmds::%(name)s* c = |
7438 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); | 7438 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); |
7439 if (c) { | 7439 if (c) { |
7440 c->Init(%(args)s); | 7440 c->Init(%(args)s); |
7441 } | 7441 } |
7442 } | 7442 } |
7443 | 7443 |
7444 """ | 7444 """ |
7445 file.Write(code % { | 7445 f.write(code % { |
7446 "name": func.name, | 7446 "name": func.name, |
7447 "typed_args": func.MakeTypedInitString(""), | 7447 "typed_args": func.MakeTypedInitString(""), |
7448 "args": func.MakeInitString("") | 7448 "args": func.MakeInitString("") |
7449 }) | 7449 }) |
7450 | 7450 |
7451 def WriteImmediateFormatTest(self, func, file): | 7451 def WriteImmediateFormatTest(self, func, f): |
7452 """Overrriden from TypeHandler.""" | 7452 """Overrriden from TypeHandler.""" |
7453 args = func.GetOriginalArgs() | 7453 args = func.GetOriginalArgs() |
7454 count_param = 0 | 7454 count_param = 0 |
7455 for arg in args: | 7455 for arg in args: |
7456 if arg.name == "count": | 7456 if arg.name == "count": |
7457 count_param = int(arg.GetValidClientSideCmdArg(func)) | 7457 count_param = int(arg.GetValidClientSideCmdArg(func)) |
7458 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 7458 f.write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
7459 file.Write(" const int kSomeBaseValueToTestWith = 51;\n") | 7459 f.write(" const int kSomeBaseValueToTestWith = 51;\n") |
7460 file.Write(" static %s data[] = {\n" % self.GetArrayType(func)) | 7460 f.write(" static %s data[] = {\n" % self.GetArrayType(func)) |
7461 for v in range(0, self.GetArrayCount(func) * count_param): | 7461 for v in range(0, self.GetArrayCount(func) * count_param): |
7462 file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % | 7462 f.write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % |
7463 (self.GetArrayType(func), v)) | 7463 (self.GetArrayType(func), v)) |
7464 file.Write(" };\n") | 7464 f.write(" };\n") |
7465 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 7465 f.write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
7466 (func.name, func.name)) | 7466 (func.name, func.name)) |
7467 file.Write(" const GLsizei kNumElements = %d;\n" % count_param) | 7467 f.write(" const GLsizei kNumElements = %d;\n" % count_param) |
7468 file.Write(" const size_t kExpectedCmdSize =\n") | 7468 f.write(" const size_t kExpectedCmdSize =\n") |
7469 file.Write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" % | 7469 f.write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" % |
7470 (self.GetArrayType(func), self.GetArrayCount(func))) | 7470 (self.GetArrayType(func), self.GetArrayCount(func))) |
7471 file.Write(" void* next_cmd = cmd.Set(\n") | 7471 f.write(" void* next_cmd = cmd.Set(\n") |
7472 file.Write(" &cmd") | 7472 f.write(" &cmd") |
7473 for value, arg in enumerate(args): | 7473 for value, arg in enumerate(args): |
7474 if arg.IsPointer(): | 7474 if arg.IsPointer(): |
7475 file.Write(",\n data") | 7475 f.write(",\n data") |
7476 elif arg.IsConstant(): | 7476 elif arg.IsConstant(): |
7477 continue | 7477 continue |
7478 else: | 7478 else: |
7479 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 1)) | 7479 f.write(",\n static_cast<%s>(%d)" % (arg.type, value + 1)) |
7480 file.Write(");\n") | 7480 f.write(");\n") |
7481 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % | 7481 f.write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % |
7482 func.name) | 7482 func.name) |
7483 file.Write(" cmd.header.command);\n") | 7483 f.write(" cmd.header.command);\n") |
7484 file.Write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n") | 7484 f.write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n") |
7485 for value, arg in enumerate(args): | 7485 for value, arg in enumerate(args): |
7486 if arg.IsPointer() or arg.IsConstant(): | 7486 if arg.IsPointer() or arg.IsConstant(): |
7487 continue | 7487 continue |
7488 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % | 7488 f.write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % |
7489 (arg.type, value + 1, arg.name)) | 7489 (arg.type, value + 1, arg.name)) |
7490 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 7490 f.write(" CheckBytesWrittenMatchesExpectedSize(\n") |
7491 file.Write(" next_cmd, sizeof(cmd) +\n") | 7491 f.write(" next_cmd, sizeof(cmd) +\n") |
7492 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") | 7492 f.write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") |
7493 file.Write(" // TODO(gman): Check that data was inserted;\n") | 7493 f.write(" // TODO(gman): Check that data was inserted;\n") |
7494 file.Write("}\n") | 7494 f.write("}\n") |
7495 file.Write("\n") | 7495 f.write("\n") |
7496 | 7496 |
7497 class PUTSTRHandler(ArrayArgTypeHandler): | 7497 class PUTSTRHandler(ArrayArgTypeHandler): |
7498 """Handler for functions that pass a string array.""" | 7498 """Handler for functions that pass a string array.""" |
7499 | 7499 |
7500 def __init__(self): | 7500 def __init__(self): |
7501 ArrayArgTypeHandler.__init__(self) | 7501 ArrayArgTypeHandler.__init__(self) |
7502 | 7502 |
7503 def __GetDataArg(self, func): | 7503 def __GetDataArg(self, func): |
7504 """Return the argument that points to the 2D char arrays""" | 7504 """Return the argument that points to the 2D char arrays""" |
7505 for arg in func.GetOriginalArgs(): | 7505 for arg in func.GetOriginalArgs(): |
7506 if arg.IsPointer2D(): | 7506 if arg.IsPointer2D(): |
7507 return arg | 7507 return arg |
7508 return None | 7508 return None |
7509 | 7509 |
7510 def __GetLengthArg(self, func): | 7510 def __GetLengthArg(self, func): |
7511 """Return the argument that holds length for each char array""" | 7511 """Return the argument that holds length for each char array""" |
7512 for arg in func.GetOriginalArgs(): | 7512 for arg in func.GetOriginalArgs(): |
7513 if arg.IsPointer() and not arg.IsPointer2D(): | 7513 if arg.IsPointer() and not arg.IsPointer2D(): |
7514 return arg | 7514 return arg |
7515 return None | 7515 return None |
7516 | 7516 |
7517 def WriteGLES2Implementation(self, func, file): | 7517 def WriteGLES2Implementation(self, func, f): |
7518 """Overrriden from TypeHandler.""" | 7518 """Overrriden from TypeHandler.""" |
7519 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 7519 f.write("%s GLES2Implementation::%s(%s) {\n" % |
7520 (func.return_type, func.original_name, | 7520 (func.return_type, func.original_name, |
7521 func.MakeTypedOriginalArgString(""))) | 7521 func.MakeTypedOriginalArgString(""))) |
7522 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 7522 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
7523 func.WriteDestinationInitalizationValidation(file) | 7523 func.WriteDestinationInitalizationValidation(f) |
7524 self.WriteClientGLCallLog(func, file) | 7524 self.WriteClientGLCallLog(func, f) |
7525 data_arg = self.__GetDataArg(func) | 7525 data_arg = self.__GetDataArg(func) |
7526 length_arg = self.__GetLengthArg(func) | 7526 length_arg = self.__GetLengthArg(func) |
7527 log_code_block = """ GPU_CLIENT_LOG_CODE_BLOCK({ | 7527 log_code_block = """ GPU_CLIENT_LOG_CODE_BLOCK({ |
7528 for (GLsizei ii = 0; ii < count; ++ii) { | 7528 for (GLsizei ii = 0; ii < count; ++ii) { |
7529 if (%(data)s[ii]) {""" | 7529 if (%(data)s[ii]) {""" |
7530 if length_arg == None: | 7530 if length_arg == None: |
7531 log_code_block += """ | 7531 log_code_block += """ |
7532 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << %(data)s[ii] << "\\n---");""" | 7532 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << %(data)s[ii] << "\\n---");""" |
7533 else: | 7533 else: |
7534 log_code_block += """ | 7534 log_code_block += """ |
7535 if (%(length)s && %(length)s[ii] >= 0) { | 7535 if (%(length)s && %(length)s[ii] >= 0) { |
7536 const std::string my_str(%(data)s[ii], %(length)s[ii]); | 7536 const std::string my_str(%(data)s[ii], %(length)s[ii]); |
7537 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << my_str << "\\n---"); | 7537 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << my_str << "\\n---"); |
7538 } else { | 7538 } else { |
7539 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << %(data)s[ii] << "\\n---"); | 7539 GPU_CLIENT_LOG(" " << ii << ": ---\\n" << %(data)s[ii] << "\\n---"); |
7540 }""" | 7540 }""" |
7541 log_code_block += """ | 7541 log_code_block += """ |
7542 } else { | 7542 } else { |
7543 GPU_CLIENT_LOG(" " << ii << ": NULL"); | 7543 GPU_CLIENT_LOG(" " << ii << ": NULL"); |
7544 } | 7544 } |
7545 } | 7545 } |
7546 }); | 7546 }); |
7547 """ | 7547 """ |
7548 file.Write(log_code_block % { | 7548 f.write(log_code_block % { |
7549 'data': data_arg.name, | 7549 'data': data_arg.name, |
7550 'length': length_arg.name if not length_arg == None else '' | 7550 'length': length_arg.name if not length_arg == None else '' |
7551 }) | 7551 }) |
7552 for arg in func.GetOriginalArgs(): | 7552 for arg in func.GetOriginalArgs(): |
7553 arg.WriteClientSideValidationCode(file, func) | 7553 arg.WriteClientSideValidationCode(f, func) |
7554 | 7554 |
7555 bucket_args = [] | 7555 bucket_args = [] |
7556 for arg in func.GetOriginalArgs(): | 7556 for arg in func.GetOriginalArgs(): |
7557 if arg.name == 'count' or arg == self.__GetLengthArg(func): | 7557 if arg.name == 'count' or arg == self.__GetLengthArg(func): |
7558 continue | 7558 continue |
7559 if arg == self.__GetDataArg(func): | 7559 if arg == self.__GetDataArg(func): |
7560 bucket_args.append('kResultBucketId') | 7560 bucket_args.append('kResultBucketId') |
7561 else: | 7561 else: |
7562 bucket_args.append(arg.name) | 7562 bucket_args.append(arg.name) |
7563 code_block = """ | 7563 code_block = """ |
7564 if (!PackStringsToBucket(count, %(data)s, %(length)s, "gl%(func_name)s")) { | 7564 if (!PackStringsToBucket(count, %(data)s, %(length)s, "gl%(func_name)s")) { |
7565 return; | 7565 return; |
7566 } | 7566 } |
7567 helper_->%(func_name)sBucket(%(bucket_args)s); | 7567 helper_->%(func_name)sBucket(%(bucket_args)s); |
7568 helper_->SetBucketSize(kResultBucketId, 0); | 7568 helper_->SetBucketSize(kResultBucketId, 0); |
7569 CheckGLError(); | 7569 CheckGLError(); |
7570 } | 7570 } |
7571 | 7571 |
7572 """ | 7572 """ |
7573 file.Write(code_block % { | 7573 f.write(code_block % { |
7574 'data': data_arg.name, | 7574 'data': data_arg.name, |
7575 'length': length_arg.name if not length_arg == None else 'NULL', | 7575 'length': length_arg.name if not length_arg == None else 'NULL', |
7576 'func_name': func.name, | 7576 'func_name': func.name, |
7577 'bucket_args': ', '.join(bucket_args), | 7577 'bucket_args': ', '.join(bucket_args), |
7578 }) | 7578 }) |
7579 | 7579 |
7580 def WriteGLES2ImplementationUnitTest(self, func, file): | 7580 def WriteGLES2ImplementationUnitTest(self, func, f): |
7581 """Overrriden from TypeHandler.""" | 7581 """Overrriden from TypeHandler.""" |
7582 code = """ | 7582 code = """ |
7583 TEST_F(GLES2ImplementationTest, %(name)s) { | 7583 TEST_F(GLES2ImplementationTest, %(name)s) { |
7584 const uint32 kBucketId = GLES2Implementation::kResultBucketId; | 7584 const uint32 kBucketId = GLES2Implementation::kResultBucketId; |
7585 const char* kString1 = "happy"; | 7585 const char* kString1 = "happy"; |
7586 const char* kString2 = "ending"; | 7586 const char* kString2 = "ending"; |
7587 const size_t kString1Size = ::strlen(kString1) + 1; | 7587 const size_t kString1Size = ::strlen(kString1) + 1; |
7588 const size_t kString2Size = ::strlen(kString2) + 1; | 7588 const size_t kString2Size = ::strlen(kString2) + 1; |
7589 const size_t kHeaderSize = sizeof(GLint) * 3; | 7589 const size_t kHeaderSize = sizeof(GLint) * 3; |
7590 const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size; | 7590 const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7635 if arg == self.__GetDataArg(func): | 7635 if arg == self.__GetDataArg(func): |
7636 gl_args.append('kStrings') | 7636 gl_args.append('kStrings') |
7637 bucket_args.append('kBucketId') | 7637 bucket_args.append('kBucketId') |
7638 elif arg == self.__GetLengthArg(func): | 7638 elif arg == self.__GetLengthArg(func): |
7639 gl_args.append('NULL') | 7639 gl_args.append('NULL') |
7640 elif arg.name == 'count': | 7640 elif arg.name == 'count': |
7641 gl_args.append('2') | 7641 gl_args.append('2') |
7642 else: | 7642 else: |
7643 gl_args.append(arg.GetValidClientSideArg(func)) | 7643 gl_args.append(arg.GetValidClientSideArg(func)) |
7644 bucket_args.append(arg.GetValidClientSideArg(func)) | 7644 bucket_args.append(arg.GetValidClientSideArg(func)) |
7645 file.Write(code % { | 7645 f.write(code % { |
7646 'name': func.name, | 7646 'name': func.name, |
7647 'gl_args': ", ".join(gl_args), | 7647 'gl_args': ", ".join(gl_args), |
7648 'bucket_args': ", ".join(bucket_args), | 7648 'bucket_args': ", ".join(bucket_args), |
7649 }) | 7649 }) |
7650 | 7650 |
7651 if self.__GetLengthArg(func) == None: | 7651 if self.__GetLengthArg(func) == None: |
7652 return | 7652 return |
7653 code = """ | 7653 code = """ |
7654 TEST_F(GLES2ImplementationTest, %(name)sWithLength) { | 7654 TEST_F(GLES2ImplementationTest, %(name)sWithLength) { |
7655 const uint32 kBucketId = GLES2Implementation::kResultBucketId; | 7655 const uint32 kBucketId = GLES2Implementation::kResultBucketId; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7693 gl_args = [] | 7693 gl_args = [] |
7694 for arg in func.GetOriginalArgs(): | 7694 for arg in func.GetOriginalArgs(): |
7695 if arg == self.__GetDataArg(func): | 7695 if arg == self.__GetDataArg(func): |
7696 gl_args.append('kStrings') | 7696 gl_args.append('kStrings') |
7697 elif arg == self.__GetLengthArg(func): | 7697 elif arg == self.__GetLengthArg(func): |
7698 gl_args.append('kLength') | 7698 gl_args.append('kLength') |
7699 elif arg.name == 'count': | 7699 elif arg.name == 'count': |
7700 gl_args.append('1') | 7700 gl_args.append('1') |
7701 else: | 7701 else: |
7702 gl_args.append(arg.GetValidClientSideArg(func)) | 7702 gl_args.append(arg.GetValidClientSideArg(func)) |
7703 file.Write(code % { | 7703 f.write(code % { |
7704 'name': func.name, | 7704 'name': func.name, |
7705 'gl_args': ", ".join(gl_args), | 7705 'gl_args': ", ".join(gl_args), |
7706 'bucket_args': ", ".join(bucket_args), | 7706 'bucket_args': ", ".join(bucket_args), |
7707 }) | 7707 }) |
7708 | 7708 |
7709 def WriteBucketServiceUnitTest(self, func, file, *extras): | 7709 def WriteBucketServiceUnitTest(self, func, f, *extras): |
7710 """Overrriden from TypeHandler.""" | 7710 """Overrriden from TypeHandler.""" |
7711 cmd_args = [] | 7711 cmd_args = [] |
7712 cmd_args_with_invalid_id = [] | 7712 cmd_args_with_invalid_id = [] |
7713 gl_args = [] | 7713 gl_args = [] |
7714 for index, arg in enumerate(func.GetOriginalArgs()): | 7714 for index, arg in enumerate(func.GetOriginalArgs()): |
7715 if arg == self.__GetLengthArg(func): | 7715 if arg == self.__GetLengthArg(func): |
7716 gl_args.append('_') | 7716 gl_args.append('_') |
7717 elif arg.name == 'count': | 7717 elif arg.name == 'count': |
7718 gl_args.append('1') | 7718 gl_args.append('1') |
7719 elif arg == self.__GetDataArg(func): | 7719 elif arg == self.__GetDataArg(func): |
(...skipping 22 matching lines...) Expand all Loading... |
7742 decoder_->set_unsafe_es3_apis_enabled(true); | 7742 decoder_->set_unsafe_es3_apis_enabled(true); |
7743 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));""" | 7743 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));""" |
7744 if func.IsUnsafe(): | 7744 if func.IsUnsafe(): |
7745 test += """ | 7745 test += """ |
7746 decoder_->set_unsafe_es3_apis_enabled(false); | 7746 decoder_->set_unsafe_es3_apis_enabled(false); |
7747 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 7747 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
7748 """ | 7748 """ |
7749 test += """ | 7749 test += """ |
7750 } | 7750 } |
7751 """ | 7751 """ |
7752 self.WriteValidUnitTest(func, file, test, { | 7752 self.WriteValidUnitTest(func, f, test, { |
7753 'cmd_args': ", ".join(cmd_args), | 7753 'cmd_args': ", ".join(cmd_args), |
7754 'gl_args': ", ".join(gl_args), | 7754 'gl_args': ", ".join(gl_args), |
7755 }, *extras) | 7755 }, *extras) |
7756 | 7756 |
7757 test = """ | 7757 test = """ |
7758 TEST_P(%(test_name)s, %(name)sInvalidArgs) { | 7758 TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
7759 const uint32 kBucketId = 123; | 7759 const uint32 kBucketId = 123; |
7760 const char kSource0[] = "hello"; | 7760 const char kSource0[] = "hello"; |
7761 const char* kSource[] = { kSource0 }; | 7761 const char* kSource[] = { kSource0 }; |
7762 const char kValidStrEnd = 0; | 7762 const char kValidStrEnd = 0; |
7763 decoder_->set_unsafe_es3_apis_enabled(true); | 7763 decoder_->set_unsafe_es3_apis_enabled(true); |
7764 cmds::%(name)s cmd; | 7764 cmds::%(name)s cmd; |
7765 // Test no bucket. | 7765 // Test no bucket. |
7766 cmd.Init(%(cmd_args)s); | 7766 cmd.Init(%(cmd_args)s); |
7767 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 7767 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
7768 // Test invalid client. | 7768 // Test invalid client. |
7769 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); | 7769 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); |
7770 cmd.Init(%(cmd_args_with_invalid_id)s); | 7770 cmd.Init(%(cmd_args_with_invalid_id)s); |
7771 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 7771 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
7772 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 7772 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
7773 } | 7773 } |
7774 """ | 7774 """ |
7775 self.WriteValidUnitTest(func, file, test, { | 7775 self.WriteValidUnitTest(func, f, test, { |
7776 'cmd_args': ", ".join(cmd_args), | 7776 'cmd_args': ", ".join(cmd_args), |
7777 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id), | 7777 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id), |
7778 }, *extras) | 7778 }, *extras) |
7779 | 7779 |
7780 test = """ | 7780 test = """ |
7781 TEST_P(%(test_name)s, %(name)sInvalidHeader) { | 7781 TEST_P(%(test_name)s, %(name)sInvalidHeader) { |
7782 const uint32 kBucketId = 123; | 7782 const uint32 kBucketId = 123; |
7783 const char kSource0[] = "hello"; | 7783 const char kSource0[] = "hello"; |
7784 const char* kSource[] = { kSource0 }; | 7784 const char* kSource[] = { kSource0 }; |
7785 const char kValidStrEnd = 0; | 7785 const char kValidStrEnd = 0; |
7786 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource)); | 7786 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource)); |
7787 const GLsizei kTests[] = { | 7787 const GLsizei kTests[] = { |
7788 kCount + 1, | 7788 kCount + 1, |
7789 0, | 7789 0, |
7790 std::numeric_limits<GLsizei>::max(), | 7790 std::numeric_limits<GLsizei>::max(), |
7791 -1, | 7791 -1, |
7792 }; | 7792 }; |
7793 decoder_->set_unsafe_es3_apis_enabled(true); | 7793 decoder_->set_unsafe_es3_apis_enabled(true); |
7794 for (size_t ii = 0; ii < arraysize(kTests); ++ii) { | 7794 for (size_t ii = 0; ii < arraysize(kTests); ++ii) { |
7795 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd); | 7795 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd); |
7796 cmds::%(name)s cmd; | 7796 cmds::%(name)s cmd; |
7797 cmd.Init(%(cmd_args)s); | 7797 cmd.Init(%(cmd_args)s); |
7798 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); | 7798 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); |
7799 } | 7799 } |
7800 } | 7800 } |
7801 """ | 7801 """ |
7802 self.WriteValidUnitTest(func, file, test, { | 7802 self.WriteValidUnitTest(func, f, test, { |
7803 'cmd_args': ", ".join(cmd_args), | 7803 'cmd_args': ", ".join(cmd_args), |
7804 }, *extras) | 7804 }, *extras) |
7805 | 7805 |
7806 test = """ | 7806 test = """ |
7807 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) { | 7807 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) { |
7808 const uint32 kBucketId = 123; | 7808 const uint32 kBucketId = 123; |
7809 const char kSource0[] = "hello"; | 7809 const char kSource0[] = "hello"; |
7810 const char* kSource[] = { kSource0 }; | 7810 const char* kSource[] = { kSource0 }; |
7811 const char kInvalidStrEnd = '*'; | 7811 const char kInvalidStrEnd = '*'; |
7812 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd); | 7812 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd); |
7813 cmds::%(name)s cmd; | 7813 cmds::%(name)s cmd; |
7814 cmd.Init(%(cmd_args)s); | 7814 cmd.Init(%(cmd_args)s); |
7815 decoder_->set_unsafe_es3_apis_enabled(true); | 7815 decoder_->set_unsafe_es3_apis_enabled(true); |
7816 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); | 7816 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); |
7817 } | 7817 } |
7818 """ | 7818 """ |
7819 self.WriteValidUnitTest(func, file, test, { | 7819 self.WriteValidUnitTest(func, f, test, { |
7820 'cmd_args': ", ".join(cmd_args), | 7820 'cmd_args': ", ".join(cmd_args), |
7821 }, *extras) | 7821 }, *extras) |
7822 | 7822 |
7823 | 7823 |
7824 class PUTXnHandler(ArrayArgTypeHandler): | 7824 class PUTXnHandler(ArrayArgTypeHandler): |
7825 """Handler for glUniform?f functions.""" | 7825 """Handler for glUniform?f functions.""" |
7826 def __init__(self): | 7826 def __init__(self): |
7827 ArrayArgTypeHandler.__init__(self) | 7827 ArrayArgTypeHandler.__init__(self) |
7828 | 7828 |
7829 def WriteHandlerImplementation(self, func, file): | 7829 def WriteHandlerImplementation(self, func, f): |
7830 """Overrriden from TypeHandler.""" | 7830 """Overrriden from TypeHandler.""" |
7831 code = """ %(type)s temp[%(count)s] = { %(values)s};""" | 7831 code = """ %(type)s temp[%(count)s] = { %(values)s};""" |
7832 if func.IsUnsafe(): | 7832 if func.IsUnsafe(): |
7833 code += """ | 7833 code += """ |
7834 gl%(name)sv(%(location)s, 1, &temp[0]); | 7834 gl%(name)sv(%(location)s, 1, &temp[0]); |
7835 """ | 7835 """ |
7836 else: | 7836 else: |
7837 code += """ | 7837 code += """ |
7838 Do%(name)sv(%(location)s, 1, &temp[0]); | 7838 Do%(name)sv(%(location)s, 1, &temp[0]); |
7839 """ | 7839 """ |
7840 values = "" | 7840 values = "" |
7841 args = func.GetOriginalArgs() | 7841 args = func.GetOriginalArgs() |
7842 count = int(self.GetArrayCount(func)) | 7842 count = int(self.GetArrayCount(func)) |
7843 num_args = len(args) | 7843 num_args = len(args) |
7844 for ii in range(count): | 7844 for ii in range(count): |
7845 values += "%s, " % args[len(args) - count + ii].name | 7845 values += "%s, " % args[len(args) - count + ii].name |
7846 | 7846 |
7847 file.Write(code % { | 7847 f.write(code % { |
7848 'name': func.name, | 7848 'name': func.name, |
7849 'count': self.GetArrayCount(func), | 7849 'count': self.GetArrayCount(func), |
7850 'type': self.GetArrayType(func), | 7850 'type': self.GetArrayType(func), |
7851 'location': args[0].name, | 7851 'location': args[0].name, |
7852 'args': func.MakeOriginalArgString(""), | 7852 'args': func.MakeOriginalArgString(""), |
7853 'values': values, | 7853 'values': values, |
7854 }) | 7854 }) |
7855 | 7855 |
7856 def WriteServiceUnitTest(self, func, file, *extras): | 7856 def WriteServiceUnitTest(self, func, f, *extras): |
7857 """Overrriden from TypeHandler.""" | 7857 """Overrriden from TypeHandler.""" |
7858 valid_test = """ | 7858 valid_test = """ |
7859 TEST_P(%(test_name)s, %(name)sValidArgs) { | 7859 TEST_P(%(test_name)s, %(name)sValidArgs) { |
7860 EXPECT_CALL(*gl_, %(name)sv(%(local_args)s)); | 7860 EXPECT_CALL(*gl_, %(name)sv(%(local_args)s)); |
7861 SpecializedSetup<cmds::%(name)s, 0>(true); | 7861 SpecializedSetup<cmds::%(name)s, 0>(true); |
7862 cmds::%(name)s cmd; | 7862 cmds::%(name)s cmd; |
7863 cmd.Init(%(args)s);""" | 7863 cmd.Init(%(args)s);""" |
7864 if func.IsUnsafe(): | 7864 if func.IsUnsafe(): |
7865 valid_test += """ | 7865 valid_test += """ |
7866 decoder_->set_unsafe_es3_apis_enabled(true);""" | 7866 decoder_->set_unsafe_es3_apis_enabled(true);""" |
7867 valid_test += """ | 7867 valid_test += """ |
7868 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 7868 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
7869 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 7869 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
7870 if func.IsUnsafe(): | 7870 if func.IsUnsafe(): |
7871 valid_test += """ | 7871 valid_test += """ |
7872 decoder_->set_unsafe_es3_apis_enabled(false); | 7872 decoder_->set_unsafe_es3_apis_enabled(false); |
7873 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));""" | 7873 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));""" |
7874 valid_test += """ | 7874 valid_test += """ |
7875 } | 7875 } |
7876 """ | 7876 """ |
7877 args = func.GetOriginalArgs() | 7877 args = func.GetOriginalArgs() |
7878 local_args = "%s, 1, _" % args[0].GetValidGLArg(func) | 7878 local_args = "%s, 1, _" % args[0].GetValidGLArg(func) |
7879 self.WriteValidUnitTest(func, file, valid_test, { | 7879 self.WriteValidUnitTest(func, f, valid_test, { |
7880 'name': func.name, | 7880 'name': func.name, |
7881 'count': self.GetArrayCount(func), | 7881 'count': self.GetArrayCount(func), |
7882 'local_args': local_args, | 7882 'local_args': local_args, |
7883 }, *extras) | 7883 }, *extras) |
7884 | 7884 |
7885 invalid_test = """ | 7885 invalid_test = """ |
7886 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 7886 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
7887 EXPECT_CALL(*gl_, %(name)sv(_, _, _).Times(0); | 7887 EXPECT_CALL(*gl_, %(name)sv(_, _, _).Times(0); |
7888 SpecializedSetup<cmds::%(name)s, 0>(false); | 7888 SpecializedSetup<cmds::%(name)s, 0>(false); |
7889 cmds::%(name)s cmd; | 7889 cmds::%(name)s cmd; |
7890 cmd.Init(%(args)s); | 7890 cmd.Init(%(args)s); |
7891 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s | 7891 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s |
7892 } | 7892 } |
7893 """ | 7893 """ |
7894 self.WriteInvalidUnitTest(func, file, invalid_test, { | 7894 self.WriteInvalidUnitTest(func, f, invalid_test, { |
7895 'name': func.GetInfo('name'), | 7895 'name': func.GetInfo('name'), |
7896 'count': self.GetArrayCount(func), | 7896 'count': self.GetArrayCount(func), |
7897 }) | 7897 }) |
7898 | 7898 |
7899 | 7899 |
7900 class GLcharHandler(CustomHandler): | 7900 class GLcharHandler(CustomHandler): |
7901 """Handler for functions that pass a single string .""" | 7901 """Handler for functions that pass a single string .""" |
7902 | 7902 |
7903 def __init__(self): | 7903 def __init__(self): |
7904 CustomHandler.__init__(self) | 7904 CustomHandler.__init__(self) |
7905 | 7905 |
7906 def WriteImmediateCmdComputeSize(self, func, file): | 7906 def WriteImmediateCmdComputeSize(self, func, f): |
7907 """Overrriden from TypeHandler.""" | 7907 """Overrriden from TypeHandler.""" |
7908 file.Write(" static uint32_t ComputeSize(uint32_t data_size) {\n") | 7908 f.write(" static uint32_t ComputeSize(uint32_t data_size) {\n") |
7909 file.Write(" return static_cast<uint32_t>(\n") | 7909 f.write(" return static_cast<uint32_t>(\n") |
7910 file.Write(" sizeof(ValueType) + data_size); // NOLINT\n") | 7910 f.write(" sizeof(ValueType) + data_size); // NOLINT\n") |
7911 file.Write(" }\n") | 7911 f.write(" }\n") |
7912 | 7912 |
7913 def WriteImmediateCmdSetHeader(self, func, file): | 7913 def WriteImmediateCmdSetHeader(self, func, f): |
7914 """Overrriden from TypeHandler.""" | 7914 """Overrriden from TypeHandler.""" |
7915 code = """ | 7915 code = """ |
7916 void SetHeader(uint32_t data_size) { | 7916 void SetHeader(uint32_t data_size) { |
7917 header.SetCmdBySize<ValueType>(data_size); | 7917 header.SetCmdBySize<ValueType>(data_size); |
7918 } | 7918 } |
7919 """ | 7919 """ |
7920 file.Write(code) | 7920 f.write(code) |
7921 | 7921 |
7922 def WriteImmediateCmdInit(self, func, file): | 7922 def WriteImmediateCmdInit(self, func, f): |
7923 """Overrriden from TypeHandler.""" | 7923 """Overrriden from TypeHandler.""" |
7924 last_arg = func.GetLastOriginalArg() | 7924 last_arg = func.GetLastOriginalArg() |
7925 args = func.GetCmdArgs() | 7925 args = func.GetCmdArgs() |
7926 set_code = [] | 7926 set_code = [] |
7927 for arg in args: | 7927 for arg in args: |
7928 set_code.append(" %s = _%s;" % (arg.name, arg.name)) | 7928 set_code.append(" %s = _%s;" % (arg.name, arg.name)) |
7929 code = """ | 7929 code = """ |
7930 void Init(%(typed_args)s, uint32_t _data_size) { | 7930 void Init(%(typed_args)s, uint32_t _data_size) { |
7931 SetHeader(_data_size); | 7931 SetHeader(_data_size); |
7932 %(set_code)s | 7932 %(set_code)s |
7933 memcpy(ImmediateDataAddress(this), _%(last_arg)s, _data_size); | 7933 memcpy(ImmediateDataAddress(this), _%(last_arg)s, _data_size); |
7934 } | 7934 } |
7935 | 7935 |
7936 """ | 7936 """ |
7937 file.Write(code % { | 7937 f.write(code % { |
7938 "typed_args": func.MakeTypedArgString("_"), | 7938 "typed_args": func.MakeTypedArgString("_"), |
7939 "set_code": "\n".join(set_code), | 7939 "set_code": "\n".join(set_code), |
7940 "last_arg": last_arg.name | 7940 "last_arg": last_arg.name |
7941 }) | 7941 }) |
7942 | 7942 |
7943 def WriteImmediateCmdSet(self, func, file): | 7943 def WriteImmediateCmdSet(self, func, f): |
7944 """Overrriden from TypeHandler.""" | 7944 """Overrriden from TypeHandler.""" |
7945 last_arg = func.GetLastOriginalArg() | 7945 last_arg = func.GetLastOriginalArg() |
7946 file.Write(" void* Set(void* cmd%s, uint32_t _data_size) {\n" % | 7946 f.write(" void* Set(void* cmd%s, uint32_t _data_size) {\n" % |
7947 func.MakeTypedCmdArgString("_", True)) | 7947 func.MakeTypedCmdArgString("_", True)) |
7948 file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _data_size);\n" % | 7948 f.write(" static_cast<ValueType*>(cmd)->Init(%s, _data_size);\n" % |
7949 func.MakeCmdArgString("_")) | 7949 func.MakeCmdArgString("_")) |
7950 file.Write(" return NextImmediateCmdAddress<ValueType>(" | 7950 f.write(" return NextImmediateCmdAddress<ValueType>(" |
7951 "cmd, _data_size);\n") | 7951 "cmd, _data_size);\n") |
7952 file.Write(" }\n") | 7952 f.write(" }\n") |
7953 file.Write("\n") | 7953 f.write("\n") |
7954 | 7954 |
7955 def WriteImmediateCmdHelper(self, func, file): | 7955 def WriteImmediateCmdHelper(self, func, f): |
7956 """Overrriden from TypeHandler.""" | 7956 """Overrriden from TypeHandler.""" |
7957 code = """ void %(name)s(%(typed_args)s) { | 7957 code = """ void %(name)s(%(typed_args)s) { |
7958 const uint32_t data_size = strlen(name); | 7958 const uint32_t data_size = strlen(name); |
7959 gles2::cmds::%(name)s* c = | 7959 gles2::cmds::%(name)s* c = |
7960 GetImmediateCmdSpace<gles2::cmds::%(name)s>(data_size); | 7960 GetImmediateCmdSpace<gles2::cmds::%(name)s>(data_size); |
7961 if (c) { | 7961 if (c) { |
7962 c->Init(%(args)s, data_size); | 7962 c->Init(%(args)s, data_size); |
7963 } | 7963 } |
7964 } | 7964 } |
7965 | 7965 |
7966 """ | 7966 """ |
7967 file.Write(code % { | 7967 f.write(code % { |
7968 "name": func.name, | 7968 "name": func.name, |
7969 "typed_args": func.MakeTypedOriginalArgString(""), | 7969 "typed_args": func.MakeTypedOriginalArgString(""), |
7970 "args": func.MakeOriginalArgString(""), | 7970 "args": func.MakeOriginalArgString(""), |
7971 }) | 7971 }) |
7972 | 7972 |
7973 | 7973 |
7974 def WriteImmediateFormatTest(self, func, file): | 7974 def WriteImmediateFormatTest(self, func, f): |
7975 """Overrriden from TypeHandler.""" | 7975 """Overrriden from TypeHandler.""" |
7976 init_code = [] | 7976 init_code = [] |
7977 check_code = [] | 7977 check_code = [] |
7978 all_but_last_arg = func.GetCmdArgs()[:-1] | 7978 all_but_last_arg = func.GetCmdArgs()[:-1] |
7979 for value, arg in enumerate(all_but_last_arg): | 7979 for value, arg in enumerate(all_but_last_arg): |
7980 init_code.append(" static_cast<%s>(%d)," % (arg.type, value + 11)) | 7980 init_code.append(" static_cast<%s>(%d)," % (arg.type, value + 11)) |
7981 for value, arg in enumerate(all_but_last_arg): | 7981 for value, arg in enumerate(all_but_last_arg): |
7982 check_code.append(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);" % | 7982 check_code.append(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);" % |
7983 (arg.type, value + 11, arg.name)) | 7983 (arg.type, value + 11, arg.name)) |
7984 code = """ | 7984 code = """ |
(...skipping 16 matching lines...) Expand all Loading... |
8001 %(check_code)s | 8001 %(check_code)s |
8002 EXPECT_EQ(static_cast<uint32_t>(strlen(test_str)), cmd.data_size); | 8002 EXPECT_EQ(static_cast<uint32_t>(strlen(test_str)), cmd.data_size); |
8003 EXPECT_EQ(0, memcmp(test_str, ImmediateDataAddress(&cmd), strlen(test_str))); | 8003 EXPECT_EQ(0, memcmp(test_str, ImmediateDataAddress(&cmd), strlen(test_str))); |
8004 CheckBytesWritten( | 8004 CheckBytesWritten( |
8005 next_cmd, | 8005 next_cmd, |
8006 sizeof(cmd) + RoundSizeToMultipleOfEntries(strlen(test_str)), | 8006 sizeof(cmd) + RoundSizeToMultipleOfEntries(strlen(test_str)), |
8007 sizeof(cmd) + strlen(test_str)); | 8007 sizeof(cmd) + strlen(test_str)); |
8008 } | 8008 } |
8009 | 8009 |
8010 """ | 8010 """ |
8011 file.Write(code % { | 8011 f.write(code % { |
8012 'func_name': func.name, | 8012 'func_name': func.name, |
8013 'init_code': "\n".join(init_code), | 8013 'init_code': "\n".join(init_code), |
8014 'check_code': "\n".join(check_code), | 8014 'check_code': "\n".join(check_code), |
8015 }) | 8015 }) |
8016 | 8016 |
8017 | 8017 |
8018 class GLcharNHandler(CustomHandler): | 8018 class GLcharNHandler(CustomHandler): |
8019 """Handler for functions that pass a single string with an optional len.""" | 8019 """Handler for functions that pass a single string with an optional len.""" |
8020 | 8020 |
8021 def __init__(self): | 8021 def __init__(self): |
8022 CustomHandler.__init__(self) | 8022 CustomHandler.__init__(self) |
8023 | 8023 |
8024 def InitFunction(self, func): | 8024 def InitFunction(self, func): |
8025 """Overrriden from TypeHandler.""" | 8025 """Overrriden from TypeHandler.""" |
8026 func.cmd_args = [] | 8026 func.cmd_args = [] |
8027 func.AddCmdArg(Argument('bucket_id', 'GLuint')) | 8027 func.AddCmdArg(Argument('bucket_id', 'GLuint')) |
8028 | 8028 |
8029 def NeedsDataTransferFunction(self, func): | 8029 def NeedsDataTransferFunction(self, func): |
8030 """Overriden from TypeHandler.""" | 8030 """Overriden from TypeHandler.""" |
8031 return False | 8031 return False |
8032 | 8032 |
8033 def AddBucketFunction(self, generator, func): | 8033 def AddBucketFunction(self, generator, func): |
8034 """Overrriden from TypeHandler.""" | 8034 """Overrriden from TypeHandler.""" |
8035 pass | 8035 pass |
8036 | 8036 |
8037 def WriteServiceImplementation(self, func, file): | 8037 def WriteServiceImplementation(self, func, f): |
8038 """Overrriden from TypeHandler.""" | 8038 """Overrriden from TypeHandler.""" |
8039 self.WriteServiceHandlerFunctionHeader(func, file) | 8039 self.WriteServiceHandlerFunctionHeader(func, f) |
8040 file.Write(""" | 8040 f.write(""" |
8041 GLuint bucket_id = static_cast<GLuint>(c.%(bucket_id)s); | 8041 GLuint bucket_id = static_cast<GLuint>(c.%(bucket_id)s); |
8042 Bucket* bucket = GetBucket(bucket_id); | 8042 Bucket* bucket = GetBucket(bucket_id); |
8043 if (!bucket || bucket->size() == 0) { | 8043 if (!bucket || bucket->size() == 0) { |
8044 return error::kInvalidArguments; | 8044 return error::kInvalidArguments; |
8045 } | 8045 } |
8046 std::string str; | 8046 std::string str; |
8047 if (!bucket->GetAsString(&str)) { | 8047 if (!bucket->GetAsString(&str)) { |
8048 return error::kInvalidArguments; | 8048 return error::kInvalidArguments; |
8049 } | 8049 } |
8050 %(gl_func_name)s(0, str.c_str()); | 8050 %(gl_func_name)s(0, str.c_str()); |
(...skipping 13 matching lines...) Expand all Loading... |
8064 def __init__(self): | 8064 def __init__(self): |
8065 TypeHandler.__init__(self) | 8065 TypeHandler.__init__(self) |
8066 | 8066 |
8067 def InitFunction(self, func): | 8067 def InitFunction(self, func): |
8068 """Overrriden from TypeHandler.""" | 8068 """Overrriden from TypeHandler.""" |
8069 func.AddCmdArg(Argument("result_shm_id", 'uint32_t')) | 8069 func.AddCmdArg(Argument("result_shm_id", 'uint32_t')) |
8070 func.AddCmdArg(Argument("result_shm_offset", 'uint32_t')) | 8070 func.AddCmdArg(Argument("result_shm_offset", 'uint32_t')) |
8071 if func.GetInfo('result') == None: | 8071 if func.GetInfo('result') == None: |
8072 func.AddInfo('result', ['uint32_t']) | 8072 func.AddInfo('result', ['uint32_t']) |
8073 | 8073 |
8074 def WriteServiceUnitTest(self, func, file, *extras): | 8074 def WriteServiceUnitTest(self, func, f, *extras): |
8075 """Overrriden from TypeHandler.""" | 8075 """Overrriden from TypeHandler.""" |
8076 valid_test = """ | 8076 valid_test = """ |
8077 TEST_P(%(test_name)s, %(name)sValidArgs) { | 8077 TEST_P(%(test_name)s, %(name)sValidArgs) { |
8078 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); | 8078 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); |
8079 SpecializedSetup<cmds::%(name)s, 0>(true); | 8079 SpecializedSetup<cmds::%(name)s, 0>(true); |
8080 cmds::%(name)s cmd; | 8080 cmds::%(name)s cmd; |
8081 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_);""" | 8081 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_);""" |
8082 if func.IsUnsafe(): | 8082 if func.IsUnsafe(): |
8083 valid_test += """ | 8083 valid_test += """ |
8084 decoder_->set_unsafe_es3_apis_enabled(true);""" | 8084 decoder_->set_unsafe_es3_apis_enabled(true);""" |
8085 valid_test += """ | 8085 valid_test += """ |
8086 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8086 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
8087 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 8087 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
8088 if func.IsUnsafe(): | 8088 if func.IsUnsafe(): |
8089 valid_test += """ | 8089 valid_test += """ |
8090 decoder_->set_unsafe_es3_apis_enabled(false); | 8090 decoder_->set_unsafe_es3_apis_enabled(false); |
8091 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));""" | 8091 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));""" |
8092 valid_test += """ | 8092 valid_test += """ |
8093 } | 8093 } |
8094 """ | 8094 """ |
8095 comma = "" | 8095 comma = "" |
8096 if len(func.GetOriginalArgs()): | 8096 if len(func.GetOriginalArgs()): |
8097 comma =", " | 8097 comma =", " |
8098 self.WriteValidUnitTest(func, file, valid_test, { | 8098 self.WriteValidUnitTest(func, f, valid_test, { |
8099 'comma': comma, | 8099 'comma': comma, |
8100 }, *extras) | 8100 }, *extras) |
8101 | 8101 |
8102 invalid_test = """ | 8102 invalid_test = """ |
8103 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 8103 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
8104 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 8104 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
8105 SpecializedSetup<cmds::%(name)s, 0>(false); | 8105 SpecializedSetup<cmds::%(name)s, 0>(false); |
8106 cmds::%(name)s cmd; | 8106 cmds::%(name)s cmd; |
8107 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_); | 8107 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_); |
8108 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s | 8108 EXPECT_EQ(error::%(parse_result)s, ExecuteCmd(cmd));%(gl_error_test)s |
8109 } | 8109 } |
8110 """ | 8110 """ |
8111 self.WriteInvalidUnitTest(func, file, invalid_test, { | 8111 self.WriteInvalidUnitTest(func, f, invalid_test, { |
8112 'comma': comma, | 8112 'comma': comma, |
8113 }, *extras) | 8113 }, *extras) |
8114 | 8114 |
8115 invalid_test = """ | 8115 invalid_test = """ |
8116 TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) { | 8116 TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) { |
8117 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); | 8117 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0); |
8118 SpecializedSetup<cmds::%(name)s, 0>(false);""" | 8118 SpecializedSetup<cmds::%(name)s, 0>(false);""" |
8119 if func.IsUnsafe(): | 8119 if func.IsUnsafe(): |
8120 invalid_test += """ | 8120 invalid_test += """ |
8121 decoder_->set_unsafe_es3_apis_enabled(true);""" | 8121 decoder_->set_unsafe_es3_apis_enabled(true);""" |
8122 invalid_test += """ | 8122 invalid_test += """ |
8123 cmds::%(name)s cmd; | 8123 cmds::%(name)s cmd; |
8124 cmd.Init(%(args)s%(comma)skInvalidSharedMemoryId, shared_memory_offset_); | 8124 cmd.Init(%(args)s%(comma)skInvalidSharedMemoryId, shared_memory_offset_); |
8125 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); | 8125 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); |
8126 cmd.Init(%(args)s%(comma)sshared_memory_id_, kInvalidSharedMemoryOffset); | 8126 cmd.Init(%(args)s%(comma)sshared_memory_id_, kInvalidSharedMemoryOffset); |
8127 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));""" | 8127 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));""" |
8128 if func.IsUnsafe(): | 8128 if func.IsUnsafe(): |
8129 invalid_test += """ | 8129 invalid_test += """ |
8130 decoder_->set_unsafe_es3_apis_enabled(true);""" | 8130 decoder_->set_unsafe_es3_apis_enabled(true);""" |
8131 invalid_test += """ | 8131 invalid_test += """ |
8132 } | 8132 } |
8133 """ | 8133 """ |
8134 self.WriteValidUnitTest(func, file, invalid_test, { | 8134 self.WriteValidUnitTest(func, f, invalid_test, { |
8135 'comma': comma, | 8135 'comma': comma, |
8136 }, *extras) | 8136 }, *extras) |
8137 | 8137 |
8138 def WriteServiceImplementation(self, func, file): | 8138 def WriteServiceImplementation(self, func, f): |
8139 """Overrriden from TypeHandler.""" | 8139 """Overrriden from TypeHandler.""" |
8140 self.WriteServiceHandlerFunctionHeader(func, file) | 8140 self.WriteServiceHandlerFunctionHeader(func, f) |
8141 self.WriteHandlerExtensionCheck(func, file) | 8141 self.WriteHandlerExtensionCheck(func, f) |
8142 args = func.GetOriginalArgs() | 8142 args = func.GetOriginalArgs() |
8143 for arg in args: | 8143 for arg in args: |
8144 arg.WriteGetCode(file) | 8144 arg.WriteGetCode(f) |
8145 | 8145 |
8146 code = """ typedef cmds::%(func_name)s::Result Result; | 8146 code = """ typedef cmds::%(func_name)s::Result Result; |
8147 Result* result_dst = GetSharedMemoryAs<Result*>( | 8147 Result* result_dst = GetSharedMemoryAs<Result*>( |
8148 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 8148 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
8149 if (!result_dst) { | 8149 if (!result_dst) { |
8150 return error::kOutOfBounds; | 8150 return error::kOutOfBounds; |
8151 } | 8151 } |
8152 """ | 8152 """ |
8153 file.Write(code % {'func_name': func.name}) | 8153 f.write(code % {'func_name': func.name}) |
8154 func.WriteHandlerValidation(file) | 8154 func.WriteHandlerValidation(f) |
8155 if func.IsUnsafe(): | 8155 if func.IsUnsafe(): |
8156 assert func.GetInfo('id_mapping') | 8156 assert func.GetInfo('id_mapping') |
8157 assert len(func.GetInfo('id_mapping')) == 1 | 8157 assert len(func.GetInfo('id_mapping')) == 1 |
8158 assert len(args) == 1 | 8158 assert len(args) == 1 |
8159 id_type = func.GetInfo('id_mapping')[0] | 8159 id_type = func.GetInfo('id_mapping')[0] |
8160 file.Write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) | 8160 f.write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) |
8161 file.Write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % | 8161 f.write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % |
8162 (id_type, id_type.lower(), id_type.lower())) | 8162 (id_type, id_type.lower(), id_type.lower())) |
8163 else: | 8163 else: |
8164 file.Write(" *result_dst = %s(%s);\n" % | 8164 f.write(" *result_dst = %s(%s);\n" % |
8165 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 8165 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
8166 file.Write(" return error::kNoError;\n") | 8166 f.write(" return error::kNoError;\n") |
8167 file.Write("}\n") | 8167 f.write("}\n") |
8168 file.Write("\n") | 8168 f.write("\n") |
8169 | 8169 |
8170 def WriteGLES2Implementation(self, func, file): | 8170 def WriteGLES2Implementation(self, func, f): |
8171 """Overrriden from TypeHandler.""" | 8171 """Overrriden from TypeHandler.""" |
8172 impl_func = func.GetInfo('impl_func') | 8172 impl_func = func.GetInfo('impl_func') |
8173 if impl_func == None or impl_func == True: | 8173 if impl_func == None or impl_func == True: |
8174 error_value = func.GetInfo("error_value") or "GL_FALSE" | 8174 error_value = func.GetInfo("error_value") or "GL_FALSE" |
8175 file.Write("%s GLES2Implementation::%s(%s) {\n" % | 8175 f.write("%s GLES2Implementation::%s(%s) {\n" % |
8176 (func.return_type, func.original_name, | 8176 (func.return_type, func.original_name, |
8177 func.MakeTypedOriginalArgString(""))) | 8177 func.MakeTypedOriginalArgString(""))) |
8178 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 8178 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
8179 self.WriteTraceEvent(func, file) | 8179 self.WriteTraceEvent(func, f) |
8180 func.WriteDestinationInitalizationValidation(file) | 8180 func.WriteDestinationInitalizationValidation(f) |
8181 self.WriteClientGLCallLog(func, file) | 8181 self.WriteClientGLCallLog(func, f) |
8182 file.Write(" typedef cmds::%s::Result Result;\n" % func.name) | 8182 f.write(" typedef cmds::%s::Result Result;\n" % func.name) |
8183 file.Write(" Result* result = GetResultAs<Result*>();\n") | 8183 f.write(" Result* result = GetResultAs<Result*>();\n") |
8184 file.Write(" if (!result) {\n") | 8184 f.write(" if (!result) {\n") |
8185 file.Write(" return %s;\n" % error_value) | 8185 f.write(" return %s;\n" % error_value) |
8186 file.Write(" }\n") | 8186 f.write(" }\n") |
8187 file.Write(" *result = 0;\n") | 8187 f.write(" *result = 0;\n") |
8188 assert len(func.GetOriginalArgs()) == 1 | 8188 assert len(func.GetOriginalArgs()) == 1 |
8189 id_arg = func.GetOriginalArgs()[0] | 8189 id_arg = func.GetOriginalArgs()[0] |
8190 if id_arg.type == 'GLsync': | 8190 if id_arg.type == 'GLsync': |
8191 arg_string = "ToGLuint(%s)" % func.MakeOriginalArgString("") | 8191 arg_string = "ToGLuint(%s)" % func.MakeOriginalArgString("") |
8192 else: | 8192 else: |
8193 arg_string = func.MakeOriginalArgString("") | 8193 arg_string = func.MakeOriginalArgString("") |
8194 file.Write( | 8194 f.write( |
8195 " helper_->%s(%s, GetResultShmId(), GetResultShmOffset());\n" % | 8195 " helper_->%s(%s, GetResultShmId(), GetResultShmOffset());\n" % |
8196 (func.name, arg_string)) | 8196 (func.name, arg_string)) |
8197 file.Write(" WaitForCmd();\n") | 8197 f.write(" WaitForCmd();\n") |
8198 file.Write(" %s result_value = *result" % func.return_type) | 8198 f.write(" %s result_value = *result" % func.return_type) |
8199 if func.return_type == "GLboolean": | 8199 if func.return_type == "GLboolean": |
8200 file.Write(" != 0") | 8200 f.write(" != 0") |
8201 file.Write(';\n GPU_CLIENT_LOG("returned " << result_value);\n') | 8201 f.write(';\n GPU_CLIENT_LOG("returned " << result_value);\n') |
8202 file.Write(" CheckGLError();\n") | 8202 f.write(" CheckGLError();\n") |
8203 file.Write(" return result_value;\n") | 8203 f.write(" return result_value;\n") |
8204 file.Write("}\n") | 8204 f.write("}\n") |
8205 file.Write("\n") | 8205 f.write("\n") |
8206 | 8206 |
8207 def WriteGLES2ImplementationUnitTest(self, func, file): | 8207 def WriteGLES2ImplementationUnitTest(self, func, f): |
8208 """Overrriden from TypeHandler.""" | 8208 """Overrriden from TypeHandler.""" |
8209 client_test = func.GetInfo('client_test') | 8209 client_test = func.GetInfo('client_test') |
8210 if client_test == None or client_test == True: | 8210 if client_test == None or client_test == True: |
8211 code = """ | 8211 code = """ |
8212 TEST_F(GLES2ImplementationTest, %(name)s) { | 8212 TEST_F(GLES2ImplementationTest, %(name)s) { |
8213 struct Cmds { | 8213 struct Cmds { |
8214 cmds::%(name)s cmd; | 8214 cmds::%(name)s cmd; |
8215 }; | 8215 }; |
8216 | 8216 |
8217 Cmds expected; | 8217 Cmds expected; |
8218 ExpectedMemoryInfo result1 = | 8218 ExpectedMemoryInfo result1 = |
8219 GetExpectedResultMemory(sizeof(cmds::%(name)s::Result)); | 8219 GetExpectedResultMemory(sizeof(cmds::%(name)s::Result)); |
8220 expected.cmd.Init(%(cmd_id_value)s, result1.id, result1.offset); | 8220 expected.cmd.Init(%(cmd_id_value)s, result1.id, result1.offset); |
8221 | 8221 |
8222 EXPECT_CALL(*command_buffer(), OnFlush()) | 8222 EXPECT_CALL(*command_buffer(), OnFlush()) |
8223 .WillOnce(SetMemory(result1.ptr, uint32_t(GL_TRUE))) | 8223 .WillOnce(SetMemory(result1.ptr, uint32_t(GL_TRUE))) |
8224 .RetiresOnSaturation(); | 8224 .RetiresOnSaturation(); |
8225 | 8225 |
8226 GLboolean result = gl_->%(name)s(%(gl_id_value)s); | 8226 GLboolean result = gl_->%(name)s(%(gl_id_value)s); |
8227 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 8227 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
8228 EXPECT_TRUE(result); | 8228 EXPECT_TRUE(result); |
8229 } | 8229 } |
8230 """ | 8230 """ |
8231 args = func.GetOriginalArgs() | 8231 args = func.GetOriginalArgs() |
8232 assert len(args) == 1 | 8232 assert len(args) == 1 |
8233 file.Write(code % { | 8233 f.write(code % { |
8234 'name': func.name, | 8234 'name': func.name, |
8235 'cmd_id_value': args[0].GetValidClientSideCmdArg(func), | 8235 'cmd_id_value': args[0].GetValidClientSideCmdArg(func), |
8236 'gl_id_value': args[0].GetValidClientSideArg(func) }) | 8236 'gl_id_value': args[0].GetValidClientSideArg(func) }) |
8237 | 8237 |
8238 | 8238 |
8239 class STRnHandler(TypeHandler): | 8239 class STRnHandler(TypeHandler): |
8240 """Handler for GetProgramInfoLog, GetShaderInfoLog, GetShaderSource, and | 8240 """Handler for GetProgramInfoLog, GetShaderInfoLog, GetShaderSource, and |
8241 GetTranslatedShaderSourceANGLE.""" | 8241 GetTranslatedShaderSourceANGLE.""" |
8242 | 8242 |
8243 def __init__(self): | 8243 def __init__(self): |
8244 TypeHandler.__init__(self) | 8244 TypeHandler.__init__(self) |
8245 | 8245 |
8246 def InitFunction(self, func): | 8246 def InitFunction(self, func): |
8247 """Overrriden from TypeHandler.""" | 8247 """Overrriden from TypeHandler.""" |
8248 # remove all but the first cmd args. | 8248 # remove all but the first cmd args. |
8249 cmd_args = func.GetCmdArgs() | 8249 cmd_args = func.GetCmdArgs() |
8250 func.ClearCmdArgs() | 8250 func.ClearCmdArgs() |
8251 func.AddCmdArg(cmd_args[0]) | 8251 func.AddCmdArg(cmd_args[0]) |
8252 # add on a bucket id. | 8252 # add on a bucket id. |
8253 func.AddCmdArg(Argument('bucket_id', 'uint32_t')) | 8253 func.AddCmdArg(Argument('bucket_id', 'uint32_t')) |
8254 | 8254 |
8255 def WriteGLES2Implementation(self, func, file): | 8255 def WriteGLES2Implementation(self, func, f): |
8256 """Overrriden from TypeHandler.""" | 8256 """Overrriden from TypeHandler.""" |
8257 code_1 = """%(return_type)s GLES2Implementation::%(func_name)s(%(args)s) { | 8257 code_1 = """%(return_type)s GLES2Implementation::%(func_name)s(%(args)s) { |
8258 GPU_CLIENT_SINGLE_THREAD_CHECK(); | 8258 GPU_CLIENT_SINGLE_THREAD_CHECK(); |
8259 """ | 8259 """ |
8260 code_2 = """ GPU_CLIENT_LOG("[" << GetLogPrefix() | 8260 code_2 = """ GPU_CLIENT_LOG("[" << GetLogPrefix() |
8261 << "] gl%(func_name)s" << "(" | 8261 << "] gl%(func_name)s" << "(" |
8262 << %(arg0)s << ", " | 8262 << %(arg0)s << ", " |
8263 << %(arg1)s << ", " | 8263 << %(arg1)s << ", " |
8264 << static_cast<void*>(%(arg2)s) << ", " | 8264 << static_cast<void*>(%(arg2)s) << ", " |
8265 << static_cast<void*>(%(arg3)s) << ")"); | 8265 << static_cast<void*>(%(arg3)s) << ")"); |
(...skipping 23 matching lines...) Expand all Loading... |
8289 'args': func.MakeTypedOriginalArgString(""), | 8289 'args': func.MakeTypedOriginalArgString(""), |
8290 'id_name': args[0].name, | 8290 'id_name': args[0].name, |
8291 'bufsize_name': args[1].name, | 8291 'bufsize_name': args[1].name, |
8292 'length_name': args[2].name, | 8292 'length_name': args[2].name, |
8293 'dest_name': args[3].name, | 8293 'dest_name': args[3].name, |
8294 'arg0': args[0].name, | 8294 'arg0': args[0].name, |
8295 'arg1': args[1].name, | 8295 'arg1': args[1].name, |
8296 'arg2': args[2].name, | 8296 'arg2': args[2].name, |
8297 'arg3': args[3].name, | 8297 'arg3': args[3].name, |
8298 } | 8298 } |
8299 file.Write(code_1 % str_args) | 8299 f.write(code_1 % str_args) |
8300 func.WriteDestinationInitalizationValidation(file) | 8300 func.WriteDestinationInitalizationValidation(f) |
8301 file.Write(code_2 % str_args) | 8301 f.write(code_2 % str_args) |
8302 | 8302 |
8303 def WriteServiceUnitTest(self, func, file, *extras): | 8303 def WriteServiceUnitTest(self, func, f, *extras): |
8304 """Overrriden from TypeHandler.""" | 8304 """Overrriden from TypeHandler.""" |
8305 valid_test = """ | 8305 valid_test = """ |
8306 TEST_P(%(test_name)s, %(name)sValidArgs) { | 8306 TEST_P(%(test_name)s, %(name)sValidArgs) { |
8307 const char* kInfo = "hello"; | 8307 const char* kInfo = "hello"; |
8308 const uint32_t kBucketId = 123; | 8308 const uint32_t kBucketId = 123; |
8309 SpecializedSetup<cmds::%(name)s, 0>(true); | 8309 SpecializedSetup<cmds::%(name)s, 0>(true); |
8310 %(expect_len_code)s | 8310 %(expect_len_code)s |
8311 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) | 8311 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)) |
8312 .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)), | 8312 .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)), |
8313 SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1))); | 8313 SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1))); |
(...skipping 19 matching lines...) Expand all Loading... |
8333 'gl_args': '%s, strlen(kInfo) + 1, _, _' % | 8333 'gl_args': '%s, strlen(kInfo) + 1, _, _' % |
8334 args[0].GetValidGLArg(func), | 8334 args[0].GetValidGLArg(func), |
8335 'args': '%s, kBucketId' % args[0].GetValidArg(func), | 8335 'args': '%s, kBucketId' % args[0].GetValidArg(func), |
8336 'expect_len_code': '', | 8336 'expect_len_code': '', |
8337 } | 8337 } |
8338 if get_len_func and get_len_func[0:2] == 'gl': | 8338 if get_len_func and get_len_func[0:2] == 'gl': |
8339 sub['expect_len_code'] = ( | 8339 sub['expect_len_code'] = ( |
8340 " EXPECT_CALL(*gl_, %s(%s, %s, _))\n" | 8340 " EXPECT_CALL(*gl_, %s(%s, %s, _))\n" |
8341 " .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1));") % ( | 8341 " .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1));") % ( |
8342 get_len_func[2:], id_name, get_len_enum) | 8342 get_len_func[2:], id_name, get_len_enum) |
8343 self.WriteValidUnitTest(func, file, valid_test, sub, *extras) | 8343 self.WriteValidUnitTest(func, f, valid_test, sub, *extras) |
8344 | 8344 |
8345 invalid_test = """ | 8345 invalid_test = """ |
8346 TEST_P(%(test_name)s, %(name)sInvalidArgs) { | 8346 TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
8347 const uint32_t kBucketId = 123; | 8347 const uint32_t kBucketId = 123; |
8348 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _)) | 8348 EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _)) |
8349 .Times(0); | 8349 .Times(0); |
8350 cmds::%(name)s cmd; | 8350 cmds::%(name)s cmd; |
8351 cmd.Init(kInvalidClientId, kBucketId); | 8351 cmd.Init(kInvalidClientId, kBucketId); |
8352 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8352 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
8353 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 8353 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
8354 } | 8354 } |
8355 """ | 8355 """ |
8356 self.WriteValidUnitTest(func, file, invalid_test, *extras) | 8356 self.WriteValidUnitTest(func, f, invalid_test, *extras) |
8357 | 8357 |
8358 def WriteServiceImplementation(self, func, file): | 8358 def WriteServiceImplementation(self, func, f): |
8359 """Overrriden from TypeHandler.""" | 8359 """Overrriden from TypeHandler.""" |
8360 pass | 8360 pass |
8361 | 8361 |
8362 class NamedType(object): | 8362 class NamedType(object): |
8363 """A class that represents a type of an argument in a client function. | 8363 """A class that represents a type of an argument in a client function. |
8364 | 8364 |
8365 A type of an argument that is to be passed through in the command buffer | 8365 A type of an argument that is to be passed through in the command buffer |
8366 command. Currently used only for the arguments that are specificly named in | 8366 command. Currently used only for the arguments that are specificly named in |
8367 the 'cmd_buffer_functions.txt' file, mostly enums. | 8367 the 'cmd_buffer_functions.txt' f, mostly enums. |
8368 """ | 8368 """ |
8369 | 8369 |
8370 def __init__(self, info): | 8370 def __init__(self, info): |
8371 assert not 'is_complete' in info or info['is_complete'] == True | 8371 assert not 'is_complete' in info or info['is_complete'] == True |
8372 self.info = info | 8372 self.info = info |
8373 self.valid = info['valid'] | 8373 self.valid = info['valid'] |
8374 if 'invalid' in info: | 8374 if 'invalid' in info: |
8375 self.invalid = info['invalid'] | 8375 self.invalid = info['invalid'] |
8376 else: | 8376 else: |
8377 self.invalid = [] | 8377 self.invalid = [] |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8523 return ("---ERROR0---", "---ERROR2---", None) | 8523 return ("---ERROR0---", "---ERROR2---", None) |
8524 | 8524 |
8525 def GetLogArg(self): | 8525 def GetLogArg(self): |
8526 """Get argument appropriate for LOG macro.""" | 8526 """Get argument appropriate for LOG macro.""" |
8527 if self.type == 'GLboolean': | 8527 if self.type == 'GLboolean': |
8528 return 'GLES2Util::GetStringBool(%s)' % self.name | 8528 return 'GLES2Util::GetStringBool(%s)' % self.name |
8529 if self.type == 'GLenum': | 8529 if self.type == 'GLenum': |
8530 return 'GLES2Util::GetStringEnum(%s)' % self.name | 8530 return 'GLES2Util::GetStringEnum(%s)' % self.name |
8531 return self.name | 8531 return self.name |
8532 | 8532 |
8533 def WriteGetCode(self, file): | 8533 def WriteGetCode(self, f): |
8534 """Writes the code to get an argument from a command structure.""" | 8534 """Writes the code to get an argument from a command structure.""" |
8535 if self.type == 'GLsync': | 8535 if self.type == 'GLsync': |
8536 my_type = 'GLuint' | 8536 my_type = 'GLuint' |
8537 else: | 8537 else: |
8538 my_type = self.type | 8538 my_type = self.type |
8539 file.Write(" %s %s = static_cast<%s>(c.%s);\n" % | 8539 f.write(" %s %s = static_cast<%s>(c.%s);\n" % |
8540 (my_type, self.name, my_type, self.name)) | 8540 (my_type, self.name, my_type, self.name)) |
8541 | 8541 |
8542 def WriteValidationCode(self, file, func): | 8542 def WriteValidationCode(self, f, func): |
8543 """Writes the validation code for an argument.""" | 8543 """Writes the validation code for an argument.""" |
8544 pass | 8544 pass |
8545 | 8545 |
8546 def WriteClientSideValidationCode(self, file, func): | 8546 def WriteClientSideValidationCode(self, f, func): |
8547 """Writes the validation code for an argument.""" | 8547 """Writes the validation code for an argument.""" |
8548 pass | 8548 pass |
8549 | 8549 |
8550 def WriteDestinationInitalizationValidation(self, file, func): | 8550 def WriteDestinationInitalizationValidation(self, f, func): |
8551 """Writes the client side destintion initialization validation.""" | 8551 """Writes the client side destintion initialization validation.""" |
8552 pass | 8552 pass |
8553 | 8553 |
8554 def WriteDestinationInitalizationValidatationIfNeeded(self, file, func): | 8554 def WriteDestinationInitalizationValidatationIfNeeded(self, f, func): |
8555 """Writes the client side destintion initialization validation if needed.""" | 8555 """Writes the client side destintion initialization validation if needed.""" |
8556 parts = self.type.split(" ") | 8556 parts = self.type.split(" ") |
8557 if len(parts) > 1: | 8557 if len(parts) > 1: |
8558 return | 8558 return |
8559 if parts[0] in self.need_validation_: | 8559 if parts[0] in self.need_validation_: |
8560 file.Write( | 8560 f.write( |
8561 " GPU_CLIENT_VALIDATE_DESTINATION_%sINITALIZATION(%s, %s);\n" % | 8561 " GPU_CLIENT_VALIDATE_DESTINATION_%sINITALIZATION(%s, %s);\n" % |
8562 ("OPTIONAL_" if self.optional else "", self.type[:-1], self.name)) | 8562 ("OPTIONAL_" if self.optional else "", self.type[:-1], self.name)) |
8563 | 8563 |
8564 | 8564 |
8565 def WriteGetAddress(self, file): | 8565 def WriteGetAddress(self, f): |
8566 """Writes the code to get the address this argument refers to.""" | 8566 """Writes the code to get the address this argument refers to.""" |
8567 pass | 8567 pass |
8568 | 8568 |
8569 def GetImmediateVersion(self): | 8569 def GetImmediateVersion(self): |
8570 """Gets the immediate version of this argument.""" | 8570 """Gets the immediate version of this argument.""" |
8571 return self | 8571 return self |
8572 | 8572 |
8573 def GetBucketVersion(self): | 8573 def GetBucketVersion(self): |
8574 """Gets the bucket version of this argument.""" | 8574 """Gets the bucket version of this argument.""" |
8575 return self | 8575 return self |
(...skipping 21 matching lines...) Expand all Loading... |
8597 """Gets a valid GL value for this argument.""" | 8597 """Gets a valid GL value for this argument.""" |
8598 return 'true' | 8598 return 'true' |
8599 | 8599 |
8600 | 8600 |
8601 class UniformLocationArgument(Argument): | 8601 class UniformLocationArgument(Argument): |
8602 """class for uniform locations.""" | 8602 """class for uniform locations.""" |
8603 | 8603 |
8604 def __init__(self, name): | 8604 def __init__(self, name): |
8605 Argument.__init__(self, name, "GLint") | 8605 Argument.__init__(self, name, "GLint") |
8606 | 8606 |
8607 def WriteGetCode(self, file): | 8607 def WriteGetCode(self, f): |
8608 """Writes the code to get an argument from a command structure.""" | 8608 """Writes the code to get an argument from a command structure.""" |
8609 code = """ %s %s = static_cast<%s>(c.%s); | 8609 code = """ %s %s = static_cast<%s>(c.%s); |
8610 """ | 8610 """ |
8611 file.Write(code % (self.type, self.name, self.type, self.name)) | 8611 f.write(code % (self.type, self.name, self.type, self.name)) |
8612 | 8612 |
8613 class DataSizeArgument(Argument): | 8613 class DataSizeArgument(Argument): |
8614 """class for data_size which Bucket commands do not need.""" | 8614 """class for data_size which Bucket commands do not need.""" |
8615 | 8615 |
8616 def __init__(self, name): | 8616 def __init__(self, name): |
8617 Argument.__init__(self, name, "uint32_t") | 8617 Argument.__init__(self, name, "uint32_t") |
8618 | 8618 |
8619 def GetBucketVersion(self): | 8619 def GetBucketVersion(self): |
8620 return None | 8620 return None |
8621 | 8621 |
8622 | 8622 |
8623 class SizeArgument(Argument): | 8623 class SizeArgument(Argument): |
8624 """class for GLsizei and GLsizeiptr.""" | 8624 """class for GLsizei and GLsizeiptr.""" |
8625 | 8625 |
8626 def __init__(self, name, type): | 8626 def __init__(self, name, type): |
8627 Argument.__init__(self, name, type) | 8627 Argument.__init__(self, name, type) |
8628 | 8628 |
8629 def GetNumInvalidValues(self, func): | 8629 def GetNumInvalidValues(self, func): |
8630 """overridden from Argument.""" | 8630 """overridden from Argument.""" |
8631 if func.IsImmediate(): | 8631 if func.IsImmediate(): |
8632 return 0 | 8632 return 0 |
8633 return 1 | 8633 return 1 |
8634 | 8634 |
8635 def GetInvalidArg(self, index): | 8635 def GetInvalidArg(self, index): |
8636 """overridden from Argument.""" | 8636 """overridden from Argument.""" |
8637 return ("-1", "kNoError", "GL_INVALID_VALUE") | 8637 return ("-1", "kNoError", "GL_INVALID_VALUE") |
8638 | 8638 |
8639 def WriteValidationCode(self, file, func): | 8639 def WriteValidationCode(self, f, func): |
8640 """overridden from Argument.""" | 8640 """overridden from Argument.""" |
8641 if func.IsUnsafe(): | 8641 if func.IsUnsafe(): |
8642 return | 8642 return |
8643 code = """ if (%(var_name)s < 0) { | 8643 code = """ if (%(var_name)s < 0) { |
8644 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0"); | 8644 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0"); |
8645 return error::kNoError; | 8645 return error::kNoError; |
8646 } | 8646 } |
8647 """ | 8647 """ |
8648 file.Write(code % { | 8648 f.write(code % { |
8649 "var_name": self.name, | 8649 "var_name": self.name, |
8650 "func_name": func.original_name, | 8650 "func_name": func.original_name, |
8651 }) | 8651 }) |
8652 | 8652 |
8653 def WriteClientSideValidationCode(self, file, func): | 8653 def WriteClientSideValidationCode(self, f, func): |
8654 """overridden from Argument.""" | 8654 """overridden from Argument.""" |
8655 code = """ if (%(var_name)s < 0) { | 8655 code = """ if (%(var_name)s < 0) { |
8656 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0"); | 8656 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0"); |
8657 return; | 8657 return; |
8658 } | 8658 } |
8659 """ | 8659 """ |
8660 file.Write(code % { | 8660 f.write(code % { |
8661 "var_name": self.name, | 8661 "var_name": self.name, |
8662 "func_name": func.original_name, | 8662 "func_name": func.original_name, |
8663 }) | 8663 }) |
8664 | 8664 |
8665 | 8665 |
8666 class SizeNotNegativeArgument(SizeArgument): | 8666 class SizeNotNegativeArgument(SizeArgument): |
8667 """class for GLsizeiNotNegative. It's NEVER allowed to be negative""" | 8667 """class for GLsizeiNotNegative. It's NEVER allowed to be negative""" |
8668 | 8668 |
8669 def __init__(self, name, type, gl_type): | 8669 def __init__(self, name, type, gl_type): |
8670 SizeArgument.__init__(self, name, gl_type) | 8670 SizeArgument.__init__(self, name, gl_type) |
8671 | 8671 |
8672 def GetInvalidArg(self, index): | 8672 def GetInvalidArg(self, index): |
8673 """overridden from SizeArgument.""" | 8673 """overridden from SizeArgument.""" |
8674 return ("-1", "kOutOfBounds", "GL_NO_ERROR") | 8674 return ("-1", "kOutOfBounds", "GL_NO_ERROR") |
8675 | 8675 |
8676 def WriteValidationCode(self, file, func): | 8676 def WriteValidationCode(self, f, func): |
8677 """overridden from SizeArgument.""" | 8677 """overridden from SizeArgument.""" |
8678 pass | 8678 pass |
8679 | 8679 |
8680 | 8680 |
8681 class EnumBaseArgument(Argument): | 8681 class EnumBaseArgument(Argument): |
8682 """Base class for EnumArgument, IntArgument, BitfieldArgument, and | 8682 """Base class for EnumArgument, IntArgument, BitfieldArgument, and |
8683 ValidatedBoolArgument.""" | 8683 ValidatedBoolArgument.""" |
8684 | 8684 |
8685 def __init__(self, name, gl_type, type, gl_error): | 8685 def __init__(self, name, gl_type, type, gl_error): |
8686 Argument.__init__(self, name, gl_type) | 8686 Argument.__init__(self, name, gl_type) |
8687 | 8687 |
8688 self.local_type = type | 8688 self.local_type = type |
8689 self.gl_error = gl_error | 8689 self.gl_error = gl_error |
8690 name = type[len(gl_type):] | 8690 name = type[len(gl_type):] |
8691 self.type_name = name | 8691 self.type_name = name |
8692 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) | 8692 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) |
8693 | 8693 |
8694 def IsConstant(self): | 8694 def IsConstant(self): |
8695 return self.named_type.IsConstant() | 8695 return self.named_type.IsConstant() |
8696 | 8696 |
8697 def GetConstantValue(self): | 8697 def GetConstantValue(self): |
8698 return self.named_type.GetConstantValue() | 8698 return self.named_type.GetConstantValue() |
8699 | 8699 |
8700 def WriteValidationCode(self, file, func): | 8700 def WriteValidationCode(self, f, func): |
8701 if func.IsUnsafe(): | 8701 if func.IsUnsafe(): |
8702 return | 8702 return |
8703 if self.named_type.IsConstant(): | 8703 if self.named_type.IsConstant(): |
8704 return | 8704 return |
8705 file.Write(" if (!validators_->%s.IsValid(%s)) {\n" % | 8705 f.write(" if (!validators_->%s.IsValid(%s)) {\n" % |
8706 (ToUnderscore(self.type_name), self.name)) | 8706 (ToUnderscore(self.type_name), self.name)) |
8707 if self.gl_error == "GL_INVALID_ENUM": | 8707 if self.gl_error == "GL_INVALID_ENUM": |
8708 file.Write( | 8708 f.write( |
8709 " LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" % | 8709 " LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" % |
8710 (func.original_name, self.name, self.name)) | 8710 (func.original_name, self.name, self.name)) |
8711 else: | 8711 else: |
8712 file.Write( | 8712 f.write( |
8713 " LOCAL_SET_GL_ERROR(%s, \"gl%s\", \"%s %s\");\n" % | 8713 " LOCAL_SET_GL_ERROR(%s, \"gl%s\", \"%s %s\");\n" % |
8714 (self.gl_error, func.original_name, self.name, self.gl_error)) | 8714 (self.gl_error, func.original_name, self.name, self.gl_error)) |
8715 file.Write(" return error::kNoError;\n") | 8715 f.write(" return error::kNoError;\n") |
8716 file.Write(" }\n") | 8716 f.write(" }\n") |
8717 | 8717 |
8718 def WriteClientSideValidationCode(self, file, func): | 8718 def WriteClientSideValidationCode(self, f, func): |
8719 if not self.named_type.IsConstant(): | 8719 if not self.named_type.IsConstant(): |
8720 return | 8720 return |
8721 file.Write(" if (%s != %s) {" % (self.name, | 8721 f.write(" if (%s != %s) {" % (self.name, |
8722 self.GetConstantValue())) | 8722 self.GetConstantValue())) |
8723 file.Write( | 8723 f.write( |
8724 " SetGLError(%s, \"gl%s\", \"%s %s\");\n" % | 8724 " SetGLError(%s, \"gl%s\", \"%s %s\");\n" % |
8725 (self.gl_error, func.original_name, self.name, self.gl_error)) | 8725 (self.gl_error, func.original_name, self.name, self.gl_error)) |
8726 if func.return_type == "void": | 8726 if func.return_type == "void": |
8727 file.Write(" return;\n") | 8727 f.write(" return;\n") |
8728 else: | 8728 else: |
8729 file.Write(" return %s;\n" % func.GetErrorReturnString()) | 8729 f.write(" return %s;\n" % func.GetErrorReturnString()) |
8730 file.Write(" }\n") | 8730 f.write(" }\n") |
8731 | 8731 |
8732 def GetValidArg(self, func): | 8732 def GetValidArg(self, func): |
8733 valid_arg = func.GetValidArg(self) | 8733 valid_arg = func.GetValidArg(self) |
8734 if valid_arg != None: | 8734 if valid_arg != None: |
8735 return valid_arg | 8735 return valid_arg |
8736 valid = self.named_type.GetValidValues() | 8736 valid = self.named_type.GetValidValues() |
8737 if valid: | 8737 if valid: |
8738 num_valid = len(valid) | 8738 num_valid = len(valid) |
8739 return valid[0] | 8739 return valid[0] |
8740 | 8740 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8847 | 8847 |
8848 def GetPointedType(self): | 8848 def GetPointedType(self): |
8849 match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type) | 8849 match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type) |
8850 assert match | 8850 assert match |
8851 return match.groupdict()['element_type'] | 8851 return match.groupdict()['element_type'] |
8852 | 8852 |
8853 def AddCmdArgs(self, args): | 8853 def AddCmdArgs(self, args): |
8854 """Overridden from Argument.""" | 8854 """Overridden from Argument.""" |
8855 pass | 8855 pass |
8856 | 8856 |
8857 def WriteGetCode(self, file): | 8857 def WriteGetCode(self, f): |
8858 """Overridden from Argument.""" | 8858 """Overridden from Argument.""" |
8859 file.Write( | 8859 f.write( |
8860 " %s %s = GetImmediateDataAs<%s>(\n" % | 8860 " %s %s = GetImmediateDataAs<%s>(\n" % |
8861 (self.type, self.name, self.type)) | 8861 (self.type, self.name, self.type)) |
8862 file.Write(" c, data_size, immediate_data_size);\n") | 8862 f.write(" c, data_size, immediate_data_size);\n") |
8863 | 8863 |
8864 def WriteValidationCode(self, file, func): | 8864 def WriteValidationCode(self, f, func): |
8865 """Overridden from Argument.""" | 8865 """Overridden from Argument.""" |
8866 if self.optional: | 8866 if self.optional: |
8867 return | 8867 return |
8868 file.Write(" if (%s == NULL) {\n" % self.name) | 8868 f.write(" if (%s == NULL) {\n" % self.name) |
8869 file.Write(" return error::kOutOfBounds;\n") | 8869 f.write(" return error::kOutOfBounds;\n") |
8870 file.Write(" }\n") | 8870 f.write(" }\n") |
8871 | 8871 |
8872 def GetImmediateVersion(self): | 8872 def GetImmediateVersion(self): |
8873 """Overridden from Argument.""" | 8873 """Overridden from Argument.""" |
8874 return None | 8874 return None |
8875 | 8875 |
8876 def WriteDestinationInitalizationValidation(self, file, func): | 8876 def WriteDestinationInitalizationValidation(self, f, func): |
8877 """Overridden from Argument.""" | 8877 """Overridden from Argument.""" |
8878 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) | 8878 self.WriteDestinationInitalizationValidatationIfNeeded(f, func) |
8879 | 8879 |
8880 def GetLogArg(self): | 8880 def GetLogArg(self): |
8881 """Overridden from Argument.""" | 8881 """Overridden from Argument.""" |
8882 return "static_cast<const void*>(%s)" % self.name | 8882 return "static_cast<const void*>(%s)" % self.name |
8883 | 8883 |
8884 | 8884 |
8885 class PointerArgument(Argument): | 8885 class PointerArgument(Argument): |
8886 """A class that represents a pointer argument to a function.""" | 8886 """A class that represents a pointer argument to a function.""" |
8887 | 8887 |
8888 def __init__(self, name, type): | 8888 def __init__(self, name, type): |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8923 | 8923 |
8924 def GetLogArg(self): | 8924 def GetLogArg(self): |
8925 """Overridden from Argument.""" | 8925 """Overridden from Argument.""" |
8926 return "static_cast<const void*>(%s)" % self.name | 8926 return "static_cast<const void*>(%s)" % self.name |
8927 | 8927 |
8928 def AddCmdArgs(self, args): | 8928 def AddCmdArgs(self, args): |
8929 """Overridden from Argument.""" | 8929 """Overridden from Argument.""" |
8930 args.append(Argument("%s_shm_id" % self.name, 'uint32_t')) | 8930 args.append(Argument("%s_shm_id" % self.name, 'uint32_t')) |
8931 args.append(Argument("%s_shm_offset" % self.name, 'uint32_t')) | 8931 args.append(Argument("%s_shm_offset" % self.name, 'uint32_t')) |
8932 | 8932 |
8933 def WriteGetCode(self, file): | 8933 def WriteGetCode(self, f): |
8934 """Overridden from Argument.""" | 8934 """Overridden from Argument.""" |
8935 file.Write( | 8935 f.write( |
8936 " %s %s = GetSharedMemoryAs<%s>(\n" % | 8936 " %s %s = GetSharedMemoryAs<%s>(\n" % |
8937 (self.type, self.name, self.type)) | 8937 (self.type, self.name, self.type)) |
8938 file.Write( | 8938 f.write( |
8939 " c.%s_shm_id, c.%s_shm_offset, data_size);\n" % | 8939 " c.%s_shm_id, c.%s_shm_offset, data_size);\n" % |
8940 (self.name, self.name)) | 8940 (self.name, self.name)) |
8941 | 8941 |
8942 def WriteGetAddress(self, file): | 8942 def WriteGetAddress(self, f): |
8943 """Overridden from Argument.""" | 8943 """Overridden from Argument.""" |
8944 file.Write( | 8944 f.write( |
8945 " %s %s = GetSharedMemoryAs<%s>(\n" % | 8945 " %s %s = GetSharedMemoryAs<%s>(\n" % |
8946 (self.type, self.name, self.type)) | 8946 (self.type, self.name, self.type)) |
8947 file.Write( | 8947 f.write( |
8948 " %s_shm_id, %s_shm_offset, %s_size);\n" % | 8948 " %s_shm_id, %s_shm_offset, %s_size);\n" % |
8949 (self.name, self.name, self.name)) | 8949 (self.name, self.name, self.name)) |
8950 | 8950 |
8951 def WriteValidationCode(self, file, func): | 8951 def WriteValidationCode(self, f, func): |
8952 """Overridden from Argument.""" | 8952 """Overridden from Argument.""" |
8953 if self.optional: | 8953 if self.optional: |
8954 return | 8954 return |
8955 file.Write(" if (%s == NULL) {\n" % self.name) | 8955 f.write(" if (%s == NULL) {\n" % self.name) |
8956 file.Write(" return error::kOutOfBounds;\n") | 8956 f.write(" return error::kOutOfBounds;\n") |
8957 file.Write(" }\n") | 8957 f.write(" }\n") |
8958 | 8958 |
8959 def GetImmediateVersion(self): | 8959 def GetImmediateVersion(self): |
8960 """Overridden from Argument.""" | 8960 """Overridden from Argument.""" |
8961 return ImmediatePointerArgument(self.name, self.type) | 8961 return ImmediatePointerArgument(self.name, self.type) |
8962 | 8962 |
8963 def GetBucketVersion(self): | 8963 def GetBucketVersion(self): |
8964 """Overridden from Argument.""" | 8964 """Overridden from Argument.""" |
8965 if self.type.find('char') >= 0: | 8965 if self.type.find('char') >= 0: |
8966 if self.IsPointer2D(): | 8966 if self.IsPointer2D(): |
8967 return InputStringArrayBucketArgument(self.name, self.type) | 8967 return InputStringArrayBucketArgument(self.name, self.type) |
8968 return InputStringBucketArgument(self.name, self.type) | 8968 return InputStringBucketArgument(self.name, self.type) |
8969 return BucketPointerArgument(self.name, self.type) | 8969 return BucketPointerArgument(self.name, self.type) |
8970 | 8970 |
8971 def WriteDestinationInitalizationValidation(self, file, func): | 8971 def WriteDestinationInitalizationValidation(self, f, func): |
8972 """Overridden from Argument.""" | 8972 """Overridden from Argument.""" |
8973 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) | 8973 self.WriteDestinationInitalizationValidatationIfNeeded(f, func) |
8974 | 8974 |
8975 | 8975 |
8976 class BucketPointerArgument(PointerArgument): | 8976 class BucketPointerArgument(PointerArgument): |
8977 """A class that represents an bucket argument to a function.""" | 8977 """A class that represents an bucket argument to a function.""" |
8978 | 8978 |
8979 def __init__(self, name, type): | 8979 def __init__(self, name, type): |
8980 Argument.__init__(self, name, type) | 8980 Argument.__init__(self, name, type) |
8981 | 8981 |
8982 def AddCmdArgs(self, args): | 8982 def AddCmdArgs(self, args): |
8983 """Overridden from Argument.""" | 8983 """Overridden from Argument.""" |
8984 pass | 8984 pass |
8985 | 8985 |
8986 def WriteGetCode(self, file): | 8986 def WriteGetCode(self, f): |
8987 """Overridden from Argument.""" | 8987 """Overridden from Argument.""" |
8988 file.Write( | 8988 f.write( |
8989 " %s %s = bucket->GetData(0, data_size);\n" % | 8989 " %s %s = bucket->GetData(0, data_size);\n" % |
8990 (self.type, self.name)) | 8990 (self.type, self.name)) |
8991 | 8991 |
8992 def WriteValidationCode(self, file, func): | 8992 def WriteValidationCode(self, f, func): |
8993 """Overridden from Argument.""" | 8993 """Overridden from Argument.""" |
8994 pass | 8994 pass |
8995 | 8995 |
8996 def GetImmediateVersion(self): | 8996 def GetImmediateVersion(self): |
8997 """Overridden from Argument.""" | 8997 """Overridden from Argument.""" |
8998 return None | 8998 return None |
8999 | 8999 |
9000 def WriteDestinationInitalizationValidation(self, file, func): | 9000 def WriteDestinationInitalizationValidation(self, f, func): |
9001 """Overridden from Argument.""" | 9001 """Overridden from Argument.""" |
9002 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) | 9002 self.WriteDestinationInitalizationValidatationIfNeeded(f, func) |
9003 | 9003 |
9004 def GetLogArg(self): | 9004 def GetLogArg(self): |
9005 """Overridden from Argument.""" | 9005 """Overridden from Argument.""" |
9006 return "static_cast<const void*>(%s)" % self.name | 9006 return "static_cast<const void*>(%s)" % self.name |
9007 | 9007 |
9008 | 9008 |
9009 class InputStringBucketArgument(Argument): | 9009 class InputStringBucketArgument(Argument): |
9010 """A string input argument where the string is passed in a bucket.""" | 9010 """A string input argument where the string is passed in a bucket.""" |
9011 | 9011 |
9012 def __init__(self, name, type): | 9012 def __init__(self, name, type): |
9013 Argument.__init__(self, name + "_bucket_id", "uint32_t") | 9013 Argument.__init__(self, name + "_bucket_id", "uint32_t") |
9014 | 9014 |
9015 def IsPointer(self): | 9015 def IsPointer(self): |
9016 """Overridden from Argument.""" | 9016 """Overridden from Argument.""" |
9017 return True | 9017 return True |
9018 | 9018 |
9019 def IsPointer2D(self): | 9019 def IsPointer2D(self): |
9020 """Overridden from Argument.""" | 9020 """Overridden from Argument.""" |
9021 return False | 9021 return False |
9022 | 9022 |
9023 | 9023 |
9024 class InputStringArrayBucketArgument(Argument): | 9024 class InputStringArrayBucketArgument(Argument): |
9025 """A string array input argument where the strings are passed in a bucket.""" | 9025 """A string array input argument where the strings are passed in a bucket.""" |
9026 | 9026 |
9027 def __init__(self, name, type): | 9027 def __init__(self, name, type): |
9028 Argument.__init__(self, name + "_bucket_id", "uint32_t") | 9028 Argument.__init__(self, name + "_bucket_id", "uint32_t") |
9029 self._original_name = name | 9029 self._original_name = name |
9030 | 9030 |
9031 def WriteGetCode(self, file): | 9031 def WriteGetCode(self, f): |
9032 """Overridden from Argument.""" | 9032 """Overridden from Argument.""" |
9033 code = """ | 9033 code = """ |
9034 Bucket* bucket = GetBucket(c.%(name)s); | 9034 Bucket* bucket = GetBucket(c.%(name)s); |
9035 if (!bucket) { | 9035 if (!bucket) { |
9036 return error::kInvalidArguments; | 9036 return error::kInvalidArguments; |
9037 } | 9037 } |
9038 GLsizei count = 0; | 9038 GLsizei count = 0; |
9039 std::vector<char*> strs; | 9039 std::vector<char*> strs; |
9040 std::vector<GLint> len; | 9040 std::vector<GLint> len; |
9041 if (!bucket->GetAsStrings(&count, &strs, &len)) { | 9041 if (!bucket->GetAsStrings(&count, &strs, &len)) { |
9042 return error::kInvalidArguments; | 9042 return error::kInvalidArguments; |
9043 } | 9043 } |
9044 const char** %(original_name)s = | 9044 const char** %(original_name)s = |
9045 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; | 9045 strs.size() > 0 ? const_cast<const char**>(&strs[0]) : NULL; |
9046 const GLint* length = | 9046 const GLint* length = |
9047 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; | 9047 len.size() > 0 ? const_cast<const GLint*>(&len[0]) : NULL; |
9048 (void)length; | 9048 (void)length; |
9049 """ | 9049 """ |
9050 file.Write(code % { | 9050 f.write(code % { |
9051 'name': self.name, | 9051 'name': self.name, |
9052 'original_name': self._original_name, | 9052 'original_name': self._original_name, |
9053 }) | 9053 }) |
9054 | 9054 |
9055 def GetValidArg(self, func): | 9055 def GetValidArg(self, func): |
9056 return "kNameBucketId" | 9056 return "kNameBucketId" |
9057 | 9057 |
9058 def GetValidGLArg(self, func): | 9058 def GetValidGLArg(self, func): |
9059 return "_" | 9059 return "_" |
9060 | 9060 |
(...skipping 11 matching lines...) Expand all Loading... |
9072 | 9072 |
9073 def __init__(self, name, type): | 9073 def __init__(self, name, type): |
9074 match = re.match("(GLid\w+)", type) | 9074 match = re.match("(GLid\w+)", type) |
9075 self.resource_type = match.group(1)[4:] | 9075 self.resource_type = match.group(1)[4:] |
9076 if self.resource_type == "Sync": | 9076 if self.resource_type == "Sync": |
9077 type = type.replace(match.group(1), "GLsync") | 9077 type = type.replace(match.group(1), "GLsync") |
9078 else: | 9078 else: |
9079 type = type.replace(match.group(1), "GLuint") | 9079 type = type.replace(match.group(1), "GLuint") |
9080 Argument.__init__(self, name, type) | 9080 Argument.__init__(self, name, type) |
9081 | 9081 |
9082 def WriteGetCode(self, file): | 9082 def WriteGetCode(self, f): |
9083 """Overridden from Argument.""" | 9083 """Overridden from Argument.""" |
9084 if self.type == "GLsync": | 9084 if self.type == "GLsync": |
9085 my_type = "GLuint" | 9085 my_type = "GLuint" |
9086 else: | 9086 else: |
9087 my_type = self.type | 9087 my_type = self.type |
9088 file.Write(" %s %s = c.%s;\n" % (my_type, self.name, self.name)) | 9088 f.write(" %s %s = c.%s;\n" % (my_type, self.name, self.name)) |
9089 | 9089 |
9090 def GetValidArg(self, func): | 9090 def GetValidArg(self, func): |
9091 return "client_%s_id_" % self.resource_type.lower() | 9091 return "client_%s_id_" % self.resource_type.lower() |
9092 | 9092 |
9093 def GetValidGLArg(self, func): | 9093 def GetValidGLArg(self, func): |
9094 if self.resource_type == "Sync": | 9094 if self.resource_type == "Sync": |
9095 return "reinterpret_cast<GLsync>(kService%sId)" % self.resource_type | 9095 return "reinterpret_cast<GLsync>(kService%sId)" % self.resource_type |
9096 return "kService%sId" % self.resource_type | 9096 return "kService%sId" % self.resource_type |
9097 | 9097 |
9098 | 9098 |
9099 class ResourceIdBindArgument(Argument): | 9099 class ResourceIdBindArgument(Argument): |
9100 """Represents a resource id argument to a bind function.""" | 9100 """Represents a resource id argument to a bind function.""" |
9101 | 9101 |
9102 def __init__(self, name, type): | 9102 def __init__(self, name, type): |
9103 match = re.match("(GLidBind\w+)", type) | 9103 match = re.match("(GLidBind\w+)", type) |
9104 self.resource_type = match.group(1)[8:] | 9104 self.resource_type = match.group(1)[8:] |
9105 type = type.replace(match.group(1), "GLuint") | 9105 type = type.replace(match.group(1), "GLuint") |
9106 Argument.__init__(self, name, type) | 9106 Argument.__init__(self, name, type) |
9107 | 9107 |
9108 def WriteGetCode(self, file): | 9108 def WriteGetCode(self, f): |
9109 """Overridden from Argument.""" | 9109 """Overridden from Argument.""" |
9110 code = """ %(type)s %(name)s = c.%(name)s; | 9110 code = """ %(type)s %(name)s = c.%(name)s; |
9111 """ | 9111 """ |
9112 file.Write(code % {'type': self.type, 'name': self.name}) | 9112 f.write(code % {'type': self.type, 'name': self.name}) |
9113 | 9113 |
9114 def GetValidArg(self, func): | 9114 def GetValidArg(self, func): |
9115 return "client_%s_id_" % self.resource_type.lower() | 9115 return "client_%s_id_" % self.resource_type.lower() |
9116 | 9116 |
9117 def GetValidGLArg(self, func): | 9117 def GetValidGLArg(self, func): |
9118 return "kService%sId" % self.resource_type | 9118 return "kService%sId" % self.resource_type |
9119 | 9119 |
9120 | 9120 |
9121 class ResourceIdZeroArgument(Argument): | 9121 class ResourceIdZeroArgument(Argument): |
9122 """Represents a resource id argument to a function that can be zero.""" | 9122 """Represents a resource id argument to a function that can be zero.""" |
9123 | 9123 |
9124 def __init__(self, name, type): | 9124 def __init__(self, name, type): |
9125 match = re.match("(GLidZero\w+)", type) | 9125 match = re.match("(GLidZero\w+)", type) |
9126 self.resource_type = match.group(1)[8:] | 9126 self.resource_type = match.group(1)[8:] |
9127 type = type.replace(match.group(1), "GLuint") | 9127 type = type.replace(match.group(1), "GLuint") |
9128 Argument.__init__(self, name, type) | 9128 Argument.__init__(self, name, type) |
9129 | 9129 |
9130 def WriteGetCode(self, file): | 9130 def WriteGetCode(self, f): |
9131 """Overridden from Argument.""" | 9131 """Overridden from Argument.""" |
9132 file.Write(" %s %s = c.%s;\n" % (self.type, self.name, self.name)) | 9132 f.write(" %s %s = c.%s;\n" % (self.type, self.name, self.name)) |
9133 | 9133 |
9134 def GetValidArg(self, func): | 9134 def GetValidArg(self, func): |
9135 return "client_%s_id_" % self.resource_type.lower() | 9135 return "client_%s_id_" % self.resource_type.lower() |
9136 | 9136 |
9137 def GetValidGLArg(self, func): | 9137 def GetValidGLArg(self, func): |
9138 return "kService%sId" % self.resource_type | 9138 return "kService%sId" % self.resource_type |
9139 | 9139 |
9140 def GetNumInvalidValues(self, func): | 9140 def GetNumInvalidValues(self, func): |
9141 """returns the number of invalid values to be tested.""" | 9141 """returns the number of invalid values to be tested.""" |
9142 return 1 | 9142 return 1 |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9466 args = self.GetInitArgs() | 9466 args = self.GetInitArgs() |
9467 arg_string = ", ".join( | 9467 arg_string = ", ".join( |
9468 ["%s%s" % (prefix, arg.name) for arg in args]) | 9468 ["%s%s" % (prefix, arg.name) for arg in args]) |
9469 return self._MaybePrependComma(arg_string, add_comma) | 9469 return self._MaybePrependComma(arg_string, add_comma) |
9470 | 9470 |
9471 def MakeLogArgString(self): | 9471 def MakeLogArgString(self): |
9472 """Makes a string of the arguments for the LOG macros""" | 9472 """Makes a string of the arguments for the LOG macros""" |
9473 args = self.GetOriginalArgs() | 9473 args = self.GetOriginalArgs() |
9474 return ' << ", " << '.join([arg.GetLogArg() for arg in args]) | 9474 return ' << ", " << '.join([arg.GetLogArg() for arg in args]) |
9475 | 9475 |
9476 def WriteCommandDescription(self, file): | 9476 def WriteCommandDescription(self, f): |
9477 """Writes a description of the command.""" | 9477 """Writes a description of the command.""" |
9478 file.Write("//! Command that corresponds to gl%s.\n" % self.original_name) | 9478 f.write("//! Command that corresponds to gl%s.\n" % self.original_name) |
9479 | 9479 |
9480 def WriteHandlerValidation(self, file): | 9480 def WriteHandlerValidation(self, f): |
9481 """Writes validation code for the function.""" | 9481 """Writes validation code for the function.""" |
9482 for arg in self.GetOriginalArgs(): | 9482 for arg in self.GetOriginalArgs(): |
9483 arg.WriteValidationCode(file, self) | 9483 arg.WriteValidationCode(f, self) |
9484 self.WriteValidationCode(file) | 9484 self.WriteValidationCode(f) |
9485 | 9485 |
9486 def WriteHandlerImplementation(self, file): | 9486 def WriteHandlerImplementation(self, f): |
9487 """Writes the handler implementation for this command.""" | 9487 """Writes the handler implementation for this command.""" |
9488 self.type_handler.WriteHandlerImplementation(self, file) | 9488 self.type_handler.WriteHandlerImplementation(self, f) |
9489 | 9489 |
9490 def WriteValidationCode(self, file): | 9490 def WriteValidationCode(self, f): |
9491 """Writes the validation code for a command.""" | 9491 """Writes the validation code for a command.""" |
9492 pass | 9492 pass |
9493 | 9493 |
9494 def WriteCmdFlag(self, file): | 9494 def WriteCmdFlag(self, f): |
9495 """Writes the cmd cmd_flags constant.""" | 9495 """Writes the cmd cmd_flags constant.""" |
9496 flags = [] | 9496 flags = [] |
9497 # By default trace only at the highest level 3. | 9497 # By default trace only at the highest level 3. |
9498 trace_level = int(self.GetInfo('trace_level', default = 3)) | 9498 trace_level = int(self.GetInfo('trace_level', default = 3)) |
9499 if trace_level not in xrange(0, 4): | 9499 if trace_level not in xrange(0, 4): |
9500 raise KeyError("Unhandled trace_level: %d" % trace_level) | 9500 raise KeyError("Unhandled trace_level: %d" % trace_level) |
9501 | 9501 |
9502 flags.append('CMD_FLAG_SET_TRACE_LEVEL(%d)' % trace_level) | 9502 flags.append('CMD_FLAG_SET_TRACE_LEVEL(%d)' % trace_level) |
9503 | 9503 |
9504 if len(flags) > 0: | 9504 if len(flags) > 0: |
9505 cmd_flags = ' | '.join(flags) | 9505 cmd_flags = ' | '.join(flags) |
9506 else: | 9506 else: |
9507 cmd_flags = 0 | 9507 cmd_flags = 0 |
9508 | 9508 |
9509 file.Write(" static const uint8 cmd_flags = %s;\n" % cmd_flags) | 9509 f.write(" static const uint8 cmd_flags = %s;\n" % cmd_flags) |
9510 | 9510 |
9511 | 9511 |
9512 def WriteCmdArgFlag(self, file): | 9512 def WriteCmdArgFlag(self, f): |
9513 """Writes the cmd kArgFlags constant.""" | 9513 """Writes the cmd kArgFlags constant.""" |
9514 file.Write(" static const cmd::ArgFlags kArgFlags = cmd::kFixed;\n") | 9514 f.write(" static const cmd::ArgFlags kArgFlags = cmd::kFixed;\n") |
9515 | 9515 |
9516 def WriteCmdComputeSize(self, file): | 9516 def WriteCmdComputeSize(self, f): |
9517 """Writes the ComputeSize function for the command.""" | 9517 """Writes the ComputeSize function for the command.""" |
9518 file.Write(" static uint32_t ComputeSize() {\n") | 9518 f.write(" static uint32_t ComputeSize() {\n") |
9519 file.Write( | 9519 f.write( |
9520 " return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT\n") | 9520 " return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT\n") |
9521 file.Write(" }\n") | 9521 f.write(" }\n") |
9522 file.Write("\n") | 9522 f.write("\n") |
9523 | 9523 |
9524 def WriteCmdSetHeader(self, file): | 9524 def WriteCmdSetHeader(self, f): |
9525 """Writes the cmd's SetHeader function.""" | 9525 """Writes the cmd's SetHeader function.""" |
9526 file.Write(" void SetHeader() {\n") | 9526 f.write(" void SetHeader() {\n") |
9527 file.Write(" header.SetCmd<ValueType>();\n") | 9527 f.write(" header.SetCmd<ValueType>();\n") |
9528 file.Write(" }\n") | 9528 f.write(" }\n") |
9529 file.Write("\n") | 9529 f.write("\n") |
9530 | 9530 |
9531 def WriteCmdInit(self, file): | 9531 def WriteCmdInit(self, f): |
9532 """Writes the cmd's Init function.""" | 9532 """Writes the cmd's Init function.""" |
9533 file.Write(" void Init(%s) {\n" % self.MakeTypedCmdArgString("_")) | 9533 f.write(" void Init(%s) {\n" % self.MakeTypedCmdArgString("_")) |
9534 file.Write(" SetHeader();\n") | 9534 f.write(" SetHeader();\n") |
9535 args = self.GetCmdArgs() | 9535 args = self.GetCmdArgs() |
9536 for arg in args: | 9536 for arg in args: |
9537 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 9537 f.write(" %s = _%s;\n" % (arg.name, arg.name)) |
9538 file.Write(" }\n") | 9538 f.write(" }\n") |
9539 file.Write("\n") | 9539 f.write("\n") |
9540 | 9540 |
9541 def WriteCmdSet(self, file): | 9541 def WriteCmdSet(self, f): |
9542 """Writes the cmd's Set function.""" | 9542 """Writes the cmd's Set function.""" |
9543 copy_args = self.MakeCmdArgString("_", False) | 9543 copy_args = self.MakeCmdArgString("_", False) |
9544 file.Write(" void* Set(void* cmd%s) {\n" % | 9544 f.write(" void* Set(void* cmd%s) {\n" % |
9545 self.MakeTypedCmdArgString("_", True)) | 9545 self.MakeTypedCmdArgString("_", True)) |
9546 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) | 9546 f.write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % copy_args) |
9547 file.Write(" return NextCmdAddress<ValueType>(cmd);\n") | 9547 f.write(" return NextCmdAddress<ValueType>(cmd);\n") |
9548 file.Write(" }\n") | 9548 f.write(" }\n") |
9549 file.Write("\n") | 9549 f.write("\n") |
9550 | 9550 |
9551 def WriteStruct(self, file): | 9551 def WriteStruct(self, f): |
9552 self.type_handler.WriteStruct(self, file) | 9552 self.type_handler.WriteStruct(self, f) |
9553 | 9553 |
9554 def WriteDocs(self, file): | 9554 def WriteDocs(self, f): |
9555 self.type_handler.WriteDocs(self, file) | 9555 self.type_handler.WriteDocs(self, f) |
9556 | 9556 |
9557 def WriteCmdHelper(self, file): | 9557 def WriteCmdHelper(self, f): |
9558 """Writes the cmd's helper.""" | 9558 """Writes the cmd's helper.""" |
9559 self.type_handler.WriteCmdHelper(self, file) | 9559 self.type_handler.WriteCmdHelper(self, f) |
9560 | 9560 |
9561 def WriteServiceImplementation(self, file): | 9561 def WriteServiceImplementation(self, f): |
9562 """Writes the service implementation for a command.""" | 9562 """Writes the service implementation for a command.""" |
9563 self.type_handler.WriteServiceImplementation(self, file) | 9563 self.type_handler.WriteServiceImplementation(self, f) |
9564 | 9564 |
9565 def WriteServiceUnitTest(self, file, *extras): | 9565 def WriteServiceUnitTest(self, f, *extras): |
9566 """Writes the service implementation for a command.""" | 9566 """Writes the service implementation for a command.""" |
9567 self.type_handler.WriteServiceUnitTest(self, file, *extras) | 9567 self.type_handler.WriteServiceUnitTest(self, f, *extras) |
9568 | 9568 |
9569 def WriteGLES2CLibImplementation(self, file): | 9569 def WriteGLES2CLibImplementation(self, f): |
9570 """Writes the GLES2 C Lib Implemention.""" | 9570 """Writes the GLES2 C Lib Implemention.""" |
9571 self.type_handler.WriteGLES2CLibImplementation(self, file) | 9571 self.type_handler.WriteGLES2CLibImplementation(self, f) |
9572 | 9572 |
9573 def WriteGLES2InterfaceHeader(self, file): | 9573 def WriteGLES2InterfaceHeader(self, f): |
9574 """Writes the GLES2 Interface declaration.""" | 9574 """Writes the GLES2 Interface declaration.""" |
9575 self.type_handler.WriteGLES2InterfaceHeader(self, file) | 9575 self.type_handler.WriteGLES2InterfaceHeader(self, f) |
9576 | 9576 |
9577 def WriteMojoGLES2ImplHeader(self, file): | 9577 def WriteMojoGLES2ImplHeader(self, f): |
9578 """Writes the Mojo GLES2 implementation header declaration.""" | 9578 """Writes the Mojo GLES2 implementation header declaration.""" |
9579 self.type_handler.WriteMojoGLES2ImplHeader(self, file) | 9579 self.type_handler.WriteMojoGLES2ImplHeader(self, f) |
9580 | 9580 |
9581 def WriteMojoGLES2Impl(self, file): | 9581 def WriteMojoGLES2Impl(self, f): |
9582 """Writes the Mojo GLES2 implementation declaration.""" | 9582 """Writes the Mojo GLES2 implementation declaration.""" |
9583 self.type_handler.WriteMojoGLES2Impl(self, file) | 9583 self.type_handler.WriteMojoGLES2Impl(self, f) |
9584 | 9584 |
9585 def WriteGLES2InterfaceStub(self, file): | 9585 def WriteGLES2InterfaceStub(self, f): |
9586 """Writes the GLES2 Interface Stub declaration.""" | 9586 """Writes the GLES2 Interface Stub declaration.""" |
9587 self.type_handler.WriteGLES2InterfaceStub(self, file) | 9587 self.type_handler.WriteGLES2InterfaceStub(self, f) |
9588 | 9588 |
9589 def WriteGLES2InterfaceStubImpl(self, file): | 9589 def WriteGLES2InterfaceStubImpl(self, f): |
9590 """Writes the GLES2 Interface Stub declaration.""" | 9590 """Writes the GLES2 Interface Stub declaration.""" |
9591 self.type_handler.WriteGLES2InterfaceStubImpl(self, file) | 9591 self.type_handler.WriteGLES2InterfaceStubImpl(self, f) |
9592 | 9592 |
9593 def WriteGLES2ImplementationHeader(self, file): | 9593 def WriteGLES2ImplementationHeader(self, f): |
9594 """Writes the GLES2 Implemention declaration.""" | 9594 """Writes the GLES2 Implemention declaration.""" |
9595 self.type_handler.WriteGLES2ImplementationHeader(self, file) | 9595 self.type_handler.WriteGLES2ImplementationHeader(self, f) |
9596 | 9596 |
9597 def WriteGLES2Implementation(self, file): | 9597 def WriteGLES2Implementation(self, f): |
9598 """Writes the GLES2 Implemention definition.""" | 9598 """Writes the GLES2 Implemention definition.""" |
9599 self.type_handler.WriteGLES2Implementation(self, file) | 9599 self.type_handler.WriteGLES2Implementation(self, f) |
9600 | 9600 |
9601 def WriteGLES2TraceImplementationHeader(self, file): | 9601 def WriteGLES2TraceImplementationHeader(self, f): |
9602 """Writes the GLES2 Trace Implemention declaration.""" | 9602 """Writes the GLES2 Trace Implemention declaration.""" |
9603 self.type_handler.WriteGLES2TraceImplementationHeader(self, file) | 9603 self.type_handler.WriteGLES2TraceImplementationHeader(self, f) |
9604 | 9604 |
9605 def WriteGLES2TraceImplementation(self, file): | 9605 def WriteGLES2TraceImplementation(self, f): |
9606 """Writes the GLES2 Trace Implemention definition.""" | 9606 """Writes the GLES2 Trace Implemention definition.""" |
9607 self.type_handler.WriteGLES2TraceImplementation(self, file) | 9607 self.type_handler.WriteGLES2TraceImplementation(self, f) |
9608 | 9608 |
9609 def WriteGLES2Header(self, file): | 9609 def WriteGLES2Header(self, f): |
9610 """Writes the GLES2 Implemention unit test.""" | 9610 """Writes the GLES2 Implemention unit test.""" |
9611 self.type_handler.WriteGLES2Header(self, file) | 9611 self.type_handler.WriteGLES2Header(self, f) |
9612 | 9612 |
9613 def WriteGLES2ImplementationUnitTest(self, file): | 9613 def WriteGLES2ImplementationUnitTest(self, f): |
9614 """Writes the GLES2 Implemention unit test.""" | 9614 """Writes the GLES2 Implemention unit test.""" |
9615 self.type_handler.WriteGLES2ImplementationUnitTest(self, file) | 9615 self.type_handler.WriteGLES2ImplementationUnitTest(self, f) |
9616 | 9616 |
9617 def WriteDestinationInitalizationValidation(self, file): | 9617 def WriteDestinationInitalizationValidation(self, f): |
9618 """Writes the client side destintion initialization validation.""" | 9618 """Writes the client side destintion initialization validation.""" |
9619 self.type_handler.WriteDestinationInitalizationValidation(self, file) | 9619 self.type_handler.WriteDestinationInitalizationValidation(self, f) |
9620 | 9620 |
9621 def WriteFormatTest(self, file): | 9621 def WriteFormatTest(self, f): |
9622 """Writes the cmd's format test.""" | 9622 """Writes the cmd's format test.""" |
9623 self.type_handler.WriteFormatTest(self, file) | 9623 self.type_handler.WriteFormatTest(self, f) |
9624 | 9624 |
9625 | 9625 |
9626 class PepperInterface(object): | 9626 class PepperInterface(object): |
9627 """A class that represents a function.""" | 9627 """A class that represents a function.""" |
9628 | 9628 |
9629 def __init__(self, info): | 9629 def __init__(self, info): |
9630 self.name = info["name"] | 9630 self.name = info["name"] |
9631 self.dev = info["dev"] | 9631 self.dev = info["dev"] |
9632 | 9632 |
9633 def GetName(self): | 9633 def GetName(self): |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9681 if new_arg: | 9681 if new_arg: |
9682 new_args_for_cmds.append(new_arg) | 9682 new_args_for_cmds.append(new_arg) |
9683 | 9683 |
9684 self.args_for_cmds = new_args_for_cmds | 9684 self.args_for_cmds = new_args_for_cmds |
9685 | 9685 |
9686 Function.InitFunction(self) | 9686 Function.InitFunction(self) |
9687 | 9687 |
9688 def IsImmediate(self): | 9688 def IsImmediate(self): |
9689 return True | 9689 return True |
9690 | 9690 |
9691 def WriteCommandDescription(self, file): | 9691 def WriteCommandDescription(self, f): |
9692 """Overridden from Function""" | 9692 """Overridden from Function""" |
9693 file.Write("//! Immediate version of command that corresponds to gl%s.\n" % | 9693 f.write("//! Immediate version of command that corresponds to gl%s.\n" % |
9694 self.original_name) | 9694 self.original_name) |
9695 | 9695 |
9696 def WriteServiceImplementation(self, file): | 9696 def WriteServiceImplementation(self, f): |
9697 """Overridden from Function""" | 9697 """Overridden from Function""" |
9698 self.type_handler.WriteImmediateServiceImplementation(self, file) | 9698 self.type_handler.WriteImmediateServiceImplementation(self, f) |
9699 | 9699 |
9700 def WriteHandlerImplementation(self, file): | 9700 def WriteHandlerImplementation(self, f): |
9701 """Overridden from Function""" | 9701 """Overridden from Function""" |
9702 self.type_handler.WriteImmediateHandlerImplementation(self, file) | 9702 self.type_handler.WriteImmediateHandlerImplementation(self, f) |
9703 | 9703 |
9704 def WriteServiceUnitTest(self, file, *extras): | 9704 def WriteServiceUnitTest(self, f, *extras): |
9705 """Writes the service implementation for a command.""" | 9705 """Writes the service implementation for a command.""" |
9706 self.type_handler.WriteImmediateServiceUnitTest(self, file, *extras) | 9706 self.type_handler.WriteImmediateServiceUnitTest(self, f, *extras) |
9707 | 9707 |
9708 def WriteValidationCode(self, file): | 9708 def WriteValidationCode(self, f): |
9709 """Overridden from Function""" | 9709 """Overridden from Function""" |
9710 self.type_handler.WriteImmediateValidationCode(self, file) | 9710 self.type_handler.WriteImmediateValidationCode(self, f) |
9711 | 9711 |
9712 def WriteCmdArgFlag(self, file): | 9712 def WriteCmdArgFlag(self, f): |
9713 """Overridden from Function""" | 9713 """Overridden from Function""" |
9714 file.Write(" static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;\n") | 9714 f.write(" static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;\n") |
9715 | 9715 |
9716 def WriteCmdComputeSize(self, file): | 9716 def WriteCmdComputeSize(self, f): |
9717 """Overridden from Function""" | 9717 """Overridden from Function""" |
9718 self.type_handler.WriteImmediateCmdComputeSize(self, file) | 9718 self.type_handler.WriteImmediateCmdComputeSize(self, f) |
9719 | 9719 |
9720 def WriteCmdSetHeader(self, file): | 9720 def WriteCmdSetHeader(self, f): |
9721 """Overridden from Function""" | 9721 """Overridden from Function""" |
9722 self.type_handler.WriteImmediateCmdSetHeader(self, file) | 9722 self.type_handler.WriteImmediateCmdSetHeader(self, f) |
9723 | 9723 |
9724 def WriteCmdInit(self, file): | 9724 def WriteCmdInit(self, f): |
9725 """Overridden from Function""" | 9725 """Overridden from Function""" |
9726 self.type_handler.WriteImmediateCmdInit(self, file) | 9726 self.type_handler.WriteImmediateCmdInit(self, f) |
9727 | 9727 |
9728 def WriteCmdSet(self, file): | 9728 def WriteCmdSet(self, f): |
9729 """Overridden from Function""" | 9729 """Overridden from Function""" |
9730 self.type_handler.WriteImmediateCmdSet(self, file) | 9730 self.type_handler.WriteImmediateCmdSet(self, f) |
9731 | 9731 |
9732 def WriteCmdHelper(self, file): | 9732 def WriteCmdHelper(self, f): |
9733 """Overridden from Function""" | 9733 """Overridden from Function""" |
9734 self.type_handler.WriteImmediateCmdHelper(self, file) | 9734 self.type_handler.WriteImmediateCmdHelper(self, f) |
9735 | 9735 |
9736 def WriteFormatTest(self, file): | 9736 def WriteFormatTest(self, f): |
9737 """Overridden from Function""" | 9737 """Overridden from Function""" |
9738 self.type_handler.WriteImmediateFormatTest(self, file) | 9738 self.type_handler.WriteImmediateFormatTest(self, f) |
9739 | 9739 |
9740 | 9740 |
9741 class BucketFunction(Function): | 9741 class BucketFunction(Function): |
9742 """A class that represnets a bucket version of a function command.""" | 9742 """A class that represnets a bucket version of a function command.""" |
9743 | 9743 |
9744 def __init__(self, func): | 9744 def __init__(self, func): |
9745 Function.__init__( | 9745 Function.__init__( |
9746 self, | 9746 self, |
9747 "%sBucket" % func.name, | 9747 "%sBucket" % func.name, |
9748 func.info) | 9748 func.info) |
(...skipping 12 matching lines...) Expand all Loading... |
9761 new_args_for_cmds = [] | 9761 new_args_for_cmds = [] |
9762 for arg in self.args_for_cmds: | 9762 for arg in self.args_for_cmds: |
9763 new_arg = arg.GetBucketVersion() | 9763 new_arg = arg.GetBucketVersion() |
9764 if new_arg: | 9764 if new_arg: |
9765 new_args_for_cmds.append(new_arg) | 9765 new_args_for_cmds.append(new_arg) |
9766 | 9766 |
9767 self.args_for_cmds = new_args_for_cmds | 9767 self.args_for_cmds = new_args_for_cmds |
9768 | 9768 |
9769 Function.InitFunction(self) | 9769 Function.InitFunction(self) |
9770 | 9770 |
9771 def WriteCommandDescription(self, file): | 9771 def WriteCommandDescription(self, f): |
9772 """Overridden from Function""" | 9772 """Overridden from Function""" |
9773 file.Write("//! Bucket version of command that corresponds to gl%s.\n" % | 9773 f.write("//! Bucket version of command that corresponds to gl%s.\n" % |
9774 self.original_name) | 9774 self.original_name) |
9775 | 9775 |
9776 def WriteServiceImplementation(self, file): | 9776 def WriteServiceImplementation(self, f): |
9777 """Overridden from Function""" | 9777 """Overridden from Function""" |
9778 self.type_handler.WriteBucketServiceImplementation(self, file) | 9778 self.type_handler.WriteBucketServiceImplementation(self, f) |
9779 | 9779 |
9780 def WriteHandlerImplementation(self, file): | 9780 def WriteHandlerImplementation(self, f): |
9781 """Overridden from Function""" | 9781 """Overridden from Function""" |
9782 self.type_handler.WriteBucketHandlerImplementation(self, file) | 9782 self.type_handler.WriteBucketHandlerImplementation(self, f) |
9783 | 9783 |
9784 def WriteServiceUnitTest(self, file, *extras): | 9784 def WriteServiceUnitTest(self, f, *extras): |
9785 """Overridden from Function""" | 9785 """Overridden from Function""" |
9786 self.type_handler.WriteBucketServiceUnitTest(self, file, *extras) | 9786 self.type_handler.WriteBucketServiceUnitTest(self, f, *extras) |
9787 | 9787 |
9788 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): | 9788 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): |
9789 """Overridden from Function""" | 9789 """Overridden from Function""" |
9790 args = self.GetOriginalArgs() | 9790 args = self.GetOriginalArgs() |
9791 arg_string = separator.join( | 9791 arg_string = separator.join( |
9792 ["%s%s" % (prefix, arg.name[0:-10] if arg.name.endswith("_bucket_id") | 9792 ["%s%s" % (prefix, arg.name[0:-10] if arg.name.endswith("_bucket_id") |
9793 else arg.name) for arg in args]) | 9793 else arg.name) for arg in args]) |
9794 return super(BucketFunction, self)._MaybePrependComma(arg_string, add_comma) | 9794 return super(BucketFunction, self)._MaybePrependComma(arg_string, add_comma) |
9795 | 9795 |
9796 | 9796 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9873 def Log(self, msg): | 9873 def Log(self, msg): |
9874 """Prints something if verbose is true.""" | 9874 """Prints something if verbose is true.""" |
9875 if self.verbose: | 9875 if self.verbose: |
9876 print msg | 9876 print msg |
9877 | 9877 |
9878 def Error(self, msg): | 9878 def Error(self, msg): |
9879 """Prints an error.""" | 9879 """Prints an error.""" |
9880 print "Error: %s" % msg | 9880 print "Error: %s" % msg |
9881 self.errors += 1 | 9881 self.errors += 1 |
9882 | 9882 |
9883 def WriteLicense(self, file): | 9883 def WriteLicense(self, f): |
9884 """Writes the license.""" | 9884 """Writes the license.""" |
9885 file.Write(_LICENSE) | 9885 f.write(_LICENSE) |
9886 | 9886 |
9887 def WriteNamespaceOpen(self, file): | 9887 def WriteNamespaceOpen(self, f): |
9888 """Writes the code for the namespace.""" | 9888 """Writes the code for the namespace.""" |
9889 file.Write("namespace gpu {\n") | 9889 f.write("namespace gpu {\n") |
9890 file.Write("namespace gles2 {\n") | 9890 f.write("namespace gles2 {\n") |
9891 file.Write("\n") | 9891 f.write("\n") |
9892 | 9892 |
9893 def WriteNamespaceClose(self, file): | 9893 def WriteNamespaceClose(self, f): |
9894 """Writes the code to close the namespace.""" | 9894 """Writes the code to close the namespace.""" |
9895 file.Write("} // namespace gles2\n") | 9895 f.write("} // namespace gles2\n") |
9896 file.Write("} // namespace gpu\n") | 9896 f.write("} // namespace gpu\n") |
9897 file.Write("\n") | 9897 f.write("\n") |
9898 | 9898 |
9899 def ParseGLH(self, filename): | 9899 def ParseGLH(self, filename): |
9900 """Parses the cmd_buffer_functions.txt file and extracts the functions""" | 9900 """Parses the cmd_buffer_functions.txt file and extracts the functions""" |
9901 f = open(filename, "r") | 9901 f = open(filename, "r") |
9902 functions = f.read() | 9902 functions = f.read() |
9903 f.close() | 9903 f.close() |
9904 for line in functions.splitlines(): | 9904 for line in functions.splitlines(): |
9905 match = self._function_re.match(line) | 9905 match = self._function_re.match(line) |
9906 if match: | 9906 if match: |
9907 func_name = match.group(2)[2:] | 9907 func_name = match.group(2)[2:] |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9946 | 9946 |
9947 funcs = [f for f in self.functions if not f.can_auto_generate and | 9947 funcs = [f for f in self.functions if not f.can_auto_generate and |
9948 (f.IsType('') or f.IsType('Custom') or f.IsType('Todo'))] | 9948 (f.IsType('') or f.IsType('Custom') or f.IsType('Todo'))] |
9949 self.Log("Non Auto Generated Functions: %d" % len(funcs)) | 9949 self.Log("Non Auto Generated Functions: %d" % len(funcs)) |
9950 | 9950 |
9951 for f in funcs: | 9951 for f in funcs: |
9952 self.Log(" %-10s %-20s gl%s" % (f.info['type'], f.return_type, f.name)) | 9952 self.Log(" %-10s %-20s gl%s" % (f.info['type'], f.return_type, f.name)) |
9953 | 9953 |
9954 def WriteCommandIds(self, filename): | 9954 def WriteCommandIds(self, filename): |
9955 """Writes the command buffer format""" | 9955 """Writes the command buffer format""" |
9956 file = CHeaderWriter(filename) | 9956 f = CHeaderWriter(filename) |
9957 file.Write("#define GLES2_COMMAND_LIST(OP) \\\n") | 9957 f.write("#define GLES2_COMMAND_LIST(OP) \\\n") |
9958 id = 256 | 9958 id = 256 |
9959 for func in self.functions: | 9959 for func in self.functions: |
9960 file.Write(" %-60s /* %d */ \\\n" % | 9960 f.write(" %-60s /* %d */ \\\n" % |
9961 ("OP(%s)" % func.name, id)) | 9961 ("OP(%s)" % func.name, id)) |
9962 id += 1 | 9962 id += 1 |
9963 file.Write("\n") | 9963 f.write("\n") |
9964 | 9964 |
9965 file.Write("enum CommandId {\n") | 9965 f.write("enum CommandId {\n") |
9966 file.Write(" kStartPoint = cmd::kLastCommonId, " | 9966 f.write(" kStartPoint = cmd::kLastCommonId, " |
9967 "// All GLES2 commands start after this.\n") | 9967 "// All GLES2 commands start after this.\n") |
9968 file.Write("#define GLES2_CMD_OP(name) k ## name,\n") | 9968 f.write("#define GLES2_CMD_OP(name) k ## name,\n") |
9969 file.Write(" GLES2_COMMAND_LIST(GLES2_CMD_OP)\n") | 9969 f.write(" GLES2_COMMAND_LIST(GLES2_CMD_OP)\n") |
9970 file.Write("#undef GLES2_CMD_OP\n") | 9970 f.write("#undef GLES2_CMD_OP\n") |
9971 file.Write(" kNumCommands\n") | 9971 f.write(" kNumCommands\n") |
9972 file.Write("};\n") | 9972 f.write("};\n") |
9973 file.Write("\n") | 9973 f.write("\n") |
9974 file.Close() | 9974 f.close() |
9975 self.generated_cpp_filenames.append(file.filename) | 9975 self.generated_cpp_filenames.append(f.filename) |
9976 | 9976 |
9977 def WriteFormat(self, filename): | 9977 def WriteFormat(self, filename): |
9978 """Writes the command buffer format""" | 9978 """Writes the command buffer format""" |
9979 file = CHeaderWriter(filename) | 9979 f = CHeaderWriter(filename) |
9980 # Forward declaration of a few enums used in constant argument | 9980 # Forward declaration of a few enums used in constant argument |
9981 # to avoid including GL header files. | 9981 # to avoid including GL header files. |
9982 enum_defines = { | 9982 enum_defines = { |
9983 'GL_SYNC_GPU_COMMANDS_COMPLETE': '0x9117', | 9983 'GL_SYNC_GPU_COMMANDS_COMPLETE': '0x9117', |
9984 'GL_SYNC_FLUSH_COMMANDS_BIT': '0x00000001', | 9984 'GL_SYNC_FLUSH_COMMANDS_BIT': '0x00000001', |
9985 } | 9985 } |
9986 file.Write('\n') | 9986 f.write('\n') |
9987 for enum in enum_defines: | 9987 for enum in enum_defines: |
9988 file.Write("#define %s %s\n" % (enum, enum_defines[enum])) | 9988 f.write("#define %s %s\n" % (enum, enum_defines[enum])) |
9989 file.Write('\n') | 9989 f.write('\n') |
9990 for func in self.functions: | 9990 for func in self.functions: |
9991 if True: | 9991 if True: |
9992 #gen_cmd = func.GetInfo('gen_cmd') | 9992 #gen_cmd = func.GetInfo('gen_cmd') |
9993 #if gen_cmd == True or gen_cmd == None: | 9993 #if gen_cmd == True or gen_cmd == None: |
9994 func.WriteStruct(file) | 9994 func.WriteStruct(f) |
9995 file.Write("\n") | 9995 f.write("\n") |
9996 file.Close() | 9996 f.close() |
9997 self.generated_cpp_filenames.append(file.filename) | 9997 self.generated_cpp_filenames.append(f.filename) |
9998 | 9998 |
9999 def WriteDocs(self, filename): | 9999 def WriteDocs(self, filename): |
10000 """Writes the command buffer doc version of the commands""" | 10000 """Writes the command buffer doc version of the commands""" |
10001 file = CWriter(filename) | 10001 f = CWriter(filename) |
10002 for func in self.functions: | 10002 for func in self.functions: |
10003 if True: | 10003 if True: |
10004 #gen_cmd = func.GetInfo('gen_cmd') | 10004 #gen_cmd = func.GetInfo('gen_cmd') |
10005 #if gen_cmd == True or gen_cmd == None: | 10005 #if gen_cmd == True or gen_cmd == None: |
10006 func.WriteDocs(file) | 10006 func.WriteDocs(f) |
10007 file.Write("\n") | 10007 f.write("\n") |
10008 file.Close() | 10008 f.close() |
10009 self.generated_cpp_filenames.append(file.filename) | 10009 self.generated_cpp_filenames.append(f.filename) |
10010 | 10010 |
10011 def WriteFormatTest(self, filename): | 10011 def WriteFormatTest(self, filename): |
10012 """Writes the command buffer format test.""" | 10012 """Writes the command buffer format test.""" |
10013 file = CHeaderWriter( | 10013 f = CHeaderWriter( |
10014 filename, | 10014 filename, |
10015 "// This file contains unit tests for gles2 commmands\n" | 10015 "// This file contains unit tests for gles2 commmands\n" |
10016 "// It is included by gles2_cmd_format_test.cc\n" | 10016 "// It is included by gles2_cmd_format_test.cc\n" |
10017 "\n") | 10017 "\n") |
10018 | 10018 |
10019 for func in self.functions: | 10019 for func in self.functions: |
10020 if True: | 10020 if True: |
10021 #gen_cmd = func.GetInfo('gen_cmd') | 10021 #gen_cmd = func.GetInfo('gen_cmd') |
10022 #if gen_cmd == True or gen_cmd == None: | 10022 #if gen_cmd == True or gen_cmd == None: |
10023 func.WriteFormatTest(file) | 10023 func.WriteFormatTest(f) |
10024 | 10024 |
10025 file.Close() | 10025 f.close() |
10026 self.generated_cpp_filenames.append(file.filename) | 10026 self.generated_cpp_filenames.append(f.filename) |
10027 | 10027 |
10028 def WriteCmdHelperHeader(self, filename): | 10028 def WriteCmdHelperHeader(self, filename): |
10029 """Writes the gles2 command helper.""" | 10029 """Writes the gles2 command helper.""" |
10030 file = CHeaderWriter(filename) | 10030 f = CHeaderWriter(filename) |
10031 | 10031 |
10032 for func in self.functions: | 10032 for func in self.functions: |
10033 if True: | 10033 if True: |
10034 #gen_cmd = func.GetInfo('gen_cmd') | 10034 #gen_cmd = func.GetInfo('gen_cmd') |
10035 #if gen_cmd == True or gen_cmd == None: | 10035 #if gen_cmd == True or gen_cmd == None: |
10036 func.WriteCmdHelper(file) | 10036 func.WriteCmdHelper(f) |
10037 | 10037 |
10038 file.Close() | 10038 f.close() |
10039 self.generated_cpp_filenames.append(file.filename) | 10039 self.generated_cpp_filenames.append(f.filename) |
10040 | 10040 |
10041 def WriteServiceContextStateHeader(self, filename): | 10041 def WriteServiceContextStateHeader(self, filename): |
10042 """Writes the service context state header.""" | 10042 """Writes the service context state header.""" |
10043 file = CHeaderWriter( | 10043 f = CHeaderWriter( |
10044 filename, | 10044 filename, |
10045 "// It is included by context_state.h\n") | 10045 "// It is included by context_state.h\n") |
10046 file.Write("struct EnableFlags {\n") | 10046 f.write("struct EnableFlags {\n") |
10047 file.Write(" EnableFlags();\n") | 10047 f.write(" EnableFlags();\n") |
10048 for capability in _CAPABILITY_FLAGS: | 10048 for capability in _CAPABILITY_FLAGS: |
10049 file.Write(" bool %s;\n" % capability['name']) | 10049 f.write(" bool %s;\n" % capability['name']) |
10050 file.Write(" bool cached_%s;\n" % capability['name']) | 10050 f.write(" bool cached_%s;\n" % capability['name']) |
10051 file.Write("};\n\n") | 10051 f.write("};\n\n") |
10052 | 10052 |
10053 for state_name in sorted(_STATES.keys()): | 10053 for state_name in sorted(_STATES.keys()): |
10054 state = _STATES[state_name] | 10054 state = _STATES[state_name] |
10055 for item in state['states']: | 10055 for item in state['states']: |
10056 if isinstance(item['default'], list): | 10056 if isinstance(item['default'], list): |
10057 file.Write("%s %s[%d];\n" % (item['type'], item['name'], | 10057 f.write("%s %s[%d];\n" % (item['type'], item['name'], |
10058 len(item['default']))) | 10058 len(item['default']))) |
10059 else: | 10059 else: |
10060 file.Write("%s %s;\n" % (item['type'], item['name'])) | 10060 f.write("%s %s;\n" % (item['type'], item['name'])) |
10061 | 10061 |
10062 if item.get('cached', False): | 10062 if item.get('cached', False): |
10063 if isinstance(item['default'], list): | 10063 if isinstance(item['default'], list): |
10064 file.Write("%s cached_%s[%d];\n" % (item['type'], item['name'], | 10064 f.write("%s cached_%s[%d];\n" % (item['type'], item['name'], |
10065 len(item['default']))) | 10065 len(item['default']))) |
10066 else: | 10066 else: |
10067 file.Write("%s cached_%s;\n" % (item['type'], item['name'])) | 10067 f.write("%s cached_%s;\n" % (item['type'], item['name'])) |
10068 | 10068 |
10069 file.Write("\n") | 10069 f.write("\n") |
10070 | 10070 |
10071 file.Write(""" | 10071 f.write(""" |
10072 inline void SetDeviceCapabilityState(GLenum cap, bool enable) { | 10072 inline void SetDeviceCapabilityState(GLenum cap, bool enable) { |
10073 switch (cap) { | 10073 switch (cap) { |
10074 """) | 10074 """) |
10075 for capability in _CAPABILITY_FLAGS: | 10075 for capability in _CAPABILITY_FLAGS: |
10076 file.Write("""\ | 10076 f.write("""\ |
10077 case GL_%s: | 10077 case GL_%s: |
10078 """ % capability['name'].upper()) | 10078 """ % capability['name'].upper()) |
10079 file.Write("""\ | 10079 f.write("""\ |
10080 if (enable_flags.cached_%(name)s == enable && | 10080 if (enable_flags.cached_%(name)s == enable && |
10081 !ignore_cached_state) | 10081 !ignore_cached_state) |
10082 return; | 10082 return; |
10083 enable_flags.cached_%(name)s = enable; | 10083 enable_flags.cached_%(name)s = enable; |
10084 break; | 10084 break; |
10085 """ % capability) | 10085 """ % capability) |
10086 | 10086 |
10087 file.Write("""\ | 10087 f.write("""\ |
10088 default: | 10088 default: |
10089 NOTREACHED(); | 10089 NOTREACHED(); |
10090 return; | 10090 return; |
10091 } | 10091 } |
10092 if (enable) | 10092 if (enable) |
10093 glEnable(cap); | 10093 glEnable(cap); |
10094 else | 10094 else |
10095 glDisable(cap); | 10095 glDisable(cap); |
10096 } | 10096 } |
10097 """) | 10097 """) |
10098 | 10098 |
10099 file.Close() | 10099 f.close() |
10100 self.generated_cpp_filenames.append(file.filename) | 10100 self.generated_cpp_filenames.append(f.filename) |
10101 | 10101 |
10102 def WriteClientContextStateHeader(self, filename): | 10102 def WriteClientContextStateHeader(self, filename): |
10103 """Writes the client context state header.""" | 10103 """Writes the client context state header.""" |
10104 file = CHeaderWriter( | 10104 f = CHeaderWriter( |
10105 filename, | 10105 filename, |
10106 "// It is included by client_context_state.h\n") | 10106 "// It is included by client_context_state.h\n") |
10107 file.Write("struct EnableFlags {\n") | 10107 f.write("struct EnableFlags {\n") |
10108 file.Write(" EnableFlags();\n") | 10108 f.write(" EnableFlags();\n") |
10109 for capability in _CAPABILITY_FLAGS: | 10109 for capability in _CAPABILITY_FLAGS: |
10110 file.Write(" bool %s;\n" % capability['name']) | 10110 f.write(" bool %s;\n" % capability['name']) |
10111 file.Write("};\n\n") | 10111 f.write("};\n\n") |
10112 | 10112 |
10113 file.Close() | 10113 f.close() |
10114 self.generated_cpp_filenames.append(file.filename) | 10114 self.generated_cpp_filenames.append(f.filename) |
10115 | 10115 |
10116 def WriteContextStateGetters(self, file, class_name): | 10116 def WriteContextStateGetters(self, f, class_name): |
10117 """Writes the state getters.""" | 10117 """Writes the state getters.""" |
10118 for gl_type in ["GLint", "GLfloat"]: | 10118 for gl_type in ["GLint", "GLfloat"]: |
10119 file.Write(""" | 10119 f.write(""" |
10120 bool %s::GetStateAs%s( | 10120 bool %s::GetStateAs%s( |
10121 GLenum pname, %s* params, GLsizei* num_written) const { | 10121 GLenum pname, %s* params, GLsizei* num_written) const { |
10122 switch (pname) { | 10122 switch (pname) { |
10123 """ % (class_name, gl_type, gl_type)) | 10123 """ % (class_name, gl_type, gl_type)) |
10124 for state_name in sorted(_STATES.keys()): | 10124 for state_name in sorted(_STATES.keys()): |
10125 state = _STATES[state_name] | 10125 state = _STATES[state_name] |
10126 if 'enum' in state: | 10126 if 'enum' in state: |
10127 file.Write(" case %s:\n" % state['enum']) | 10127 f.write(" case %s:\n" % state['enum']) |
10128 file.Write(" *num_written = %d;\n" % len(state['states'])) | 10128 f.write(" *num_written = %d;\n" % len(state['states'])) |
10129 file.Write(" if (params) {\n") | 10129 f.write(" if (params) {\n") |
10130 for ndx,item in enumerate(state['states']): | 10130 for ndx,item in enumerate(state['states']): |
10131 file.Write(" params[%d] = static_cast<%s>(%s);\n" % | 10131 f.write(" params[%d] = static_cast<%s>(%s);\n" % |
10132 (ndx, gl_type, item['name'])) | 10132 (ndx, gl_type, item['name'])) |
10133 file.Write(" }\n") | 10133 f.write(" }\n") |
10134 file.Write(" return true;\n") | 10134 f.write(" return true;\n") |
10135 else: | 10135 else: |
10136 for item in state['states']: | 10136 for item in state['states']: |
10137 file.Write(" case %s:\n" % item['enum']) | 10137 f.write(" case %s:\n" % item['enum']) |
10138 if isinstance(item['default'], list): | 10138 if isinstance(item['default'], list): |
10139 item_len = len(item['default']) | 10139 item_len = len(item['default']) |
10140 file.Write(" *num_written = %d;\n" % item_len) | 10140 f.write(" *num_written = %d;\n" % item_len) |
10141 file.Write(" if (params) {\n") | 10141 f.write(" if (params) {\n") |
10142 if item['type'] == gl_type: | 10142 if item['type'] == gl_type: |
10143 file.Write(" memcpy(params, %s, sizeof(%s) * %d);\n" % | 10143 f.write(" memcpy(params, %s, sizeof(%s) * %d);\n" % |
10144 (item['name'], item['type'], item_len)) | 10144 (item['name'], item['type'], item_len)) |
10145 else: | 10145 else: |
10146 file.Write(" for (size_t i = 0; i < %s; ++i) {\n" % | 10146 f.write(" for (size_t i = 0; i < %s; ++i) {\n" % |
10147 item_len) | 10147 item_len) |
10148 file.Write(" params[i] = %s;\n" % | 10148 f.write(" params[i] = %s;\n" % |
10149 (GetGLGetTypeConversion(gl_type, item['type'], | 10149 (GetGLGetTypeConversion(gl_type, item['type'], |
10150 "%s[i]" % item['name']))) | 10150 "%s[i]" % item['name']))) |
10151 file.Write(" }\n"); | 10151 f.write(" }\n"); |
10152 else: | 10152 else: |
10153 file.Write(" *num_written = 1;\n") | 10153 f.write(" *num_written = 1;\n") |
10154 file.Write(" if (params) {\n") | 10154 f.write(" if (params) {\n") |
10155 file.Write(" params[0] = %s;\n" % | 10155 f.write(" params[0] = %s;\n" % |
10156 (GetGLGetTypeConversion(gl_type, item['type'], | 10156 (GetGLGetTypeConversion(gl_type, item['type'], |
10157 item['name']))) | 10157 item['name']))) |
10158 file.Write(" }\n") | 10158 f.write(" }\n") |
10159 file.Write(" return true;\n") | 10159 f.write(" return true;\n") |
10160 for capability in _CAPABILITY_FLAGS: | 10160 for capability in _CAPABILITY_FLAGS: |
10161 file.Write(" case GL_%s:\n" % capability['name'].upper()) | 10161 f.write(" case GL_%s:\n" % capability['name'].upper()) |
10162 file.Write(" *num_written = 1;\n") | 10162 f.write(" *num_written = 1;\n") |
10163 file.Write(" if (params) {\n") | 10163 f.write(" if (params) {\n") |
10164 file.Write( | 10164 f.write( |
10165 " params[0] = static_cast<%s>(enable_flags.%s);\n" % | 10165 " params[0] = static_cast<%s>(enable_flags.%s);\n" % |
10166 (gl_type, capability['name'])) | 10166 (gl_type, capability['name'])) |
10167 file.Write(" }\n") | 10167 f.write(" }\n") |
10168 file.Write(" return true;\n") | 10168 f.write(" return true;\n") |
10169 file.Write(""" default: | 10169 f.write(""" default: |
10170 return false; | 10170 return false; |
10171 } | 10171 } |
10172 } | 10172 } |
10173 """) | 10173 """) |
10174 | 10174 |
10175 def WriteServiceContextStateImpl(self, filename): | 10175 def WriteServiceContextStateImpl(self, filename): |
10176 """Writes the context state service implementation.""" | 10176 """Writes the context state service implementation.""" |
10177 file = CHeaderWriter( | 10177 f = CHeaderWriter( |
10178 filename, | 10178 filename, |
10179 "// It is included by context_state.cc\n") | 10179 "// It is included by context_state.cc\n") |
10180 code = [] | 10180 code = [] |
10181 for capability in _CAPABILITY_FLAGS: | 10181 for capability in _CAPABILITY_FLAGS: |
10182 code.append("%s(%s)" % | 10182 code.append("%s(%s)" % |
10183 (capability['name'], | 10183 (capability['name'], |
10184 ('false', 'true')['default' in capability])) | 10184 ('false', 'true')['default' in capability])) |
10185 code.append("cached_%s(%s)" % | 10185 code.append("cached_%s(%s)" % |
10186 (capability['name'], | 10186 (capability['name'], |
10187 ('false', 'true')['default' in capability])) | 10187 ('false', 'true')['default' in capability])) |
10188 file.Write("ContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" % | 10188 f.write("ContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" % |
10189 ",\n ".join(code)) | 10189 ",\n ".join(code)) |
10190 file.Write("\n") | 10190 f.write("\n") |
10191 | 10191 |
10192 file.Write("void ContextState::Initialize() {\n") | 10192 f.write("void ContextState::Initialize() {\n") |
10193 for state_name in sorted(_STATES.keys()): | 10193 for state_name in sorted(_STATES.keys()): |
10194 state = _STATES[state_name] | 10194 state = _STATES[state_name] |
10195 for item in state['states']: | 10195 for item in state['states']: |
10196 if isinstance(item['default'], list): | 10196 if isinstance(item['default'], list): |
10197 for ndx, value in enumerate(item['default']): | 10197 for ndx, value in enumerate(item['default']): |
10198 file.Write(" %s[%d] = %s;\n" % (item['name'], ndx, value)) | 10198 f.write(" %s[%d] = %s;\n" % (item['name'], ndx, value)) |
10199 else: | 10199 else: |
10200 file.Write(" %s = %s;\n" % (item['name'], item['default'])) | 10200 f.write(" %s = %s;\n" % (item['name'], item['default'])) |
10201 if item.get('cached', False): | 10201 if item.get('cached', False): |
10202 if isinstance(item['default'], list): | 10202 if isinstance(item['default'], list): |
10203 for ndx, value in enumerate(item['default']): | 10203 for ndx, value in enumerate(item['default']): |
10204 file.Write(" cached_%s[%d] = %s;\n" % (item['name'], ndx, value)) | 10204 f.write(" cached_%s[%d] = %s;\n" % (item['name'], ndx, value)) |
10205 else: | 10205 else: |
10206 file.Write(" cached_%s = %s;\n" % (item['name'], item['default'])) | 10206 f.write(" cached_%s = %s;\n" % (item['name'], item['default'])) |
10207 file.Write("}\n") | 10207 f.write("}\n") |
10208 | 10208 |
10209 file.Write(""" | 10209 f.write(""" |
10210 void ContextState::InitCapabilities(const ContextState* prev_state) const { | 10210 void ContextState::InitCapabilities(const ContextState* prev_state) const { |
10211 """) | 10211 """) |
10212 def WriteCapabilities(test_prev, es3_caps): | 10212 def WriteCapabilities(test_prev, es3_caps): |
10213 for capability in _CAPABILITY_FLAGS: | 10213 for capability in _CAPABILITY_FLAGS: |
10214 capability_name = capability['name'] | 10214 capability_name = capability['name'] |
10215 capability_es3 = 'es3' in capability and capability['es3'] == True | 10215 capability_es3 = 'es3' in capability and capability['es3'] == True |
10216 if capability_es3 and not es3_caps or not capability_es3 and es3_caps: | 10216 if capability_es3 and not es3_caps or not capability_es3 and es3_caps: |
10217 continue | 10217 continue |
10218 if test_prev: | 10218 if test_prev: |
10219 file.Write(""" if (prev_state->enable_flags.cached_%s != | 10219 f.write(""" if (prev_state->enable_flags.cached_%s != |
10220 enable_flags.cached_%s) {\n""" % | 10220 enable_flags.cached_%s) {\n""" % |
10221 (capability_name, capability_name)) | 10221 (capability_name, capability_name)) |
10222 file.Write(" EnableDisable(GL_%s, enable_flags.cached_%s);\n" % | 10222 f.write(" EnableDisable(GL_%s, enable_flags.cached_%s);\n" % |
10223 (capability_name.upper(), capability_name)) | 10223 (capability_name.upper(), capability_name)) |
10224 if test_prev: | 10224 if test_prev: |
10225 file.Write(" }") | 10225 f.write(" }") |
10226 | 10226 |
10227 file.Write(" if (prev_state) {") | 10227 f.write(" if (prev_state) {") |
10228 WriteCapabilities(True, False) | 10228 WriteCapabilities(True, False) |
10229 file.Write(" if (feature_info_->IsES3Capable()) {\n") | 10229 f.write(" if (feature_info_->IsES3Capable()) {\n") |
10230 WriteCapabilities(True, True) | 10230 WriteCapabilities(True, True) |
10231 file.Write(" }\n") | 10231 f.write(" }\n") |
10232 file.Write(" } else {") | 10232 f.write(" } else {") |
10233 WriteCapabilities(False, False) | 10233 WriteCapabilities(False, False) |
10234 file.Write(" if (feature_info_->IsES3Capable()) {\n") | 10234 f.write(" if (feature_info_->IsES3Capable()) {\n") |
10235 WriteCapabilities(False, True) | 10235 WriteCapabilities(False, True) |
10236 file.Write(" }\n") | 10236 f.write(" }\n") |
10237 file.Write(" }") | 10237 f.write(" }") |
10238 | 10238 |
10239 file.Write("""} | 10239 f.write("""} |
10240 | 10240 |
10241 void ContextState::InitState(const ContextState *prev_state) const { | 10241 void ContextState::InitState(const ContextState *prev_state) const { |
10242 """) | 10242 """) |
10243 | 10243 |
10244 def WriteStates(test_prev): | 10244 def WriteStates(test_prev): |
10245 # We need to sort the keys so the expectations match | 10245 # We need to sort the keys so the expectations match |
10246 for state_name in sorted(_STATES.keys()): | 10246 for state_name in sorted(_STATES.keys()): |
10247 state = _STATES[state_name] | 10247 state = _STATES[state_name] |
10248 if state['type'] == 'FrontBack': | 10248 if state['type'] == 'FrontBack': |
10249 num_states = len(state['states']) | 10249 num_states = len(state['states']) |
10250 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])): | 10250 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])): |
10251 if test_prev: | 10251 if test_prev: |
10252 file.Write(" if (") | 10252 f.write(" if (") |
10253 args = [] | 10253 args = [] |
10254 for place, item in enumerate(group): | 10254 for place, item in enumerate(group): |
10255 item_name = CachedStateName(item) | 10255 item_name = CachedStateName(item) |
10256 args.append('%s' % item_name) | 10256 args.append('%s' % item_name) |
10257 if test_prev: | 10257 if test_prev: |
10258 if place > 0: | 10258 if place > 0: |
10259 file.Write(' ||\n') | 10259 f.write(' ||\n') |
10260 file.Write("(%s != prev_state->%s)" % (item_name, item_name)) | 10260 f.write("(%s != prev_state->%s)" % (item_name, item_name)) |
10261 if test_prev: | 10261 if test_prev: |
10262 file.Write(")\n") | 10262 f.write(")\n") |
10263 file.Write( | 10263 f.write( |
10264 " gl%s(%s, %s);\n" % | 10264 " gl%s(%s, %s);\n" % |
10265 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args))) | 10265 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args))) |
10266 elif state['type'] == 'NamedParameter': | 10266 elif state['type'] == 'NamedParameter': |
10267 for item in state['states']: | 10267 for item in state['states']: |
10268 item_name = CachedStateName(item) | 10268 item_name = CachedStateName(item) |
10269 | 10269 |
10270 if 'extension_flag' in item: | 10270 if 'extension_flag' in item: |
10271 file.Write(" if (feature_info_->feature_flags().%s) {\n " % | 10271 f.write(" if (feature_info_->feature_flags().%s) {\n " % |
10272 item['extension_flag']) | 10272 item['extension_flag']) |
10273 if test_prev: | 10273 if test_prev: |
10274 if isinstance(item['default'], list): | 10274 if isinstance(item['default'], list): |
10275 file.Write(" if (memcmp(prev_state->%s, %s, " | 10275 f.write(" if (memcmp(prev_state->%s, %s, " |
10276 "sizeof(%s) * %d)) {\n" % | 10276 "sizeof(%s) * %d)) {\n" % |
10277 (item_name, item_name, item['type'], | 10277 (item_name, item_name, item['type'], |
10278 len(item['default']))) | 10278 len(item['default']))) |
10279 else: | 10279 else: |
10280 file.Write(" if (prev_state->%s != %s) {\n " % | 10280 f.write(" if (prev_state->%s != %s) {\n " % |
10281 (item_name, item_name)) | 10281 (item_name, item_name)) |
10282 if 'gl_version_flag' in item: | 10282 if 'gl_version_flag' in item: |
10283 item_name = item['gl_version_flag'] | 10283 item_name = item['gl_version_flag'] |
10284 inverted = '' | 10284 inverted = '' |
10285 if item_name[0] == '!': | 10285 if item_name[0] == '!': |
10286 inverted = '!' | 10286 inverted = '!' |
10287 item_name = item_name[1:] | 10287 item_name = item_name[1:] |
10288 file.Write(" if (%sfeature_info_->gl_version_info().%s) {\n" % | 10288 f.write(" if (%sfeature_info_->gl_version_info().%s) {\n" % |
10289 (inverted, item_name)) | 10289 (inverted, item_name)) |
10290 file.Write(" gl%s(%s, %s);\n" % | 10290 f.write(" gl%s(%s, %s);\n" % |
10291 (state['func'], | 10291 (state['func'], |
10292 (item['enum_set'] | 10292 (item['enum_set'] |
10293 if 'enum_set' in item else item['enum']), | 10293 if 'enum_set' in item else item['enum']), |
10294 item['name'])) | 10294 item['name'])) |
10295 if 'gl_version_flag' in item: | 10295 if 'gl_version_flag' in item: |
10296 file.Write(" }\n") | 10296 f.write(" }\n") |
10297 if test_prev: | 10297 if test_prev: |
10298 if 'extension_flag' in item: | 10298 if 'extension_flag' in item: |
10299 file.Write(" ") | 10299 f.write(" ") |
10300 file.Write(" }") | 10300 f.write(" }") |
10301 if 'extension_flag' in item: | 10301 if 'extension_flag' in item: |
10302 file.Write(" }") | 10302 f.write(" }") |
10303 else: | 10303 else: |
10304 if 'extension_flag' in state: | 10304 if 'extension_flag' in state: |
10305 file.Write(" if (feature_info_->feature_flags().%s)\n " % | 10305 f.write(" if (feature_info_->feature_flags().%s)\n " % |
10306 state['extension_flag']) | 10306 state['extension_flag']) |
10307 if test_prev: | 10307 if test_prev: |
10308 file.Write(" if (") | 10308 f.write(" if (") |
10309 args = [] | 10309 args = [] |
10310 for place, item in enumerate(state['states']): | 10310 for place, item in enumerate(state['states']): |
10311 item_name = CachedStateName(item) | 10311 item_name = CachedStateName(item) |
10312 args.append('%s' % item_name) | 10312 args.append('%s' % item_name) |
10313 if test_prev: | 10313 if test_prev: |
10314 if place > 0: | 10314 if place > 0: |
10315 file.Write(' ||\n') | 10315 f.write(' ||\n') |
10316 file.Write("(%s != prev_state->%s)" % | 10316 f.write("(%s != prev_state->%s)" % |
10317 (item_name, item_name)) | 10317 (item_name, item_name)) |
10318 if test_prev: | 10318 if test_prev: |
10319 file.Write(" )\n") | 10319 f.write(" )\n") |
10320 file.Write(" gl%s(%s);\n" % (state['func'], ", ".join(args))) | 10320 f.write(" gl%s(%s);\n" % (state['func'], ", ".join(args))) |
10321 | 10321 |
10322 file.Write(" if (prev_state) {") | 10322 f.write(" if (prev_state) {") |
10323 WriteStates(True) | 10323 WriteStates(True) |
10324 file.Write(" } else {") | 10324 f.write(" } else {") |
10325 WriteStates(False) | 10325 WriteStates(False) |
10326 file.Write(" }") | 10326 f.write(" }") |
10327 file.Write("}\n") | 10327 f.write("}\n") |
10328 | 10328 |
10329 file.Write("""bool ContextState::GetEnabled(GLenum cap) const { | 10329 f.write("""bool ContextState::GetEnabled(GLenum cap) const { |
10330 switch (cap) { | 10330 switch (cap) { |
10331 """) | 10331 """) |
10332 for capability in _CAPABILITY_FLAGS: | 10332 for capability in _CAPABILITY_FLAGS: |
10333 file.Write(" case GL_%s:\n" % capability['name'].upper()) | 10333 f.write(" case GL_%s:\n" % capability['name'].upper()) |
10334 file.Write(" return enable_flags.%s;\n" % capability['name']) | 10334 f.write(" return enable_flags.%s;\n" % capability['name']) |
10335 file.Write(""" default: | 10335 f.write(""" default: |
10336 NOTREACHED(); | 10336 NOTREACHED(); |
10337 return false; | 10337 return false; |
10338 } | 10338 } |
10339 } | 10339 } |
10340 """) | 10340 """) |
10341 | 10341 |
10342 self.WriteContextStateGetters(file, "ContextState") | 10342 self.WriteContextStateGetters(f, "ContextState") |
10343 file.Close() | 10343 f.close() |
10344 self.generated_cpp_filenames.append(file.filename) | 10344 self.generated_cpp_filenames.append(f.filename) |
10345 | 10345 |
10346 def WriteClientContextStateImpl(self, filename): | 10346 def WriteClientContextStateImpl(self, filename): |
10347 """Writes the context state client side implementation.""" | 10347 """Writes the context state client side implementation.""" |
10348 file = CHeaderWriter( | 10348 f = CHeaderWriter( |
10349 filename, | 10349 filename, |
10350 "// It is included by client_context_state.cc\n") | 10350 "// It is included by client_context_state.cc\n") |
10351 code = [] | 10351 code = [] |
10352 for capability in _CAPABILITY_FLAGS: | 10352 for capability in _CAPABILITY_FLAGS: |
10353 code.append("%s(%s)" % | 10353 code.append("%s(%s)" % |
10354 (capability['name'], | 10354 (capability['name'], |
10355 ('false', 'true')['default' in capability])) | 10355 ('false', 'true')['default' in capability])) |
10356 file.Write( | 10356 f.write( |
10357 "ClientContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" % | 10357 "ClientContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" % |
10358 ",\n ".join(code)) | 10358 ",\n ".join(code)) |
10359 file.Write("\n") | 10359 f.write("\n") |
10360 | 10360 |
10361 file.Write(""" | 10361 f.write(""" |
10362 bool ClientContextState::SetCapabilityState( | 10362 bool ClientContextState::SetCapabilityState( |
10363 GLenum cap, bool enabled, bool* changed) { | 10363 GLenum cap, bool enabled, bool* changed) { |
10364 *changed = false; | 10364 *changed = false; |
10365 switch (cap) { | 10365 switch (cap) { |
10366 """) | 10366 """) |
10367 for capability in _CAPABILITY_FLAGS: | 10367 for capability in _CAPABILITY_FLAGS: |
10368 file.Write(" case GL_%s:\n" % capability['name'].upper()) | 10368 f.write(" case GL_%s:\n" % capability['name'].upper()) |
10369 file.Write(""" if (enable_flags.%(name)s != enabled) { | 10369 f.write(""" if (enable_flags.%(name)s != enabled) { |
10370 *changed = true; | 10370 *changed = true; |
10371 enable_flags.%(name)s = enabled; | 10371 enable_flags.%(name)s = enabled; |
10372 } | 10372 } |
10373 return true; | 10373 return true; |
10374 """ % capability) | 10374 """ % capability) |
10375 file.Write(""" default: | 10375 f.write(""" default: |
10376 return false; | 10376 return false; |
10377 } | 10377 } |
10378 } | 10378 } |
10379 """) | 10379 """) |
10380 file.Write("""bool ClientContextState::GetEnabled( | 10380 f.write("""bool ClientContextState::GetEnabled( |
10381 GLenum cap, bool* enabled) const { | 10381 GLenum cap, bool* enabled) const { |
10382 switch (cap) { | 10382 switch (cap) { |
10383 """) | 10383 """) |
10384 for capability in _CAPABILITY_FLAGS: | 10384 for capability in _CAPABILITY_FLAGS: |
10385 file.Write(" case GL_%s:\n" % capability['name'].upper()) | 10385 f.write(" case GL_%s:\n" % capability['name'].upper()) |
10386 file.Write(" *enabled = enable_flags.%s;\n" % capability['name']) | 10386 f.write(" *enabled = enable_flags.%s;\n" % capability['name']) |
10387 file.Write(" return true;\n") | 10387 f.write(" return true;\n") |
10388 file.Write(""" default: | 10388 f.write(""" default: |
10389 return false; | 10389 return false; |
10390 } | 10390 } |
10391 } | 10391 } |
10392 """) | 10392 """) |
10393 file.Close() | 10393 f.close() |
10394 self.generated_cpp_filenames.append(file.filename) | 10394 self.generated_cpp_filenames.append(f.filename) |
10395 | 10395 |
10396 def WriteServiceImplementation(self, filename): | 10396 def WriteServiceImplementation(self, filename): |
10397 """Writes the service decorder implementation.""" | 10397 """Writes the service decorder implementation.""" |
10398 file = CHeaderWriter( | 10398 f = CHeaderWriter( |
10399 filename, | 10399 filename, |
10400 "// It is included by gles2_cmd_decoder.cc\n") | 10400 "// It is included by gles2_cmd_decoder.cc\n") |
10401 | 10401 |
10402 for func in self.functions: | 10402 for func in self.functions: |
10403 if True: | 10403 if True: |
10404 #gen_cmd = func.GetInfo('gen_cmd') | 10404 #gen_cmd = func.GetInfo('gen_cmd') |
10405 #if gen_cmd == True or gen_cmd == None: | 10405 #if gen_cmd == True or gen_cmd == None: |
10406 func.WriteServiceImplementation(file) | 10406 func.WriteServiceImplementation(f) |
10407 | 10407 |
10408 file.Write(""" | 10408 f.write(""" |
10409 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { | 10409 bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { |
10410 switch (cap) { | 10410 switch (cap) { |
10411 """) | 10411 """) |
10412 for capability in _CAPABILITY_FLAGS: | 10412 for capability in _CAPABILITY_FLAGS: |
10413 file.Write(" case GL_%s:\n" % capability['name'].upper()) | 10413 f.write(" case GL_%s:\n" % capability['name'].upper()) |
10414 if 'state_flag' in capability: | 10414 if 'state_flag' in capability: |
10415 | 10415 |
10416 file.Write("""\ | 10416 f.write("""\ |
10417 state_.enable_flags.%(name)s = enabled; | 10417 state_.enable_flags.%(name)s = enabled; |
10418 if (state_.enable_flags.cached_%(name)s != enabled | 10418 if (state_.enable_flags.cached_%(name)s != enabled |
10419 || state_.ignore_cached_state) { | 10419 || state_.ignore_cached_state) { |
10420 %(state_flag)s = true; | 10420 %(state_flag)s = true; |
10421 } | 10421 } |
10422 return false; | 10422 return false; |
10423 """ % capability) | 10423 """ % capability) |
10424 else: | 10424 else: |
10425 file.Write("""\ | 10425 f.write("""\ |
10426 state_.enable_flags.%(name)s = enabled; | 10426 state_.enable_flags.%(name)s = enabled; |
10427 if (state_.enable_flags.cached_%(name)s != enabled | 10427 if (state_.enable_flags.cached_%(name)s != enabled |
10428 || state_.ignore_cached_state) { | 10428 || state_.ignore_cached_state) { |
10429 state_.enable_flags.cached_%(name)s = enabled; | 10429 state_.enable_flags.cached_%(name)s = enabled; |
10430 return true; | 10430 return true; |
10431 } | 10431 } |
10432 return false; | 10432 return false; |
10433 """ % capability) | 10433 """ % capability) |
10434 file.Write(""" default: | 10434 f.write(""" default: |
10435 NOTREACHED(); | 10435 NOTREACHED(); |
10436 return false; | 10436 return false; |
10437 } | 10437 } |
10438 } | 10438 } |
10439 """) | 10439 """) |
10440 file.Close() | 10440 f.close() |
10441 self.generated_cpp_filenames.append(file.filename) | 10441 self.generated_cpp_filenames.append(f.filename) |
10442 | 10442 |
10443 def WriteServiceUnitTests(self, filename): | 10443 def WriteServiceUnitTests(self, filename): |
10444 """Writes the service decorder unit tests.""" | 10444 """Writes the service decorder unit tests.""" |
10445 num_tests = len(self.functions) | 10445 num_tests = len(self.functions) |
10446 FUNCTIONS_PER_FILE = 98 # hard code this so it doesn't change. | 10446 FUNCTIONS_PER_FILE = 98 # hard code this so it doesn't change. |
10447 count = 0 | 10447 count = 0 |
10448 for test_num in range(0, num_tests, FUNCTIONS_PER_FILE): | 10448 for test_num in range(0, num_tests, FUNCTIONS_PER_FILE): |
10449 count += 1 | 10449 count += 1 |
10450 name = filename % count | 10450 name = filename % count |
10451 file = CHeaderWriter( | 10451 f = CHeaderWriter( |
10452 name, | 10452 name, |
10453 "// It is included by gles2_cmd_decoder_unittest_%d.cc\n" % count) | 10453 "// It is included by gles2_cmd_decoder_unittest_%d.cc\n" % count) |
10454 test_name = 'GLES2DecoderTest%d' % count | 10454 test_name = 'GLES2DecoderTest%d' % count |
10455 end = test_num + FUNCTIONS_PER_FILE | 10455 end = test_num + FUNCTIONS_PER_FILE |
10456 if end > num_tests: | 10456 if end > num_tests: |
10457 end = num_tests | 10457 end = num_tests |
10458 for idx in range(test_num, end): | 10458 for idx in range(test_num, end): |
10459 func = self.functions[idx] | 10459 func = self.functions[idx] |
10460 | 10460 |
10461 # Do any filtering of the functions here, so that the functions | 10461 # Do any filtering of the functions here, so that the functions |
10462 # will not move between the numbered files if filtering properties | 10462 # will not move between the numbered files if filtering properties |
10463 # are changed. | 10463 # are changed. |
10464 if func.GetInfo('extension_flag'): | 10464 if func.GetInfo('extension_flag'): |
10465 continue | 10465 continue |
10466 | 10466 |
10467 if True: | 10467 if True: |
10468 #gen_cmd = func.GetInfo('gen_cmd') | 10468 #gen_cmd = func.GetInfo('gen_cmd') |
10469 #if gen_cmd == True or gen_cmd == None: | 10469 #if gen_cmd == True or gen_cmd == None: |
10470 if func.GetInfo('unit_test') == False: | 10470 if func.GetInfo('unit_test') == False: |
10471 file.Write("// TODO(gman): %s\n" % func.name) | 10471 f.write("// TODO(gman): %s\n" % func.name) |
10472 else: | 10472 else: |
10473 func.WriteServiceUnitTest(file, { | 10473 func.WriteServiceUnitTest(f, { |
10474 'test_name': test_name | 10474 'test_name': test_name |
10475 }) | 10475 }) |
10476 file.Close() | 10476 f.close() |
10477 self.generated_cpp_filenames.append(file.filename) | 10477 self.generated_cpp_filenames.append(f.filename) |
10478 file = CHeaderWriter( | 10478 f = CHeaderWriter( |
10479 filename % 0, | 10479 filename % 0, |
10480 "// It is included by gles2_cmd_decoder_unittest_base.cc\n") | 10480 "// It is included by gles2_cmd_decoder_unittest_base.cc\n") |
10481 file.Write( | 10481 f.write( |
10482 """void GLES2DecoderTestBase::SetupInitCapabilitiesExpectations( | 10482 """void GLES2DecoderTestBase::SetupInitCapabilitiesExpectations( |
10483 bool es3_capable) {""") | 10483 bool es3_capable) {""") |
10484 for capability in _CAPABILITY_FLAGS: | 10484 for capability in _CAPABILITY_FLAGS: |
10485 capability_es3 = 'es3' in capability and capability['es3'] == True | 10485 capability_es3 = 'es3' in capability and capability['es3'] == True |
10486 if not capability_es3: | 10486 if not capability_es3: |
10487 file.Write(" ExpectEnableDisable(GL_%s, %s);\n" % | 10487 f.write(" ExpectEnableDisable(GL_%s, %s);\n" % |
10488 (capability['name'].upper(), | 10488 (capability['name'].upper(), |
10489 ('false', 'true')['default' in capability])) | 10489 ('false', 'true')['default' in capability])) |
10490 | 10490 |
10491 file.Write(" if (es3_capable) {") | 10491 f.write(" if (es3_capable) {") |
10492 for capability in _CAPABILITY_FLAGS: | 10492 for capability in _CAPABILITY_FLAGS: |
10493 capability_es3 = 'es3' in capability and capability['es3'] == True | 10493 capability_es3 = 'es3' in capability and capability['es3'] == True |
10494 if capability_es3: | 10494 if capability_es3: |
10495 file.Write(" ExpectEnableDisable(GL_%s, %s);\n" % | 10495 f.write(" ExpectEnableDisable(GL_%s, %s);\n" % |
10496 (capability['name'].upper(), | 10496 (capability['name'].upper(), |
10497 ('false', 'true')['default' in capability])) | 10497 ('false', 'true')['default' in capability])) |
10498 file.Write(""" } | 10498 f.write(""" } |
10499 } | 10499 } |
10500 | 10500 |
10501 void GLES2DecoderTestBase::SetupInitStateExpectations() { | 10501 void GLES2DecoderTestBase::SetupInitStateExpectations() { |
10502 """) | 10502 """) |
10503 | 10503 |
10504 # We need to sort the keys so the expectations match | 10504 # We need to sort the keys so the expectations match |
10505 for state_name in sorted(_STATES.keys()): | 10505 for state_name in sorted(_STATES.keys()): |
10506 state = _STATES[state_name] | 10506 state = _STATES[state_name] |
10507 if state['type'] == 'FrontBack': | 10507 if state['type'] == 'FrontBack': |
10508 num_states = len(state['states']) | 10508 num_states = len(state['states']) |
10509 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])): | 10509 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])): |
10510 args = [] | 10510 args = [] |
10511 for item in group: | 10511 for item in group: |
10512 if 'expected' in item: | 10512 if 'expected' in item: |
10513 args.append(item['expected']) | 10513 args.append(item['expected']) |
10514 else: | 10514 else: |
10515 args.append(item['default']) | 10515 args.append(item['default']) |
10516 file.Write( | 10516 f.write( |
10517 " EXPECT_CALL(*gl_, %s(%s, %s))\n" % | 10517 " EXPECT_CALL(*gl_, %s(%s, %s))\n" % |
10518 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args))) | 10518 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args))) |
10519 file.Write(" .Times(1)\n") | 10519 f.write(" .Times(1)\n") |
10520 file.Write(" .RetiresOnSaturation();\n") | 10520 f.write(" .RetiresOnSaturation();\n") |
10521 elif state['type'] == 'NamedParameter': | 10521 elif state['type'] == 'NamedParameter': |
10522 for item in state['states']: | 10522 for item in state['states']: |
10523 if 'extension_flag' in item: | 10523 if 'extension_flag' in item: |
10524 file.Write(" if (group_->feature_info()->feature_flags().%s) {\n" % | 10524 f.write(" if (group_->feature_info()->feature_flags().%s) {\n" % |
10525 item['extension_flag']) | 10525 item['extension_flag']) |
10526 file.Write(" ") | 10526 f.write(" ") |
10527 expect_value = item['default'] | 10527 expect_value = item['default'] |
10528 if isinstance(expect_value, list): | 10528 if isinstance(expect_value, list): |
10529 # TODO: Currently we do not check array values. | 10529 # TODO: Currently we do not check array values. |
10530 expect_value = "_" | 10530 expect_value = "_" |
10531 | 10531 |
10532 file.Write( | 10532 f.write( |
10533 " EXPECT_CALL(*gl_, %s(%s, %s))\n" % | 10533 " EXPECT_CALL(*gl_, %s(%s, %s))\n" % |
10534 (state['func'], | 10534 (state['func'], |
10535 (item['enum_set'] | 10535 (item['enum_set'] |
10536 if 'enum_set' in item else item['enum']), | 10536 if 'enum_set' in item else item['enum']), |
10537 expect_value)) | 10537 expect_value)) |
10538 file.Write(" .Times(1)\n") | 10538 f.write(" .Times(1)\n") |
10539 file.Write(" .RetiresOnSaturation();\n") | 10539 f.write(" .RetiresOnSaturation();\n") |
10540 if 'extension_flag' in item: | 10540 if 'extension_flag' in item: |
10541 file.Write(" }\n") | 10541 f.write(" }\n") |
10542 else: | 10542 else: |
10543 if 'extension_flag' in state: | 10543 if 'extension_flag' in state: |
10544 file.Write(" if (group_->feature_info()->feature_flags().%s) {\n" % | 10544 f.write(" if (group_->feature_info()->feature_flags().%s) {\n" % |
10545 state['extension_flag']) | 10545 state['extension_flag']) |
10546 file.Write(" ") | 10546 f.write(" ") |
10547 args = [] | 10547 args = [] |
10548 for item in state['states']: | 10548 for item in state['states']: |
10549 if 'expected' in item: | 10549 if 'expected' in item: |
10550 args.append(item['expected']) | 10550 args.append(item['expected']) |
10551 else: | 10551 else: |
10552 args.append(item['default']) | 10552 args.append(item['default']) |
10553 # TODO: Currently we do not check array values. | 10553 # TODO: Currently we do not check array values. |
10554 args = ["_" if isinstance(arg, list) else arg for arg in args] | 10554 args = ["_" if isinstance(arg, list) else arg for arg in args] |
10555 file.Write(" EXPECT_CALL(*gl_, %s(%s))\n" % | 10555 f.write(" EXPECT_CALL(*gl_, %s(%s))\n" % |
10556 (state['func'], ", ".join(args))) | 10556 (state['func'], ", ".join(args))) |
10557 file.Write(" .Times(1)\n") | 10557 f.write(" .Times(1)\n") |
10558 file.Write(" .RetiresOnSaturation();\n") | 10558 f.write(" .RetiresOnSaturation();\n") |
10559 if 'extension_flag' in state: | 10559 if 'extension_flag' in state: |
10560 file.Write(" }\n") | 10560 f.write(" }\n") |
10561 file.Write("""} | 10561 f.write("""} |
10562 """) | 10562 """) |
10563 file.Close() | 10563 f.close() |
10564 self.generated_cpp_filenames.append(file.filename) | 10564 self.generated_cpp_filenames.append(f.filename) |
10565 | 10565 |
10566 def WriteServiceUnitTestsForExtensions(self, filename): | 10566 def WriteServiceUnitTestsForExtensions(self, filename): |
10567 """Writes the service decorder unit tests for functions with extension_flag. | 10567 """Writes the service decorder unit tests for functions with extension_flag. |
10568 | 10568 |
10569 The functions are special in that they need a specific unit test | 10569 The functions are special in that they need a specific unit test |
10570 baseclass to turn on the extension. | 10570 baseclass to turn on the extension. |
10571 """ | 10571 """ |
10572 functions = [f for f in self.functions if f.GetInfo('extension_flag')] | 10572 functions = [f for f in self.functions if f.GetInfo('extension_flag')] |
10573 file = CHeaderWriter( | 10573 f = CHeaderWriter( |
10574 filename, | 10574 filename, |
10575 "// It is included by gles2_cmd_decoder_unittest_extensions.cc\n") | 10575 "// It is included by gles2_cmd_decoder_unittest_extensions.cc\n") |
10576 for func in functions: | 10576 for func in functions: |
10577 if True: | 10577 if True: |
10578 if func.GetInfo('unit_test') == False: | 10578 if func.GetInfo('unit_test') == False: |
10579 file.Write("// TODO(gman): %s\n" % func.name) | 10579 f.write("// TODO(gman): %s\n" % func.name) |
10580 else: | 10580 else: |
10581 extension = ToCamelCase( | 10581 extension = ToCamelCase( |
10582 ToGLExtensionString(func.GetInfo('extension_flag'))) | 10582 ToGLExtensionString(func.GetInfo('extension_flag'))) |
10583 func.WriteServiceUnitTest(file, { | 10583 func.WriteServiceUnitTest(f, { |
10584 'test_name': 'GLES2DecoderTestWith%s' % extension | 10584 'test_name': 'GLES2DecoderTestWith%s' % extension |
10585 }) | 10585 }) |
10586 | 10586 |
10587 file.Close() | 10587 f.close() |
10588 self.generated_cpp_filenames.append(file.filename) | 10588 self.generated_cpp_filenames.append(f.filename) |
10589 | 10589 |
10590 def WriteGLES2Header(self, filename): | 10590 def WriteGLES2Header(self, filename): |
10591 """Writes the GLES2 header.""" | 10591 """Writes the GLES2 header.""" |
10592 file = CHeaderWriter( | 10592 f = CHeaderWriter( |
10593 filename, | 10593 filename, |
10594 "// This file contains Chromium-specific GLES2 declarations.\n\n") | 10594 "// This file contains Chromium-specific GLES2 declarations.\n\n") |
10595 | 10595 |
10596 for func in self.original_functions: | 10596 for func in self.original_functions: |
10597 func.WriteGLES2Header(file) | 10597 func.WriteGLES2Header(f) |
10598 | 10598 |
10599 file.Write("\n") | 10599 f.write("\n") |
10600 file.Close() | 10600 f.close() |
10601 self.generated_cpp_filenames.append(file.filename) | 10601 self.generated_cpp_filenames.append(f.filename) |
10602 | 10602 |
10603 def WriteGLES2CLibImplementation(self, filename): | 10603 def WriteGLES2CLibImplementation(self, filename): |
10604 """Writes the GLES2 c lib implementation.""" | 10604 """Writes the GLES2 c lib implementation.""" |
10605 file = CHeaderWriter( | 10605 f = CHeaderWriter( |
10606 filename, | 10606 filename, |
10607 "// These functions emulate GLES2 over command buffers.\n") | 10607 "// These functions emulate GLES2 over command buffers.\n") |
10608 | 10608 |
10609 for func in self.original_functions: | 10609 for func in self.original_functions: |
10610 func.WriteGLES2CLibImplementation(file) | 10610 func.WriteGLES2CLibImplementation(f) |
10611 | 10611 |
10612 file.Write(""" | 10612 f.write(""" |
10613 namespace gles2 { | 10613 namespace gles2 { |
10614 | 10614 |
10615 extern const NameToFunc g_gles2_function_table[] = { | 10615 extern const NameToFunc g_gles2_function_table[] = { |
10616 """) | 10616 """) |
10617 for func in self.original_functions: | 10617 for func in self.original_functions: |
10618 file.Write( | 10618 f.write( |
10619 ' { "gl%s", reinterpret_cast<GLES2FunctionPointer>(gl%s), },\n' % | 10619 ' { "gl%s", reinterpret_cast<GLES2FunctionPointer>(gl%s), },\n' % |
10620 (func.name, func.name)) | 10620 (func.name, func.name)) |
10621 file.Write(""" { NULL, NULL, }, | 10621 f.write(""" { NULL, NULL, }, |
10622 }; | 10622 }; |
10623 | 10623 |
10624 } // namespace gles2 | 10624 } // namespace gles2 |
10625 """) | 10625 """) |
10626 file.Close() | 10626 f.close() |
10627 self.generated_cpp_filenames.append(file.filename) | 10627 self.generated_cpp_filenames.append(f.filename) |
10628 | 10628 |
10629 def WriteGLES2InterfaceHeader(self, filename): | 10629 def WriteGLES2InterfaceHeader(self, filename): |
10630 """Writes the GLES2 interface header.""" | 10630 """Writes the GLES2 interface header.""" |
10631 file = CHeaderWriter( | 10631 f = CHeaderWriter( |
10632 filename, | 10632 filename, |
10633 "// This file is included by gles2_interface.h to declare the\n" | 10633 "// This file is included by gles2_interface.h to declare the\n" |
10634 "// GL api functions.\n") | 10634 "// GL api functions.\n") |
10635 for func in self.original_functions: | 10635 for func in self.original_functions: |
10636 func.WriteGLES2InterfaceHeader(file) | 10636 func.WriteGLES2InterfaceHeader(f) |
10637 file.Close() | 10637 f.close() |
10638 self.generated_cpp_filenames.append(file.filename) | 10638 self.generated_cpp_filenames.append(f.filename) |
10639 | 10639 |
10640 def WriteMojoGLES2ImplHeader(self, filename): | 10640 def WriteMojoGLES2ImplHeader(self, filename): |
10641 """Writes the Mojo GLES2 implementation header.""" | 10641 """Writes the Mojo GLES2 implementation header.""" |
10642 file = CHeaderWriter( | 10642 f = CHeaderWriter( |
10643 filename, | 10643 filename, |
10644 "// This file is included by gles2_interface.h to declare the\n" | 10644 "// This file is included by gles2_interface.h to declare the\n" |
10645 "// GL api functions.\n") | 10645 "// GL api functions.\n") |
10646 | 10646 |
10647 code = """ | 10647 code = """ |
10648 #include "gpu/command_buffer/client/gles2_interface.h" | 10648 #include "gpu/command_buffer/client/gles2_interface.h" |
10649 #include "third_party/mojo/src/mojo/public/c/gles2/gles2.h" | 10649 #include "third_party/mojo/src/mojo/public/c/gles2/gles2.h" |
10650 | 10650 |
10651 namespace mojo { | 10651 namespace mojo { |
10652 | 10652 |
10653 class MojoGLES2Impl : public gpu::gles2::GLES2Interface { | 10653 class MojoGLES2Impl : public gpu::gles2::GLES2Interface { |
10654 public: | 10654 public: |
10655 explicit MojoGLES2Impl(MojoGLES2Context context) { | 10655 explicit MojoGLES2Impl(MojoGLES2Context context) { |
10656 context_ = context; | 10656 context_ = context; |
10657 } | 10657 } |
10658 ~MojoGLES2Impl() override {} | 10658 ~MojoGLES2Impl() override {} |
10659 """ | 10659 """ |
10660 file.Write(code); | 10660 f.write(code); |
10661 for func in self.original_functions: | 10661 for func in self.original_functions: |
10662 func.WriteMojoGLES2ImplHeader(file) | 10662 func.WriteMojoGLES2ImplHeader(f) |
10663 code = """ | 10663 code = """ |
10664 private: | 10664 private: |
10665 MojoGLES2Context context_; | 10665 MojoGLES2Context context_; |
10666 }; | 10666 }; |
10667 | 10667 |
10668 } // namespace mojo | 10668 } // namespace mojo |
10669 """ | 10669 """ |
10670 file.Write(code); | 10670 f.write(code); |
10671 file.Close() | 10671 f.close() |
10672 self.generated_cpp_filenames.append(file.filename) | 10672 self.generated_cpp_filenames.append(f.filename) |
10673 | 10673 |
10674 def WriteMojoGLES2Impl(self, filename): | 10674 def WriteMojoGLES2Impl(self, filename): |
10675 """Writes the Mojo GLES2 implementation.""" | 10675 """Writes the Mojo GLES2 implementation.""" |
10676 file = CWriter(filename) | 10676 f = CWriter(filename) |
10677 file.Write(_LICENSE) | 10677 f.write(_LICENSE) |
10678 file.Write(_DO_NOT_EDIT_WARNING) | 10678 f.write(_DO_NOT_EDIT_WARNING) |
10679 | 10679 |
10680 code = """ | 10680 code = """ |
10681 #include "mojo/gpu/mojo_gles2_impl_autogen.h" | 10681 #include "mojo/gpu/mojo_gles2_impl_autogen.h" |
10682 | 10682 |
10683 #include "base/logging.h" | 10683 #include "base/logging.h" |
10684 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_copy_texture.h" | 10684 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_copy_texture.h" |
10685 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_image.h" | 10685 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_image.h" |
10686 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_miscellaneous.h" | 10686 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_miscellaneous.h" |
10687 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_pixel_transfer_buffe
r_object.h" | 10687 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_pixel_transfer_buffe
r_object.h" |
10688 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_sub_image.h" | 10688 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_sub_image.h" |
10689 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_sync_point.h" | 10689 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_sync_point.h" |
10690 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_texture_mailbox.h" | 10690 #include "third_party/mojo/src/mojo/public/c/gles2/chromium_texture_mailbox.h" |
10691 #include "third_party/mojo/src/mojo/public/c/gles2/gles2.h" | 10691 #include "third_party/mojo/src/mojo/public/c/gles2/gles2.h" |
10692 #include "third_party/mojo/src/mojo/public/c/gles2/occlusion_query_ext.h" | 10692 #include "third_party/mojo/src/mojo/public/c/gles2/occlusion_query_ext.h" |
10693 | 10693 |
10694 namespace mojo { | 10694 namespace mojo { |
10695 | 10695 |
10696 """ | 10696 """ |
10697 file.Write(code); | 10697 f.write(code); |
10698 for func in self.original_functions: | 10698 for func in self.original_functions: |
10699 func.WriteMojoGLES2Impl(file) | 10699 func.WriteMojoGLES2Impl(f) |
10700 code = """ | 10700 code = """ |
10701 | 10701 |
10702 } // namespace mojo | 10702 } // namespace mojo |
10703 """ | 10703 """ |
10704 file.Write(code); | 10704 f.write(code); |
10705 file.Close() | 10705 f.close() |
10706 self.generated_cpp_filenames.append(file.filename) | 10706 self.generated_cpp_filenames.append(f.filename) |
10707 | 10707 |
10708 def WriteGLES2InterfaceStub(self, filename): | 10708 def WriteGLES2InterfaceStub(self, filename): |
10709 """Writes the GLES2 interface stub header.""" | 10709 """Writes the GLES2 interface stub header.""" |
10710 file = CHeaderWriter( | 10710 f = CHeaderWriter( |
10711 filename, | 10711 filename, |
10712 "// This file is included by gles2_interface_stub.h.\n") | 10712 "// This file is included by gles2_interface_stub.h.\n") |
10713 for func in self.original_functions: | 10713 for func in self.original_functions: |
10714 func.WriteGLES2InterfaceStub(file) | 10714 func.WriteGLES2InterfaceStub(f) |
10715 file.Close() | 10715 f.close() |
10716 self.generated_cpp_filenames.append(file.filename) | 10716 self.generated_cpp_filenames.append(f.filename) |
10717 | 10717 |
10718 def WriteGLES2InterfaceStubImpl(self, filename): | 10718 def WriteGLES2InterfaceStubImpl(self, filename): |
10719 """Writes the GLES2 interface header.""" | 10719 """Writes the GLES2 interface header.""" |
10720 file = CHeaderWriter( | 10720 f = CHeaderWriter( |
10721 filename, | 10721 filename, |
10722 "// This file is included by gles2_interface_stub.cc.\n") | 10722 "// This file is included by gles2_interface_stub.cc.\n") |
10723 for func in self.original_functions: | 10723 for func in self.original_functions: |
10724 func.WriteGLES2InterfaceStubImpl(file) | 10724 func.WriteGLES2InterfaceStubImpl(f) |
10725 file.Close() | 10725 f.close() |
10726 self.generated_cpp_filenames.append(file.filename) | 10726 self.generated_cpp_filenames.append(f.filename) |
10727 | 10727 |
10728 def WriteGLES2ImplementationHeader(self, filename): | 10728 def WriteGLES2ImplementationHeader(self, filename): |
10729 """Writes the GLES2 Implementation header.""" | 10729 """Writes the GLES2 Implementation header.""" |
10730 file = CHeaderWriter( | 10730 f = CHeaderWriter( |
10731 filename, | 10731 filename, |
10732 "// This file is included by gles2_implementation.h to declare the\n" | 10732 "// This file is included by gles2_implementation.h to declare the\n" |
10733 "// GL api functions.\n") | 10733 "// GL api functions.\n") |
10734 for func in self.original_functions: | 10734 for func in self.original_functions: |
10735 func.WriteGLES2ImplementationHeader(file) | 10735 func.WriteGLES2ImplementationHeader(f) |
10736 file.Close() | 10736 f.close() |
10737 self.generated_cpp_filenames.append(file.filename) | 10737 self.generated_cpp_filenames.append(f.filename) |
10738 | 10738 |
10739 def WriteGLES2Implementation(self, filename): | 10739 def WriteGLES2Implementation(self, filename): |
10740 """Writes the GLES2 Implementation.""" | 10740 """Writes the GLES2 Implementation.""" |
10741 file = CHeaderWriter( | 10741 f = CHeaderWriter( |
10742 filename, | 10742 filename, |
10743 "// This file is included by gles2_implementation.cc to define the\n" | 10743 "// This file is included by gles2_implementation.cc to define the\n" |
10744 "// GL api functions.\n") | 10744 "// GL api functions.\n") |
10745 for func in self.original_functions: | 10745 for func in self.original_functions: |
10746 func.WriteGLES2Implementation(file) | 10746 func.WriteGLES2Implementation(f) |
10747 file.Close() | 10747 f.close() |
10748 self.generated_cpp_filenames.append(file.filename) | 10748 self.generated_cpp_filenames.append(f.filename) |
10749 | 10749 |
10750 def WriteGLES2TraceImplementationHeader(self, filename): | 10750 def WriteGLES2TraceImplementationHeader(self, filename): |
10751 """Writes the GLES2 Trace Implementation header.""" | 10751 """Writes the GLES2 Trace Implementation header.""" |
10752 file = CHeaderWriter( | 10752 f = CHeaderWriter( |
10753 filename, | 10753 filename, |
10754 "// This file is included by gles2_trace_implementation.h\n") | 10754 "// This file is included by gles2_trace_implementation.h\n") |
10755 for func in self.original_functions: | 10755 for func in self.original_functions: |
10756 func.WriteGLES2TraceImplementationHeader(file) | 10756 func.WriteGLES2TraceImplementationHeader(f) |
10757 file.Close() | 10757 f.close() |
10758 self.generated_cpp_filenames.append(file.filename) | 10758 self.generated_cpp_filenames.append(f.filename) |
10759 | 10759 |
10760 def WriteGLES2TraceImplementation(self, filename): | 10760 def WriteGLES2TraceImplementation(self, filename): |
10761 """Writes the GLES2 Trace Implementation.""" | 10761 """Writes the GLES2 Trace Implementation.""" |
10762 file = CHeaderWriter( | 10762 f = CHeaderWriter( |
10763 filename, | 10763 filename, |
10764 "// This file is included by gles2_trace_implementation.cc\n") | 10764 "// This file is included by gles2_trace_implementation.cc\n") |
10765 for func in self.original_functions: | 10765 for func in self.original_functions: |
10766 func.WriteGLES2TraceImplementation(file) | 10766 func.WriteGLES2TraceImplementation(f) |
10767 file.Close() | 10767 f.close() |
10768 self.generated_cpp_filenames.append(file.filename) | 10768 self.generated_cpp_filenames.append(f.filename) |
10769 | 10769 |
10770 def WriteGLES2ImplementationUnitTests(self, filename): | 10770 def WriteGLES2ImplementationUnitTests(self, filename): |
10771 """Writes the GLES2 helper header.""" | 10771 """Writes the GLES2 helper header.""" |
10772 file = CHeaderWriter( | 10772 f = CHeaderWriter( |
10773 filename, | 10773 filename, |
10774 "// This file is included by gles2_implementation.h to declare the\n" | 10774 "// This file is included by gles2_implementation.h to declare the\n" |
10775 "// GL api functions.\n") | 10775 "// GL api functions.\n") |
10776 for func in self.original_functions: | 10776 for func in self.original_functions: |
10777 func.WriteGLES2ImplementationUnitTest(file) | 10777 func.WriteGLES2ImplementationUnitTest(f) |
10778 file.Close() | 10778 f.close() |
10779 self.generated_cpp_filenames.append(file.filename) | 10779 self.generated_cpp_filenames.append(f.filename) |
10780 | 10780 |
10781 def WriteServiceUtilsHeader(self, filename): | 10781 def WriteServiceUtilsHeader(self, filename): |
10782 """Writes the gles2 auto generated utility header.""" | 10782 """Writes the gles2 auto generated utility header.""" |
10783 file = CHeaderWriter(filename) | 10783 f = CHeaderWriter(filename) |
10784 for name in sorted(_NAMED_TYPE_INFO.keys()): | 10784 for name in sorted(_NAMED_TYPE_INFO.keys()): |
10785 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10785 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
10786 if named_type.IsConstant(): | 10786 if named_type.IsConstant(): |
10787 continue | 10787 continue |
10788 file.Write("ValueValidator<%s> %s;\n" % | 10788 f.write("ValueValidator<%s> %s;\n" % |
10789 (named_type.GetType(), ToUnderscore(name))) | 10789 (named_type.GetType(), ToUnderscore(name))) |
10790 file.Write("\n") | 10790 f.write("\n") |
10791 file.Close() | 10791 f.close() |
10792 self.generated_cpp_filenames.append(file.filename) | 10792 self.generated_cpp_filenames.append(f.filename) |
10793 | 10793 |
10794 def WriteServiceUtilsImplementation(self, filename): | 10794 def WriteServiceUtilsImplementation(self, filename): |
10795 """Writes the gles2 auto generated utility implementation.""" | 10795 """Writes the gles2 auto generated utility implementation.""" |
10796 file = CHeaderWriter(filename) | 10796 f = CHeaderWriter(filename) |
10797 names = sorted(_NAMED_TYPE_INFO.keys()) | 10797 names = sorted(_NAMED_TYPE_INFO.keys()) |
10798 for name in names: | 10798 for name in names: |
10799 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10799 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
10800 if named_type.IsConstant(): | 10800 if named_type.IsConstant(): |
10801 continue | 10801 continue |
10802 if named_type.GetValidValues(): | 10802 if named_type.GetValidValues(): |
10803 file.Write("static const %s valid_%s_table[] = {\n" % | 10803 f.write("static const %s valid_%s_table[] = {\n" % |
10804 (named_type.GetType(), ToUnderscore(name))) | 10804 (named_type.GetType(), ToUnderscore(name))) |
10805 for value in named_type.GetValidValues(): | 10805 for value in named_type.GetValidValues(): |
10806 file.Write(" %s,\n" % value) | 10806 f.write(" %s,\n" % value) |
10807 file.Write("};\n") | 10807 f.write("};\n") |
10808 file.Write("\n") | 10808 f.write("\n") |
10809 if named_type.GetValidValuesES3(): | 10809 if named_type.GetValidValuesES3(): |
10810 file.Write("static const %s valid_%s_table_es3[] = {\n" % | 10810 f.write("static const %s valid_%s_table_es3[] = {\n" % |
10811 (named_type.GetType(), ToUnderscore(name))) | 10811 (named_type.GetType(), ToUnderscore(name))) |
10812 for value in named_type.GetValidValuesES3(): | 10812 for value in named_type.GetValidValuesES3(): |
10813 file.Write(" %s,\n" % value) | 10813 f.write(" %s,\n" % value) |
10814 file.Write("};\n") | 10814 f.write("};\n") |
10815 file.Write("\n") | 10815 f.write("\n") |
10816 if named_type.GetDeprecatedValuesES3(): | 10816 if named_type.GetDeprecatedValuesES3(): |
10817 file.Write("static const %s deprecated_%s_table_es3[] = {\n" % | 10817 f.write("static const %s deprecated_%s_table_es3[] = {\n" % |
10818 (named_type.GetType(), ToUnderscore(name))) | 10818 (named_type.GetType(), ToUnderscore(name))) |
10819 for value in named_type.GetDeprecatedValuesES3(): | 10819 for value in named_type.GetDeprecatedValuesES3(): |
10820 file.Write(" %s,\n" % value) | 10820 f.write(" %s,\n" % value) |
10821 file.Write("};\n") | 10821 f.write("};\n") |
10822 file.Write("\n") | 10822 f.write("\n") |
10823 file.Write("Validators::Validators()") | 10823 f.write("Validators::Validators()") |
10824 pre = ' : ' | 10824 pre = ' : ' |
10825 for count, name in enumerate(names): | 10825 for count, name in enumerate(names): |
10826 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10826 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
10827 if named_type.IsConstant(): | 10827 if named_type.IsConstant(): |
10828 continue | 10828 continue |
10829 if named_type.GetValidValues(): | 10829 if named_type.GetValidValues(): |
10830 code = """%(pre)s%(name)s( | 10830 code = """%(pre)s%(name)s( |
10831 valid_%(name)s_table, arraysize(valid_%(name)s_table))""" | 10831 valid_%(name)s_table, arraysize(valid_%(name)s_table))""" |
10832 else: | 10832 else: |
10833 code = "%(pre)s%(name)s()" | 10833 code = "%(pre)s%(name)s()" |
10834 file.Write(code % { | 10834 f.write(code % { |
10835 'name': ToUnderscore(name), | 10835 'name': ToUnderscore(name), |
10836 'pre': pre, | 10836 'pre': pre, |
10837 }) | 10837 }) |
10838 pre = ',\n ' | 10838 pre = ',\n ' |
10839 file.Write(" {\n"); | 10839 f.write(" {\n"); |
10840 file.Write("}\n\n"); | 10840 f.write("}\n\n"); |
10841 | 10841 |
10842 file.Write("void Validators::UpdateValuesES3() {\n") | 10842 f.write("void Validators::UpdateValuesES3() {\n") |
10843 for name in names: | 10843 for name in names: |
10844 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10844 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
10845 if named_type.GetDeprecatedValuesES3(): | 10845 if named_type.GetDeprecatedValuesES3(): |
10846 code = """ %(name)s.RemoveValues( | 10846 code = """ %(name)s.RemoveValues( |
10847 deprecated_%(name)s_table_es3, arraysize(deprecated_%(name)s_table_es3)); | 10847 deprecated_%(name)s_table_es3, arraysize(deprecated_%(name)s_table_es3)); |
10848 """ | 10848 """ |
10849 file.Write(code % { | 10849 f.write(code % { |
10850 'name': ToUnderscore(name), | 10850 'name': ToUnderscore(name), |
10851 }) | 10851 }) |
10852 if named_type.GetValidValuesES3(): | 10852 if named_type.GetValidValuesES3(): |
10853 code = """ %(name)s.AddValues( | 10853 code = """ %(name)s.AddValues( |
10854 valid_%(name)s_table_es3, arraysize(valid_%(name)s_table_es3)); | 10854 valid_%(name)s_table_es3, arraysize(valid_%(name)s_table_es3)); |
10855 """ | 10855 """ |
10856 file.Write(code % { | 10856 f.write(code % { |
10857 'name': ToUnderscore(name), | 10857 'name': ToUnderscore(name), |
10858 }) | 10858 }) |
10859 file.Write("}\n\n"); | 10859 f.write("}\n\n"); |
10860 file.Close() | 10860 f.close() |
10861 self.generated_cpp_filenames.append(file.filename) | 10861 self.generated_cpp_filenames.append(f.filename) |
10862 | 10862 |
10863 def WriteCommonUtilsHeader(self, filename): | 10863 def WriteCommonUtilsHeader(self, filename): |
10864 """Writes the gles2 common utility header.""" | 10864 """Writes the gles2 common utility header.""" |
10865 file = CHeaderWriter(filename) | 10865 f = CHeaderWriter(filename) |
10866 type_infos = sorted(_NAMED_TYPE_INFO.keys()) | 10866 type_infos = sorted(_NAMED_TYPE_INFO.keys()) |
10867 for type_info in type_infos: | 10867 for type_info in type_infos: |
10868 if _NAMED_TYPE_INFO[type_info]['type'] == 'GLenum': | 10868 if _NAMED_TYPE_INFO[type_info]['type'] == 'GLenum': |
10869 file.Write("static std::string GetString%s(uint32_t value);\n" % | 10869 f.write("static std::string GetString%s(uint32_t value);\n" % |
10870 type_info) | 10870 type_info) |
10871 file.Write("\n") | 10871 f.write("\n") |
10872 file.Close() | 10872 f.close() |
10873 self.generated_cpp_filenames.append(file.filename) | 10873 self.generated_cpp_filenames.append(f.filename) |
10874 | 10874 |
10875 def WriteCommonUtilsImpl(self, filename): | 10875 def WriteCommonUtilsImpl(self, filename): |
10876 """Writes the gles2 common utility header.""" | 10876 """Writes the gles2 common utility header.""" |
10877 enum_re = re.compile(r'\#define\s+(GL_[a-zA-Z0-9_]+)\s+([0-9A-Fa-fx]+)') | 10877 enum_re = re.compile(r'\#define\s+(GL_[a-zA-Z0-9_]+)\s+([0-9A-Fa-fx]+)') |
10878 dict = {} | 10878 dict = {} |
10879 for fname in ['third_party/khronos/GLES2/gl2.h', | 10879 for fname in ['third_party/khronos/GLES2/gl2.h', |
10880 'third_party/khronos/GLES2/gl2ext.h', | 10880 'third_party/khronos/GLES2/gl2ext.h', |
10881 'third_party/khronos/GLES3/gl3.h', | 10881 'third_party/khronos/GLES3/gl3.h', |
10882 'gpu/GLES2/gl2chromium.h', | 10882 'gpu/GLES2/gl2chromium.h', |
10883 'gpu/GLES2/gl2extchromium.h']: | 10883 'gpu/GLES2/gl2extchromium.h']: |
10884 lines = open(fname).readlines() | 10884 lines = open(fname).readlines() |
10885 for line in lines: | 10885 for line in lines: |
10886 m = enum_re.match(line) | 10886 m = enum_re.match(line) |
10887 if m: | 10887 if m: |
10888 name = m.group(1) | 10888 name = m.group(1) |
10889 value = m.group(2) | 10889 value = m.group(2) |
10890 if len(value) <= 10: | 10890 if len(value) <= 10: |
10891 if not value in dict: | 10891 if not value in dict: |
10892 dict[value] = name | 10892 dict[value] = name |
10893 # check our own _CHROMIUM macro conflicts with khronos GL headers. | 10893 # check our own _CHROMIUM macro conflicts with khronos GL headers. |
10894 elif dict[value] != name and (name.endswith('_CHROMIUM') or | 10894 elif dict[value] != name and (name.endswith('_CHROMIUM') or |
10895 dict[value].endswith('_CHROMIUM')): | 10895 dict[value].endswith('_CHROMIUM')): |
10896 self.Error("code collision: %s and %s have the same code %s" % | 10896 self.Error("code collision: %s and %s have the same code %s" % |
10897 (dict[value], name, value)) | 10897 (dict[value], name, value)) |
10898 | 10898 |
10899 file = CHeaderWriter(filename) | 10899 f = CHeaderWriter(filename) |
10900 file.Write("static const GLES2Util::EnumToString " | 10900 f.write("static const GLES2Util::EnumToString " |
10901 "enum_to_string_table[] = {\n") | 10901 "enum_to_string_table[] = {\n") |
10902 for value in dict: | 10902 for value in dict: |
10903 file.Write(' { %s, "%s", },\n' % (value, dict[value])) | 10903 f.write(' { %s, "%s", },\n' % (value, dict[value])) |
10904 file.Write("""}; | 10904 f.write("""}; |
10905 | 10905 |
10906 const GLES2Util::EnumToString* const GLES2Util::enum_to_string_table_ = | 10906 const GLES2Util::EnumToString* const GLES2Util::enum_to_string_table_ = |
10907 enum_to_string_table; | 10907 enum_to_string_table; |
10908 const size_t GLES2Util::enum_to_string_table_len_ = | 10908 const size_t GLES2Util::enum_to_string_table_len_ = |
10909 sizeof(enum_to_string_table) / sizeof(enum_to_string_table[0]); | 10909 sizeof(enum_to_string_table) / sizeof(enum_to_string_table[0]); |
10910 | 10910 |
10911 """) | 10911 """) |
10912 | 10912 |
10913 enums = sorted(_NAMED_TYPE_INFO.keys()) | 10913 enums = sorted(_NAMED_TYPE_INFO.keys()) |
10914 for enum in enums: | 10914 for enum in enums: |
10915 if _NAMED_TYPE_INFO[enum]['type'] == 'GLenum': | 10915 if _NAMED_TYPE_INFO[enum]['type'] == 'GLenum': |
10916 file.Write("std::string GLES2Util::GetString%s(uint32_t value) {\n" % | 10916 f.write("std::string GLES2Util::GetString%s(uint32_t value) {\n" % |
10917 enum) | 10917 enum) |
10918 valid_list = _NAMED_TYPE_INFO[enum]['valid'] | 10918 valid_list = _NAMED_TYPE_INFO[enum]['valid'] |
10919 if 'valid_es3' in _NAMED_TYPE_INFO[enum]: | 10919 if 'valid_es3' in _NAMED_TYPE_INFO[enum]: |
10920 valid_list = valid_list + _NAMED_TYPE_INFO[enum]['valid_es3'] | 10920 valid_list = valid_list + _NAMED_TYPE_INFO[enum]['valid_es3'] |
10921 assert len(valid_list) == len(set(valid_list)) | 10921 assert len(valid_list) == len(set(valid_list)) |
10922 if len(valid_list) > 0: | 10922 if len(valid_list) > 0: |
10923 file.Write(" static const EnumToString string_table[] = {\n") | 10923 f.write(" static const EnumToString string_table[] = {\n") |
10924 for value in valid_list: | 10924 for value in valid_list: |
10925 file.Write(' { %s, "%s" },\n' % (value, value)) | 10925 f.write(' { %s, "%s" },\n' % (value, value)) |
10926 file.Write(""" }; | 10926 f.write(""" }; |
10927 return GLES2Util::GetQualifiedEnumString( | 10927 return GLES2Util::GetQualifiedEnumString( |
10928 string_table, arraysize(string_table), value); | 10928 string_table, arraysize(string_table), value); |
10929 } | 10929 } |
10930 | 10930 |
10931 """) | 10931 """) |
10932 else: | 10932 else: |
10933 file.Write(""" return GLES2Util::GetQualifiedEnumString( | 10933 f.write(""" return GLES2Util::GetQualifiedEnumString( |
10934 NULL, 0, value); | 10934 NULL, 0, value); |
10935 } | 10935 } |
10936 | 10936 |
10937 """) | 10937 """) |
10938 file.Close() | 10938 f.close() |
10939 self.generated_cpp_filenames.append(file.filename) | 10939 self.generated_cpp_filenames.append(f.filename) |
10940 | 10940 |
10941 def WritePepperGLES2Interface(self, filename, dev): | 10941 def WritePepperGLES2Interface(self, filename, dev): |
10942 """Writes the Pepper OpenGLES interface definition.""" | 10942 """Writes the Pepper OpenGLES interface definition.""" |
10943 file = CWriter(filename) | 10943 f = CWriter(filename) |
10944 file.Write(_LICENSE) | 10944 f.write(_LICENSE) |
10945 file.Write(_DO_NOT_EDIT_WARNING) | 10945 f.write(_DO_NOT_EDIT_WARNING) |
10946 | 10946 |
10947 file.Write("label Chrome {\n") | 10947 f.write("label Chrome {\n") |
10948 file.Write(" M39 = 1.0\n") | 10948 f.write(" M39 = 1.0\n") |
10949 file.Write("};\n\n") | 10949 f.write("};\n\n") |
10950 | 10950 |
10951 if not dev: | 10951 if not dev: |
10952 # Declare GL types. | 10952 # Declare GL types. |
10953 file.Write("[version=1.0]\n") | 10953 f.write("[version=1.0]\n") |
10954 file.Write("describe {\n") | 10954 f.write("describe {\n") |
10955 for gltype in ['GLbitfield', 'GLboolean', 'GLbyte', 'GLclampf', | 10955 for gltype in ['GLbitfield', 'GLboolean', 'GLbyte', 'GLclampf', |
10956 'GLclampx', 'GLenum', 'GLfixed', 'GLfloat', 'GLint', | 10956 'GLclampx', 'GLenum', 'GLfixed', 'GLfloat', 'GLint', |
10957 'GLintptr', 'GLshort', 'GLsizei', 'GLsizeiptr', | 10957 'GLintptr', 'GLshort', 'GLsizei', 'GLsizeiptr', |
10958 'GLubyte', 'GLuint', 'GLushort']: | 10958 'GLubyte', 'GLuint', 'GLushort']: |
10959 file.Write(" %s;\n" % gltype) | 10959 f.write(" %s;\n" % gltype) |
10960 file.Write(" %s_ptr_t;\n" % gltype) | 10960 f.write(" %s_ptr_t;\n" % gltype) |
10961 file.Write("};\n\n") | 10961 f.write("};\n\n") |
10962 | 10962 |
10963 # C level typedefs. | 10963 # C level typedefs. |
10964 file.Write("#inline c\n") | 10964 f.write("#inline c\n") |
10965 file.Write("#include \"ppapi/c/pp_resource.h\"\n") | 10965 f.write("#include \"ppapi/c/pp_resource.h\"\n") |
10966 if dev: | 10966 if dev: |
10967 file.Write("#include \"ppapi/c/ppb_opengles2.h\"\n\n") | 10967 f.write("#include \"ppapi/c/ppb_opengles2.h\"\n\n") |
10968 else: | 10968 else: |
10969 file.Write("\n#ifndef __gl2_h_\n") | 10969 f.write("\n#ifndef __gl2_h_\n") |
10970 for (k, v) in _GL_TYPES.iteritems(): | 10970 for (k, v) in _GL_TYPES.iteritems(): |
10971 file.Write("typedef %s %s;\n" % (v, k)) | 10971 f.write("typedef %s %s;\n" % (v, k)) |
10972 file.Write("#ifdef _WIN64\n") | 10972 f.write("#ifdef _WIN64\n") |
10973 for (k, v) in _GL_TYPES_64.iteritems(): | 10973 for (k, v) in _GL_TYPES_64.iteritems(): |
10974 file.Write("typedef %s %s;\n" % (v, k)) | 10974 f.write("typedef %s %s;\n" % (v, k)) |
10975 file.Write("#else\n") | 10975 f.write("#else\n") |
10976 for (k, v) in _GL_TYPES_32.iteritems(): | 10976 for (k, v) in _GL_TYPES_32.iteritems(): |
10977 file.Write("typedef %s %s;\n" % (v, k)) | 10977 f.write("typedef %s %s;\n" % (v, k)) |
10978 file.Write("#endif // _WIN64\n") | 10978 f.write("#endif // _WIN64\n") |
10979 file.Write("#endif // __gl2_h_\n\n") | 10979 f.write("#endif // __gl2_h_\n\n") |
10980 file.Write("#endinl\n") | 10980 f.write("#endinl\n") |
10981 | 10981 |
10982 for interface in self.pepper_interfaces: | 10982 for interface in self.pepper_interfaces: |
10983 if interface.dev != dev: | 10983 if interface.dev != dev: |
10984 continue | 10984 continue |
10985 # Historically, we provide OpenGLES2 interfaces with struct | 10985 # Historically, we provide OpenGLES2 interfaces with struct |
10986 # namespace. Not to break code which uses the interface as | 10986 # namespace. Not to break code which uses the interface as |
10987 # "struct OpenGLES2", we put it in struct namespace. | 10987 # "struct OpenGLES2", we put it in struct namespace. |
10988 file.Write('\n[macro="%s", force_struct_namespace]\n' % | 10988 f.write('\n[macro="%s", force_struct_namespace]\n' % |
10989 interface.GetInterfaceName()) | 10989 interface.GetInterfaceName()) |
10990 file.Write("interface %s {\n" % interface.GetStructName()) | 10990 f.write("interface %s {\n" % interface.GetStructName()) |
10991 for func in self.original_functions: | 10991 for func in self.original_functions: |
10992 if not func.InPepperInterface(interface): | 10992 if not func.InPepperInterface(interface): |
10993 continue | 10993 continue |
10994 | 10994 |
10995 ret_type = func.MapCTypeToPepperIdlType(func.return_type, | 10995 ret_type = func.MapCTypeToPepperIdlType(func.return_type, |
10996 is_for_return_type=True) | 10996 is_for_return_type=True) |
10997 func_prefix = " %s %s(" % (ret_type, func.GetPepperName()) | 10997 func_prefix = " %s %s(" % (ret_type, func.GetPepperName()) |
10998 file.Write(func_prefix) | 10998 f.write(func_prefix) |
10999 file.Write("[in] PP_Resource context") | 10999 f.write("[in] PP_Resource context") |
11000 for arg in func.MakeTypedPepperIdlArgStrings(): | 11000 for arg in func.MakeTypedPepperIdlArgStrings(): |
11001 file.Write(",\n" + " " * len(func_prefix) + arg) | 11001 f.write(",\n" + " " * len(func_prefix) + arg) |
11002 file.Write(");\n") | 11002 f.write(");\n") |
11003 file.Write("};\n\n") | 11003 f.write("};\n\n") |
11004 | 11004 |
11005 | 11005 |
11006 file.Close() | 11006 f.close() |
11007 | 11007 |
11008 def WritePepperGLES2Implementation(self, filename): | 11008 def WritePepperGLES2Implementation(self, filename): |
11009 """Writes the Pepper OpenGLES interface implementation.""" | 11009 """Writes the Pepper OpenGLES interface implementation.""" |
11010 | 11010 |
11011 file = CWriter(filename) | 11011 f = CWriter(filename) |
11012 file.Write(_LICENSE) | 11012 f.write(_LICENSE) |
11013 file.Write(_DO_NOT_EDIT_WARNING) | 11013 f.write(_DO_NOT_EDIT_WARNING) |
11014 | 11014 |
11015 file.Write("#include \"ppapi/shared_impl/ppb_opengles2_shared.h\"\n\n") | 11015 f.write("#include \"ppapi/shared_impl/ppb_opengles2_shared.h\"\n\n") |
11016 file.Write("#include \"base/logging.h\"\n") | 11016 f.write("#include \"base/logging.h\"\n") |
11017 file.Write("#include \"gpu/command_buffer/client/gles2_implementation.h\"\n"
) | 11017 f.write("#include \"gpu/command_buffer/client/gles2_implementation.h\"\n") |
11018 file.Write("#include \"ppapi/shared_impl/ppb_graphics_3d_shared.h\"\n") | 11018 f.write("#include \"ppapi/shared_impl/ppb_graphics_3d_shared.h\"\n") |
11019 file.Write("#include \"ppapi/thunk/enter.h\"\n\n") | 11019 f.write("#include \"ppapi/thunk/enter.h\"\n\n") |
11020 | 11020 |
11021 file.Write("namespace ppapi {\n\n") | 11021 f.write("namespace ppapi {\n\n") |
11022 file.Write("namespace {\n\n") | 11022 f.write("namespace {\n\n") |
11023 | 11023 |
11024 file.Write("typedef thunk::EnterResource<thunk::PPB_Graphics3D_API>" | 11024 f.write("typedef thunk::EnterResource<thunk::PPB_Graphics3D_API>" |
11025 " Enter3D;\n\n") | 11025 " Enter3D;\n\n") |
11026 | 11026 |
11027 file.Write("gpu::gles2::GLES2Implementation* ToGles2Impl(Enter3D*" | 11027 f.write("gpu::gles2::GLES2Implementation* ToGles2Impl(Enter3D*" |
11028 " enter) {\n") | 11028 " enter) {\n") |
11029 file.Write(" DCHECK(enter);\n") | 11029 f.write(" DCHECK(enter);\n") |
11030 file.Write(" DCHECK(enter->succeeded());\n") | 11030 f.write(" DCHECK(enter->succeeded());\n") |
11031 file.Write(" return static_cast<PPB_Graphics3D_Shared*>(enter->object())->" | 11031 f.write(" return static_cast<PPB_Graphics3D_Shared*>(enter->object())->" |
11032 "gles2_impl();\n"); | 11032 "gles2_impl();\n"); |
11033 file.Write("}\n\n"); | 11033 f.write("}\n\n"); |
11034 | 11034 |
11035 for func in self.original_functions: | 11035 for func in self.original_functions: |
11036 if not func.InAnyPepperExtension(): | 11036 if not func.InAnyPepperExtension(): |
11037 continue | 11037 continue |
11038 | 11038 |
11039 original_arg = func.MakeTypedPepperArgString("") | 11039 original_arg = func.MakeTypedPepperArgString("") |
11040 context_arg = "PP_Resource context_id" | 11040 context_arg = "PP_Resource context_id" |
11041 if len(original_arg): | 11041 if len(original_arg): |
11042 arg = context_arg + ", " + original_arg | 11042 arg = context_arg + ", " + original_arg |
11043 else: | 11043 else: |
11044 arg = context_arg | 11044 arg = context_arg |
11045 file.Write("%s %s(%s) {\n" % | 11045 f.write("%s %s(%s) {\n" % |
11046 (func.return_type, func.GetPepperName(), arg)) | 11046 (func.return_type, func.GetPepperName(), arg)) |
11047 file.Write(" Enter3D enter(context_id, true);\n") | 11047 f.write(" Enter3D enter(context_id, true);\n") |
11048 file.Write(" if (enter.succeeded()) {\n") | 11048 f.write(" if (enter.succeeded()) {\n") |
11049 | 11049 |
11050 return_str = "" if func.return_type == "void" else "return " | 11050 return_str = "" if func.return_type == "void" else "return " |
11051 file.Write(" %sToGles2Impl(&enter)->%s(%s);\n" % | 11051 f.write(" %sToGles2Impl(&enter)->%s(%s);\n" % |
11052 (return_str, func.original_name, | 11052 (return_str, func.original_name, |
11053 func.MakeOriginalArgString(""))) | 11053 func.MakeOriginalArgString(""))) |
11054 file.Write(" }") | 11054 f.write(" }") |
11055 if func.return_type == "void": | 11055 if func.return_type == "void": |
11056 file.Write("\n") | 11056 f.write("\n") |
11057 else: | 11057 else: |
11058 file.Write(" else {\n") | 11058 f.write(" else {\n") |
11059 file.Write(" return %s;\n" % func.GetErrorReturnString()) | 11059 f.write(" return %s;\n" % func.GetErrorReturnString()) |
11060 file.Write(" }\n") | 11060 f.write(" }\n") |
11061 file.Write("}\n\n") | 11061 f.write("}\n\n") |
11062 | 11062 |
11063 file.Write("} // namespace\n") | 11063 f.write("} // namespace\n") |
11064 | 11064 |
11065 for interface in self.pepper_interfaces: | 11065 for interface in self.pepper_interfaces: |
11066 file.Write("const %s* PPB_OpenGLES2_Shared::Get%sInterface() {\n" % | 11066 f.write("const %s* PPB_OpenGLES2_Shared::Get%sInterface() {\n" % |
11067 (interface.GetStructName(), interface.GetName())) | 11067 (interface.GetStructName(), interface.GetName())) |
11068 file.Write(" static const struct %s " | 11068 f.write(" static const struct %s " |
11069 "ppb_opengles2 = {\n" % interface.GetStructName()) | 11069 "ppb_opengles2 = {\n" % interface.GetStructName()) |
11070 file.Write(" &") | 11070 f.write(" &") |
11071 file.Write(",\n &".join( | 11071 f.write(",\n &".join( |
11072 f.GetPepperName() for f in self.original_functions | 11072 f.GetPepperName() for f in self.original_functions |
11073 if f.InPepperInterface(interface))) | 11073 if f.InPepperInterface(interface))) |
11074 file.Write("\n") | 11074 f.write("\n") |
11075 | 11075 |
11076 file.Write(" };\n") | 11076 f.write(" };\n") |
11077 file.Write(" return &ppb_opengles2;\n") | 11077 f.write(" return &ppb_opengles2;\n") |
11078 file.Write("}\n") | 11078 f.write("}\n") |
11079 | 11079 |
11080 file.Write("} // namespace ppapi\n") | 11080 f.write("} // namespace ppapi\n") |
11081 file.Close() | 11081 f.close() |
11082 self.generated_cpp_filenames.append(file.filename) | 11082 self.generated_cpp_filenames.append(f.filename) |
11083 | 11083 |
11084 def WriteGLES2ToPPAPIBridge(self, filename): | 11084 def WriteGLES2ToPPAPIBridge(self, filename): |
11085 """Connects GLES2 helper library to PPB_OpenGLES2 interface""" | 11085 """Connects GLES2 helper library to PPB_OpenGLES2 interface""" |
11086 | 11086 |
11087 file = CWriter(filename) | 11087 f = CWriter(filename) |
11088 file.Write(_LICENSE) | 11088 f.write(_LICENSE) |
11089 file.Write(_DO_NOT_EDIT_WARNING) | 11089 f.write(_DO_NOT_EDIT_WARNING) |
11090 | 11090 |
11091 file.Write("#ifndef GL_GLEXT_PROTOTYPES\n") | 11091 f.write("#ifndef GL_GLEXT_PROTOTYPES\n") |
11092 file.Write("#define GL_GLEXT_PROTOTYPES\n") | 11092 f.write("#define GL_GLEXT_PROTOTYPES\n") |
11093 file.Write("#endif\n") | 11093 f.write("#endif\n") |
11094 file.Write("#include <GLES2/gl2.h>\n") | 11094 f.write("#include <GLES2/gl2.h>\n") |
11095 file.Write("#include <GLES2/gl2ext.h>\n") | 11095 f.write("#include <GLES2/gl2ext.h>\n") |
11096 file.Write("#include \"ppapi/lib/gl/gles2/gl2ext_ppapi.h\"\n\n") | 11096 f.write("#include \"ppapi/lib/gl/gles2/gl2ext_ppapi.h\"\n\n") |
11097 | 11097 |
11098 for func in self.original_functions: | 11098 for func in self.original_functions: |
11099 if not func.InAnyPepperExtension(): | 11099 if not func.InAnyPepperExtension(): |
11100 continue | 11100 continue |
11101 | 11101 |
11102 interface = self.interface_info[func.GetInfo('pepper_interface') or ''] | 11102 interface = self.interface_info[func.GetInfo('pepper_interface') or ''] |
11103 | 11103 |
11104 file.Write("%s GL_APIENTRY gl%s(%s) {\n" % | 11104 f.write("%s GL_APIENTRY gl%s(%s) {\n" % |
11105 (func.return_type, func.GetPepperName(), | 11105 (func.return_type, func.GetPepperName(), |
11106 func.MakeTypedPepperArgString(""))) | 11106 func.MakeTypedPepperArgString(""))) |
11107 return_str = "" if func.return_type == "void" else "return " | 11107 return_str = "" if func.return_type == "void" else "return " |
11108 interface_str = "glGet%sInterfacePPAPI()" % interface.GetName() | 11108 interface_str = "glGet%sInterfacePPAPI()" % interface.GetName() |
11109 original_arg = func.MakeOriginalArgString("") | 11109 original_arg = func.MakeOriginalArgString("") |
11110 context_arg = "glGetCurrentContextPPAPI()" | 11110 context_arg = "glGetCurrentContextPPAPI()" |
11111 if len(original_arg): | 11111 if len(original_arg): |
11112 arg = context_arg + ", " + original_arg | 11112 arg = context_arg + ", " + original_arg |
11113 else: | 11113 else: |
11114 arg = context_arg | 11114 arg = context_arg |
11115 if interface.GetName(): | 11115 if interface.GetName(): |
11116 file.Write(" const struct %s* ext = %s;\n" % | 11116 f.write(" const struct %s* ext = %s;\n" % |
11117 (interface.GetStructName(), interface_str)) | 11117 (interface.GetStructName(), interface_str)) |
11118 file.Write(" if (ext)\n") | 11118 f.write(" if (ext)\n") |
11119 file.Write(" %sext->%s(%s);\n" % | 11119 f.write(" %sext->%s(%s);\n" % |
11120 (return_str, func.GetPepperName(), arg)) | 11120 (return_str, func.GetPepperName(), arg)) |
11121 if return_str: | 11121 if return_str: |
11122 file.Write(" %s0;\n" % return_str) | 11122 f.write(" %s0;\n" % return_str) |
11123 else: | 11123 else: |
11124 file.Write(" %s%s->%s(%s);\n" % | 11124 f.write(" %s%s->%s(%s);\n" % |
11125 (return_str, interface_str, func.GetPepperName(), arg)) | 11125 (return_str, interface_str, func.GetPepperName(), arg)) |
11126 file.Write("}\n\n") | 11126 f.write("}\n\n") |
11127 file.Close() | 11127 f.close() |
11128 self.generated_cpp_filenames.append(file.filename) | 11128 self.generated_cpp_filenames.append(f.filename) |
11129 | 11129 |
11130 def WriteMojoGLCallVisitor(self, filename): | 11130 def WriteMojoGLCallVisitor(self, filename): |
11131 """Provides the GL implementation for mojo""" | 11131 """Provides the GL implementation for mojo""" |
11132 file = CWriter(filename) | 11132 f = CWriter(filename) |
11133 file.Write(_LICENSE) | 11133 f.write(_LICENSE) |
11134 file.Write(_DO_NOT_EDIT_WARNING) | 11134 f.write(_DO_NOT_EDIT_WARNING) |
11135 | 11135 |
11136 for func in self.original_functions: | 11136 for func in self.original_functions: |
11137 if not func.IsCoreGLFunction(): | 11137 if not func.IsCoreGLFunction(): |
11138 continue | 11138 continue |
11139 file.Write("VISIT_GL_CALL(%s, %s, (%s), (%s))\n" % | 11139 f.write("VISIT_GL_CALL(%s, %s, (%s), (%s))\n" % |
11140 (func.name, func.return_type, | 11140 (func.name, func.return_type, |
11141 func.MakeTypedOriginalArgString(""), | 11141 func.MakeTypedOriginalArgString(""), |
11142 func.MakeOriginalArgString(""))) | 11142 func.MakeOriginalArgString(""))) |
11143 | 11143 |
11144 file.Close() | 11144 f.close() |
11145 self.generated_cpp_filenames.append(file.filename) | 11145 self.generated_cpp_filenames.append(f.filename) |
11146 | 11146 |
11147 def WriteMojoGLCallVisitorForExtension(self, filename, extension): | 11147 def WriteMojoGLCallVisitorForExtension(self, filename, extension): |
11148 """Provides the GL implementation for mojo for a particular extension""" | 11148 """Provides the GL implementation for mojo for a particular extension""" |
11149 file = CWriter(filename) | 11149 f = CWriter(filename) |
11150 file.Write(_LICENSE) | 11150 f.write(_LICENSE) |
11151 file.Write(_DO_NOT_EDIT_WARNING) | 11151 f.write(_DO_NOT_EDIT_WARNING) |
11152 | 11152 |
11153 for func in self.original_functions: | 11153 for func in self.original_functions: |
11154 if func.GetInfo("extension") != extension: | 11154 if func.GetInfo("extension") != extension: |
11155 continue | 11155 continue |
11156 file.Write("VISIT_GL_CALL(%s, %s, (%s), (%s))\n" % | 11156 f.write("VISIT_GL_CALL(%s, %s, (%s), (%s))\n" % |
11157 (func.name, func.return_type, | 11157 (func.name, func.return_type, |
11158 func.MakeTypedOriginalArgString(""), | 11158 func.MakeTypedOriginalArgString(""), |
11159 func.MakeOriginalArgString(""))) | 11159 func.MakeOriginalArgString(""))) |
11160 | 11160 |
11161 file.Close() | 11161 f.close() |
11162 self.generated_cpp_filenames.append(file.filename) | 11162 self.generated_cpp_filenames.append(f.filename) |
11163 | 11163 |
11164 def Format(generated_files): | 11164 def Format(generated_files): |
11165 formatter = "clang-format" | 11165 formatter = "clang-format" |
11166 if platform.system() == "Windows": | 11166 if platform.system() == "Windows": |
11167 formatter += ".bat" | 11167 formatter += ".bat" |
11168 for filename in generated_files: | 11168 for filename in generated_files: |
11169 call([formatter, "-i", "-style=chromium", filename]) | 11169 call([formatter, "-i", "-style=chromium", filename]) |
11170 | 11170 |
11171 def main(argv): | 11171 def main(argv): |
11172 """This is the main function.""" | 11172 """This is the main function.""" |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11301 Format(gen.generated_cpp_filenames) | 11301 Format(gen.generated_cpp_filenames) |
11302 | 11302 |
11303 if gen.errors > 0: | 11303 if gen.errors > 0: |
11304 print "%d errors" % gen.errors | 11304 print "%d errors" % gen.errors |
11305 return 1 | 11305 return 1 |
11306 return 0 | 11306 return 0 |
11307 | 11307 |
11308 | 11308 |
11309 if __name__ == '__main__': | 11309 if __name__ == '__main__': |
11310 sys.exit(main(sys.argv[1:])) | 11310 sys.exit(main(sys.argv[1:])) |
OLD | NEW |