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

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

Issue 2012533004: Add generated and hand-written passthrough command handlers with stub Doers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix presubmit Created 4 years, 6 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 4956 matching lines...) Expand 10 before | Expand all | Expand 10 after
4967 """ % {'name': func.name}) 4967 """ % {'name': func.name})
4968 if func.IsUnsafe(): 4968 if func.IsUnsafe():
4969 f.write("""if (!unsafe_es3_apis_enabled()) 4969 f.write("""if (!unsafe_es3_apis_enabled())
4970 return error::kUnknownCommand; 4970 return error::kUnknownCommand;
4971 """) 4971 """)
4972 f.write("""const gles2::cmds::%(name)s& c = 4972 f.write("""const gles2::cmds::%(name)s& c =
4973 *static_cast<const gles2::cmds::%(name)s*>(cmd_data); 4973 *static_cast<const gles2::cmds::%(name)s*>(cmd_data);
4974 (void)c; 4974 (void)c;
4975 """ % {'name': func.name}) 4975 """ % {'name': func.name})
4976 4976
4977 def WriteServiceImplementation(self, func, f): 4977 def WriteServiceHandlerArgGetCode(self, func, f):
4978 """Writes the service implementation for a command.""" 4978 """Writes the argument unpack code for service handlers."""
4979 self.WriteServiceHandlerFunctionHeader(func, f)
4980 self.WriteHandlerExtensionCheck(func, f)
4981 self.WriteHandlerDeferReadWrite(func, f);
4982 if len(func.GetOriginalArgs()) > 0: 4979 if len(func.GetOriginalArgs()) > 0:
4983 last_arg = func.GetLastOriginalArg() 4980 last_arg = func.GetLastOriginalArg()
4984 all_but_last_arg = func.GetOriginalArgs()[:-1] 4981 all_but_last_arg = func.GetOriginalArgs()[:-1]
4985 for arg in all_but_last_arg: 4982 for arg in all_but_last_arg:
4986 arg.WriteGetCode(f) 4983 arg.WriteGetCode(f)
4987 self.WriteGetDataSizeCode(func, f) 4984 self.WriteGetDataSizeCode(func, f)
4988 last_arg.WriteGetCode(f) 4985 last_arg.WriteGetCode(f)
4986
4987 def WriteImmediateServiceHandlerArgGetCode(self, func, f):
4988 """Writes the argument unpack code for immediate service handlers."""
4989 for arg in func.GetOriginalArgs():
4990 if arg.IsPointer():
4991 self.WriteGetDataSizeCode(func, f)
4992 arg.WriteGetCode(f)
4993
4994 def WriteBucketServiceHandlerArgGetCode(self, func, f):
4995 """Writes the argument unpack code for bucket service handlers."""
4996 for arg in func.GetCmdArgs():
4997 arg.WriteGetCode(f)
4998
4999 def WriteServiceImplementation(self, func, f):
5000 """Writes the service implementation for a command."""
5001 self.WriteServiceHandlerFunctionHeader(func, f)
5002 self.WriteHandlerExtensionCheck(func, f)
5003 self.WriteHandlerDeferReadWrite(func, f);
5004 self.WriteServiceHandlerArgGetCode(func, f)
4989 func.WriteHandlerValidation(f) 5005 func.WriteHandlerValidation(f)
4990 func.WriteHandlerImplementation(f) 5006 func.WriteHandlerImplementation(f)
4991 f.write(" return error::kNoError;\n") 5007 f.write(" return error::kNoError;\n")
4992 f.write("}\n") 5008 f.write("}\n")
4993 f.write("\n") 5009 f.write("\n")
4994 5010
4995 def WriteImmediateServiceImplementation(self, func, f): 5011 def WriteImmediateServiceImplementation(self, func, f):
4996 """Writes the service implementation for an immediate version of command.""" 5012 """Writes the service implementation for an immediate version of command."""
4997 self.WriteServiceHandlerFunctionHeader(func, f) 5013 self.WriteServiceHandlerFunctionHeader(func, f)
4998 self.WriteHandlerExtensionCheck(func, f) 5014 self.WriteHandlerExtensionCheck(func, f)
4999 self.WriteHandlerDeferReadWrite(func, f); 5015 self.WriteHandlerDeferReadWrite(func, f);
5000 for arg in func.GetOriginalArgs(): 5016 self.WriteImmediateServiceHandlerArgGetCode(func, f)
5001 if arg.IsPointer():
5002 self.WriteGetDataSizeCode(func, f)
5003 arg.WriteGetCode(f)
5004 func.WriteHandlerValidation(f) 5017 func.WriteHandlerValidation(f)
5005 func.WriteHandlerImplementation(f) 5018 func.WriteHandlerImplementation(f)
5006 f.write(" return error::kNoError;\n") 5019 f.write(" return error::kNoError;\n")
5007 f.write("}\n") 5020 f.write("}\n")
5008 f.write("\n") 5021 f.write("\n")
5009 5022
5010 def WriteBucketServiceImplementation(self, func, f): 5023 def WriteBucketServiceImplementation(self, func, f):
5011 """Writes the service implementation for a bucket version of command.""" 5024 """Writes the service implementation for a bucket version of command."""
5012 self.WriteServiceHandlerFunctionHeader(func, f) 5025 self.WriteServiceHandlerFunctionHeader(func, f)
5013 self.WriteHandlerExtensionCheck(func, f) 5026 self.WriteHandlerExtensionCheck(func, f)
5014 self.WriteHandlerDeferReadWrite(func, f); 5027 self.WriteHandlerDeferReadWrite(func, f);
5015 for arg in func.GetCmdArgs(): 5028 self.WriteBucketServiceHandlerArgGetCode(func, f)
5016 arg.WriteGetCode(f)
5017 func.WriteHandlerValidation(f) 5029 func.WriteHandlerValidation(f)
5018 func.WriteHandlerImplementation(f) 5030 func.WriteHandlerImplementation(f)
5019 f.write(" return error::kNoError;\n") 5031 f.write(" return error::kNoError;\n")
5020 f.write("}\n") 5032 f.write("}\n")
5021 f.write("\n") 5033 f.write("\n")
5022 5034
5035 def WritePassthroughServiceFunctionHeader(self, func, f):
5036 """Writes function header for service passthrough handlers."""
5037 f.write("""error::Error GLES2DecoderPassthroughImpl::Handle%(name)s(
5038 uint32_t immediate_data_size, const void* cmd_data) {
5039 """ % {'name': func.name})
5040 f.write("""const gles2::cmds::%(name)s& c =
5041 *static_cast<const gles2::cmds::%(name)s*>(cmd_data);
5042 (void)c;
5043 """ % {'name': func.name})
5044
5045 def WritePassthroughServiceFunctionDoerCall(self, func, f):
5046 """Writes the function call to the passthrough service doer."""
5047 f.write(""" error::Error error = Do%(name)s(%(args)s);
5048 if (error != error::kNoError) {
5049 return error;
5050 }""" % {'name': func.original_name,
5051 'args': func.MakePassthroughServiceDoerArgString("")})
5052
5053 def WritePassthroughServiceImplementation(self, func, f):
5054 """Writes the service implementation for a command."""
5055 self.WritePassthroughServiceFunctionHeader(func, f)
5056 self.WriteServiceHandlerArgGetCode(func, f)
5057 self.WritePassthroughServiceFunctionDoerCall(func, f)
5058 f.write(" return error::kNoError;\n")
5059 f.write("}\n")
5060 f.write("\n")
5061
5062 def WritePassthroughImmediateServiceImplementation(self, func, f):
5063 """Writes the service implementation for a command."""
5064 self.WritePassthroughServiceFunctionHeader(func, f)
5065 self.WriteImmediateServiceHandlerArgGetCode(func, f)
5066 self.WritePassthroughServiceFunctionDoerCall(func, f)
5067 f.write(" return error::kNoError;\n")
5068 f.write("}\n")
5069 f.write("\n")
5070
5071 def WritePassthroughBucketServiceImplementation(self, func, f):
5072 """Writes the service implementation for a command."""
5073 self.WritePassthroughServiceFunctionHeader(func, f)
5074 self.WriteBucketServiceHandlerArgGetCode(func, f)
5075 self.WritePassthroughServiceFunctionDoerCall(func, f)
5076 f.write(" return error::kNoError;\n")
5077 f.write("}\n")
5078 f.write("\n")
5079
5023 def WriteHandlerExtensionCheck(self, func, f): 5080 def WriteHandlerExtensionCheck(self, func, f):
5024 if func.GetInfo('extension_flag'): 5081 if func.GetInfo('extension_flag'):
5025 f.write(" if (!features().%s) {\n" % func.GetInfo('extension_flag')) 5082 f.write(" if (!features().%s) {\n" % func.GetInfo('extension_flag'))
5026 f.write(" return error::kUnknownCommand;") 5083 f.write(" return error::kUnknownCommand;")
5027 f.write(" }\n\n") 5084 f.write(" }\n\n")
5028 5085
5029 def WriteHandlerDeferReadWrite(self, func, f): 5086 def WriteHandlerDeferReadWrite(self, func, f):
5030 """Writes the code to handle deferring reads or writes.""" 5087 """Writes the code to handle deferring reads or writes."""
5031 defer_draws = func.GetInfo('defer_draws') 5088 defer_draws = func.GetInfo('defer_draws')
5032 defer_reads = func.GetInfo('defer_reads') 5089 defer_reads = func.GetInfo('defer_reads')
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
5649 pass 5706 pass
5650 5707
5651 def WriteImmediateServiceImplementation(self, func, f): 5708 def WriteImmediateServiceImplementation(self, func, f):
5652 """Overrriden from TypeHandler.""" 5709 """Overrriden from TypeHandler."""
5653 pass 5710 pass
5654 5711
5655 def WriteBucketServiceImplementation(self, func, f): 5712 def WriteBucketServiceImplementation(self, func, f):
5656 """Overrriden from TypeHandler.""" 5713 """Overrriden from TypeHandler."""
5657 pass 5714 pass
5658 5715
5716 def WritePassthroughServiceImplementation(self, func, f):
5717 """Overrriden from TypeHandler."""
5718 pass
5719
5720 def WritePassthroughImmediateServiceImplementation(self, func, f):
5721 """Overrriden from TypeHandler."""
5722 pass
5723
5724 def WritePassthroughBucketServiceImplementation(self, func, f):
5725 """Overrriden from TypeHandler."""
5726 pass
5727
5659 def WriteServiceUnitTest(self, func, f, *extras): 5728 def WriteServiceUnitTest(self, func, f, *extras):
5660 """Overrriden from TypeHandler.""" 5729 """Overrriden from TypeHandler."""
5661 pass 5730 pass
5662 5731
5663 def WriteImmediateServiceUnitTest(self, func, f, *extras): 5732 def WriteImmediateServiceUnitTest(self, func, f, *extras):
5664 """Overrriden from TypeHandler.""" 5733 """Overrriden from TypeHandler."""
5665 pass 5734 pass
5666 5735
5667 def WriteImmediateCmdGetTotalSize(self, func, f): 5736 def WriteImmediateCmdGetTotalSize(self, func, f):
5668 """Overrriden from TypeHandler.""" 5737 """Overrriden from TypeHandler."""
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
5891 def WriteImmediateServiceUnitTest(self, func, f, *extras): 5960 def WriteImmediateServiceUnitTest(self, func, f, *extras):
5892 """Overrriden from TypeHandler.""" 5961 """Overrriden from TypeHandler."""
5893 pass 5962 pass
5894 5963
5895 def WriteBucketServiceImplementation(self, func, f): 5964 def WriteBucketServiceImplementation(self, func, f):
5896 """Overrriden from TypeHandler.""" 5965 """Overrriden from TypeHandler."""
5897 if ((not func.name == 'CompressedTexSubImage2DBucket') and 5966 if ((not func.name == 'CompressedTexSubImage2DBucket') and
5898 (not func.name == 'CompressedTexSubImage3DBucket')): 5967 (not func.name == 'CompressedTexSubImage3DBucket')):
5899 TypeHandler.WriteBucketServiceImplemenation(self, func, f) 5968 TypeHandler.WriteBucketServiceImplemenation(self, func, f)
5900 5969
5970 def WritePassthroughBucketServiceImplementation(self, func, f):
5971 """Overrriden from TypeHandler."""
5972 if ((not func.name == 'CompressedTexSubImage2DBucket') and
5973 (not func.name == 'CompressedTexSubImage3DBucket')):
5974 TypeHandler.WritePassthroughBucketServiceImplementation(self, func, f)
5901 5975
5902 class BindHandler(TypeHandler): 5976 class BindHandler(TypeHandler):
5903 """Handler for glBind___ type functions.""" 5977 """Handler for glBind___ type functions."""
5904 5978
5905 def WriteServiceUnitTest(self, func, f, *extras): 5979 def WriteServiceUnitTest(self, func, f, *extras):
5906 """Overrriden from TypeHandler.""" 5980 """Overrriden from TypeHandler."""
5907 5981
5908 if len(func.GetOriginalArgs()) == 1: 5982 if len(func.GetOriginalArgs()) == 1:
5909 valid_test = """ 5983 valid_test = """
5910 TEST_P(%(test_name)s, %(name)sValidArgs) { 5984 TEST_P(%(test_name)s, %(name)sValidArgs) {
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
6488 (func.name, func.MakeCmdArgString(""))) 6562 (func.name, func.MakeCmdArgString("")))
6489 f.write(' GPU_CLIENT_LOG("returned " << client_id);\n') 6563 f.write(' GPU_CLIENT_LOG("returned " << client_id);\n')
6490 f.write(" CheckGLError();\n") 6564 f.write(" CheckGLError();\n")
6491 if func.return_type == "GLsync": 6565 if func.return_type == "GLsync":
6492 f.write(" return reinterpret_cast<GLsync>(client_id);\n") 6566 f.write(" return reinterpret_cast<GLsync>(client_id);\n")
6493 else: 6567 else:
6494 f.write(" return client_id;\n") 6568 f.write(" return client_id;\n")
6495 f.write("}\n") 6569 f.write("}\n")
6496 f.write("\n") 6570 f.write("\n")
6497 6571
6572 def WritePassthroughServiceImplementation(self, func, f):
6573 """Overrriden from TypeHandler."""
6574 pass
6498 6575
6499 class DeleteHandler(TypeHandler): 6576 class DeleteHandler(TypeHandler):
6500 """Handler for glDelete___ single resource type functions.""" 6577 """Handler for glDelete___ single resource type functions."""
6501 6578
6502 def WriteServiceImplementation(self, func, f): 6579 def WriteServiceImplementation(self, func, f):
6503 """Overrriden from TypeHandler.""" 6580 """Overrriden from TypeHandler."""
6504 if func.IsUnsafe(): 6581 if func.IsUnsafe():
6505 TypeHandler.WriteServiceImplementation(self, func, f) 6582 TypeHandler.WriteServiceImplementation(self, func, f)
6506 # HandleDeleteShader and HandleDeleteProgram are manually written. 6583 # HandleDeleteShader and HandleDeleteProgram are manually written.
6507 pass 6584 pass
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
6784 f.write(" RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));\n") 6861 f.write(" RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));\n")
6785 f.write(" EXPECT_EQ(0, memcmp(ids, ImmediateDataAddress(&cmd),\n") 6862 f.write(" EXPECT_EQ(0, memcmp(ids, ImmediateDataAddress(&cmd),\n")
6786 f.write(" sizeof(ids)));\n") 6863 f.write(" sizeof(ids)));\n")
6787 f.write("}\n") 6864 f.write("}\n")
6788 f.write("\n") 6865 f.write("\n")
6789 6866
6790 6867
6791 class GETnHandler(TypeHandler): 6868 class GETnHandler(TypeHandler):
6792 """Handler for GETn for glGetBooleanv, glGetFloatv, ... type functions.""" 6869 """Handler for GETn for glGetBooleanv, glGetFloatv, ... type functions."""
6793 6870
6871 def InitFunction(self, func):
6872 """Overrriden from TypeHandler."""
6873 TypeHandler.InitFunction(self, func)
6874
6875 if func.name == 'GetSynciv':
6876 return
6877
6878 arg_insert_point = len(func.passthrough_service_doer_args) - 1;
6879 func.passthrough_service_doer_args.insert(
6880 arg_insert_point, Argument('length', 'GLsizei*'))
6881 func.passthrough_service_doer_args.insert(
6882 arg_insert_point, Argument('bufsize', 'GLsizei'))
6883
6794 def NeedsDataTransferFunction(self, func): 6884 def NeedsDataTransferFunction(self, func):
6795 """Overriden from TypeHandler.""" 6885 """Overriden from TypeHandler."""
6796 return False 6886 return False
6797 6887
6798 def WriteServiceImplementation(self, func, f): 6888 def WriteServiceImplementation(self, func, f):
6799 """Overrriden from TypeHandler.""" 6889 """Overrriden from TypeHandler."""
6800 self.WriteServiceHandlerFunctionHeader(func, f) 6890 self.WriteServiceHandlerFunctionHeader(func, f)
6801 last_arg = func.GetLastOriginalArg() 6891 last_arg = func.GetLastOriginalArg()
6802 # All except shm_id and shm_offset. 6892 # All except shm_id and shm_offset.
6803 all_but_last_args = func.GetCmdArgs()[:-2] 6893 all_but_last_args = func.GetCmdArgs()[:-2]
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6837 code = """ GLenum error = LOCAL_PEEK_GL_ERROR("%(func_name)s"); 6927 code = """ GLenum error = LOCAL_PEEK_GL_ERROR("%(func_name)s");
6838 if (error == GL_NO_ERROR) { 6928 if (error == GL_NO_ERROR) {
6839 result->SetNumResults(num_values); 6929 result->SetNumResults(num_values);
6840 } 6930 }
6841 return error::kNoError; 6931 return error::kNoError;
6842 } 6932 }
6843 6933
6844 """ 6934 """
6845 f.write(code % {'func_name': func.name}) 6935 f.write(code % {'func_name': func.name})
6846 6936
6937 def WritePassthroughServiceImplementation(self, func, f):
6938 """Overrriden from TypeHandler."""
6939 self.WritePassthroughServiceFunctionHeader(func, f)
6940 last_arg = func.GetLastOriginalArg()
6941 # All except shm_id and shm_offset.
6942 all_but_last_args = func.GetCmdArgs()[:-2]
6943 for arg in all_but_last_args:
6944 arg.WriteGetCode(f)
6945
6946 code = """ unsigned int buffer_size = 0;
6947 typedef cmds::%(func_name)s::Result Result;
6948 Result* result = GetSharedMemoryAndSizeAs<Result*>(
6949 c.%(last_arg_name)s_shm_id, c.%(last_arg_name)s_shm_offset,
6950 &buffer_size);
6951 %(last_arg_type)s %(last_arg_name)s = result ? result->GetData() : NULL;
6952 if (%(last_arg_name)s == NULL) {
6953 return error::kOutOfBounds;
6954 }
6955 GLsizei bufsize = Result::ComputeMaxResults(buffer_size);
6956 GLsizei written_values = 0;
6957 GLsizei* length = &written_values;
6958 """
6959 f.write(code % {
6960 'last_arg_type': last_arg.type,
6961 'last_arg_name': last_arg.name,
6962 'func_name': func.name,
6963 })
6964
6965 self.WritePassthroughServiceFunctionDoerCall(func, f)
6966
6967 code = """ if (written_values > bufsize) {
6968 return error::kOutOfBounds;
6969 }
6970 result->SetNumResults(written_values);
6971 return error::kNoError;
6972 }
6973
6974 """
6975 f.write(code % {'func_name': func.name})
6976
6847 def WriteGLES2Implementation(self, func, f): 6977 def WriteGLES2Implementation(self, func, f):
6848 """Overrriden from TypeHandler.""" 6978 """Overrriden from TypeHandler."""
6849 impl_decl = func.GetInfo('impl_decl') 6979 impl_decl = func.GetInfo('impl_decl')
6850 if impl_decl == None or impl_decl == True: 6980 if impl_decl == None or impl_decl == True:
6851 f.write("%s GLES2Implementation::%s(%s) {\n" % 6981 f.write("%s GLES2Implementation::%s(%s) {\n" %
6852 (func.return_type, func.original_name, 6982 (func.return_type, func.original_name,
6853 func.MakeTypedOriginalArgString(""))) 6983 func.MakeTypedOriginalArgString("")))
6854 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") 6984 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n")
6855 func.WriteDestinationInitalizationValidation(f) 6985 func.WriteDestinationInitalizationValidation(f)
6856 self.WriteClientGLCallLog(func, f) 6986 self.WriteClientGLCallLog(func, f)
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after
8273 8403
8274 class IsHandler(TypeHandler): 8404 class IsHandler(TypeHandler):
8275 """Handler for glIs____ type and glGetError functions.""" 8405 """Handler for glIs____ type and glGetError functions."""
8276 8406
8277 def InitFunction(self, func): 8407 def InitFunction(self, func):
8278 """Overrriden from TypeHandler.""" 8408 """Overrriden from TypeHandler."""
8279 func.AddCmdArg(Argument("result_shm_id", 'uint32_t')) 8409 func.AddCmdArg(Argument("result_shm_id", 'uint32_t'))
8280 func.AddCmdArg(Argument("result_shm_offset", 'uint32_t')) 8410 func.AddCmdArg(Argument("result_shm_offset", 'uint32_t'))
8281 if func.GetInfo('result') == None: 8411 if func.GetInfo('result') == None:
8282 func.AddInfo('result', ['uint32_t']) 8412 func.AddInfo('result', ['uint32_t'])
8413 func.passthrough_service_doer_args.append(Argument('result', 'uint32_t*'))
8283 8414
8284 def WriteServiceUnitTest(self, func, f, *extras): 8415 def WriteServiceUnitTest(self, func, f, *extras):
8285 """Overrriden from TypeHandler.""" 8416 """Overrriden from TypeHandler."""
8286 valid_test = """ 8417 valid_test = """
8287 TEST_P(%(test_name)s, %(name)sValidArgs) { 8418 TEST_P(%(test_name)s, %(name)sValidArgs) {
8288 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)); 8419 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
8289 SpecializedSetup<cmds::%(name)s, 0>(true); 8420 SpecializedSetup<cmds::%(name)s, 0>(true);
8290 cmds::%(name)s cmd; 8421 cmds::%(name)s cmd;
8291 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_);""" 8422 cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_);"""
8292 if func.IsUnsafe(): 8423 if func.IsUnsafe():
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
8361 } 8492 }
8362 """ 8493 """
8363 f.write(code % {'func_name': func.name}) 8494 f.write(code % {'func_name': func.name})
8364 func.WriteHandlerValidation(f) 8495 func.WriteHandlerValidation(f)
8365 f.write(" *result_dst = %s(%s);\n" % 8496 f.write(" *result_dst = %s(%s);\n" %
8366 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) 8497 (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
8367 f.write(" return error::kNoError;\n") 8498 f.write(" return error::kNoError;\n")
8368 f.write("}\n") 8499 f.write("}\n")
8369 f.write("\n") 8500 f.write("\n")
8370 8501
8502 def WritePassthroughServiceImplementation(self, func, f):
8503 """Overrriden from TypeHandler."""
8504 self.WritePassthroughServiceFunctionHeader(func, f)
8505 self.WriteServiceHandlerArgGetCode(func, f)
8506
8507 code = """ typedef cmds::%(func_name)s::Result Result;
8508 Result* result = GetSharedMemoryAs<Result*>(
8509 c.result_shm_id, c.result_shm_offset, sizeof(*result));
8510 if (!result) {
8511 return error::kOutOfBounds;
8512 }
8513 """
8514 f.write(code % {'func_name': func.name})
8515 self.WritePassthroughServiceFunctionDoerCall(func, f)
8516 f.write(" return error::kNoError;\n")
8517 f.write("}\n")
8518 f.write("\n")
8519
8371 def WriteGLES2Implementation(self, func, f): 8520 def WriteGLES2Implementation(self, func, f):
8372 """Overrriden from TypeHandler.""" 8521 """Overrriden from TypeHandler."""
8373 impl_func = func.GetInfo('impl_func') 8522 impl_func = func.GetInfo('impl_func')
8374 if impl_func == None or impl_func == True: 8523 if impl_func == None or impl_func == True:
8375 error_value = func.GetInfo("error_value") or "GL_FALSE" 8524 error_value = func.GetInfo("error_value") or "GL_FALSE"
8376 f.write("%s GLES2Implementation::%s(%s) {\n" % 8525 f.write("%s GLES2Implementation::%s(%s) {\n" %
8377 (func.return_type, func.original_name, 8526 (func.return_type, func.original_name,
8378 func.MakeTypedOriginalArgString(""))) 8527 func.MakeTypedOriginalArgString("")))
8379 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n") 8528 f.write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n")
8380 self.WriteTraceEvent(func, f) 8529 self.WriteTraceEvent(func, f)
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
8550 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8699 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8551 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 8700 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
8552 } 8701 }
8553 """ 8702 """
8554 self.WriteValidUnitTest(func, f, invalid_test, *extras) 8703 self.WriteValidUnitTest(func, f, invalid_test, *extras)
8555 8704
8556 def WriteServiceImplementation(self, func, f): 8705 def WriteServiceImplementation(self, func, f):
8557 """Overrriden from TypeHandler.""" 8706 """Overrriden from TypeHandler."""
8558 pass 8707 pass
8559 8708
8709 def WritePassthroughServiceImplementation(self, func, f):
8710 """Overrriden from TypeHandler."""
8711 pass
8712
8560 class NamedType(object): 8713 class NamedType(object):
8561 """A class that represents a type of an argument in a client function. 8714 """A class that represents a type of an argument in a client function.
8562 8715
8563 A type of an argument that is to be passed through in the command buffer 8716 A type of an argument that is to be passed through in the command buffer
8564 command. Currently used only for the arguments that are specificly named in 8717 command. Currently used only for the arguments that are specificly named in
8565 the 'cmd_buffer_functions.txt' f, mostly enums. 8718 the 'cmd_buffer_functions.txt' f, mostly enums.
8566 """ 8719 """
8567 8720
8568 def __init__(self, info): 8721 def __init__(self, info):
8569 assert not 'is_complete' in info or info['is_complete'] == True 8722 assert not 'is_complete' in info or info['is_complete'] == True
(...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after
9385 self.name = name 9538 self.name = name
9386 self.original_name = info['original_name'] 9539 self.original_name = info['original_name']
9387 9540
9388 self.original_args = self.ParseArgs(info['original_args']) 9541 self.original_args = self.ParseArgs(info['original_args'])
9389 9542
9390 if 'cmd_args' in info: 9543 if 'cmd_args' in info:
9391 self.args_for_cmds = self.ParseArgs(info['cmd_args']) 9544 self.args_for_cmds = self.ParseArgs(info['cmd_args'])
9392 else: 9545 else:
9393 self.args_for_cmds = self.original_args[:] 9546 self.args_for_cmds = self.original_args[:]
9394 9547
9548 self.passthrough_service_doer_args = self.original_args[:]
9549
9395 self.return_type = info['return_type'] 9550 self.return_type = info['return_type']
9396 if self.return_type != 'void': 9551 if self.return_type != 'void':
9397 self.return_arg = CreateArg(info['return_type'] + " result") 9552 self.return_arg = CreateArg(info['return_type'] + " result")
9398 else: 9553 else:
9399 self.return_arg = None 9554 self.return_arg = None
9400 9555
9401 self.num_pointer_args = sum( 9556 self.num_pointer_args = sum(
9402 [1 for arg in self.args_for_cmds if arg.IsPointer()]) 9557 [1 for arg in self.args_for_cmds if arg.IsPointer()])
9403 if self.num_pointer_args > 0: 9558 if self.num_pointer_args > 0:
9404 for arg in reversed(self.original_args): 9559 for arg in reversed(self.original_args):
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
9542 return [arg for arg in self.args_for_cmds if arg.IsConstant()] 9697 return [arg for arg in self.args_for_cmds if arg.IsConstant()]
9543 9698
9544 def GetInitArgs(self): 9699 def GetInitArgs(self):
9545 """Gets the init args for this function.""" 9700 """Gets the init args for this function."""
9546 return self.init_args 9701 return self.init_args
9547 9702
9548 def GetOriginalArgs(self): 9703 def GetOriginalArgs(self):
9549 """Gets the original arguments to this function.""" 9704 """Gets the original arguments to this function."""
9550 return self.original_args 9705 return self.original_args
9551 9706
9707 def GetPassthroughServiceDoerArgs(self):
9708 """Gets the original arguments to this function."""
9709 return self.passthrough_service_doer_args
9710
9552 def GetLastOriginalArg(self): 9711 def GetLastOriginalArg(self):
9553 """Gets the last original argument to this function.""" 9712 """Gets the last original argument to this function."""
9554 return self.original_args[len(self.original_args) - 1] 9713 return self.original_args[len(self.original_args) - 1]
9555 9714
9556 def GetLastOriginalPointerArg(self): 9715 def GetLastOriginalPointerArg(self):
9557 return self.last_original_pointer_arg 9716 return self.last_original_pointer_arg
9558 9717
9559 def GetResourceIdArg(self): 9718 def GetResourceIdArg(self):
9560 for arg in self.original_args: 9719 for arg in self.original_args:
9561 if hasattr(arg, 'resource_type'): 9720 if hasattr(arg, 'resource_type'):
(...skipping 14 matching lines...) Expand all
9576 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args]) 9735 ["%s %s%s" % (arg.type, prefix, arg.name) for arg in args])
9577 return self._MaybePrependComma(arg_string, add_comma) 9736 return self._MaybePrependComma(arg_string, add_comma)
9578 9737
9579 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): 9738 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "):
9580 """Gets the list of arguments as they are in GL.""" 9739 """Gets the list of arguments as they are in GL."""
9581 args = self.GetOriginalArgs() 9740 args = self.GetOriginalArgs()
9582 arg_string = separator.join( 9741 arg_string = separator.join(
9583 ["%s%s" % (prefix, arg.name) for arg in args]) 9742 ["%s%s" % (prefix, arg.name) for arg in args])
9584 return self._MaybePrependComma(arg_string, add_comma) 9743 return self._MaybePrependComma(arg_string, add_comma)
9585 9744
9745 def MakePassthroughServiceDoerArgString(self, prefix, add_comma = False,
9746 separator = ", "):
9747 """Gets the list of arguments as they are in used by the passthrough
9748 service doer function."""
9749 args = self.GetPassthroughServiceDoerArgs()
9750 arg_string = separator.join(
9751 ["%s%s" % (prefix, arg.name) for arg in args])
9752 return self._MaybePrependComma(arg_string, add_comma)
9753
9586 def MakeHelperArgString(self, prefix, add_comma = False, separator = ", "): 9754 def MakeHelperArgString(self, prefix, add_comma = False, separator = ", "):
9587 """Gets a list of GL arguments after removing unneeded arguments.""" 9755 """Gets a list of GL arguments after removing unneeded arguments."""
9588 args = self.GetOriginalArgs() 9756 args = self.GetOriginalArgs()
9589 arg_string = separator.join( 9757 arg_string = separator.join(
9590 ["%s%s" % (prefix, arg.name) 9758 ["%s%s" % (prefix, arg.name)
9591 for arg in args if not arg.IsConstant()]) 9759 for arg in args if not arg.IsConstant()])
9592 return self._MaybePrependComma(arg_string, add_comma) 9760 return self._MaybePrependComma(arg_string, add_comma)
9593 9761
9594 def MakeTypedPepperArgString(self, prefix): 9762 def MakeTypedPepperArgString(self, prefix):
9595 """Gets a list of arguments as they need to be for Pepper.""" 9763 """Gets a list of arguments as they need to be for Pepper."""
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
9749 self.type_handler.WriteDocs(self, f) 9917 self.type_handler.WriteDocs(self, f)
9750 9918
9751 def WriteCmdHelper(self, f): 9919 def WriteCmdHelper(self, f):
9752 """Writes the cmd's helper.""" 9920 """Writes the cmd's helper."""
9753 self.type_handler.WriteCmdHelper(self, f) 9921 self.type_handler.WriteCmdHelper(self, f)
9754 9922
9755 def WriteServiceImplementation(self, f): 9923 def WriteServiceImplementation(self, f):
9756 """Writes the service implementation for a command.""" 9924 """Writes the service implementation for a command."""
9757 self.type_handler.WriteServiceImplementation(self, f) 9925 self.type_handler.WriteServiceImplementation(self, f)
9758 9926
9927 def WritePassthroughServiceImplementation(self, f):
9928 """Writes the service implementation for a command."""
9929 self.type_handler.WritePassthroughServiceImplementation(self, f)
9930
9759 def WriteServiceUnitTest(self, f, *extras): 9931 def WriteServiceUnitTest(self, f, *extras):
9760 """Writes the service implementation for a command.""" 9932 """Writes the service implementation for a command."""
9761 self.type_handler.WriteServiceUnitTest(self, f, *extras) 9933 self.type_handler.WriteServiceUnitTest(self, f, *extras)
9762 9934
9763 def WriteGLES2CLibImplementation(self, f): 9935 def WriteGLES2CLibImplementation(self, f):
9764 """Writes the GLES2 C Lib Implemention.""" 9936 """Writes the GLES2 C Lib Implemention."""
9765 self.type_handler.WriteGLES2CLibImplementation(self, f) 9937 self.type_handler.WriteGLES2CLibImplementation(self, f)
9766 9938
9767 def WriteGLES2InterfaceHeader(self, f): 9939 def WriteGLES2InterfaceHeader(self, f):
9768 """Writes the GLES2 Interface declaration.""" 9940 """Writes the GLES2 Interface declaration."""
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
9865 10037
9866 Function.InitFunction(self) 10038 Function.InitFunction(self)
9867 10039
9868 def IsImmediate(self): 10040 def IsImmediate(self):
9869 return True 10041 return True
9870 10042
9871 def WriteServiceImplementation(self, f): 10043 def WriteServiceImplementation(self, f):
9872 """Overridden from Function""" 10044 """Overridden from Function"""
9873 self.type_handler.WriteImmediateServiceImplementation(self, f) 10045 self.type_handler.WriteImmediateServiceImplementation(self, f)
9874 10046
10047 def WritePassthroughServiceImplementation(self, f):
10048 """Overridden from Function"""
10049 self.type_handler.WritePassthroughImmediateServiceImplementation(self, f)
10050
9875 def WriteHandlerImplementation(self, f): 10051 def WriteHandlerImplementation(self, f):
9876 """Overridden from Function""" 10052 """Overridden from Function"""
9877 self.type_handler.WriteImmediateHandlerImplementation(self, f) 10053 self.type_handler.WriteImmediateHandlerImplementation(self, f)
9878 10054
9879 def WriteServiceUnitTest(self, f, *extras): 10055 def WriteServiceUnitTest(self, f, *extras):
9880 """Writes the service implementation for a command.""" 10056 """Writes the service implementation for a command."""
9881 self.type_handler.WriteImmediateServiceUnitTest(self, f, *extras) 10057 self.type_handler.WriteImmediateServiceUnitTest(self, f, *extras)
9882 10058
9883 def WriteValidationCode(self, f): 10059 def WriteValidationCode(self, f):
9884 """Overridden from Function""" 10060 """Overridden from Function"""
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
9940 new_args_for_cmds.append(new_arg) 10116 new_args_for_cmds.append(new_arg)
9941 10117
9942 self.args_for_cmds = new_args_for_cmds 10118 self.args_for_cmds = new_args_for_cmds
9943 10119
9944 Function.InitFunction(self) 10120 Function.InitFunction(self)
9945 10121
9946 def WriteServiceImplementation(self, f): 10122 def WriteServiceImplementation(self, f):
9947 """Overridden from Function""" 10123 """Overridden from Function"""
9948 self.type_handler.WriteBucketServiceImplementation(self, f) 10124 self.type_handler.WriteBucketServiceImplementation(self, f)
9949 10125
10126 def WritePassthroughServiceImplementation(self, f):
10127 """Overridden from Function"""
10128 self.type_handler.WritePassthroughBucketServiceImplementation(self, f)
10129
9950 def WriteHandlerImplementation(self, f): 10130 def WriteHandlerImplementation(self, f):
9951 """Overridden from Function""" 10131 """Overridden from Function"""
9952 self.type_handler.WriteBucketHandlerImplementation(self, f) 10132 self.type_handler.WriteBucketHandlerImplementation(self, f)
9953 10133
9954 def WriteServiceUnitTest(self, f, *extras): 10134 def WriteServiceUnitTest(self, f, *extras):
9955 """Overridden from Function""" 10135 """Overridden from Function"""
9956 self.type_handler.WriteBucketServiceUnitTest(self, f, *extras) 10136 self.type_handler.WriteBucketServiceUnitTest(self, f, *extras)
9957 10137
9958 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "): 10138 def MakeOriginalArgString(self, prefix, add_comma = False, separator = ", "):
9959 """Overridden from Function""" 10139 """Overridden from Function"""
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
10571 return false; 10751 return false;
10572 """ % capability) 10752 """ % capability)
10573 f.write(""" default: 10753 f.write(""" default:
10574 NOTREACHED(); 10754 NOTREACHED();
10575 return false; 10755 return false;
10576 } 10756 }
10577 } 10757 }
10578 """) 10758 """)
10579 self.generated_cpp_filenames.append(filename) 10759 self.generated_cpp_filenames.append(filename)
10580 10760
10761 def WritePassthroughServiceImplementation(self, filename):
10762 """Writes the passthrough service decorder implementation."""
10763 with CWriter(filename) as f:
10764 header = """
10765 #include \"gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h\"
10766
10767 namespace gpu {
10768 namespace gles2 {
10769
10770 """;
10771 f.write(header);
10772
10773 for func in self.functions:
10774 func.WritePassthroughServiceImplementation(f)
10775
10776 footer = """
10777 } // namespace gles2
10778 } // namespace gpu
10779
10780 """;
10781 f.write(footer);
10782 self.generated_cpp_filenames.append(filename)
10783
10581 def WriteServiceUnitTests(self, filename_pattern): 10784 def WriteServiceUnitTests(self, filename_pattern):
10582 """Writes the service decorder unit tests.""" 10785 """Writes the service decorder unit tests."""
10583 num_tests = len(self.functions) 10786 num_tests = len(self.functions)
10584 FUNCTIONS_PER_FILE = 98 # hard code this so it doesn't change. 10787 FUNCTIONS_PER_FILE = 98 # hard code this so it doesn't change.
10585 count = 0 10788 count = 0
10586 for test_num in range(0, num_tests, FUNCTIONS_PER_FILE): 10789 for test_num in range(0, num_tests, FUNCTIONS_PER_FILE):
10587 count += 1 10790 count += 1
10588 filename = filename_pattern % count 10791 filename = filename_pattern % count
10589 comment = "// It is included by gles2_cmd_decoder_unittest_%d.cc\n" \ 10792 comment = "// It is included by gles2_cmd_decoder_unittest_%d.cc\n" \
10590 % count 10793 % count
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
11286 gen.WriteGLES2TraceImplementationHeader( 11489 gen.WriteGLES2TraceImplementationHeader(
11287 "gpu/command_buffer/client/gles2_trace_implementation_autogen.h") 11490 "gpu/command_buffer/client/gles2_trace_implementation_autogen.h")
11288 gen.WriteGLES2TraceImplementation( 11491 gen.WriteGLES2TraceImplementation(
11289 "gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h") 11492 "gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h")
11290 gen.WriteGLES2CLibImplementation( 11493 gen.WriteGLES2CLibImplementation(
11291 "gpu/command_buffer/client/gles2_c_lib_autogen.h") 11494 "gpu/command_buffer/client/gles2_c_lib_autogen.h")
11292 gen.WriteCmdHelperHeader( 11495 gen.WriteCmdHelperHeader(
11293 "gpu/command_buffer/client/gles2_cmd_helper_autogen.h") 11496 "gpu/command_buffer/client/gles2_cmd_helper_autogen.h")
11294 gen.WriteServiceImplementation( 11497 gen.WriteServiceImplementation(
11295 "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h") 11498 "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h")
11499 gen.WritePassthroughServiceImplementation(
11500 "gpu/command_buffer/service/" +
11501 "gles2_cmd_decoder_passthrough_handlers_autogen.cc")
11296 gen.WriteServiceContextStateHeader( 11502 gen.WriteServiceContextStateHeader(
11297 "gpu/command_buffer/service/context_state_autogen.h") 11503 "gpu/command_buffer/service/context_state_autogen.h")
11298 gen.WriteServiceContextStateImpl( 11504 gen.WriteServiceContextStateImpl(
11299 "gpu/command_buffer/service/context_state_impl_autogen.h") 11505 "gpu/command_buffer/service/context_state_impl_autogen.h")
11300 gen.WriteClientContextStateHeader( 11506 gen.WriteClientContextStateHeader(
11301 "gpu/command_buffer/client/client_context_state_autogen.h") 11507 "gpu/command_buffer/client/client_context_state_autogen.h")
11302 gen.WriteClientContextStateImpl( 11508 gen.WriteClientContextStateImpl(
11303 "gpu/command_buffer/client/client_context_state_impl_autogen.h") 11509 "gpu/command_buffer/client/client_context_state_impl_autogen.h")
11304 gen.WriteServiceUnitTests( 11510 gen.WriteServiceUnitTests(
11305 "gpu/command_buffer/service/gles2_cmd_decoder_unittest_%d_autogen.h") 11511 "gpu/command_buffer/service/gles2_cmd_decoder_unittest_%d_autogen.h")
(...skipping 15 matching lines...) Expand all
11321 Format(gen.generated_cpp_filenames) 11527 Format(gen.generated_cpp_filenames)
11322 11528
11323 if gen.errors > 0: 11529 if gen.errors > 0:
11324 print "%d errors" % gen.errors 11530 print "%d errors" % gen.errors
11325 return 1 11531 return 1
11326 return 0 11532 return 0
11327 11533
11328 11534
11329 if __name__ == '__main__': 11535 if __name__ == '__main__':
11330 sys.exit(main(sys.argv[1:])) 11536 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698