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 2916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2927 def WriteImmediateHandlerImplementation (self, func, file): | 2927 def WriteImmediateHandlerImplementation (self, func, file): |
2928 """Writes the handler impl for the immediate version of a command.""" | 2928 """Writes the handler impl for the immediate version of a command.""" |
2929 file.Write(" %s(%s);\n" % | 2929 file.Write(" %s(%s);\n" % |
2930 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 2930 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
2931 | 2931 |
2932 def WriteBucketHandlerImplementation (self, func, file): | 2932 def WriteBucketHandlerImplementation (self, func, file): |
2933 """Writes the handler impl for the bucket version of a command.""" | 2933 """Writes the handler impl for the bucket version of a command.""" |
2934 file.Write(" %s(%s);\n" % | 2934 file.Write(" %s(%s);\n" % |
2935 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 2935 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
2936 | 2936 |
| 2937 def WriteServiceHandlerFunctionHeader(self, func, file): |
| 2938 """Writes function header for service implementation handlers.""" |
| 2939 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( |
| 2940 uint32_t immediate_data_size, const void* cmd_data) { |
| 2941 const gles2::cmds::%(name)s& c = |
| 2942 *static_cast<const gles2::cmds::%(name)s*>(cmd_data); |
| 2943 (void)c; |
| 2944 """ % {'name': func.name}) |
| 2945 |
2937 def WriteServiceImplementation(self, func, file): | 2946 def WriteServiceImplementation(self, func, file): |
2938 """Writes the service implementation for a command.""" | 2947 """Writes the service implementation for a command.""" |
2939 file.Write( | 2948 self.WriteServiceHandlerFunctionHeader(func, file) |
2940 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | |
2941 file.Write( | |
2942 " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % | |
2943 func.name) | |
2944 self.WriteHandlerExtensionCheck(func, file) | 2949 self.WriteHandlerExtensionCheck(func, file) |
2945 self.WriteHandlerDeferReadWrite(func, file); | 2950 self.WriteHandlerDeferReadWrite(func, file); |
2946 if len(func.GetOriginalArgs()) > 0: | 2951 if len(func.GetOriginalArgs()) > 0: |
2947 last_arg = func.GetLastOriginalArg() | 2952 last_arg = func.GetLastOriginalArg() |
2948 all_but_last_arg = func.GetOriginalArgs()[:-1] | 2953 all_but_last_arg = func.GetOriginalArgs()[:-1] |
2949 for arg in all_but_last_arg: | 2954 for arg in all_but_last_arg: |
2950 arg.WriteGetCode(file) | 2955 arg.WriteGetCode(file) |
2951 self.WriteGetDataSizeCode(func, file) | 2956 self.WriteGetDataSizeCode(func, file) |
2952 last_arg.WriteGetCode(file) | 2957 last_arg.WriteGetCode(file) |
2953 func.WriteHandlerValidation(file) | 2958 func.WriteHandlerValidation(file) |
2954 func.WriteHandlerImplementation(file) | 2959 func.WriteHandlerImplementation(file) |
2955 file.Write(" return error::kNoError;\n") | 2960 file.Write(" return error::kNoError;\n") |
2956 file.Write("}\n") | 2961 file.Write("}\n") |
2957 file.Write("\n") | 2962 file.Write("\n") |
2958 | 2963 |
2959 def WriteImmediateServiceImplementation(self, func, file): | 2964 def WriteImmediateServiceImplementation(self, func, file): |
2960 """Writes the service implementation for an immediate version of command.""" | 2965 """Writes the service implementation for an immediate version of command.""" |
2961 file.Write( | 2966 self.WriteServiceHandlerFunctionHeader(func, file) |
2962 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | |
2963 file.Write( | |
2964 " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % | |
2965 func.name) | |
2966 self.WriteHandlerExtensionCheck(func, file) | 2967 self.WriteHandlerExtensionCheck(func, file) |
2967 self.WriteHandlerDeferReadWrite(func, file); | 2968 self.WriteHandlerDeferReadWrite(func, file); |
2968 last_arg = func.GetLastOriginalArg() | 2969 last_arg = func.GetLastOriginalArg() |
2969 all_but_last_arg = func.GetOriginalArgs()[:-1] | 2970 all_but_last_arg = func.GetOriginalArgs()[:-1] |
2970 for arg in all_but_last_arg: | 2971 for arg in all_but_last_arg: |
2971 arg.WriteGetCode(file) | 2972 arg.WriteGetCode(file) |
2972 self.WriteGetDataSizeCode(func, file) | 2973 self.WriteGetDataSizeCode(func, file) |
2973 last_arg.WriteGetCode(file) | 2974 last_arg.WriteGetCode(file) |
2974 func.WriteHandlerValidation(file) | 2975 func.WriteHandlerValidation(file) |
2975 func.WriteHandlerImplementation(file) | 2976 func.WriteHandlerImplementation(file) |
2976 file.Write(" return error::kNoError;\n") | 2977 file.Write(" return error::kNoError;\n") |
2977 file.Write("}\n") | 2978 file.Write("}\n") |
2978 file.Write("\n") | 2979 file.Write("\n") |
2979 | 2980 |
2980 def WriteBucketServiceImplementation(self, func, file): | 2981 def WriteBucketServiceImplementation(self, func, file): |
2981 """Writes the service implementation for a bucket version of command.""" | 2982 """Writes the service implementation for a bucket version of command.""" |
2982 file.Write( | 2983 self.WriteServiceHandlerFunctionHeader(func, file) |
2983 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | |
2984 file.Write( | |
2985 " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % | |
2986 func.name) | |
2987 self.WriteHandlerExtensionCheck(func, file) | 2984 self.WriteHandlerExtensionCheck(func, file) |
2988 self.WriteHandlerDeferReadWrite(func, file); | 2985 self.WriteHandlerDeferReadWrite(func, file); |
2989 last_arg = func.GetLastOriginalArg() | 2986 last_arg = func.GetLastOriginalArg() |
2990 all_but_last_arg = func.GetOriginalArgs()[:-1] | 2987 all_but_last_arg = func.GetOriginalArgs()[:-1] |
2991 for arg in all_but_last_arg: | 2988 for arg in all_but_last_arg: |
2992 arg.WriteGetCode(file) | 2989 arg.WriteGetCode(file) |
2993 self.WriteGetDataSizeCode(func, file) | 2990 self.WriteGetDataSizeCode(func, file) |
2994 last_arg.WriteGetCode(file) | 2991 last_arg.WriteGetCode(file) |
2995 func.WriteHandlerValidation(file) | 2992 func.WriteHandlerValidation(file) |
2996 func.WriteHandlerImplementation(file) | 2993 func.WriteHandlerImplementation(file) |
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3716 " SetGLError(" | 3713 " SetGLError(" |
3717 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % | 3714 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % |
3718 func.name) | 3715 func.name) |
3719 if func.return_type != "void": | 3716 if func.return_type != "void": |
3720 file.Write(" return 0;\n") | 3717 file.Write(" return 0;\n") |
3721 file.Write("}\n") | 3718 file.Write("}\n") |
3722 file.Write("\n") | 3719 file.Write("\n") |
3723 | 3720 |
3724 def WriteServiceImplementation(self, func, file): | 3721 def WriteServiceImplementation(self, func, file): |
3725 """Overrriden from TypeHandler.""" | 3722 """Overrriden from TypeHandler.""" |
3726 file.Write( | 3723 self.WriteServiceHandlerFunctionHeader(func, file) |
3727 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | |
3728 file.Write( | |
3729 " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % | |
3730 func.name) | |
3731 file.Write(" // TODO: for now this is a no-op\n") | 3724 file.Write(" // TODO: for now this is a no-op\n") |
3732 file.Write( | 3725 file.Write( |
3733 " LOCAL_SET_GL_ERROR(" | 3726 " LOCAL_SET_GL_ERROR(" |
3734 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % | 3727 "GL_INVALID_OPERATION, \"gl%s\", \"not implemented\");\n" % |
3735 func.name) | 3728 func.name) |
3736 file.Write(" return error::kNoError;\n") | 3729 file.Write(" return error::kNoError;\n") |
3737 file.Write("}\n") | 3730 file.Write("}\n") |
3738 file.Write("\n") | 3731 file.Write("\n") |
3739 | 3732 |
3740 | 3733 |
(...skipping 991 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4732 | 4725 |
4733 def __init__(self): | 4726 def __init__(self): |
4734 TypeHandler.__init__(self) | 4727 TypeHandler.__init__(self) |
4735 | 4728 |
4736 def NeedsDataTransferFunction(self, func): | 4729 def NeedsDataTransferFunction(self, func): |
4737 """Overriden from TypeHandler.""" | 4730 """Overriden from TypeHandler.""" |
4738 return False | 4731 return False |
4739 | 4732 |
4740 def WriteServiceImplementation(self, func, file): | 4733 def WriteServiceImplementation(self, func, file): |
4741 """Overrriden from TypeHandler.""" | 4734 """Overrriden from TypeHandler.""" |
4742 file.Write( | 4735 self.WriteServiceHandlerFunctionHeader(func, file) |
4743 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | |
4744 file.Write( | |
4745 " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % | |
4746 func.name) | |
4747 last_arg = func.GetLastOriginalArg() | 4736 last_arg = func.GetLastOriginalArg() |
4748 | 4737 |
4749 all_but_last_args = func.GetOriginalArgs()[:-1] | 4738 all_but_last_args = func.GetOriginalArgs()[:-1] |
4750 for arg in all_but_last_args: | 4739 for arg in all_but_last_args: |
4751 arg.WriteGetCode(file) | 4740 arg.WriteGetCode(file) |
4752 | 4741 |
4753 code = """ typedef cmds::%(func_name)s::Result Result; | 4742 code = """ typedef cmds::%(func_name)s::Result Result; |
4754 GLsizei num_values = 0; | 4743 GLsizei num_values = 0; |
4755 GetNumValuesReturnedForGLGet(pname, &num_values); | 4744 GetNumValuesReturnedForGLGet(pname, &num_values); |
4756 Result* result = GetSharedMemoryAs<Result*>( | 4745 Result* result = GetSharedMemoryAs<Result*>( |
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5742 def NeedsDataTransferFunction(self, func): | 5731 def NeedsDataTransferFunction(self, func): |
5743 """Overriden from TypeHandler.""" | 5732 """Overriden from TypeHandler.""" |
5744 return False | 5733 return False |
5745 | 5734 |
5746 def AddBucketFunction(self, generator, func): | 5735 def AddBucketFunction(self, generator, func): |
5747 """Overrriden from TypeHandler.""" | 5736 """Overrriden from TypeHandler.""" |
5748 pass | 5737 pass |
5749 | 5738 |
5750 def WriteServiceImplementation(self, func, file): | 5739 def WriteServiceImplementation(self, func, file): |
5751 """Overrriden from TypeHandler.""" | 5740 """Overrriden from TypeHandler.""" |
5752 file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( | 5741 self.WriteServiceHandlerFunctionHeader(func, file) |
5753 uint32_t immediate_data_size, const gles2::cmds::%(name)s& c) { | 5742 file.Write(""" |
5754 GLuint bucket_id = static_cast<GLuint>(c.%(bucket_id)s); | 5743 GLuint bucket_id = static_cast<GLuint>(c.%(bucket_id)s); |
5755 Bucket* bucket = GetBucket(bucket_id); | 5744 Bucket* bucket = GetBucket(bucket_id); |
5756 if (!bucket || bucket->size() == 0) { | 5745 if (!bucket || bucket->size() == 0) { |
5757 return error::kInvalidArguments; | 5746 return error::kInvalidArguments; |
5758 } | 5747 } |
5759 std::string str; | 5748 std::string str; |
5760 if (!bucket->GetAsString(&str)) { | 5749 if (!bucket->GetAsString(&str)) { |
5761 return error::kInvalidArguments; | 5750 return error::kInvalidArguments; |
5762 } | 5751 } |
5763 %(gl_func_name)s(0, str.c_str()); | 5752 %(gl_func_name)s(0, str.c_str()); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5826 cmd.Init(%(args)s%(comma)sshared_memory_id_, kInvalidSharedMemoryOffset); | 5815 cmd.Init(%(args)s%(comma)sshared_memory_id_, kInvalidSharedMemoryOffset); |
5827 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); | 5816 EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); |
5828 } | 5817 } |
5829 """ | 5818 """ |
5830 self.WriteValidUnitTest(func, file, invalid_test, { | 5819 self.WriteValidUnitTest(func, file, invalid_test, { |
5831 'comma': comma, | 5820 'comma': comma, |
5832 }, *extras) | 5821 }, *extras) |
5833 | 5822 |
5834 def WriteServiceImplementation(self, func, file): | 5823 def WriteServiceImplementation(self, func, file): |
5835 """Overrriden from TypeHandler.""" | 5824 """Overrriden from TypeHandler.""" |
5836 file.Write( | 5825 self.WriteServiceHandlerFunctionHeader(func, file) |
5837 "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name) | |
5838 file.Write( | |
5839 " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" % | |
5840 func.name) | |
5841 args = func.GetOriginalArgs() | 5826 args = func.GetOriginalArgs() |
5842 for arg in args: | 5827 for arg in args: |
5843 arg.WriteGetCode(file) | 5828 arg.WriteGetCode(file) |
5844 | 5829 |
5845 code = """ typedef cmds::%(func_name)s::Result Result; | 5830 code = """ typedef cmds::%(func_name)s::Result Result; |
5846 Result* result_dst = GetSharedMemoryAs<Result*>( | 5831 Result* result_dst = GetSharedMemoryAs<Result*>( |
5847 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 5832 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
5848 if (!result_dst) { | 5833 if (!result_dst) { |
5849 return error::kOutOfBounds; | 5834 return error::kOutOfBounds; |
5850 } | 5835 } |
(...skipping 2748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8599 "ppapi/shared_impl/ppb_opengles2_shared.cc"]) | 8584 "ppapi/shared_impl/ppb_opengles2_shared.cc"]) |
8600 | 8585 |
8601 if gen.errors > 0: | 8586 if gen.errors > 0: |
8602 print "%d errors" % gen.errors | 8587 print "%d errors" % gen.errors |
8603 return 1 | 8588 return 1 |
8604 return 0 | 8589 return 0 |
8605 | 8590 |
8606 | 8591 |
8607 if __name__ == '__main__': | 8592 if __name__ == '__main__': |
8608 sys.exit(main(sys.argv[1:])) | 8593 sys.exit(main(sys.argv[1:])) |
OLD | NEW |