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

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

Issue 540053004: command_buffer: Table based command dispatch. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
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 2916 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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:]))
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698