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 os | 8 import os |
9 import os.path | 9 import os.path |
10 import sys | 10 import sys |
(...skipping 2401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2412 """Overrriden from TypeHandler.""" | 2412 """Overrriden from TypeHandler.""" |
2413 pass | 2413 pass |
2414 | 2414 |
2415 def WriteGLES2ImplementationHeader(self, func, file): | 2415 def WriteGLES2ImplementationHeader(self, func, file): |
2416 """Overrriden from TypeHandler.""" | 2416 """Overrriden from TypeHandler.""" |
2417 file.Write("%s %s(%s) {\n" % | 2417 file.Write("%s %s(%s) {\n" % |
2418 (func.return_type, func.original_name, | 2418 (func.return_type, func.original_name, |
2419 func.MakeTypedOriginalArgString(""))) | 2419 func.MakeTypedOriginalArgString(""))) |
2420 file.Write(" // TODO: for now this is a no-op\n") | 2420 file.Write(" // TODO: for now this is a no-op\n") |
2421 file.Write( | 2421 file.Write( |
2422 " SetGLError(GL_INVALID_OPERATION, \"gl%s not implemented\");\n" % | 2422 " SetGLError(GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % |
2423 func.name) | 2423 func.name) |
2424 if func.return_type != "void": | 2424 if func.return_type != "void": |
2425 file.Write(" return 0;\n") | 2425 file.Write(" return 0;\n") |
2426 file.Write("}\n") | 2426 file.Write("}\n") |
2427 file.Write("\n") | 2427 file.Write("\n") |
2428 | 2428 |
2429 def WriteServiceImplementation(self, func, file): | 2429 def WriteServiceImplementation(self, func, file): |
2430 """Overrriden from TypeHandler.""" | 2430 """Overrriden from TypeHandler.""" |
2431 file.Write( | 2431 file.Write( |
2432 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | 2432 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) |
2433 file.Write( | 2433 file.Write( |
2434 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name) | 2434 " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name) |
2435 file.Write(" // TODO: for now this is a no-op\n") | 2435 file.Write(" // TODO: for now this is a no-op\n") |
2436 file.Write( | 2436 file.Write( |
2437 " SetGLError(GL_INVALID_OPERATION, \"gl%s not implemented\");\n" % | 2437 " SetGLError(GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % |
2438 func.name) | 2438 func.name) |
2439 file.Write(" return error::kNoError;\n") | 2439 file.Write(" return error::kNoError;\n") |
2440 file.Write("}\n") | 2440 file.Write("}\n") |
2441 file.Write("\n") | 2441 file.Write("\n") |
2442 | 2442 |
2443 | 2443 |
2444 class HandWrittenHandler(CustomHandler): | 2444 class HandWrittenHandler(CustomHandler): |
2445 """Handler for comands where everything must be written by hand.""" | 2445 """Handler for comands where everything must be written by hand.""" |
2446 | 2446 |
2447 def InitFunction(self, func): | 2447 def InitFunction(self, func): |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2738 (impl_decl == None or impl_decl == True)): | 2738 (impl_decl == None or impl_decl == True)): |
2739 file.Write("%s %s(%s) {\n" % | 2739 file.Write("%s %s(%s) {\n" % |
2740 (func.return_type, func.original_name, | 2740 (func.return_type, func.original_name, |
2741 func.MakeTypedOriginalArgString(""))) | 2741 func.MakeTypedOriginalArgString(""))) |
2742 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") | 2742 file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") |
2743 func.WriteDestinationInitalizationValidation(file) | 2743 func.WriteDestinationInitalizationValidation(file) |
2744 self.WriteClientGLCallLog(func, file) | 2744 self.WriteClientGLCallLog(func, file) |
2745 for arg in func.GetOriginalArgs(): | 2745 for arg in func.GetOriginalArgs(): |
2746 arg.WriteClientSideValidationCode(file, func) | 2746 arg.WriteClientSideValidationCode(file, func) |
2747 code = """ if (Is%(type)sReservedId(%(id)s)) { | 2747 code = """ if (Is%(type)sReservedId(%(id)s)) { |
2748 SetGLError(GL_INVALID_OPERATION, "%(name)s: %(id)s reserved id"); | 2748 SetGLError(GL_INVALID_OPERATION, "%(name)s\", \"%(id)s reserved id"); |
2749 return; | 2749 return; |
2750 } | 2750 } |
2751 Bind%(type)sHelper(%(arg_string)s); | 2751 Bind%(type)sHelper(%(arg_string)s); |
2752 helper_->%(name)s(%(arg_string)s); | 2752 helper_->%(name)s(%(arg_string)s); |
2753 } | 2753 } |
2754 | 2754 |
2755 """ | 2755 """ |
2756 file.Write(code % { | 2756 file.Write(code % { |
2757 'name': func.name, | 2757 'name': func.name, |
2758 'arg_string': func.MakeOriginalArgString(""), | 2758 'arg_string': func.MakeOriginalArgString(""), |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3386 return error::kInvalidArguments; | 3386 return error::kInvalidArguments; |
3387 } | 3387 } |
3388 CopyRealGLErrorsToWrapper(); | 3388 CopyRealGLErrorsToWrapper(); |
3389 """ | 3389 """ |
3390 file.Write(code) | 3390 file.Write(code) |
3391 func.WriteHandlerImplementation(file) | 3391 func.WriteHandlerImplementation(file) |
3392 code = """ GLenum error = glGetError(); | 3392 code = """ GLenum error = glGetError(); |
3393 if (error == GL_NO_ERROR) { | 3393 if (error == GL_NO_ERROR) { |
3394 result->SetNumResults(num_values); | 3394 result->SetNumResults(num_values); |
3395 } else { | 3395 } else { |
3396 SetGLError(error, NULL); | 3396 SetGLError(error, "", ""); |
3397 } | 3397 } |
3398 return error::kNoError; | 3398 return error::kNoError; |
3399 } | 3399 } |
3400 | 3400 |
3401 """ | 3401 """ |
3402 file.Write(code) | 3402 file.Write(code) |
3403 | 3403 |
3404 def WriteGLES2ImplementationHeader(self, func, file): | 3404 def WriteGLES2ImplementationHeader(self, func, file): |
3405 """Overrriden from TypeHandler.""" | 3405 """Overrriden from TypeHandler.""" |
3406 impl_decl = func.GetInfo('impl_decl') | 3406 impl_decl = func.GetInfo('impl_decl') |
(...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4717 return 0 | 4717 return 0 |
4718 return 1 | 4718 return 1 |
4719 | 4719 |
4720 def GetInvalidArg(self, offset, index): | 4720 def GetInvalidArg(self, offset, index): |
4721 """overridden from Argument.""" | 4721 """overridden from Argument.""" |
4722 return ("-1", "kNoError", "GL_INVALID_VALUE") | 4722 return ("-1", "kNoError", "GL_INVALID_VALUE") |
4723 | 4723 |
4724 def WriteValidationCode(self, file, func): | 4724 def WriteValidationCode(self, file, func): |
4725 """overridden from Argument.""" | 4725 """overridden from Argument.""" |
4726 file.Write(" if (%s < 0) {\n" % self.name) | 4726 file.Write(" if (%s < 0) {\n" % self.name) |
4727 file.Write(" SetGLError(GL_INVALID_VALUE, \"gl%s: %s < 0\");\n" % | 4727 file.Write(" SetGLError(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" % |
4728 (func.original_name, self.name)) | 4728 (func.original_name, self.name)) |
4729 file.Write(" return error::kNoError;\n") | 4729 file.Write(" return error::kNoError;\n") |
4730 file.Write(" }\n") | 4730 file.Write(" }\n") |
4731 | 4731 |
4732 def WriteClientSideValidationCode(self, file, func): | 4732 def WriteClientSideValidationCode(self, file, func): |
4733 """overridden from Argument.""" | 4733 """overridden from Argument.""" |
4734 file.Write(" if (%s < 0) {\n" % self.name) | 4734 file.Write(" if (%s < 0) {\n" % self.name) |
4735 file.Write(" SetGLError(GL_INVALID_VALUE, \"gl%s: %s < 0\");\n" % | 4735 file.Write(" SetGLError(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" % |
4736 (func.original_name, self.name)) | 4736 (func.original_name, self.name)) |
4737 file.Write(" return;\n") | 4737 file.Write(" return;\n") |
4738 file.Write(" }\n") | 4738 file.Write(" }\n") |
4739 | 4739 |
4740 | 4740 |
4741 class SizeNotNegativeArgument(SizeArgument): | 4741 class SizeNotNegativeArgument(SizeArgument): |
4742 """class for GLsizeiNotNegative. It's NEVER allowed to be negative""" | 4742 """class for GLsizeiNotNegative. It's NEVER allowed to be negative""" |
4743 | 4743 |
4744 def __init__(self, name, type, gl_type): | 4744 def __init__(self, name, type, gl_type): |
4745 SizeArgument.__init__(self, name, gl_type) | 4745 SizeArgument.__init__(self, name, gl_type) |
4746 | 4746 |
4747 def GetInvalidArg(self, offset, index): | 4747 def GetInvalidArg(self, offset, index): |
4748 """overridden from SizeArgument.""" | 4748 """overridden from SizeArgument.""" |
4749 return ("-1", "kOutOfBounds", "GL_NO_ERROR") | 4749 return ("-1", "kOutOfBounds", "GL_NO_ERROR") |
4750 | 4750 |
4751 def WriteValidationCode(self, file, func): | 4751 def WriteValidationCode(self, file, func): |
4752 """overridden from SizeArgument.""" | 4752 """overridden from SizeArgument.""" |
4753 pass | 4753 pass |
4754 #file.Write(" if (%s < 0) {\n" % self.name) | |
4755 #file.Write(" SetGLError(GL_INVALID_VALUE, \"gl%s: %s < 0\");\n" % | |
4756 # (func.original_name, self.name)) | |
4757 #file.Write(" return error::kNoError;\n") | |
4758 #file.Write(" }\n") | |
4759 | 4754 |
4760 | 4755 |
4761 class EnumBaseArgument(Argument): | 4756 class EnumBaseArgument(Argument): |
4762 """Base class for EnumArgument, IntArgument and ValidatedBoolArgument""" | 4757 """Base class for EnumArgument, IntArgument and ValidatedBoolArgument""" |
4763 | 4758 |
4764 def __init__(self, name, gl_type, type, gl_error): | 4759 def __init__(self, name, gl_type, type, gl_error): |
4765 Argument.__init__(self, name, gl_type) | 4760 Argument.__init__(self, name, gl_type) |
4766 | 4761 |
4767 self.local_type = type | 4762 self.local_type = type |
4768 self.gl_error = gl_error | 4763 self.gl_error = gl_error |
4769 name = type[len(gl_type):] | 4764 name = type[len(gl_type):] |
4770 self.type_name = name | 4765 self.type_name = name |
4771 self.enum_info = _ENUM_LISTS[name] | 4766 self.enum_info = _ENUM_LISTS[name] |
4772 | 4767 |
4773 def WriteValidationCode(self, file, func): | 4768 def WriteValidationCode(self, file, func): |
4774 file.Write(" if (!validators_->%s.IsValid(%s)) {\n" % | 4769 file.Write(" if (!validators_->%s.IsValid(%s)) {\n" % |
4775 (ToUnderscore(self.type_name), self.name)) | 4770 (ToUnderscore(self.type_name), self.name)) |
4776 file.Write(" SetGLError(%s, \"gl%s: %s %s\");\n" % | 4771 file.Write(" SetGLError(%s, \"gl%s\", \"%s %s\");\n" % |
4777 (self.gl_error, func.original_name, self.name, self.gl_error)) | 4772 (self.gl_error, func.original_name, self.name, self.gl_error)) |
4778 file.Write(" return error::kNoError;\n") | 4773 file.Write(" return error::kNoError;\n") |
4779 file.Write(" }\n") | 4774 file.Write(" }\n") |
4780 | 4775 |
4781 def GetValidArg(self, func, offset, index): | 4776 def GetValidArg(self, func, offset, index): |
4782 valid_arg = func.GetValidArg(offset) | 4777 valid_arg = func.GetValidArg(offset) |
4783 if valid_arg != None: | 4778 if valid_arg != None: |
4784 return valid_arg | 4779 return valid_arg |
4785 if 'valid' in self.enum_info: | 4780 if 'valid' in self.enum_info: |
4786 valid = self.enum_info['valid'] | 4781 valid = self.enum_info['valid'] |
(...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6265 gen.WriteCommonUtilsImpl("common/gles2_cmd_utils_implementation_autogen.h") | 6260 gen.WriteCommonUtilsImpl("common/gles2_cmd_utils_implementation_autogen.h") |
6266 | 6261 |
6267 if gen.errors > 0: | 6262 if gen.errors > 0: |
6268 print "%d errors" % gen.errors | 6263 print "%d errors" % gen.errors |
6269 return 1 | 6264 return 1 |
6270 return 0 | 6265 return 0 |
6271 | 6266 |
6272 | 6267 |
6273 if __name__ == '__main__': | 6268 if __name__ == '__main__': |
6274 sys.exit(main(sys.argv[1:])) | 6269 sys.exit(main(sys.argv[1:])) |
OLD | NEW |