Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """code generator for GLES2 command buffers.""" | 6 """code generator for GLES2 command buffers.""" |
| 7 | 7 |
| 8 import itertools | 8 import itertools |
| 9 import os | 9 import os |
| 10 import os.path | 10 import os.path |
| (...skipping 1990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2001 '1', | 2001 '1', |
| 2002 '2', | 2002 '2', |
| 2003 '3', | 2003 '3', |
| 2004 '4', | 2004 '4', |
| 2005 ], | 2005 ], |
| 2006 'invalid': [ | 2006 'invalid': [ |
| 2007 '0', | 2007 '0', |
| 2008 '5', | 2008 '5', |
| 2009 ], | 2009 ], |
| 2010 }, | 2010 }, |
| 2011 'ZeroOnly': { | 2011 'ZeroOnlyForES2': { |
|
piman
2015/11/17 23:40:06
What is the point of GLintZeroOnlyForES2 (as oppos
yunchao
2015/11/19 10:14:10
Yeah. The code in build_gles2_cmd_buffer.py seems
zmo
2015/11/19 19:15:00
ZeroOnlyForES2 is misleading. The code generator
yunchao
2015/11/23 10:44:39
Done.
| |
| 2012 'type': 'GLint', | 2012 'type': 'GLint', |
| 2013 'is_complete': True, | 2013 'is_constant_for_es2': True, |
| 2014 'valid': [ | 2014 'valid': [ |
| 2015 '0', | 2015 '0', |
| 2016 ], | 2016 ], |
| 2017 'invalid': [ | 2017 'invalid': [ |
| 2018 '1', | 2018 '1', |
| 2019 ], | 2019 ], |
| 2020 }, | 2020 }, |
| 2021 'FalseOnly': { | 2021 'FalseOnly': { |
| 2022 'type': 'GLboolean', | 2022 'type': 'GLboolean', |
| 2023 'is_complete': True, | 2023 'is_complete': True, |
| (...skipping 6382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8406 | 8406 |
| 8407 def GetDeprecatedValuesES3(self): | 8407 def GetDeprecatedValuesES3(self): |
| 8408 return self.deprecated_es3 | 8408 return self.deprecated_es3 |
| 8409 | 8409 |
| 8410 def IsConstant(self): | 8410 def IsConstant(self): |
| 8411 if not 'is_complete' in self.info: | 8411 if not 'is_complete' in self.info: |
| 8412 return False | 8412 return False |
| 8413 | 8413 |
| 8414 return len(self.GetValidValues()) == 1 | 8414 return len(self.GetValidValues()) == 1 |
| 8415 | 8415 |
| 8416 def IsConstantForES2(self): | |
| 8417 if not 'is_constant_for_es2' in self.info: | |
| 8418 return False | |
| 8419 | |
| 8420 return len(self.GetValidValues()) == 1 | |
| 8421 | |
| 8416 def GetConstantValue(self): | 8422 def GetConstantValue(self): |
| 8417 return self.GetValidValues()[0] | 8423 return self.GetValidValues()[0] |
| 8418 | 8424 |
| 8419 class Argument(object): | 8425 class Argument(object): |
| 8420 """A class that represents a function argument.""" | 8426 """A class that represents a function argument.""" |
| 8421 | 8427 |
| 8422 cmd_type_map_ = { | 8428 cmd_type_map_ = { |
| 8423 'GLenum': 'uint32_t', | 8429 'GLenum': 'uint32_t', |
| 8424 'GLint': 'int32_t', | 8430 'GLint': 'int32_t', |
| 8425 'GLintptr': 'int32_t', | 8431 'GLintptr': 'int32_t', |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 8447 return False | 8453 return False |
| 8448 | 8454 |
| 8449 def IsPointer2D(self): | 8455 def IsPointer2D(self): |
| 8450 """Returns true if argument is a 2D pointer.""" | 8456 """Returns true if argument is a 2D pointer.""" |
| 8451 return False | 8457 return False |
| 8452 | 8458 |
| 8453 def IsConstant(self): | 8459 def IsConstant(self): |
| 8454 """Returns true if the argument has only one valid value.""" | 8460 """Returns true if the argument has only one valid value.""" |
| 8455 return False | 8461 return False |
| 8456 | 8462 |
| 8463 def IsConstantForES2(self): | |
| 8464 """Returns true if the argument has only one valid value for ES2.""" | |
| 8465 return False | |
| 8466 | |
| 8457 def AddCmdArgs(self, args): | 8467 def AddCmdArgs(self, args): |
| 8458 """Adds command arguments for this argument to the given list.""" | 8468 """Adds command arguments for this argument to the given list.""" |
| 8459 if not self.IsConstant(): | 8469 if not self.IsConstant(): |
| 8460 return args.append(self) | 8470 return args.append(self) |
| 8461 | 8471 |
| 8462 def AddInitArgs(self, args): | 8472 def AddInitArgs(self, args): |
| 8463 """Adds init arguments for this argument to the given list.""" | 8473 """Adds init arguments for this argument to the given list.""" |
| 8464 if not self.IsConstant(): | 8474 if not self.IsConstant(): |
| 8465 return args.append(self) | 8475 return args.append(self) |
| 8466 | 8476 |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8683 Argument.__init__(self, name, gl_type) | 8693 Argument.__init__(self, name, gl_type) |
| 8684 | 8694 |
| 8685 self.gl_error = gl_error | 8695 self.gl_error = gl_error |
| 8686 name = type[len(gl_type):] | 8696 name = type[len(gl_type):] |
| 8687 self.type_name = name | 8697 self.type_name = name |
| 8688 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) | 8698 self.named_type = NamedType(_NAMED_TYPE_INFO[name]) |
| 8689 | 8699 |
| 8690 def IsConstant(self): | 8700 def IsConstant(self): |
| 8691 return self.named_type.IsConstant() | 8701 return self.named_type.IsConstant() |
| 8692 | 8702 |
| 8703 def IsConstantForES2(self): | |
| 8704 return self.named_type.IsConstantForES2() | |
| 8705 | |
| 8693 def GetConstantValue(self): | 8706 def GetConstantValue(self): |
| 8694 return self.named_type.GetConstantValue() | 8707 return self.named_type.GetConstantValue() |
| 8695 | 8708 |
| 8696 def WriteValidationCode(self, f, func): | 8709 def WriteValidationCode(self, f, func): |
| 8697 if func.IsUnsafe(): | 8710 if func.IsUnsafe(): |
| 8698 return | 8711 return |
| 8699 if self.named_type.IsConstant(): | 8712 if self.named_type.IsConstant(): |
| 8700 return | 8713 return |
| 8714 if self.named_type.IsConstantForES2(): | |
| 8715 return | |
| 8701 f.write(" if (!validators_->%s.IsValid(%s)) {\n" % | 8716 f.write(" if (!validators_->%s.IsValid(%s)) {\n" % |
| 8702 (ToUnderscore(self.type_name), self.name)) | 8717 (ToUnderscore(self.type_name), self.name)) |
| 8703 if self.gl_error == "GL_INVALID_ENUM": | 8718 if self.gl_error == "GL_INVALID_ENUM": |
| 8704 f.write( | 8719 f.write( |
| 8705 " LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" % | 8720 " LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" % |
| 8706 (func.original_name, self.name, self.name)) | 8721 (func.original_name, self.name, self.name)) |
| 8707 else: | 8722 else: |
| 8708 f.write( | 8723 f.write( |
| 8709 " LOCAL_SET_GL_ERROR(%s, \"gl%s\", \"%s %s\");\n" % | 8724 " LOCAL_SET_GL_ERROR(%s, \"gl%s\", \"%s %s\");\n" % |
| 8710 (self.gl_error, func.original_name, self.name, self.gl_error)) | 8725 (self.gl_error, func.original_name, self.name, self.gl_error)) |
| (...skipping 1930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10641 func.WriteGLES2ImplementationUnitTest(f) | 10656 func.WriteGLES2ImplementationUnitTest(f) |
| 10642 self.generated_cpp_filenames.append(filename) | 10657 self.generated_cpp_filenames.append(filename) |
| 10643 | 10658 |
| 10644 def WriteServiceUtilsHeader(self, filename): | 10659 def WriteServiceUtilsHeader(self, filename): |
| 10645 """Writes the gles2 auto generated utility header.""" | 10660 """Writes the gles2 auto generated utility header.""" |
| 10646 with CHeaderWriter(filename) as f: | 10661 with CHeaderWriter(filename) as f: |
| 10647 for name in sorted(_NAMED_TYPE_INFO.keys()): | 10662 for name in sorted(_NAMED_TYPE_INFO.keys()): |
| 10648 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10663 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
| 10649 if named_type.IsConstant(): | 10664 if named_type.IsConstant(): |
| 10650 continue | 10665 continue |
| 10666 if named_type.IsConstantForES2(): | |
| 10667 continue | |
| 10651 f.write("ValueValidator<%s> %s;\n" % | 10668 f.write("ValueValidator<%s> %s;\n" % |
| 10652 (named_type.GetType(), ToUnderscore(name))) | 10669 (named_type.GetType(), ToUnderscore(name))) |
| 10653 f.write("\n") | 10670 f.write("\n") |
| 10654 self.generated_cpp_filenames.append(filename) | 10671 self.generated_cpp_filenames.append(filename) |
| 10655 | 10672 |
| 10656 def WriteServiceUtilsImplementation(self, filename): | 10673 def WriteServiceUtilsImplementation(self, filename): |
| 10657 """Writes the gles2 auto generated utility implementation.""" | 10674 """Writes the gles2 auto generated utility implementation.""" |
| 10658 with CHeaderWriter(filename) as f: | 10675 with CHeaderWriter(filename) as f: |
| 10659 names = sorted(_NAMED_TYPE_INFO.keys()) | 10676 names = sorted(_NAMED_TYPE_INFO.keys()) |
| 10660 for name in names: | 10677 for name in names: |
| 10661 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10678 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
| 10662 if named_type.IsConstant(): | 10679 if named_type.IsConstant(): |
| 10663 continue | 10680 continue |
| 10681 if named_type.IsConstantForES2(): | |
| 10682 continue | |
| 10664 if named_type.GetValidValues(): | 10683 if named_type.GetValidValues(): |
| 10665 f.write("static const %s valid_%s_table[] = {\n" % | 10684 f.write("static const %s valid_%s_table[] = {\n" % |
| 10666 (named_type.GetType(), ToUnderscore(name))) | 10685 (named_type.GetType(), ToUnderscore(name))) |
| 10667 for value in named_type.GetValidValues(): | 10686 for value in named_type.GetValidValues(): |
| 10668 f.write(" %s,\n" % value) | 10687 f.write(" %s,\n" % value) |
| 10669 f.write("};\n") | 10688 f.write("};\n") |
| 10670 f.write("\n") | 10689 f.write("\n") |
| 10671 if named_type.GetValidValuesES3(): | 10690 if named_type.GetValidValuesES3(): |
| 10672 f.write("static const %s valid_%s_table_es3[] = {\n" % | 10691 f.write("static const %s valid_%s_table_es3[] = {\n" % |
| 10673 (named_type.GetType(), ToUnderscore(name))) | 10692 (named_type.GetType(), ToUnderscore(name))) |
| 10674 for value in named_type.GetValidValuesES3(): | 10693 for value in named_type.GetValidValuesES3(): |
| 10675 f.write(" %s,\n" % value) | 10694 f.write(" %s,\n" % value) |
| 10676 f.write("};\n") | 10695 f.write("};\n") |
| 10677 f.write("\n") | 10696 f.write("\n") |
| 10678 if named_type.GetDeprecatedValuesES3(): | 10697 if named_type.GetDeprecatedValuesES3(): |
| 10679 f.write("static const %s deprecated_%s_table_es3[] = {\n" % | 10698 f.write("static const %s deprecated_%s_table_es3[] = {\n" % |
| 10680 (named_type.GetType(), ToUnderscore(name))) | 10699 (named_type.GetType(), ToUnderscore(name))) |
| 10681 for value in named_type.GetDeprecatedValuesES3(): | 10700 for value in named_type.GetDeprecatedValuesES3(): |
| 10682 f.write(" %s,\n" % value) | 10701 f.write(" %s,\n" % value) |
| 10683 f.write("};\n") | 10702 f.write("};\n") |
| 10684 f.write("\n") | 10703 f.write("\n") |
| 10685 f.write("Validators::Validators()") | 10704 f.write("Validators::Validators()") |
| 10686 pre = ' : ' | 10705 pre = ' : ' |
| 10687 for count, name in enumerate(names): | 10706 for count, name in enumerate(names): |
| 10688 named_type = NamedType(_NAMED_TYPE_INFO[name]) | 10707 named_type = NamedType(_NAMED_TYPE_INFO[name]) |
| 10689 if named_type.IsConstant(): | 10708 if named_type.IsConstant(): |
| 10690 continue | 10709 continue |
| 10710 if named_type.IsConstantForES2(): | |
| 10711 continue | |
| 10691 if named_type.GetValidValues(): | 10712 if named_type.GetValidValues(): |
| 10692 code = """%(pre)s%(name)s( | 10713 code = """%(pre)s%(name)s( |
| 10693 valid_%(name)s_table, arraysize(valid_%(name)s_table))""" | 10714 valid_%(name)s_table, arraysize(valid_%(name)s_table))""" |
| 10694 else: | 10715 else: |
| 10695 code = "%(pre)s%(name)s()" | 10716 code = "%(pre)s%(name)s()" |
| 10696 f.write(code % { | 10717 f.write(code % { |
| 10697 'name': ToUnderscore(name), | 10718 'name': ToUnderscore(name), |
| 10698 'pre': pre, | 10719 'pre': pre, |
| 10699 }) | 10720 }) |
| 10700 pre = ',\n ' | 10721 pre = ',\n ' |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 11114 Format(gen.generated_cpp_filenames) | 11135 Format(gen.generated_cpp_filenames) |
| 11115 | 11136 |
| 11116 if gen.errors > 0: | 11137 if gen.errors > 0: |
| 11117 print "%d errors" % gen.errors | 11138 print "%d errors" % gen.errors |
| 11118 return 1 | 11139 return 1 |
| 11119 return 0 | 11140 return 0 |
| 11120 | 11141 |
| 11121 | 11142 |
| 11122 if __name__ == '__main__': | 11143 if __name__ == '__main__': |
| 11123 sys.exit(main(sys.argv[1:])) | 11144 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |