Index: gpu/command_buffer/build_gles2_cmd_buffer.py |
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py |
index 76708f5e1cfa1fb302df3a2d16c6ced5a9f41595..d1e3531ca4c9469840b4a1f41fe43bf6e227944e 100755 |
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py |
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py |
@@ -2200,6 +2200,8 @@ _PEPPER_INTERFACES = [ |
# not_shared: For GENn types, True if objects can't be shared between contexts |
# unsafe: True = no validation is implemented on the service side and the |
# command is only available with --enable-unsafe-es3-apis. |
+# use_helper: True = use explicit helper or decoder functions rather than the |
+# defaults created when unsafe is True. |
# id_mapping: A list of resource type names whose client side IDs need to be |
# mapped to service side IDs. This is only used for unsafe APIs. |
@@ -2259,8 +2261,9 @@ _FUNCTION_INFO = { |
}, |
'BindSampler': { |
'type': 'Bind', |
- 'id_mapping': [ 'Sampler' ], |
+ 'decoder_func': 'DoBindSampler', |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'BindTexture': { |
'type': 'Bind', |
@@ -2644,6 +2647,7 @@ _FUNCTION_INFO = { |
'resource_type': 'Sampler', |
'resource_types': 'Samplers', |
'unsafe': True, |
+ 'use_helper': True |
}, |
'DeleteShader': { 'type': 'Delete' }, |
'DeleteSync': { |
@@ -2788,6 +2792,7 @@ _FUNCTION_INFO = { |
'resource_type': 'Sampler', |
'resource_types': 'Samplers', |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'GenTextures': { |
'type': 'GENn', |
@@ -3005,15 +3010,17 @@ _FUNCTION_INFO = { |
}, |
'GetSamplerParameterfv': { |
'type': 'GETn', |
+ 'decoder_func': 'DoGetSamplerParameterfv', |
'result': ['SizedResult<GLfloat>'], |
- 'id_mapping': [ 'Sampler' ], |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'GetSamplerParameteriv': { |
'type': 'GETn', |
+ 'decoder_func': 'DoGetSamplerParameteriv', |
'result': ['SizedResult<GLint>'], |
- 'id_mapping': [ 'Sampler' ], |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'GetShaderiv': { |
'type': 'GETn', |
@@ -3250,9 +3257,10 @@ _FUNCTION_INFO = { |
}, |
'IsSampler': { |
'type': 'Is', |
- 'id_mapping': [ 'Sampler' ], |
+ 'decoder_func': 'DoIsSampler', |
'expectation': False, |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'IsSync': { |
'type': 'Is', |
@@ -3410,8 +3418,9 @@ _FUNCTION_INFO = { |
'valid_args': { |
'2': 'GL_NEAREST' |
}, |
- 'id_mapping': [ 'Sampler' ], |
+ 'decoder_func': 'DoSamplerParameterf', |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'SamplerParameterfv': { |
'type': 'PUT', |
@@ -3420,15 +3429,16 @@ _FUNCTION_INFO = { |
'gl_test_func': 'glSamplerParameterf', |
'decoder_func': 'DoSamplerParameterfv', |
'first_element_only': True, |
- 'id_mapping': [ 'Sampler' ], |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'SamplerParameteri': { |
'valid_args': { |
'2': 'GL_NEAREST' |
}, |
- 'id_mapping': [ 'Sampler' ], |
+ 'decoder_func': 'DoSamplerParameteri', |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'SamplerParameteriv': { |
'type': 'PUT', |
@@ -3438,6 +3448,7 @@ _FUNCTION_INFO = { |
'decoder_func': 'DoSamplerParameteriv', |
'first_element_only': True, |
'unsafe': True, |
+ 'use_helper': True, |
}, |
'ShaderBinary': { |
'type': 'Custom', |
@@ -5925,7 +5936,7 @@ class GENnHandler(TypeHandler): |
def WriteImmediateHandlerImplementation(self, func, f): |
"""Overrriden from TypeHandler.""" |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
if (group_->Get%(resource_name)sServiceId(%(last_arg_name)s[ii], NULL)) { |
return error::kInvalidArguments; |
@@ -6030,7 +6041,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { |
cmd.Init(%(args)s); |
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
valid_test += """ |
GLuint service_id; |
EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
@@ -6076,7 +6087,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { |
EXPECT_EQ(error::kNoError, |
ExecuteImmediateCmd(*cmd, sizeof(temp))); |
EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
valid_test += """ |
GLuint service_id; |
EXPECT_TRUE(Get%(resource_name)sServiceId(kNewClientId, &service_id)); |
@@ -6378,7 +6389,7 @@ class DeleteHandler(TypeHandler): |
"""Overrriden from TypeHandler.""" |
assert len(func.GetOriginalArgs()) == 1 |
arg = func.GetOriginalArgs()[0] |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
f.write(""" %(arg_type)s service_id = 0; |
if (group_->Get%(resource_type)sServiceId(%(arg_name)s, &service_id)) { |
glDelete%(resource_type)s(service_id); |
@@ -6479,7 +6490,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { |
EXPECT_EQ(error::kNoError, |
ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); |
EXPECT_EQ(GL_NO_ERROR, GetGLError());""" |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
valid_test += """ |
EXPECT_FALSE(Get%(upper_resource_name)sServiceId( |
client_%(resource_name)s_id_, NULL)); |
@@ -6529,7 +6540,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) { |
def WriteImmediateHandlerImplementation (self, func, f): |
"""Overrriden from TypeHandler.""" |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
f.write(""" for (GLsizei ii = 0; ii < n; ++ii) { |
GLuint service_id = 0; |
if (group_->Get%(resource_type)sServiceId( |
@@ -6989,7 +7000,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { |
cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>(); |
SpecializedSetup<cmds::%(name)s, 0>(true); |
%(data_type)s temp[%(data_count)s] = { %(data_value)s, }; |
- cmd.Init(%(gl_args)s, &temp[0]); |
+ cmd.Init(%(gl_client_args)s, &temp[0]); |
EXPECT_CALL( |
*gl_, |
%(gl_func_name)s(%(gl_args)s, %(data_ref)sreinterpret_cast< |
@@ -7009,6 +7020,9 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { |
valid_test += """ |
} |
""" |
+ gl_client_arg_strings = [ |
+ arg.GetValidArg(func) for arg in func.GetOriginalArgs()[0:-1] |
+ ] |
gl_arg_strings = [ |
arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1] |
] |
@@ -7019,6 +7033,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) { |
'data_type': self.GetArrayType(func), |
'data_count': self.GetArrayCount(func), |
'data_value': func.GetInfo('data_value') or '0', |
+ 'gl_client_args': ", ".join(gl_client_arg_strings), |
'gl_args': ", ".join(gl_arg_strings), |
'gl_any_args': ", ".join(gl_any_strings), |
} |
@@ -8243,7 +8258,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) { |
""" |
f.write(code % {'func_name': func.name}) |
func.WriteHandlerValidation(f) |
- if func.IsUnsafe(): |
+ if func.IsUnsafe() and not func.UseHelper(): |
assert func.GetInfo('id_mapping') |
assert len(func.GetInfo('id_mapping')) == 1 |
assert len(args) == 1 |
@@ -9307,6 +9322,10 @@ class Function(object): |
"""Returns whether the function has service side validation or not.""" |
return self.GetInfo('unsafe', False) |
+ def UseHelper(self): |
+ """Returns whether the function uses explicit helper functions.""" |
+ return self.GetInfo('use_helper', False) |
+ |
def GetInfo(self, name, default = None): |
"""Returns a value from the function info for this function.""" |
if name in self.info: |