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

Side by Side Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 1254833006: Fix Python pylint warnings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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:]))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698