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 2240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2251 'trace_level': 1, | 2251 'trace_level': 1, |
2252 }, | 2252 }, |
2253 'BindRenderbuffer': { | 2253 'BindRenderbuffer': { |
2254 'type': 'Bind', | 2254 'type': 'Bind', |
2255 'decoder_func': 'DoBindRenderbuffer', | 2255 'decoder_func': 'DoBindRenderbuffer', |
2256 'gl_test_func': 'glBindRenderbufferEXT', | 2256 'gl_test_func': 'glBindRenderbufferEXT', |
2257 'gen_func': 'GenRenderbuffersEXT', | 2257 'gen_func': 'GenRenderbuffersEXT', |
2258 }, | 2258 }, |
2259 'BindSampler': { | 2259 'BindSampler': { |
2260 'type': 'Bind', | 2260 'type': 'Bind', |
2261 'id_mapping': [ 'Sampler' ], | 2261 'decoder_func': 'DoBindSampler', |
2262 'gen_func': 'GenSamplers', | |
piman
2015/12/05 02:45:19
I don't think you need or want gen_func. glBindSam
| |
2262 'unsafe': True, | 2263 'unsafe': True, |
2263 }, | 2264 }, |
2264 'BindTexture': { | 2265 'BindTexture': { |
2265 'type': 'Bind', | 2266 'type': 'Bind', |
2266 'decoder_func': 'DoBindTexture', | 2267 'decoder_func': 'DoBindTexture', |
2267 'gen_func': 'GenTextures', | 2268 'gen_func': 'GenTextures', |
2268 # TODO: remove this once client side caching works. | 2269 # TODO: remove this once client side caching works. |
2269 'client_test': False, | 2270 'client_test': False, |
2270 'trace_level': 2, | 2271 'trace_level': 2, |
2271 }, | 2272 }, |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2636 'gl_test_func': 'glDeleteRenderbuffersEXT', | 2637 'gl_test_func': 'glDeleteRenderbuffersEXT', |
2637 'resource_type': 'Renderbuffer', | 2638 'resource_type': 'Renderbuffer', |
2638 'resource_types': 'Renderbuffers', | 2639 'resource_types': 'Renderbuffers', |
2639 'trace_level': 2, | 2640 'trace_level': 2, |
2640 }, | 2641 }, |
2641 'DeleteSamplers': { | 2642 'DeleteSamplers': { |
2642 'type': 'DELn', | 2643 'type': 'DELn', |
2643 'resource_type': 'Sampler', | 2644 'resource_type': 'Sampler', |
2644 'resource_types': 'Samplers', | 2645 'resource_types': 'Samplers', |
2645 'unsafe': True, | 2646 'unsafe': True, |
2647 'useHelper': True | |
piman
2015/12/05 02:45:19
nit: can you use a consistent style, 'use_helper'
| |
2646 }, | 2648 }, |
2647 'DeleteShader': { 'type': 'Delete' }, | 2649 'DeleteShader': { 'type': 'Delete' }, |
2648 'DeleteSync': { | 2650 'DeleteSync': { |
2649 'type': 'Delete', | 2651 'type': 'Delete', |
2650 'cmd_args': 'GLuint sync', | 2652 'cmd_args': 'GLuint sync', |
2651 'resource_type': 'Sync', | 2653 'resource_type': 'Sync', |
2652 'unsafe': True, | 2654 'unsafe': True, |
2653 }, | 2655 }, |
2654 'DeleteTextures': { | 2656 'DeleteTextures': { |
2655 'type': 'DELn', | 2657 'type': 'DELn', |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2780 'type': 'GENn', 'gl_test_func': 'glGenRenderbuffersEXT', | 2782 'type': 'GENn', 'gl_test_func': 'glGenRenderbuffersEXT', |
2781 'resource_type': 'Renderbuffer', | 2783 'resource_type': 'Renderbuffer', |
2782 'resource_types': 'Renderbuffers', | 2784 'resource_types': 'Renderbuffers', |
2783 }, | 2785 }, |
2784 'GenSamplers': { | 2786 'GenSamplers': { |
2785 'type': 'GENn', | 2787 'type': 'GENn', |
2786 'gl_test_func': 'glGenSamplers', | 2788 'gl_test_func': 'glGenSamplers', |
2787 'resource_type': 'Sampler', | 2789 'resource_type': 'Sampler', |
2788 'resource_types': 'Samplers', | 2790 'resource_types': 'Samplers', |
2789 'unsafe': True, | 2791 'unsafe': True, |
2792 'useHelper': True, | |
2790 }, | 2793 }, |
2791 'GenTextures': { | 2794 'GenTextures': { |
2792 'type': 'GENn', | 2795 'type': 'GENn', |
2793 'gl_test_func': 'glGenTextures', | 2796 'gl_test_func': 'glGenTextures', |
2794 'resource_type': 'Texture', | 2797 'resource_type': 'Texture', |
2795 'resource_types': 'Textures', | 2798 'resource_types': 'Textures', |
2796 }, | 2799 }, |
2797 'GenTransformFeedbacks': { | 2800 'GenTransformFeedbacks': { |
2798 'type': 'GENn', | 2801 'type': 'GENn', |
2799 'gl_test_func': 'glGenTransformFeedbacks', | 2802 'gl_test_func': 'glGenTransformFeedbacks', |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2987 'expectation': False, | 2990 'expectation': False, |
2988 }, | 2991 }, |
2989 'GetRenderbufferParameteriv': { | 2992 'GetRenderbufferParameteriv': { |
2990 'type': 'GETn', | 2993 'type': 'GETn', |
2991 'decoder_func': 'DoGetRenderbufferParameteriv', | 2994 'decoder_func': 'DoGetRenderbufferParameteriv', |
2992 'gl_test_func': 'glGetRenderbufferParameterivEXT', | 2995 'gl_test_func': 'glGetRenderbufferParameterivEXT', |
2993 'result': ['SizedResult<GLint>'], | 2996 'result': ['SizedResult<GLint>'], |
2994 }, | 2997 }, |
2995 'GetSamplerParameterfv': { | 2998 'GetSamplerParameterfv': { |
2996 'type': 'GETn', | 2999 'type': 'GETn', |
3000 'decoder_func': 'DoGetSamplerParameterfv', | |
2997 'result': ['SizedResult<GLfloat>'], | 3001 'result': ['SizedResult<GLfloat>'], |
2998 'id_mapping': [ 'Sampler' ], | |
2999 'unsafe': True, | 3002 'unsafe': True, |
3000 }, | 3003 }, |
3001 'GetSamplerParameteriv': { | 3004 'GetSamplerParameteriv': { |
3002 'type': 'GETn', | 3005 'type': 'GETn', |
3006 'decoder_func': 'DoGetSamplerParameteriv', | |
3003 'result': ['SizedResult<GLint>'], | 3007 'result': ['SizedResult<GLint>'], |
3004 'id_mapping': [ 'Sampler' ], | |
3005 'unsafe': True, | 3008 'unsafe': True, |
3006 }, | 3009 }, |
3007 'GetShaderiv': { | 3010 'GetShaderiv': { |
3008 'type': 'GETn', | 3011 'type': 'GETn', |
3009 'decoder_func': 'DoGetShaderiv', | 3012 'decoder_func': 'DoGetShaderiv', |
3010 'result': ['SizedResult<GLint>'], | 3013 'result': ['SizedResult<GLint>'], |
3011 }, | 3014 }, |
3012 'GetShaderInfoLog': { | 3015 'GetShaderInfoLog': { |
3013 'type': 'STRn', | 3016 'type': 'STRn', |
3014 'get_len_func': 'glGetShaderiv', | 3017 'get_len_func': 'glGetShaderiv', |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3232 'decoder_func': 'DoIsRenderbuffer', | 3235 'decoder_func': 'DoIsRenderbuffer', |
3233 'expectation': False, | 3236 'expectation': False, |
3234 }, | 3237 }, |
3235 'IsShader': { | 3238 'IsShader': { |
3236 'type': 'Is', | 3239 'type': 'Is', |
3237 'decoder_func': 'DoIsShader', | 3240 'decoder_func': 'DoIsShader', |
3238 'expectation': False, | 3241 'expectation': False, |
3239 }, | 3242 }, |
3240 'IsSampler': { | 3243 'IsSampler': { |
3241 'type': 'Is', | 3244 'type': 'Is', |
3242 'id_mapping': [ 'Sampler' ], | 3245 'decoder_func': 'DoIsSampler', |
3243 'expectation': False, | 3246 'expectation': False, |
3244 'unsafe': True, | 3247 'unsafe': True, |
3245 }, | 3248 }, |
3246 'IsSync': { | 3249 'IsSync': { |
3247 'type': 'Is', | 3250 'type': 'Is', |
3248 'id_mapping': [ 'Sync' ], | 3251 'id_mapping': [ 'Sync' ], |
3249 'cmd_args': 'GLuint sync', | 3252 'cmd_args': 'GLuint sync', |
3250 'expectation': False, | 3253 'expectation': False, |
3251 'unsafe': True, | 3254 'unsafe': True, |
3252 }, | 3255 }, |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3392 'decoder_func': 'DoReleaseShaderCompiler', | 3395 'decoder_func': 'DoReleaseShaderCompiler', |
3393 'unit_test': False, | 3396 'unit_test': False, |
3394 }, | 3397 }, |
3395 'ResumeTransformFeedback': { | 3398 'ResumeTransformFeedback': { |
3396 'unsafe': True, | 3399 'unsafe': True, |
3397 }, | 3400 }, |
3398 'SamplerParameterf': { | 3401 'SamplerParameterf': { |
3399 'valid_args': { | 3402 'valid_args': { |
3400 '2': 'GL_NEAREST' | 3403 '2': 'GL_NEAREST' |
3401 }, | 3404 }, |
3402 'id_mapping': [ 'Sampler' ], | 3405 'decoder_func': 'DoSamplerParameterf', |
3403 'unsafe': True, | 3406 'unsafe': True, |
3404 }, | 3407 }, |
3405 'SamplerParameterfv': { | 3408 'SamplerParameterfv': { |
3406 'type': 'PUT', | 3409 'type': 'PUT', |
3407 'data_value': 'GL_NEAREST', | 3410 'data_value': 'GL_NEAREST', |
3408 'count': 1, | 3411 'count': 1, |
3409 'gl_test_func': 'glSamplerParameterf', | 3412 'gl_test_func': 'glSamplerParameterf', |
3410 'decoder_func': 'DoSamplerParameterfv', | 3413 'decoder_func': 'DoSamplerParameterfv', |
3411 'first_element_only': True, | 3414 'first_element_only': True, |
3412 'id_mapping': [ 'Sampler' ], | |
3413 'unsafe': True, | 3415 'unsafe': True, |
3414 }, | 3416 }, |
3415 'SamplerParameteri': { | 3417 'SamplerParameteri': { |
3416 'valid_args': { | 3418 'valid_args': { |
3417 '2': 'GL_NEAREST' | 3419 '2': 'GL_NEAREST' |
3418 }, | 3420 }, |
3419 'id_mapping': [ 'Sampler' ], | 3421 'decoder_func': 'DoSamplerParameteri', |
3420 'unsafe': True, | 3422 'unsafe': True, |
3421 }, | 3423 }, |
3422 'SamplerParameteriv': { | 3424 'SamplerParameteriv': { |
3423 'type': 'PUT', | 3425 'type': 'PUT', |
3424 'data_value': 'GL_NEAREST', | 3426 'data_value': 'GL_NEAREST', |
3425 'count': 1, | 3427 'count': 1, |
3426 'gl_test_func': 'glSamplerParameteri', | 3428 'gl_test_func': 'glSamplerParameteri', |
3427 'decoder_func': 'DoSamplerParameteriv', | 3429 'decoder_func': 'DoSamplerParameteriv', |
3428 'first_element_only': True, | 3430 'first_element_only': True, |
3429 'unsafe': True, | 3431 'unsafe': True, |
(...skipping 2461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5891 | 5893 |
5892 def WriteHandlerImplementation (self, func, f): | 5894 def WriteHandlerImplementation (self, func, f): |
5893 """Overrriden from TypeHandler.""" | 5895 """Overrriden from TypeHandler.""" |
5894 f.write(" if (!%sHelper(n, %s)) {\n" | 5896 f.write(" if (!%sHelper(n, %s)) {\n" |
5895 " return error::kInvalidArguments;\n" | 5897 " return error::kInvalidArguments;\n" |
5896 " }\n" % | 5898 " }\n" % |
5897 (func.name, func.GetLastOriginalArg().name)) | 5899 (func.name, func.GetLastOriginalArg().name)) |
5898 | 5900 |
5899 def WriteImmediateHandlerImplementation(self, func, f): | 5901 def WriteImmediateHandlerImplementation(self, func, f): |
5900 """Overrriden from TypeHandler.""" | 5902 """Overrriden from TypeHandler.""" |
5901 if func.IsUnsafe(): | 5903 if func.IsUnsafe() and not func.UseHelper(): |
5902 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { | 5904 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
5903 if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { | 5905 if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { |
5904 return error::kInvalidArguments; | 5906 return error::kInvalidArguments; |
5905 } | 5907 } |
5906 } | 5908 } |
5907 scoped_ptr<GLuint[]> service_ids(new GLuint[n]); | 5909 scoped_ptr<GLuint[]> service_ids(new GLuint[n]); |
5908 gl%(func_name)s(n, service_ids.get()); | 5910 gl%(func_name)s(n, service_ids.get()); |
5909 for (GLsizei ii = 0; ii < n; ++ii) { | 5911 for (GLsizei ii = 0; ii < n; ++ii) { |
5910 group_->Add%(resource_name)sId(%(last_arg_name)s[ii], service_ids[ii]); | 5912 group_->Add%(resource_name)sId(%(last_arg_name)s[ii], service_ids[ii]); |
5911 } | 5913 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5996 valid_test = """ | 5998 valid_test = """ |
5997 TEST_P(%(test_name)s, %(name)sValidArgs) { | 5999 TEST_P(%(test_name)s, %(name)sValidArgs) { |
5998 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) | 6000 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) |
5999 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); | 6001 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); |
6000 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; | 6002 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; |
6001 SpecializedSetup<cmds::%(name)s, 0>(true); | 6003 SpecializedSetup<cmds::%(name)s, 0>(true); |
6002 cmds::%(name)s cmd; | 6004 cmds::%(name)s cmd; |
6003 cmd.Init(%(args)s); | 6005 cmd.Init(%(args)s); |
6004 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 6006 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
6005 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6007 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
6006 if func.IsUnsafe(): | 6008 if func.IsUnsafe() and not func.UseHelper(): |
6007 valid_test += """ | 6009 valid_test += """ |
6008 GLuint service_id; | 6010 GLuint service_id; |
6009 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); | 6011 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
6010 EXPECT_EQ(kNewServiceId, service_id) | 6012 EXPECT_EQ(kNewServiceId, service_id) |
6011 } | 6013 } |
6012 """ | 6014 """ |
6013 else: | 6015 else: |
6014 valid_test += """ | 6016 valid_test += """ |
6015 EXPECT_TRUE(Get%(resource_name)s(kNewClientId, &service_id) != NULL); | 6017 EXPECT_TRUE(Get%(resource_name)s(kNewClientId, &service_id) != NULL); |
6016 } | 6018 } |
(...skipping 25 matching lines...) Expand all Loading... | |
6042 GLuint temp = kNewClientId; | 6044 GLuint temp = kNewClientId; |
6043 SpecializedSetup<cmds::%(name)s, 0>(true);""" | 6045 SpecializedSetup<cmds::%(name)s, 0>(true);""" |
6044 if func.IsUnsafe(): | 6046 if func.IsUnsafe(): |
6045 valid_test += """ | 6047 valid_test += """ |
6046 decoder_->set_unsafe_es3_apis_enabled(true);""" | 6048 decoder_->set_unsafe_es3_apis_enabled(true);""" |
6047 valid_test += """ | 6049 valid_test += """ |
6048 cmd->Init(1, &temp); | 6050 cmd->Init(1, &temp); |
6049 EXPECT_EQ(error::kNoError, | 6051 EXPECT_EQ(error::kNoError, |
6050 ExecuteImmediateCmd(*cmd, sizeof(temp))); | 6052 ExecuteImmediateCmd(*cmd, sizeof(temp))); |
6051 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6053 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
6052 if func.IsUnsafe(): | 6054 if func.IsUnsafe() and not func.UseHelper(): |
6053 valid_test += """ | 6055 valid_test += """ |
6054 GLuint service_id; | 6056 GLuint service_id; |
6055 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); | 6057 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
6056 EXPECT_EQ(kNewServiceId, service_id); | 6058 EXPECT_EQ(kNewServiceId, service_id); |
6057 decoder_->set_unsafe_es3_apis_enabled(false); | 6059 decoder_->set_unsafe_es3_apis_enabled(false); |
6058 EXPECT_EQ(error::kUnknownCommand, | 6060 EXPECT_EQ(error::kUnknownCommand, |
6059 ExecuteImmediateCmd(*cmd, sizeof(temp))); | 6061 ExecuteImmediateCmd(*cmd, sizeof(temp))); |
6060 } | 6062 } |
6061 """ | 6063 """ |
6062 else: | 6064 else: |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6344 f.write(" %sHelper(%s);\n" % | 6346 f.write(" %sHelper(%s);\n" % |
6345 (func.original_name, func.GetOriginalArgs()[-1].name)) | 6347 (func.original_name, func.GetOriginalArgs()[-1].name)) |
6346 f.write(" CheckGLError();\n") | 6348 f.write(" CheckGLError();\n") |
6347 f.write("}\n") | 6349 f.write("}\n") |
6348 f.write("\n") | 6350 f.write("\n") |
6349 | 6351 |
6350 def WriteHandlerImplementation (self, func, f): | 6352 def WriteHandlerImplementation (self, func, f): |
6351 """Overrriden from TypeHandler.""" | 6353 """Overrriden from TypeHandler.""" |
6352 assert len(func.GetOriginalArgs()) == 1 | 6354 assert len(func.GetOriginalArgs()) == 1 |
6353 arg = func.GetOriginalArgs()[0] | 6355 arg = func.GetOriginalArgs()[0] |
6354 if func.IsUnsafe(): | 6356 if func.IsUnsafe() and not func.UseHelper(): |
6355 f.write(""" %(arg_type)s service_id = 0; | 6357 f.write(""" %(arg_type)s service_id = 0; |
6356 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { | 6358 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { |
6357 glDelete%(resource_type)s(service_id); | 6359 glDelete%(resource_type)s(service_id); |
6358 group_->Remove%(resource_type)sId(%(arg_name)s); | 6360 group_->Remove%(resource_type)sId(%(arg_name)s); |
6359 } else { | 6361 } else { |
6360 LOCAL_SET_GL_ERROR( | 6362 LOCAL_SET_GL_ERROR( |
6361 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); | 6363 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); |
6362 } | 6364 } |
6363 """ % { 'resource_type': func.GetInfo('resource_type'), | 6365 """ % { 'resource_type': func.GetInfo('resource_type'), |
6364 'arg_name': arg.name, | 6366 'arg_name': arg.name, |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6445 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 6447 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
6446 SpecializedSetup<cmds::%(name)s, 0>(true); | 6448 SpecializedSetup<cmds::%(name)s, 0>(true); |
6447 cmd.Init(1, &client_%(resource_name)s_id_);""" | 6449 cmd.Init(1, &client_%(resource_name)s_id_);""" |
6448 if func.IsUnsafe(): | 6450 if func.IsUnsafe(): |
6449 valid_test += """ | 6451 valid_test += """ |
6450 decoder_->set_unsafe_es3_apis_enabled(true);""" | 6452 decoder_->set_unsafe_es3_apis_enabled(true);""" |
6451 valid_test += """ | 6453 valid_test += """ |
6452 EXPECT_EQ(error::kNoError, | 6454 EXPECT_EQ(error::kNoError, |
6453 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); | 6455 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); |
6454 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6456 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
6455 if func.IsUnsafe(): | 6457 if func.IsUnsafe() and not func.UseHelper(): |
6456 valid_test += """ | 6458 valid_test += """ |
6457 EXPECT_FALSE(Get%(upper_resource_name)sServiceId( | 6459 EXPECT_FALSE(Get%(upper_resource_name)sServiceId( |
6458 client_%(resource_name)s_id_, NULL)); | 6460 client_%(resource_name)s_id_, NULL)); |
6459 decoder_->set_unsafe_es3_apis_enabled(false); | 6461 decoder_->set_unsafe_es3_apis_enabled(false); |
6460 EXPECT_EQ(error::kUnknownCommand, | 6462 EXPECT_EQ(error::kUnknownCommand, |
6461 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); | 6463 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); |
6462 } | 6464 } |
6463 """ | 6465 """ |
6464 else: | 6466 else: |
6465 valid_test += """ | 6467 valid_test += """ |
(...skipping 29 matching lines...) Expand all Loading... | |
6495 """ | 6497 """ |
6496 self.WriteValidUnitTest(func, f, invalid_test, *extras) | 6498 self.WriteValidUnitTest(func, f, invalid_test, *extras) |
6497 | 6499 |
6498 def WriteHandlerImplementation (self, func, f): | 6500 def WriteHandlerImplementation (self, func, f): |
6499 """Overrriden from TypeHandler.""" | 6501 """Overrriden from TypeHandler.""" |
6500 f.write(" %sHelper(n, %s);\n" % | 6502 f.write(" %sHelper(n, %s);\n" % |
6501 (func.name, func.GetLastOriginalArg().name)) | 6503 (func.name, func.GetLastOriginalArg().name)) |
6502 | 6504 |
6503 def WriteImmediateHandlerImplementation (self, func, f): | 6505 def WriteImmediateHandlerImplementation (self, func, f): |
6504 """Overrriden from TypeHandler.""" | 6506 """Overrriden from TypeHandler.""" |
6505 if func.IsUnsafe(): | 6507 if func.IsUnsafe() and not func.UseHelper(): |
6506 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { | 6508 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
6507 GLuint service_id = 0; | 6509 GLuint service_id = 0; |
6508 if (group_->Get%(resource_type)sServiceId( | 6510 if (group_->Get%(resource_type)sServiceId( |
6509 %(last_arg_name)s[ii], &service_id)) { | 6511 %(last_arg_name)s[ii], &service_id)) { |
6510 glDelete%(resource_type)ss(1, &service_id); | 6512 glDelete%(resource_type)ss(1, &service_id); |
6511 group_->Remove%(resource_type)sId(%(last_arg_name)s[ii]); | 6513 group_->Remove%(resource_type)sId(%(last_arg_name)s[ii]); |
6512 } | 6514 } |
6513 } | 6515 } |
6514 """ % { 'resource_type': func.GetInfo('resource_type'), | 6516 """ % { 'resource_type': func.GetInfo('resource_type'), |
6515 'last_arg_name': func.GetLastOriginalArg().name }) | 6517 'last_arg_name': func.GetLastOriginalArg().name }) |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6955 """ | 6957 """ |
6956 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) | 6958 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) |
6957 | 6959 |
6958 def WriteImmediateServiceUnitTest(self, func, f, *extras): | 6960 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
6959 """Writes the service unit test for a command.""" | 6961 """Writes the service unit test for a command.""" |
6960 valid_test = """ | 6962 valid_test = """ |
6961 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6963 TEST_P(%(test_name)s, %(name)sValidArgs) { |
6962 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 6964 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
6963 SpecializedSetup<cmds::%(name)s, 0>(true); | 6965 SpecializedSetup<cmds::%(name)s, 0>(true); |
6964 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; | 6966 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; |
6965 cmd.Init(%(gl_args)s, &temp[0]); | 6967 cmd.Init(%(gl_client_args)s, &temp[0]); |
6966 EXPECT_CALL( | 6968 EXPECT_CALL( |
6967 *gl_, | 6969 *gl_, |
6968 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< | 6970 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< |
6969 %(data_type)s*>(ImmediateDataAddress(&cmd))));""" | 6971 %(data_type)s*>(ImmediateDataAddress(&cmd))));""" |
6970 if func.IsUnsafe(): | 6972 if func.IsUnsafe(): |
6971 valid_test += """ | 6973 valid_test += """ |
6972 decoder_->set_unsafe_es3_apis_enabled(true);""" | 6974 decoder_->set_unsafe_es3_apis_enabled(true);""" |
6973 valid_test += """ | 6975 valid_test += """ |
6974 EXPECT_EQ(error::kNoError, | 6976 EXPECT_EQ(error::kNoError, |
6975 ExecuteImmediateCmd(cmd, sizeof(temp))); | 6977 ExecuteImmediateCmd(cmd, sizeof(temp))); |
6976 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6978 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
6977 if func.IsUnsafe(): | 6979 if func.IsUnsafe(): |
6978 valid_test += """ | 6980 valid_test += """ |
6979 decoder_->set_unsafe_es3_apis_enabled(false); | 6981 decoder_->set_unsafe_es3_apis_enabled(false); |
6980 EXPECT_EQ(error::kUnknownCommand, | 6982 EXPECT_EQ(error::kUnknownCommand, |
6981 ExecuteImmediateCmd(cmd, sizeof(temp)));""" | 6983 ExecuteImmediateCmd(cmd, sizeof(temp)));""" |
6982 valid_test += """ | 6984 valid_test += """ |
6983 } | 6985 } |
6984 """ | 6986 """ |
6987 gl_client_arg_strings = [ | |
6988 arg.GetValidArg(func) for arg in func.GetOriginalArgs()[0:-1] | |
6989 ] | |
6985 gl_arg_strings = [ | 6990 gl_arg_strings = [ |
6986 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] | 6991 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] |
6987 ] | 6992 ] |
6988 gl_any_strings = ["_"] * len(gl_arg_strings) | 6993 gl_any_strings = ["_"] * len(gl_arg_strings) |
6989 | 6994 |
6990 extra = { | 6995 extra = { |
6991 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), | 6996 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), |
6992 'data_type': self.GetArrayType(func), | 6997 'data_type': self.GetArrayType(func), |
6993 'data_count': self.GetArrayCount(func), | 6998 'data_count': self.GetArrayCount(func), |
6994 'data_value': func.GetInfo('data_value') or '0', | 6999 'data_value': func.GetInfo('data_value') or '0', |
7000 'gl_client_args': ", ".join(gl_client_arg_strings), | |
6995 'gl_args': ", ".join(gl_arg_strings), | 7001 'gl_args': ", ".join(gl_arg_strings), |
6996 'gl_any_args': ", ".join(gl_any_strings), | 7002 'gl_any_args': ", ".join(gl_any_strings), |
6997 } | 7003 } |
6998 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) | 7004 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) |
6999 | 7005 |
7000 invalid_test = """ | 7006 invalid_test = """ |
7001 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 7007 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
7002 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();""" | 7008 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();""" |
7003 if func.IsUnsafe(): | 7009 if func.IsUnsafe(): |
7004 invalid_test += """ | 7010 invalid_test += """ |
(...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8209 | 8215 |
8210 code = """ typedef cmds::%(func_name)s::Result Result; | 8216 code = """ typedef cmds::%(func_name)s::Result Result; |
8211 Result* result_dst = GetSharedMemoryAs<Result*>( | 8217 Result* result_dst = GetSharedMemoryAs<Result*>( |
8212 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 8218 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
8213 if (!result_dst) { | 8219 if (!result_dst) { |
8214 return error::kOutOfBounds; | 8220 return error::kOutOfBounds; |
8215 } | 8221 } |
8216 """ | 8222 """ |
8217 f.write(code % {'func_name': func.name}) | 8223 f.write(code % {'func_name': func.name}) |
8218 func.WriteHandlerValidation(f) | 8224 func.WriteHandlerValidation(f) |
8219 if func.IsUnsafe(): | 8225 if func.IsUnsafe() and not func.HasDecoderFunc(): |
piman
2015/12/05 02:45:19
Why does it matter whether here whether we renamed
| |
8220 assert func.GetInfo('id_mapping') | 8226 assert func.GetInfo('id_mapping') |
8221 assert len(func.GetInfo('id_mapping')) == 1 | 8227 assert len(func.GetInfo('id_mapping')) == 1 |
8222 assert len(args) == 1 | 8228 assert len(args) == 1 |
8223 id_type = func.GetInfo('id_mapping')[0] | 8229 id_type = func.GetInfo('id_mapping')[0] |
8224 f.write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) | 8230 f.write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) |
8225 f.write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % | 8231 f.write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % |
8226 (id_type, id_type.lower(), id_type.lower())) | 8232 (id_type, id_type.lower(), id_type.lower())) |
8227 else: | 8233 else: |
8228 f.write(" *result_dst = %s(%s);\n" % | 8234 f.write(" *result_dst = %s(%s);\n" % |
8229 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 8235 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9273 self.type_handler.InitFunction(self) | 9279 self.type_handler.InitFunction(self) |
9274 | 9280 |
9275 def IsImmediate(self): | 9281 def IsImmediate(self): |
9276 """Returns whether the function is immediate data function or not.""" | 9282 """Returns whether the function is immediate data function or not.""" |
9277 return False | 9283 return False |
9278 | 9284 |
9279 def IsUnsafe(self): | 9285 def IsUnsafe(self): |
9280 """Returns whether the function has service side validation or not.""" | 9286 """Returns whether the function has service side validation or not.""" |
9281 return self.GetInfo('unsafe', False) | 9287 return self.GetInfo('unsafe', False) |
9282 | 9288 |
9289 def UseHelper(self): | |
9290 """Returns whether the function has service side validation or not.""" | |
piman
2015/12/05 02:45:19
Can you fix the doc here? It's currently identical
| |
9291 return self.GetInfo('useHelper', False) | |
9292 | |
9283 def GetInfo(self, name, default = None): | 9293 def GetInfo(self, name, default = None): |
9284 """Returns a value from the function info for this function.""" | 9294 """Returns a value from the function info for this function.""" |
9285 if name in self.info: | 9295 if name in self.info: |
9286 return self.info[name] | 9296 return self.info[name] |
9287 return default | 9297 return default |
9288 | 9298 |
9289 def GetValidArg(self, arg): | 9299 def GetValidArg(self, arg): |
9290 """Gets a valid argument value for the parameter arg from the function info | 9300 """Gets a valid argument value for the parameter arg from the function info |
9291 if one exists.""" | 9301 if one exists.""" |
9292 try: | 9302 try: |
(...skipping 29 matching lines...) Expand all Loading... | |
9322 | 9332 |
9323 def GetErrorReturnString(self): | 9333 def GetErrorReturnString(self): |
9324 if self.GetInfo("error_return"): | 9334 if self.GetInfo("error_return"): |
9325 return self.GetInfo("error_return") | 9335 return self.GetInfo("error_return") |
9326 elif self.return_type == "GLboolean": | 9336 elif self.return_type == "GLboolean": |
9327 return "GL_FALSE" | 9337 return "GL_FALSE" |
9328 elif "*" in self.return_type: | 9338 elif "*" in self.return_type: |
9329 return "NULL" | 9339 return "NULL" |
9330 return "0" | 9340 return "0" |
9331 | 9341 |
9342 def HasDecoderFunc(self): | |
9343 if self.GetInfo('decoder_func'): | |
9344 return True | |
9345 return False | |
9346 | |
9332 def GetGLFunctionName(self): | 9347 def GetGLFunctionName(self): |
9333 """Gets the function to call to execute GL for this command.""" | 9348 """Gets the function to call to execute GL for this command.""" |
9334 if self.GetInfo('decoder_func'): | 9349 if self.GetInfo('decoder_func'): |
9335 return self.GetInfo('decoder_func') | 9350 return self.GetInfo('decoder_func') |
9336 return "gl%s" % self.original_name | 9351 return "gl%s" % self.original_name |
9337 | 9352 |
9338 def GetGLTestFunctionName(self): | 9353 def GetGLTestFunctionName(self): |
9339 gl_func_name = self.GetInfo('gl_test_func') | 9354 gl_func_name = self.GetInfo('gl_test_func') |
9340 if gl_func_name == None: | 9355 if gl_func_name == None: |
9341 gl_func_name = self.GetGLFunctionName() | 9356 gl_func_name = self.GetGLFunctionName() |
(...skipping 1860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11202 Format(gen.generated_cpp_filenames) | 11217 Format(gen.generated_cpp_filenames) |
11203 | 11218 |
11204 if gen.errors > 0: | 11219 if gen.errors > 0: |
11205 print "%d errors" % gen.errors | 11220 print "%d errors" % gen.errors |
11206 return 1 | 11221 return 1 |
11207 return 0 | 11222 return 0 |
11208 | 11223 |
11209 | 11224 |
11210 if __name__ == '__main__': | 11225 if __name__ == '__main__': |
11211 sys.exit(main(sys.argv[1:])) | 11226 sys.exit(main(sys.argv[1:])) |
OLD | NEW |