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

Unified Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 1528163002: Added 64 bit number support in the build gles2 command buffer script. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Modifyed glClientWaitSync and glWaitSync to use GLuint64 in command buffer 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gpu/command_buffer/client/gles2_cmd_helper_autogen.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 671cf72673058cc2e0dc30c89d037e742bb03d48..9089d623c5e4cd196714ea36f6bf24194613eb41 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -2363,7 +2363,7 @@ _FUNCTION_INFO = {
'type': 'Custom',
'data_transfer_methods': ['shm'],
'cmd_args': 'GLuint sync, GLbitfieldSyncFlushFlags flags, '
- 'GLuint timeout_0, GLuint timeout_1, GLenum* result',
+ 'GLuint64 timeout, GLenum* result',
'unsafe': True,
'result': ['GLenum'],
'trace_level': 2,
@@ -3821,7 +3821,7 @@ _FUNCTION_INFO = {
'WaitSync': {
'type': 'Custom',
'cmd_args': 'GLuint sync, GLbitfieldSyncFlushFlags flags, '
- 'GLuint timeout_0, GLuint timeout_1',
+ 'GLuint64 timeout',
Zhenyao Mo 2015/12/15 23:19:20 Now it's the same original signature, we don't nee
David Yen 2015/12/15 23:20:30 That's what I originally thought too, but actually
'impl_func': False,
'client_test': False,
'unsafe': True,
@@ -4592,34 +4592,42 @@ class TypeHandler(object):
func.WriteCmdSetHeader(f)
func.WriteCmdInit(f)
func.WriteCmdSet(f)
+ func.WriteArgAccessors(f)
f.write(" gpu::CommandHeader header;\n")
+ total_args = 0
args = func.GetCmdArgs()
for arg in args:
- f.write(" %s %s;\n" % (arg.cmd_type, arg.name))
+ for cmd_type, name in arg.GetArgDecls():
+ f.write(" %s %s;\n" % (cmd_type, name))
+ total_args += 1
consts = func.GetCmdConstants()
for const in consts:
+ const_decls = const.GetArgDecls()
+ assert(len(const_decls) == 1)
+ const_cmd_type, const_name = const_decls[0]
f.write(" static const %s %s = %s;\n" %
- (const.cmd_type, const.name, const.GetConstantValue()))
+ (const_cmd_type, const_name, const.GetConstantValue()))
f.write("};\n")
f.write("\n")
- size = len(args) * _SIZE_OF_UINT32 + _SIZE_OF_COMMAND_HEADER
+ size = total_args * _SIZE_OF_UINT32 + _SIZE_OF_COMMAND_HEADER
f.write("static_assert(sizeof(%s) == %d,\n" % (func.name, size))
f.write(" \"size of %s should be %d\");\n" %
- (func.name, size))
+ (func.name, size))
f.write("static_assert(offsetof(%s, header) == 0,\n" % func.name)
f.write(" \"offset of %s header should be 0\");\n" %
- func.name)
+ func.name)
offset = _SIZE_OF_COMMAND_HEADER
for arg in args:
- f.write("static_assert(offsetof(%s, %s) == %d,\n" %
- (func.name, arg.name, offset))
- f.write(" \"offset of %s %s should be %d\");\n" %
- (func.name, arg.name, offset))
- offset += _SIZE_OF_UINT32
+ for _, name in arg.GetArgDecls():
+ f.write("static_assert(offsetof(%s, %s) == %d,\n" %
+ (func.name, name, offset))
+ f.write(" \"offset of %s %s should be %d\");\n" %
+ (func.name, name, offset))
+ offset += _SIZE_OF_UINT32
if not result == None and len(result) > 1:
offset = 0;
for line in result:
@@ -4719,7 +4727,7 @@ static_assert(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
func.type_handler.WriteCmdSizeTest(func, f)
for value, arg in enumerate(args):
f.write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" %
- (arg.type, value + 11, arg.name))
+ (arg.type, value + 11, arg.GetArgAccessor()))
f.write(" CheckBytesWrittenMatchesExpectedSize(\n")
f.write(" next_cmd, sizeof(cmd));\n")
f.write("}\n")
@@ -5497,7 +5505,7 @@ class CustomHandler(TypeHandler):
f.write(" SetHeader(total_size);\n")
args = func.GetCmdArgs()
for arg in args:
- f.write(" %s = _%s;\n" % (arg.name, arg.name))
+ arg.WriteSetCode(f, 4, '_%s' % arg.name)
f.write(" }\n")
f.write("\n")
@@ -8521,13 +8529,14 @@ class Argument(object):
"""A class that represents a function argument."""
cmd_type_map_ = {
- 'GLenum': 'uint32_t',
- 'GLint': 'int32_t',
- 'GLintptr': 'int32_t',
- 'GLsizei': 'int32_t',
- 'GLsizeiptr': 'int32_t',
- 'GLfloat': 'float',
- 'GLclampf': 'float',
+ 'GLenum': ['uint32_t'],
+ 'GLint': ['int32_t'],
+ 'GLintptr': ['int32_t'],
+ 'GLsizei': ['int32_t'],
+ 'GLsizeiptr': ['int32_t'],
+ 'GLfloat': ['float'],
+ 'GLclampf': ['float'],
+ 'GLuint64': ['uint32_t', 'uint32_t'],
}
need_validation_ = ['GLsizei*', 'GLboolean*', 'GLenum*', 'GLint*']
@@ -8541,7 +8550,7 @@ class Argument(object):
if type in self.cmd_type_map_:
self.cmd_type = self.cmd_type_map_[type]
else:
- self.cmd_type = 'uint32_t'
+ self.cmd_type = ['uint32_t']
def IsPointer(self):
"""Returns true if argument is a pointer."""
@@ -8574,6 +8583,14 @@ class Argument(object):
index = func.GetOriginalArgs().index(self)
return str(index + 1)
+ def GetArgDecls(self):
+ if len(self.cmd_type) == 1:
+ return [(self.cmd_type[0], self.name)]
+ else:
+ return [(cmd_type, self.name + '_%d' % i)
+ for i, cmd_type
+ in enumerate(self.cmd_type)]
+
def GetValidClientSideArg(self, func):
"""Gets a valid value for this argument."""
valid_arg = func.GetValidArg(self)
@@ -8631,6 +8648,10 @@ class Argument(object):
"""returns an invalid value and expected parse result by index."""
return ("---ERROR0---", "---ERROR2---", None)
+ def GetArgAccessor(self):
+ """Returns the name of the accessor for the argument within the struct."""
+ return self.name
+
def GetLogArg(self):
"""Get argument appropriate for LOG macro."""
if self.type == 'GLboolean':
@@ -8648,6 +8669,13 @@ class Argument(object):
f.write(" %s %s = static_cast<%s>(c.%s);\n" %
(my_type, self.name, my_type, self.name))
+ def WriteSetCode(self, f, indent, var):
+ f.write("%s%s = %s;\n" % (' ' * indent, self.name, var))
+
+ def WriteArgAccessor(self, f):
+ """Writes specialized accessor for argument."""
+ pass
+
def WriteValidationCode(self, f, func):
"""Writes the validation code for an argument."""
pass
@@ -8889,7 +8917,6 @@ class EnumArgument(EnumBaseArgument):
return ("GLES2Util::GetString%s(%s)" %
(self.type_name, self.name))
-
class IntArgument(EnumBaseArgument):
"""A class for a GLint argument that can only accept specific values.
@@ -9162,7 +9189,7 @@ class ResourceIdArgument(Argument):
my_type = "GLuint"
else:
my_type = self.type
- f.write(" %s %s = c.%s;\n" % (my_type, self.name, self.name))
+ f.write(" %s %s = c.%s;\n" % (my_type, self.name, self.GetArgAccessor()))
def GetValidArg(self, func):
return "client_%s_id_" % self.resource_type.lower()
@@ -9206,7 +9233,7 @@ class ResourceIdZeroArgument(Argument):
def WriteGetCode(self, f):
"""Overridden from Argument."""
- f.write(" %s %s = c.%s;\n" % (self.type, self.name, self.name))
+ f.write(" %s %s = c.%s;\n" % (self.type, self.name, self.GetArgAccessor()))
def GetValidArg(self, func):
return "client_%s_id_" % self.resource_type.lower()
@@ -9223,6 +9250,38 @@ class ResourceIdZeroArgument(Argument):
return ("kInvalidClientId", "kNoError", "GL_INVALID_VALUE")
+class Int64Argument(Argument):
+ """Represents a GLuint64 argument which splits up into 2 uint32 items."""
+
+ def __init__(self, name, type):
+ Argument.__init__(self, name, type)
+
+ def GetArgAccessor(self):
+ return "%s()" % self.name
+
+ def WriteArgAccessor(self, f):
+ """Writes specialized accessor for compound members."""
+ f.write(" %s %s() const {\n" % (self.type, self.name))
+ f.write(" return static_cast<%s>(\n" % self.type)
+ f.write(" GLES2Util::MapTwoUint32ToUint64(\n")
+ f.write(" %s_0,\n" % self.name)
+ f.write(" %s_1));\n" % self.name)
+ f.write(" }\n")
+ f.write("\n")
+
+ def WriteGetCode(self, f):
+ """Writes the code to get an argument from a command structure."""
+ f.write(" %s %s = c.%s();\n" % (self.type, self.name, self.name))
+
+ def WriteSetCode(self, f, indent, var):
+ indent_str = ' ' * indent
+ f.write("%sGLES2Util::MapUint64ToTwoUint32(static_cast<uint64_t>(%s),\n" %
+ (indent_str, var))
+ f.write("%s &%s_0,\n" %
+ (indent_str, self.name))
+ f.write("%s &%s_1);\n" %
+ (indent_str, self.name))
+
class Function(object):
"""A class that represents a function."""
@@ -9599,7 +9658,7 @@ class Function(object):
f.write(" SetHeader();\n")
args = self.GetCmdArgs()
for arg in args:
- f.write(" %s = _%s;\n" % (arg.name, arg.name))
+ arg.WriteSetCode(f, 4, '_%s' % arg.name)
f.write(" }\n")
f.write("\n")
@@ -9613,6 +9672,11 @@ class Function(object):
f.write(" }\n")
f.write("\n")
+ def WriteArgAccessors(self, f):
+ """Writes the cmd's accessor functions."""
+ for arg in self.GetCmdArgs():
+ arg.WriteArgAccessor(f)
+
def WriteStruct(self, f):
self.type_handler.WriteStruct(self, f)
@@ -9886,6 +9950,8 @@ def CreateArg(arg_string):
return SizeNotNegativeArgument(arg_name, t.replace('NotNegative', ''))
elif t.startswith('GLsize'):
return SizeArgument(arg_name, arg_type)
+ elif t == 'GLuint64' or t == 'GLint64':
+ return Int64Argument(arg_name, arg_type)
else:
return Argument(arg_name, arg_type)
« no previous file with comments | « no previous file | gpu/command_buffer/client/gles2_cmd_helper_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698