summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/build_gles2_cmd_buffer.py
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/build_gles2_cmd_buffer.py')
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py279
1 files changed, 72 insertions, 207 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index bc96c95..f406c47 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -839,10 +839,9 @@ _ENUM_LISTS = {
# data_type: The type of data the command uses. For PUTn or PUT types.
# count: The number of units per element. For PUTn or PUT types.
# unit_test: If False no unit test will be generated.
-# expectation: If False the unit test will have no expected calls.
_FUNCTION_INFO = {
- 'ActiveTexture': {'decoder_func': 'DoActiveTexture', 'expection': False},
+ 'ActiveTexture': {'decoder_func': 'DoActiveTexture'},
'BindAttribLocation': {'type': 'GLchar'},
'BindBuffer': {'decoder_func': 'DoBindBuffer'},
'BindFramebuffer': {'decoder_func': 'glBindFramebufferEXT'},
@@ -925,17 +924,10 @@ _FUNCTION_INFO = {
'needs_size': True,
'cmd_args':
'GLidProgram program, const char* name, NonImmediate GLint* location',
- 'result': ['GLint'],
},
'GetBooleanv': {'type': 'GETn'},
'GetBufferParameteriv': {'type': 'GETn'},
- 'GetError': {
- 'type': 'Is',
- 'decoder_func':
- 'GetGLError',
- 'impl_func': False,
- 'result': ['GLenum'],
- },
+ 'GetError': {'type': 'Is', 'decoder_func': 'GetGLError'},
'GetFloatv': {'type': 'GETn'},
'GetFramebufferAttachmentParameteriv': {
'type': 'GETn',
@@ -943,21 +935,13 @@ _FUNCTION_INFO = {
},
'GetIntegerv': {'type': 'GETn'},
'GetProgramiv': {'type': 'GETn'},
- 'GetProgramInfoLog': {
- 'type': 'STRn',
- 'get_len_func': 'glGetProgramiv',
- 'get_len_enum': 'GL_INFO_LOG_LENGTH',
- },
+ 'GetProgramInfoLog': {'type': 'STRn'},
'GetRenderbufferParameteriv': {
'type': 'GETn',
'decoder_func': 'glGetRenderbufferParameterivEXT',
},
- 'GetShaderiv': {'type': 'GETn', 'decoder_func': 'DoGetShaderiv'},
- 'GetShaderInfoLog': {
- 'type': 'STRn',
- 'get_len_func': 'glGetShaderiv',
- 'get_len_enum': 'GL_INFO_LOG_LENGTH',
- },
+ 'GetShaderiv': {'type': 'GETn'},
+ 'GetShaderInfoLog': {'type': 'STRn'},
'GetShaderPrecisionFormat': {
'type': 'Custom',
'immediate': False,
@@ -971,17 +955,7 @@ _FUNCTION_INFO = {
'int32 precision',
],
},
- 'GetShaderSource': {
- 'type': 'STRn',
- 'decoder_func': 'DoGetShaderSource',
- 'get_len_func': 'DoGetShaderiv',
- 'get_len_enum': 'GL_SHADER_SOURCE_LENGTH',
- 'unit_test': False,
- },
- 'GetString': {
- 'type': 'Custom',
- 'cmd_args': 'GLenumStringType name, uint32 bucket_id',
- },
+ 'GetShaderSource': {'type': 'STRn', 'decoder_func': 'DoGetShaderSource'},
'GetTexParameterfv': {'type': 'GETn'},
'GetTexParameteriv': {'type': 'GETn'},
'GetUniformfv': {
@@ -1000,7 +974,6 @@ _FUNCTION_INFO = {
'needs_size': True,
'cmd_args':
'GLidProgram program, const char* name, NonImmediate GLint* location',
- 'result': ['GLint'],
},
'GetVertexAttribfv': {'type': 'GETn'},
'GetVertexAttribiv': {'type': 'GETn'},
@@ -1199,8 +1172,6 @@ class CHeaderWriter(CWriter):
class TypeHandler(object):
"""This class emits code for a particular type of function."""
- _remove_expected_call_re = re.compile(r' EXPECT_CALL.*?;\n', re.S)
-
def __init__(self):
pass
@@ -1392,8 +1363,6 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
def WriteValidUnitTest(self, func, file, test, extra = {}):
"""Writes a valid unit test."""
- if func.GetInfo('expection') == False:
- test = self._remove_expected_call_re.sub('', test)
name = func.name
arg_strings = []
count = 0
@@ -1420,7 +1389,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
"""Writes a invalid unit test."""
arg_index = 0
for arg in func.GetOriginalArgs():
- num_invalid_values = arg.GetNumInvalidValues(func)
+ num_invalid_values = arg.GetNumInvalidValues()
for value_index in range(0, num_invalid_values):
arg_strings = []
parse_result = "kNoError"
@@ -1492,28 +1461,22 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
"""Writes the validation code for an immediate version of a command."""
pass
- def WriteGLES2ImplementationDeclaration(self, func, file):
- """Writes the GLES2 Implemention declaration."""
- file.Write("%s %s(%s);\n" %
- (func.return_type, func.original_name,
- func.MakeTypedOriginalArgString("")))
- file.Write("\n")
-
def WriteGLES2ImplementationHeader(self, func, file):
- """Writes the GLES2 Implemention."""
+ """Writes the GLES2 Implemention declaration."""
impl_func = func.GetInfo('impl_func')
if func.can_auto_generate and (impl_func == None or impl_func == True):
file.Write("%s %s(%s) {\n" %
(func.return_type, func.original_name,
func.MakeTypedOriginalArgString("")))
- for arg in func.GetOriginalArgs():
- arg.WriteClientSideValidationCode(file)
file.Write(" helper_->%s(%s);\n" %
(func.name, func.MakeOriginalArgString("")))
file.Write("}\n")
file.Write("\n")
else:
- self.WriteGLES2ImplementationDeclaration(func, file)
+ file.Write("%s %s(%s);\n" %
+ (func.return_type, func.original_name,
+ func.MakeTypedOriginalArgString("")))
+ file.Write("\n")
def WriteImmediateCmdComputeSize(self, func, file):
"""Writes the size computation code for the immediate version of a cmd."""
@@ -3026,8 +2989,6 @@ class IsHandler(TypeHandler):
"""Overrriden from TypeHandler."""
func.AddCmdArg(Argument("result_shm_id", 'uint32'))
func.AddCmdArg(Argument("result_shm_offset", 'uint32'))
- if func.GetInfo('result') == None:
- func.AddInfo('result', ['uint32'])
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
@@ -3083,26 +3044,20 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
def WriteGLES2ImplementationHeader(self, func, file):
"""Overrriden from TypeHandler."""
- impl_func = func.GetInfo('impl_func')
- if impl_func == None or impl_func == True:
- file.Write("%s %s(%s) {\n" %
- (func.return_type, func.original_name,
- func.MakeTypedOriginalArgString("")))
- file.Write(" typedef %s::Result Result;\n" % func.original_name)
- file.Write(" Result* result = GetResultAs<Result*>();\n")
- file.Write(" *result = 0;\n")
- arg_string = func.MakeOriginalArgString("")
- comma = ""
- if len(arg_string) > 0:
- comma = ", "
- file.Write(" helper_->%s(%s%sresult_shm_id(), result_shm_offset());\n" %
- (func.name, arg_string, comma))
- file.Write(" WaitForCmd();\n")
- file.Write(" return *result;\n")
- file.Write("}\n")
- file.Write("\n")
- else:
- self.WriteGLES2ImplementationDeclaration(func, file)
+ file.Write("%s %s(%s) {\n" %
+ (func.return_type, func.original_name,
+ func.MakeTypedOriginalArgString("")))
+ arg_string = func.MakeOriginalArgString("")
+ comma = ""
+ if len(arg_string) > 0:
+ comma = ", "
+ file.Write(" helper_->%s(%s%sresult_shm_id(), result_shm_offset());\n" %
+ (func.name, arg_string, comma))
+ file.Write(" WaitForCmd();\n")
+ file.Write(" return GetResultAs<%s>();\n" %
+ func.return_type)
+ file.Write("}\n")
+ file.Write("\n")
class STRnHandler(TypeHandler):
@@ -3111,95 +3066,18 @@ class STRnHandler(TypeHandler):
def __init__(self):
TypeHandler.__init__(self)
- def InitFunction(self, func):
- """Overrriden from TypeHandler."""
- # remove all but the first cmd args.
- cmd_args = func.GetCmdArgs()
- func.ClearCmdArgs()
- func.AddCmdArg(cmd_args[0])
- # add on a bucket id.
- func.AddCmdArg(Argument('bucket_id', 'uint32'))
-
def WriteGLES2ImplementationHeader(self, func, file):
"""Overrriden from TypeHandler."""
- code = """%(return_type)s %(func_name)s(%(args)s) {
- helper_->SetBucketSize(kResultBucketId, 0);
- helper_->%(func_name)s(%(id_name)s, kResultBucketId);
- std::string str;
- if (GetBucketAsString(kResultBucketId, &str)) {
- GLsizei max_size =
- std::min(static_cast<size_t>(%(bufsize_name)s) - 1, str.size());
- if (%(length_name)s != NULL) {
- *%(length_name)s = max_size;
- }
- memcpy(%(dest_name)s, str.c_str(), max_size);
- %(dest_name)s[max_size] = '\\0';
- }
-}
-"""
- args = func.GetOriginalArgs()
- file.Write(code % {
- 'return_type': func.return_type,
- 'func_name': func.original_name,
- 'args': func.MakeTypedOriginalArgString(""),
- 'id_name': args[0].name,
- 'bufsize_name': args[1].name,
- 'length_name': args[2].name,
- 'dest_name': args[3].name,
- })
+ file.Write("// TODO(gman): Implement this\n")
+ TypeHandler.WriteGLES2ImplementationHeader(self, func, file)
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
- valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
- const char* kInfo = "hello";
- const uint32 kBucketId = 123;
- SpecializedSetup<%(name)s, 0>();
-%(expect_len_code)s
- EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
- .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)),
- SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1)));
- %(name)s cmd;
- cmd.Init(%(args)s);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(strlen(kInfo) + 1, bucket->size());
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kInfo,
- bucket->size()));
-}
-"""
- args = func.GetOriginalArgs()
- id_name = args[0].GetValidGLArg(0, 0)
- get_len_func = func.GetInfo('get_len_func')
- get_len_enum = func.GetInfo('get_len_enum')
- sub = {
- 'id_name': id_name,
- 'get_len_func': get_len_func,
- 'get_len_enum': get_len_enum,
- 'gl_args': '%s, strlen(kInfo) + 1, _, _' % args[0].GetValidGLArg(0, 0),
- 'args': '%s, kBucketId' % args[0].GetValidArg(0, 0),
- 'expect_len_code': '',
- }
- if get_len_func[0:2] == 'gl':
- sub['expect_len_code'] = (
- " EXPECT_CALL(*gl_, %s(%s, %s, _))\n"
- " .WillOnce(SetArgumentPointee<2>(strlen(kInfo)));") % (
- get_len_func[2:], id_name, get_len_enum)
- self.WriteValidUnitTest(func, file, valid_test, sub)
+ file.Write("// TODO(gman): %s\n\n" % func.name)
- invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs) {
- const uint32 kBucketId = 123;
- EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _))
- .Times(0);
- %(name)s cmd;
- cmd.Init(kInvalidClientId, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-"""
- self.WriteValidUnitTest(func, file, invalid_test)
+ def WriteImmediateServiceUnitTest(self, func, file):
+ """Overrriden from TypeHandler."""
+ file.Write("// TODO(gman): %s\n\n" % func.name)
def WriteServiceImplementation(self, func, file):
"""Overrriden from TypeHandler."""
@@ -3207,21 +3085,34 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
" uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
- args = func.GetCmdArgs()
- id_arg = args[0]
- bucket_arg = args[1]
- id_arg.WriteGetCode(file)
- bucket_arg.WriteGetCode(file)
- id_arg.WriteValidationCode(file)
- file.Write(" GLint len = 0;\n")
- file.Write(" %s(%s, %s, &len);\n" % (
- func.GetInfo('get_len_func'), id_arg.name,
- func.GetInfo('get_len_enum')))
- file.Write(" Bucket* bucket = CreateBucket(%s);\n" % bucket_arg.name)
- file.Write(" bucket->SetSize(len + 1);\n");
+ args = func.GetOriginalArgs()
+ all_but_last_2_args = args[:-2]
+ for arg in all_but_last_2_args:
+ arg.WriteGetCode(file)
+ self.WriteGetDataSizeCode(func, file)
+ size_arg = args[-2]
+ file.Write(" uint32 size_shm_id = c.%s_shm_id;\n" % size_arg.name)
+ file.Write(" uint32 size_shm_offset = c.%s_shm_offset;\n" % size_arg.name)
+ file.Write(" GLsizei* length = NULL;\n")
+ file.Write(" if (size_shm_id != 0 || size_shm_offset != 0) {\n"
+ " length = GetSharedMemoryAs<GLsizei*>(\n"
+ " size_shm_id, size_shm_offset, sizeof(*length));\n"
+ " if (!length) {\n"
+ " return error::kOutOfBounds;\n"
+ " }\n"
+ " }\n")
+ dest_arg = args[-1]
+ bufsize_arg = args[-3]
file.Write(
- " %s(%s, len + 1, &len, bucket->GetDataAs<GLchar*>(0, len + 1));\n" %
- (func.GetGLFunctionName(), id_arg.name))
+ " %s %s = GetSharedMemoryAs<%s>(\n" %
+ (dest_arg.type, dest_arg.name, dest_arg.type))
+ file.Write(
+ " c.%s_shm_id, c.%s_shm_offset, %s);\n" %
+ (dest_arg.name, dest_arg.name, bufsize_arg.name))
+ for arg in all_but_last_2_args + [dest_arg]:
+ arg.WriteValidationCode(file)
+ func.WriteValidationCode(file)
+ func.WriteHandlerImplementation(file)
file.Write(" return error::kNoError;\n")
file.Write("}\n")
file.Write("\n")
@@ -3278,7 +3169,7 @@ class Argument(object):
def GetValidGLArg(self, offset, index):
return str(offset + 1)
- def GetNumInvalidValues(self, func):
+ def GetNumInvalidValues(self):
"""returns the number of invalid values to be tested."""
return 0
@@ -3293,11 +3184,11 @@ class Argument(object):
def WriteValidationCode(self, file):
"""Writes the validation code for an argument."""
- pass
-
- def WriteClientSideValidationCode(self, file):
- """Writes the validation code for an argument."""
- pass
+ if self.type == 'GLsizei' or self.type == 'GLsizeiptr':
+ file.Write(" if (%s < 0) {\n" % self.name)
+ file.Write(" SetGLError(GL_INVALID_VALUE);\n")
+ file.Write(" return error::kNoError;\n")
+ file.Write(" }\n")
def WriteGetAddress(self, file):
"""Writes the code to get the address this argument refers to."""
@@ -3309,37 +3200,21 @@ class Argument(object):
class SizeArgument(Argument):
- """class for GLsizei and GLsizeiptr."""
def __init__(self, name, type):
Argument.__init__(self, name, type)
- def GetNumInvalidValues(self, func):
+ def GetNumInvalidValues(self):
"""overridden from Argument."""
- if func.is_immediate:
- return 0
return 1
def GetInvalidArg(self, offset, index):
- """overridden from Argument."""
+ """returns an invalid value and expected parse result by index."""
return ("-1", "kNoError", "GL_INVALID_VALUE")
- def WriteValidationCode(self, file):
- """overridden from Argument."""
- file.Write(" if (%s < 0) {\n" % self.name)
- file.Write(" SetGLError(GL_INVALID_VALUE);\n")
- file.Write(" return error::kNoError;\n")
- file.Write(" }\n")
-
- def WriteClientSideValidationCode(self, file):
- """overridden from Argument."""
- file.Write(" if (%s < 0) {\n" % self.name)
- file.Write(" SetGLError(GL_INVALID_VALUE);\n")
- file.Write(" return;\n")
- file.Write(" }\n")
class EnumBaseArgument(Argument):
- """Base class for EnumArgument, IntArgument and BoolArgument"""
+ """Base calss for EnumArgument, IntArgument and BoolArgument"""
def __init__(self, name, gl_type, type, gl_error):
Argument.__init__(self, name, gl_type)
@@ -3367,7 +3242,7 @@ class EnumBaseArgument(Argument):
def GetValidGLArg(self, offset, index):
return self.GetValidArg(offset, index)
- def GetNumInvalidValues(self, func):
+ def GetNumInvalidValues(self):
"""returns the number of invalid values to be tested."""
if 'invalid' in self.enum_info:
invalid = self.enum_info['invalid']
@@ -3381,8 +3256,8 @@ class EnumBaseArgument(Argument):
num_invalid = len(invalid)
if index >= num_invalid:
index = num_invalid - 1
- return (invalid[index], "kNoError", self.gl_error)
- return ("---ERROR1---", "kNoError", self.gl_error)
+ return (invalid[index], "kNoError", "GL_INVALID_ENUM")
+ return ("---ERROR1---", "kNoError", "GL_INVALID_ENUM")
class EnumArgument(EnumBaseArgument):
@@ -3463,7 +3338,7 @@ class PointerArgument(Argument):
"""Overridden from Argument."""
return "reinterpret_cast<%s>(shared_memory_address_)" % self.type
- def GetNumInvalidValues(self, func):
+ def GetNumInvalidValues(self):
"""Overridden from Argument."""
return 2
@@ -3565,7 +3440,6 @@ class Function(object):
self.init_args = init_args
self.args_for_cmds = args_for_cmds
self.type_handler.InitFunction(self)
- self.is_immediate = False
def IsType(self, type_name):
"""Returns true if function is a certain type."""
@@ -3577,10 +3451,6 @@ class Function(object):
return getattr(self.info, name)
return None
- def AddInfo(self, name, value):
- """Adds an info."""
- setattr(self.info, name, value)
-
def GetGLFunctionName(self):
"""Gets the function to call to execute GL for this command."""
if self.GetInfo('decoder_func'):
@@ -3605,10 +3475,6 @@ class Function(object):
"""Gets the command args for this function."""
return self.cmd_args
- def ClearCmdArgs(self):
- """Clears the command args for this function."""
- self.cmd_args = []
-
def GetInitArgs(self):
"""Gets the init args for this function."""
return self.init_args
@@ -3780,7 +3646,6 @@ class ImmediateFunction(Function):
cmd_args,
new_init_args,
0)
- self.is_immediate = True
def WriteServiceImplementation(self, file):
"""Overridden from Function"""