| 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 2182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2193 # array is used and we end up calling the single value | 2193 # array is used and we end up calling the single value |
| 2194 # corresponding function. eg. TexParameteriv -> TexParameteri | 2194 # corresponding function. eg. TexParameteriv -> TexParameteri |
| 2195 # extension: Function is an extension to GL and should not be exposed to | 2195 # extension: Function is an extension to GL and should not be exposed to |
| 2196 # pepper unless pepper_interface is defined. | 2196 # pepper unless pepper_interface is defined. |
| 2197 # extension_flag: Function is an extension and should be enabled only when | 2197 # extension_flag: Function is an extension and should be enabled only when |
| 2198 # the corresponding feature info flag is enabled. Implies | 2198 # the corresponding feature info flag is enabled. Implies |
| 2199 # 'extension': True. | 2199 # 'extension': True. |
| 2200 # not_shared: For GENn types, True if objects can't be shared between contexts | 2200 # not_shared: For GENn types, True if objects can't be shared between contexts |
| 2201 # unsafe: True = no validation is implemented on the service side and the | 2201 # unsafe: True = no validation is implemented on the service side and the |
| 2202 # command is only available with --enable-unsafe-es3-apis. | 2202 # command is only available with --enable-unsafe-es3-apis. |
| 2203 # use_helper: True = use explicit helper or decoder functions rather than the |
| 2204 # defaults created when unsafe is True. |
| 2203 # id_mapping: A list of resource type names whose client side IDs need to be | 2205 # id_mapping: A list of resource type names whose client side IDs need to be |
| 2204 # mapped to service side IDs. This is only used for unsafe APIs. | 2206 # mapped to service side IDs. This is only used for unsafe APIs. |
| 2205 | 2207 |
| 2206 _FUNCTION_INFO = { | 2208 _FUNCTION_INFO = { |
| 2207 'ActiveTexture': { | 2209 'ActiveTexture': { |
| 2208 'decoder_func': 'DoActiveTexture', | 2210 'decoder_func': 'DoActiveTexture', |
| 2209 'unit_test': False, | 2211 'unit_test': False, |
| 2210 'impl_func': False, | 2212 'impl_func': False, |
| 2211 'client_test': False, | 2213 'client_test': False, |
| 2212 }, | 2214 }, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2252 'trace_level': 1, | 2254 'trace_level': 1, |
| 2253 }, | 2255 }, |
| 2254 'BindRenderbuffer': { | 2256 'BindRenderbuffer': { |
| 2255 'type': 'Bind', | 2257 'type': 'Bind', |
| 2256 'decoder_func': 'DoBindRenderbuffer', | 2258 'decoder_func': 'DoBindRenderbuffer', |
| 2257 'gl_test_func': 'glBindRenderbufferEXT', | 2259 'gl_test_func': 'glBindRenderbufferEXT', |
| 2258 'gen_func': 'GenRenderbuffersEXT', | 2260 'gen_func': 'GenRenderbuffersEXT', |
| 2259 }, | 2261 }, |
| 2260 'BindSampler': { | 2262 'BindSampler': { |
| 2261 'type': 'Bind', | 2263 'type': 'Bind', |
| 2262 'id_mapping': [ 'Sampler' ], | 2264 'decoder_func': 'DoBindSampler', |
| 2263 'unsafe': True, | 2265 'unsafe': True, |
| 2266 'use_helper': True, |
| 2264 }, | 2267 }, |
| 2265 'BindTexture': { | 2268 'BindTexture': { |
| 2266 'type': 'Bind', | 2269 'type': 'Bind', |
| 2267 'decoder_func': 'DoBindTexture', | 2270 'decoder_func': 'DoBindTexture', |
| 2268 'gen_func': 'GenTextures', | 2271 'gen_func': 'GenTextures', |
| 2269 # TODO: remove this once client side caching works. | 2272 # TODO: remove this once client side caching works. |
| 2270 'client_test': False, | 2273 'client_test': False, |
| 2271 'trace_level': 2, | 2274 'trace_level': 2, |
| 2272 }, | 2275 }, |
| 2273 'BindTransformFeedback': { | 2276 'BindTransformFeedback': { |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2637 'gl_test_func': 'glDeleteRenderbuffersEXT', | 2640 'gl_test_func': 'glDeleteRenderbuffersEXT', |
| 2638 'resource_type': 'Renderbuffer', | 2641 'resource_type': 'Renderbuffer', |
| 2639 'resource_types': 'Renderbuffers', | 2642 'resource_types': 'Renderbuffers', |
| 2640 'trace_level': 2, | 2643 'trace_level': 2, |
| 2641 }, | 2644 }, |
| 2642 'DeleteSamplers': { | 2645 'DeleteSamplers': { |
| 2643 'type': 'DELn', | 2646 'type': 'DELn', |
| 2644 'resource_type': 'Sampler', | 2647 'resource_type': 'Sampler', |
| 2645 'resource_types': 'Samplers', | 2648 'resource_types': 'Samplers', |
| 2646 'unsafe': True, | 2649 'unsafe': True, |
| 2650 'use_helper': True |
| 2647 }, | 2651 }, |
| 2648 'DeleteShader': { 'type': 'Delete' }, | 2652 'DeleteShader': { 'type': 'Delete' }, |
| 2649 'DeleteSync': { | 2653 'DeleteSync': { |
| 2650 'type': 'Delete', | 2654 'type': 'Delete', |
| 2651 'cmd_args': 'GLuint sync', | 2655 'cmd_args': 'GLuint sync', |
| 2652 'resource_type': 'Sync', | 2656 'resource_type': 'Sync', |
| 2653 'unsafe': True, | 2657 'unsafe': True, |
| 2654 }, | 2658 }, |
| 2655 'DeleteTextures': { | 2659 'DeleteTextures': { |
| 2656 'type': 'DELn', | 2660 'type': 'DELn', |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2781 'type': 'GENn', 'gl_test_func': 'glGenRenderbuffersEXT', | 2785 'type': 'GENn', 'gl_test_func': 'glGenRenderbuffersEXT', |
| 2782 'resource_type': 'Renderbuffer', | 2786 'resource_type': 'Renderbuffer', |
| 2783 'resource_types': 'Renderbuffers', | 2787 'resource_types': 'Renderbuffers', |
| 2784 }, | 2788 }, |
| 2785 'GenSamplers': { | 2789 'GenSamplers': { |
| 2786 'type': 'GENn', | 2790 'type': 'GENn', |
| 2787 'gl_test_func': 'glGenSamplers', | 2791 'gl_test_func': 'glGenSamplers', |
| 2788 'resource_type': 'Sampler', | 2792 'resource_type': 'Sampler', |
| 2789 'resource_types': 'Samplers', | 2793 'resource_types': 'Samplers', |
| 2790 'unsafe': True, | 2794 'unsafe': True, |
| 2795 'use_helper': True, |
| 2791 }, | 2796 }, |
| 2792 'GenTextures': { | 2797 'GenTextures': { |
| 2793 'type': 'GENn', | 2798 'type': 'GENn', |
| 2794 'gl_test_func': 'glGenTextures', | 2799 'gl_test_func': 'glGenTextures', |
| 2795 'resource_type': 'Texture', | 2800 'resource_type': 'Texture', |
| 2796 'resource_types': 'Textures', | 2801 'resource_types': 'Textures', |
| 2797 }, | 2802 }, |
| 2798 'GenTransformFeedbacks': { | 2803 'GenTransformFeedbacks': { |
| 2799 'type': 'GENn', | 2804 'type': 'GENn', |
| 2800 'gl_test_func': 'glGenTransformFeedbacks', | 2805 'gl_test_func': 'glGenTransformFeedbacks', |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2998 'expectation': False, | 3003 'expectation': False, |
| 2999 }, | 3004 }, |
| 3000 'GetRenderbufferParameteriv': { | 3005 'GetRenderbufferParameteriv': { |
| 3001 'type': 'GETn', | 3006 'type': 'GETn', |
| 3002 'decoder_func': 'DoGetRenderbufferParameteriv', | 3007 'decoder_func': 'DoGetRenderbufferParameteriv', |
| 3003 'gl_test_func': 'glGetRenderbufferParameterivEXT', | 3008 'gl_test_func': 'glGetRenderbufferParameterivEXT', |
| 3004 'result': ['SizedResult<GLint>'], | 3009 'result': ['SizedResult<GLint>'], |
| 3005 }, | 3010 }, |
| 3006 'GetSamplerParameterfv': { | 3011 'GetSamplerParameterfv': { |
| 3007 'type': 'GETn', | 3012 'type': 'GETn', |
| 3013 'decoder_func': 'DoGetSamplerParameterfv', |
| 3008 'result': ['SizedResult<GLfloat>'], | 3014 'result': ['SizedResult<GLfloat>'], |
| 3009 'id_mapping': [ 'Sampler' ], | |
| 3010 'unsafe': True, | 3015 'unsafe': True, |
| 3016 'use_helper': True, |
| 3011 }, | 3017 }, |
| 3012 'GetSamplerParameteriv': { | 3018 'GetSamplerParameteriv': { |
| 3013 'type': 'GETn', | 3019 'type': 'GETn', |
| 3020 'decoder_func': 'DoGetSamplerParameteriv', |
| 3014 'result': ['SizedResult<GLint>'], | 3021 'result': ['SizedResult<GLint>'], |
| 3015 'id_mapping': [ 'Sampler' ], | |
| 3016 'unsafe': True, | 3022 'unsafe': True, |
| 3023 'use_helper': True, |
| 3017 }, | 3024 }, |
| 3018 'GetShaderiv': { | 3025 'GetShaderiv': { |
| 3019 'type': 'GETn', | 3026 'type': 'GETn', |
| 3020 'decoder_func': 'DoGetShaderiv', | 3027 'decoder_func': 'DoGetShaderiv', |
| 3021 'result': ['SizedResult<GLint>'], | 3028 'result': ['SizedResult<GLint>'], |
| 3022 }, | 3029 }, |
| 3023 'GetShaderInfoLog': { | 3030 'GetShaderInfoLog': { |
| 3024 'type': 'STRn', | 3031 'type': 'STRn', |
| 3025 'get_len_func': 'glGetShaderiv', | 3032 'get_len_func': 'glGetShaderiv', |
| 3026 'get_len_enum': 'GL_INFO_LOG_LENGTH', | 3033 'get_len_enum': 'GL_INFO_LOG_LENGTH', |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3243 'decoder_func': 'DoIsRenderbuffer', | 3250 'decoder_func': 'DoIsRenderbuffer', |
| 3244 'expectation': False, | 3251 'expectation': False, |
| 3245 }, | 3252 }, |
| 3246 'IsShader': { | 3253 'IsShader': { |
| 3247 'type': 'Is', | 3254 'type': 'Is', |
| 3248 'decoder_func': 'DoIsShader', | 3255 'decoder_func': 'DoIsShader', |
| 3249 'expectation': False, | 3256 'expectation': False, |
| 3250 }, | 3257 }, |
| 3251 'IsSampler': { | 3258 'IsSampler': { |
| 3252 'type': 'Is', | 3259 'type': 'Is', |
| 3253 'id_mapping': [ 'Sampler' ], | 3260 'decoder_func': 'DoIsSampler', |
| 3254 'expectation': False, | 3261 'expectation': False, |
| 3255 'unsafe': True, | 3262 'unsafe': True, |
| 3263 'use_helper': True, |
| 3256 }, | 3264 }, |
| 3257 'IsSync': { | 3265 'IsSync': { |
| 3258 'type': 'Is', | 3266 'type': 'Is', |
| 3259 'id_mapping': [ 'Sync' ], | 3267 'id_mapping': [ 'Sync' ], |
| 3260 'cmd_args': 'GLuint sync', | 3268 'cmd_args': 'GLuint sync', |
| 3261 'expectation': False, | 3269 'expectation': False, |
| 3262 'unsafe': True, | 3270 'unsafe': True, |
| 3263 }, | 3271 }, |
| 3264 'IsTexture': { | 3272 'IsTexture': { |
| 3265 'type': 'Is', | 3273 'type': 'Is', |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3403 'decoder_func': 'DoReleaseShaderCompiler', | 3411 'decoder_func': 'DoReleaseShaderCompiler', |
| 3404 'unit_test': False, | 3412 'unit_test': False, |
| 3405 }, | 3413 }, |
| 3406 'ResumeTransformFeedback': { | 3414 'ResumeTransformFeedback': { |
| 3407 'unsafe': True, | 3415 'unsafe': True, |
| 3408 }, | 3416 }, |
| 3409 'SamplerParameterf': { | 3417 'SamplerParameterf': { |
| 3410 'valid_args': { | 3418 'valid_args': { |
| 3411 '2': 'GL_NEAREST' | 3419 '2': 'GL_NEAREST' |
| 3412 }, | 3420 }, |
| 3413 'id_mapping': [ 'Sampler' ], | 3421 'decoder_func': 'DoSamplerParameterf', |
| 3414 'unsafe': True, | 3422 'unsafe': True, |
| 3423 'use_helper': True, |
| 3415 }, | 3424 }, |
| 3416 'SamplerParameterfv': { | 3425 'SamplerParameterfv': { |
| 3417 'type': 'PUT', | 3426 'type': 'PUT', |
| 3418 'data_value': 'GL_NEAREST', | 3427 'data_value': 'GL_NEAREST', |
| 3419 'count': 1, | 3428 'count': 1, |
| 3420 'gl_test_func': 'glSamplerParameterf', | 3429 'gl_test_func': 'glSamplerParameterf', |
| 3421 'decoder_func': 'DoSamplerParameterfv', | 3430 'decoder_func': 'DoSamplerParameterfv', |
| 3422 'first_element_only': True, | 3431 'first_element_only': True, |
| 3423 'id_mapping': [ 'Sampler' ], | |
| 3424 'unsafe': True, | 3432 'unsafe': True, |
| 3433 'use_helper': True, |
| 3425 }, | 3434 }, |
| 3426 'SamplerParameteri': { | 3435 'SamplerParameteri': { |
| 3427 'valid_args': { | 3436 'valid_args': { |
| 3428 '2': 'GL_NEAREST' | 3437 '2': 'GL_NEAREST' |
| 3429 }, | 3438 }, |
| 3430 'id_mapping': [ 'Sampler' ], | 3439 'decoder_func': 'DoSamplerParameteri', |
| 3431 'unsafe': True, | 3440 'unsafe': True, |
| 3441 'use_helper': True, |
| 3432 }, | 3442 }, |
| 3433 'SamplerParameteriv': { | 3443 'SamplerParameteriv': { |
| 3434 'type': 'PUT', | 3444 'type': 'PUT', |
| 3435 'data_value': 'GL_NEAREST', | 3445 'data_value': 'GL_NEAREST', |
| 3436 'count': 1, | 3446 'count': 1, |
| 3437 'gl_test_func': 'glSamplerParameteri', | 3447 'gl_test_func': 'glSamplerParameteri', |
| 3438 'decoder_func': 'DoSamplerParameteriv', | 3448 'decoder_func': 'DoSamplerParameteriv', |
| 3439 'first_element_only': True, | 3449 'first_element_only': True, |
| 3440 'unsafe': True, | 3450 'unsafe': True, |
| 3451 'use_helper': True, |
| 3441 }, | 3452 }, |
| 3442 'ShaderBinary': { | 3453 'ShaderBinary': { |
| 3443 'type': 'Custom', | 3454 'type': 'Custom', |
| 3444 'client_test': False, | 3455 'client_test': False, |
| 3445 }, | 3456 }, |
| 3446 'ShaderSource': { | 3457 'ShaderSource': { |
| 3447 'type': 'PUTSTR', | 3458 'type': 'PUTSTR', |
| 3448 'decoder_func': 'DoShaderSource', | 3459 'decoder_func': 'DoShaderSource', |
| 3449 'expectation': False, | 3460 'expectation': False, |
| 3450 'data_transfer_methods': ['bucket'], | 3461 'data_transfer_methods': ['bucket'], |
| (...skipping 2467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5918 | 5929 |
| 5919 def WriteHandlerImplementation (self, func, f): | 5930 def WriteHandlerImplementation (self, func, f): |
| 5920 """Overrriden from TypeHandler.""" | 5931 """Overrriden from TypeHandler.""" |
| 5921 f.write(" if (!%sHelper(n, %s)) {\n" | 5932 f.write(" if (!%sHelper(n, %s)) {\n" |
| 5922 " return error::kInvalidArguments;\n" | 5933 " return error::kInvalidArguments;\n" |
| 5923 " }\n" % | 5934 " }\n" % |
| 5924 (func.name, func.GetLastOriginalArg().name)) | 5935 (func.name, func.GetLastOriginalArg().name)) |
| 5925 | 5936 |
| 5926 def WriteImmediateHandlerImplementation(self, func, f): | 5937 def WriteImmediateHandlerImplementation(self, func, f): |
| 5927 """Overrriden from TypeHandler.""" | 5938 """Overrriden from TypeHandler.""" |
| 5928 if func.IsUnsafe(): | 5939 if func.IsUnsafe() and not func.UseHelper(): |
| 5929 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { | 5940 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
| 5930 if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { | 5941 if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { |
| 5931 return error::kInvalidArguments; | 5942 return error::kInvalidArguments; |
| 5932 } | 5943 } |
| 5933 } | 5944 } |
| 5934 scoped_ptr<GLuint[]> service_ids(new GLuint[n]); | 5945 scoped_ptr<GLuint[]> service_ids(new GLuint[n]); |
| 5935 gl%(func_name)s(n, service_ids.get()); | 5946 gl%(func_name)s(n, service_ids.get()); |
| 5936 for (GLsizei ii = 0; ii < n; ++ii) { | 5947 for (GLsizei ii = 0; ii < n; ++ii) { |
| 5937 group_->Add%(resource_name)sId(%(last_arg_name)s[ii], service_ids[ii]); | 5948 group_->Add%(resource_name)sId(%(last_arg_name)s[ii], service_ids[ii]); |
| 5938 } | 5949 } |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6023 valid_test = """ | 6034 valid_test = """ |
| 6024 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6035 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 6025 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) | 6036 EXPECT_CALL(*gl_, %(gl_func_name)s(1, _)) |
| 6026 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); | 6037 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); |
| 6027 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; | 6038 GetSharedMemoryAs<GLuint*>()[0] = kNewClientId; |
| 6028 SpecializedSetup<cmds::%(name)s, 0>(true); | 6039 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 6029 cmds::%(name)s cmd; | 6040 cmds::%(name)s cmd; |
| 6030 cmd.Init(%(args)s); | 6041 cmd.Init(%(args)s); |
| 6031 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 6042 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 6032 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6043 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 6033 if func.IsUnsafe(): | 6044 if func.IsUnsafe() and not func.UseHelper(): |
| 6034 valid_test += """ | 6045 valid_test += """ |
| 6035 GLuint service_id; | 6046 GLuint service_id; |
| 6036 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); | 6047 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
| 6037 EXPECT_EQ(kNewServiceId, service_id) | 6048 EXPECT_EQ(kNewServiceId, service_id) |
| 6038 } | 6049 } |
| 6039 """ | 6050 """ |
| 6040 else: | 6051 else: |
| 6041 valid_test += """ | 6052 valid_test += """ |
| 6042 EXPECT_TRUE(Get%(resource_name)s(kNewClientId, &service_id) != NULL); | 6053 EXPECT_TRUE(Get%(resource_name)s(kNewClientId, &service_id) != NULL); |
| 6043 } | 6054 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 6069 GLuint temp = kNewClientId; | 6080 GLuint temp = kNewClientId; |
| 6070 SpecializedSetup<cmds::%(name)s, 0>(true);""" | 6081 SpecializedSetup<cmds::%(name)s, 0>(true);""" |
| 6071 if func.IsUnsafe(): | 6082 if func.IsUnsafe(): |
| 6072 valid_test += """ | 6083 valid_test += """ |
| 6073 decoder_->set_unsafe_es3_apis_enabled(true);""" | 6084 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 6074 valid_test += """ | 6085 valid_test += """ |
| 6075 cmd->Init(1, &temp); | 6086 cmd->Init(1, &temp); |
| 6076 EXPECT_EQ(error::kNoError, | 6087 EXPECT_EQ(error::kNoError, |
| 6077 ExecuteImmediateCmd(*cmd, sizeof(temp))); | 6088 ExecuteImmediateCmd(*cmd, sizeof(temp))); |
| 6078 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6089 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 6079 if func.IsUnsafe(): | 6090 if func.IsUnsafe() and not func.UseHelper(): |
| 6080 valid_test += """ | 6091 valid_test += """ |
| 6081 GLuint service_id; | 6092 GLuint service_id; |
| 6082 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); | 6093 EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
| 6083 EXPECT_EQ(kNewServiceId, service_id); | 6094 EXPECT_EQ(kNewServiceId, service_id); |
| 6084 decoder_->set_unsafe_es3_apis_enabled(false); | 6095 decoder_->set_unsafe_es3_apis_enabled(false); |
| 6085 EXPECT_EQ(error::kUnknownCommand, | 6096 EXPECT_EQ(error::kUnknownCommand, |
| 6086 ExecuteImmediateCmd(*cmd, sizeof(temp))); | 6097 ExecuteImmediateCmd(*cmd, sizeof(temp))); |
| 6087 } | 6098 } |
| 6088 """ | 6099 """ |
| 6089 else: | 6100 else: |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6371 f.write(" %sHelper(%s);\n" % | 6382 f.write(" %sHelper(%s);\n" % |
| 6372 (func.original_name, func.GetOriginalArgs()[-1].name)) | 6383 (func.original_name, func.GetOriginalArgs()[-1].name)) |
| 6373 f.write(" CheckGLError();\n") | 6384 f.write(" CheckGLError();\n") |
| 6374 f.write("}\n") | 6385 f.write("}\n") |
| 6375 f.write("\n") | 6386 f.write("\n") |
| 6376 | 6387 |
| 6377 def WriteHandlerImplementation (self, func, f): | 6388 def WriteHandlerImplementation (self, func, f): |
| 6378 """Overrriden from TypeHandler.""" | 6389 """Overrriden from TypeHandler.""" |
| 6379 assert len(func.GetOriginalArgs()) == 1 | 6390 assert len(func.GetOriginalArgs()) == 1 |
| 6380 arg = func.GetOriginalArgs()[0] | 6391 arg = func.GetOriginalArgs()[0] |
| 6381 if func.IsUnsafe(): | 6392 if func.IsUnsafe() and not func.UseHelper(): |
| 6382 f.write(""" %(arg_type)s service_id = 0; | 6393 f.write(""" %(arg_type)s service_id = 0; |
| 6383 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { | 6394 if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { |
| 6384 glDelete%(resource_type)s(service_id); | 6395 glDelete%(resource_type)s(service_id); |
| 6385 group_->Remove%(resource_type)sId(%(arg_name)s); | 6396 group_->Remove%(resource_type)sId(%(arg_name)s); |
| 6386 } else { | 6397 } else { |
| 6387 LOCAL_SET_GL_ERROR( | 6398 LOCAL_SET_GL_ERROR( |
| 6388 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); | 6399 GL_INVALID_VALUE, "gl%(func_name)s", "unknown %(arg_name)s"); |
| 6389 } | 6400 } |
| 6390 """ % { 'resource_type': func.GetInfo('resource_type'), | 6401 """ % { 'resource_type': func.GetInfo('resource_type'), |
| 6391 'arg_name': arg.name, | 6402 'arg_name': arg.name, |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6472 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 6483 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
| 6473 SpecializedSetup<cmds::%(name)s, 0>(true); | 6484 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 6474 cmd.Init(1, &client_%(resource_name)s_id_);""" | 6485 cmd.Init(1, &client_%(resource_name)s_id_);""" |
| 6475 if func.IsUnsafe(): | 6486 if func.IsUnsafe(): |
| 6476 valid_test += """ | 6487 valid_test += """ |
| 6477 decoder_->set_unsafe_es3_apis_enabled(true);""" | 6488 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 6478 valid_test += """ | 6489 valid_test += """ |
| 6479 EXPECT_EQ(error::kNoError, | 6490 EXPECT_EQ(error::kNoError, |
| 6480 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); | 6491 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); |
| 6481 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 6492 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 6482 if func.IsUnsafe(): | 6493 if func.IsUnsafe() and not func.UseHelper(): |
| 6483 valid_test += """ | 6494 valid_test += """ |
| 6484 EXPECT_FALSE(Get%(upper_resource_name)sServiceId( | 6495 EXPECT_FALSE(Get%(upper_resource_name)sServiceId( |
| 6485 client_%(resource_name)s_id_, NULL)); | 6496 client_%(resource_name)s_id_, NULL)); |
| 6486 decoder_->set_unsafe_es3_apis_enabled(false); | 6497 decoder_->set_unsafe_es3_apis_enabled(false); |
| 6487 EXPECT_EQ(error::kUnknownCommand, | 6498 EXPECT_EQ(error::kUnknownCommand, |
| 6488 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); | 6499 ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); |
| 6489 } | 6500 } |
| 6490 """ | 6501 """ |
| 6491 else: | 6502 else: |
| 6492 valid_test += """ | 6503 valid_test += """ |
| (...skipping 29 matching lines...) Expand all Loading... |
| 6522 """ | 6533 """ |
| 6523 self.WriteValidUnitTest(func, f, invalid_test, *extras) | 6534 self.WriteValidUnitTest(func, f, invalid_test, *extras) |
| 6524 | 6535 |
| 6525 def WriteHandlerImplementation (self, func, f): | 6536 def WriteHandlerImplementation (self, func, f): |
| 6526 """Overrriden from TypeHandler.""" | 6537 """Overrriden from TypeHandler.""" |
| 6527 f.write(" %sHelper(n, %s);\n" % | 6538 f.write(" %sHelper(n, %s);\n" % |
| 6528 (func.name, func.GetLastOriginalArg().name)) | 6539 (func.name, func.GetLastOriginalArg().name)) |
| 6529 | 6540 |
| 6530 def WriteImmediateHandlerImplementation (self, func, f): | 6541 def WriteImmediateHandlerImplementation (self, func, f): |
| 6531 """Overrriden from TypeHandler.""" | 6542 """Overrriden from TypeHandler.""" |
| 6532 if func.IsUnsafe(): | 6543 if func.IsUnsafe() and not func.UseHelper(): |
| 6533 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { | 6544 f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
| 6534 GLuint service_id = 0; | 6545 GLuint service_id = 0; |
| 6535 if (group_->Get%(resource_type)sServiceId( | 6546 if (group_->Get%(resource_type)sServiceId( |
| 6536 %(last_arg_name)s[ii], &service_id)) { | 6547 %(last_arg_name)s[ii], &service_id)) { |
| 6537 glDelete%(resource_type)ss(1, &service_id); | 6548 glDelete%(resource_type)ss(1, &service_id); |
| 6538 group_->Remove%(resource_type)sId(%(last_arg_name)s[ii]); | 6549 group_->Remove%(resource_type)sId(%(last_arg_name)s[ii]); |
| 6539 } | 6550 } |
| 6540 } | 6551 } |
| 6541 """ % { 'resource_type': func.GetInfo('resource_type'), | 6552 """ % { 'resource_type': func.GetInfo('resource_type'), |
| 6542 'last_arg_name': func.GetLastOriginalArg().name }) | 6553 'last_arg_name': func.GetLastOriginalArg().name }) |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6982 """ | 6993 """ |
| 6983 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) | 6994 self.WriteInvalidUnitTest(func, f, invalid_test, extra, *extras) |
| 6984 | 6995 |
| 6985 def WriteImmediateServiceUnitTest(self, func, f, *extras): | 6996 def WriteImmediateServiceUnitTest(self, func, f, *extras): |
| 6986 """Writes the service unit test for a command.""" | 6997 """Writes the service unit test for a command.""" |
| 6987 valid_test = """ | 6998 valid_test = """ |
| 6988 TEST_P(%(test_name)s, %(name)sValidArgs) { | 6999 TEST_P(%(test_name)s, %(name)sValidArgs) { |
| 6989 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); | 7000 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
| 6990 SpecializedSetup<cmds::%(name)s, 0>(true); | 7001 SpecializedSetup<cmds::%(name)s, 0>(true); |
| 6991 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; | 7002 %(data_type)s temp[%(data_count)s] = { %(data_value)s, }; |
| 6992 cmd.Init(%(gl_args)s, &temp[0]); | 7003 cmd.Init(%(gl_client_args)s, &temp[0]); |
| 6993 EXPECT_CALL( | 7004 EXPECT_CALL( |
| 6994 *gl_, | 7005 *gl_, |
| 6995 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< | 7006 %(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< |
| 6996 %(data_type)s*>(ImmediateDataAddress(&cmd))));""" | 7007 %(data_type)s*>(ImmediateDataAddress(&cmd))));""" |
| 6997 if func.IsUnsafe(): | 7008 if func.IsUnsafe(): |
| 6998 valid_test += """ | 7009 valid_test += """ |
| 6999 decoder_->set_unsafe_es3_apis_enabled(true);""" | 7010 decoder_->set_unsafe_es3_apis_enabled(true);""" |
| 7000 valid_test += """ | 7011 valid_test += """ |
| 7001 EXPECT_EQ(error::kNoError, | 7012 EXPECT_EQ(error::kNoError, |
| 7002 ExecuteImmediateCmd(cmd, sizeof(temp))); | 7013 ExecuteImmediateCmd(cmd, sizeof(temp))); |
| 7003 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" | 7014 EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
| 7004 if func.IsUnsafe(): | 7015 if func.IsUnsafe(): |
| 7005 valid_test += """ | 7016 valid_test += """ |
| 7006 decoder_->set_unsafe_es3_apis_enabled(false); | 7017 decoder_->set_unsafe_es3_apis_enabled(false); |
| 7007 EXPECT_EQ(error::kUnknownCommand, | 7018 EXPECT_EQ(error::kUnknownCommand, |
| 7008 ExecuteImmediateCmd(cmd, sizeof(temp)));""" | 7019 ExecuteImmediateCmd(cmd, sizeof(temp)));""" |
| 7009 valid_test += """ | 7020 valid_test += """ |
| 7010 } | 7021 } |
| 7011 """ | 7022 """ |
| 7023 gl_client_arg_strings = [ |
| 7024 arg.GetValidArg(func) for arg in func.GetOriginalArgs()[0:-1] |
| 7025 ] |
| 7012 gl_arg_strings = [ | 7026 gl_arg_strings = [ |
| 7013 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] | 7027 arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] |
| 7014 ] | 7028 ] |
| 7015 gl_any_strings = ["_"] * len(gl_arg_strings) | 7029 gl_any_strings = ["_"] * len(gl_arg_strings) |
| 7016 | 7030 |
| 7017 extra = { | 7031 extra = { |
| 7018 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), | 7032 'data_ref': ("*" if func.GetInfo('first_element_only') else ""), |
| 7019 'data_type': self.GetArrayType(func), | 7033 'data_type': self.GetArrayType(func), |
| 7020 'data_count': self.GetArrayCount(func), | 7034 'data_count': self.GetArrayCount(func), |
| 7021 'data_value': func.GetInfo('data_value') or '0', | 7035 'data_value': func.GetInfo('data_value') or '0', |
| 7036 'gl_client_args': ", ".join(gl_client_arg_strings), |
| 7022 'gl_args': ", ".join(gl_arg_strings), | 7037 'gl_args': ", ".join(gl_arg_strings), |
| 7023 'gl_any_args': ", ".join(gl_any_strings), | 7038 'gl_any_args': ", ".join(gl_any_strings), |
| 7024 } | 7039 } |
| 7025 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) | 7040 self.WriteValidUnitTest(func, f, valid_test, extra, *extras) |
| 7026 | 7041 |
| 7027 invalid_test = """ | 7042 invalid_test = """ |
| 7028 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { | 7043 TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { |
| 7029 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();""" | 7044 cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();""" |
| 7030 if func.IsUnsafe(): | 7045 if func.IsUnsafe(): |
| 7031 invalid_test += """ | 7046 invalid_test += """ |
| (...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8236 | 8251 |
| 8237 code = """ typedef cmds::%(func_name)s::Result Result; | 8252 code = """ typedef cmds::%(func_name)s::Result Result; |
| 8238 Result* result_dst = GetSharedMemoryAs<Result*>( | 8253 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 8239 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 8254 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 8240 if (!result_dst) { | 8255 if (!result_dst) { |
| 8241 return error::kOutOfBounds; | 8256 return error::kOutOfBounds; |
| 8242 } | 8257 } |
| 8243 """ | 8258 """ |
| 8244 f.write(code % {'func_name': func.name}) | 8259 f.write(code % {'func_name': func.name}) |
| 8245 func.WriteHandlerValidation(f) | 8260 func.WriteHandlerValidation(f) |
| 8246 if func.IsUnsafe(): | 8261 if func.IsUnsafe() and not func.UseHelper(): |
| 8247 assert func.GetInfo('id_mapping') | 8262 assert func.GetInfo('id_mapping') |
| 8248 assert len(func.GetInfo('id_mapping')) == 1 | 8263 assert len(func.GetInfo('id_mapping')) == 1 |
| 8249 assert len(args) == 1 | 8264 assert len(args) == 1 |
| 8250 id_type = func.GetInfo('id_mapping')[0] | 8265 id_type = func.GetInfo('id_mapping')[0] |
| 8251 f.write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) | 8266 f.write(" %s service_%s = 0;\n" % (args[0].type, id_type.lower())) |
| 8252 f.write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % | 8267 f.write(" *result_dst = group_->Get%sServiceId(%s, &service_%s);\n" % |
| 8253 (id_type, id_type.lower(), id_type.lower())) | 8268 (id_type, id_type.lower(), id_type.lower())) |
| 8254 else: | 8269 else: |
| 8255 f.write(" *result_dst = %s(%s);\n" % | 8270 f.write(" *result_dst = %s(%s);\n" % |
| 8256 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) | 8271 (func.GetGLFunctionName(), func.MakeOriginalArgString(""))) |
| (...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9300 self.type_handler.InitFunction(self) | 9315 self.type_handler.InitFunction(self) |
| 9301 | 9316 |
| 9302 def IsImmediate(self): | 9317 def IsImmediate(self): |
| 9303 """Returns whether the function is immediate data function or not.""" | 9318 """Returns whether the function is immediate data function or not.""" |
| 9304 return False | 9319 return False |
| 9305 | 9320 |
| 9306 def IsUnsafe(self): | 9321 def IsUnsafe(self): |
| 9307 """Returns whether the function has service side validation or not.""" | 9322 """Returns whether the function has service side validation or not.""" |
| 9308 return self.GetInfo('unsafe', False) | 9323 return self.GetInfo('unsafe', False) |
| 9309 | 9324 |
| 9325 def UseHelper(self): |
| 9326 """Returns whether the function uses explicit helper functions.""" |
| 9327 return self.GetInfo('use_helper', False) |
| 9328 |
| 9310 def GetInfo(self, name, default = None): | 9329 def GetInfo(self, name, default = None): |
| 9311 """Returns a value from the function info for this function.""" | 9330 """Returns a value from the function info for this function.""" |
| 9312 if name in self.info: | 9331 if name in self.info: |
| 9313 return self.info[name] | 9332 return self.info[name] |
| 9314 return default | 9333 return default |
| 9315 | 9334 |
| 9316 def GetValidArg(self, arg): | 9335 def GetValidArg(self, arg): |
| 9317 """Gets a valid argument value for the parameter arg from the function info | 9336 """Gets a valid argument value for the parameter arg from the function info |
| 9318 if one exists.""" | 9337 if one exists.""" |
| 9319 try: | 9338 try: |
| (...skipping 1909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11229 Format(gen.generated_cpp_filenames) | 11248 Format(gen.generated_cpp_filenames) |
| 11230 | 11249 |
| 11231 if gen.errors > 0: | 11250 if gen.errors > 0: |
| 11232 print "%d errors" % gen.errors | 11251 print "%d errors" % gen.errors |
| 11233 return 1 | 11252 return 1 |
| 11234 return 0 | 11253 return 0 |
| 11235 | 11254 |
| 11236 | 11255 |
| 11237 if __name__ == '__main__': | 11256 if __name__ == '__main__': |
| 11238 sys.exit(main(sys.argv[1:])) | 11257 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |