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

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

Issue 1498033003: Implement SamplerManager in the command buffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: One more tweak from zmo@'s feedback Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """code generator for GLES2 command buffers.""" 6 """code generator for GLES2 command buffers."""
7 7
8 import itertools 8 import itertools
9 import os 9 import os
10 import os.path 10 import os.path
(...skipping 2240 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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:]))
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/BUILD.gn » ('j') | gpu/command_buffer/service/context_state.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698