| 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', |
| 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 |
| 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(): |
| 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.""" |
| 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 |