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

Unified Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 895853003: Update from https://crrev.com/314320 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 11 months 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 | « gpu/PRESUBMIT.py ('k') | gpu/command_buffer/client/gles2_c_lib_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 577861a1d0d108368157550d4fb93ee350ed8e86..b0884b676487356b834c89840ab9cd444088bd87 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -939,6 +939,16 @@ _NAMED_TYPE_INFO = {
'GL_PIXEL_PACK_BUFFER',
],
},
+ 'BufferMode': {
+ 'type': 'GLenum',
+ 'valid': [
+ 'GL_INTERLEAVED_ATTRIBS',
+ 'GL_SEPARATE_ATTRIBS',
+ ],
+ 'invalid': [
+ 'GL_PIXEL_PACK_BUFFER',
+ ],
+ },
'FrameBufferParameter': {
'type': 'GLenum',
'valid': [
@@ -1712,6 +1722,10 @@ _FUNCTION_INFO = {
'decoder_func': 'DoCopyTexSubImage2D',
'defer_reads': True,
},
+ 'CopyTexSubImage3D': {
+ 'defer_reads': True,
+ 'unsafe': True,
+ },
'CreateImageCHROMIUM': {
'type': 'Manual',
'cmd_args':
@@ -2448,6 +2462,7 @@ _FUNCTION_INFO = {
'ShaderSource': {
'type': 'PUTSTR',
'decoder_func': 'DoShaderSource',
+ 'expectation': False,
'data_transfer_methods': ['bucket'],
'cmd_args':
'GLuint shader, const char** str',
@@ -2545,6 +2560,14 @@ _FUNCTION_INFO = {
'const void* pixels, GLboolean internal',
'unsafe': True,
},
+ 'TransformFeedbackVaryings': {
+ 'type': 'PUTSTR',
+ 'data_transfer_methods': ['bucket'],
+ 'decoder_func': 'DoTransformFeedbackVaryings',
+ 'cmd_args':
+ 'GLuint program, const char** varyings, GLenum buffermode',
+ 'unsafe': True,
+ },
'Uniform1f': {'type': 'PUTXn', 'count': 1},
'Uniform1fv': {
'type': 'PUTn',
@@ -6422,7 +6445,7 @@ class PUTSTRHandler(ArrayArgTypeHandler):
total_size += 1;
total_size *= sizeof(GLint);
if (!total_size.IsValid()) {
- SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow");
+ SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
return;
}
size_t header_size = total_size.ValueOrDefault(0);
@@ -6433,7 +6456,7 @@ class PUTSTRHandler(ArrayArgTypeHandler):
if (%(data)s[ii]) {"""
if length_arg == None:
size_code_block += """
- len = base::static_cast<GLint>(strlen(%(data)s[ii]));"""
+ len = static_cast<GLint>(strlen(%(data)s[ii]));"""
else:
size_code_block += """
len = (%(length)s && %(length)s[ii] >= 0) ?
@@ -6443,15 +6466,16 @@ class PUTSTRHandler(ArrayArgTypeHandler):
total_size += len;
total_size += 1; // NULL at the end of each char array.
if (!total_size.IsValid()) {
- SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow");
+ SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
return;
}
header[ii + 1] = len;
}
"""
file.Write(size_code_block % {
- 'data': data_arg.name,
- 'length': length_arg.name if not length_arg == None else ''
+ 'data': data_arg.name,
+ 'length': length_arg.name if not length_arg == None else '',
+ 'func_name': func.name,
})
data_code_block = """ // Pack data into a bucket on the service.
helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0));
@@ -6465,14 +6489,14 @@ class PUTSTRHandler(ArrayArgTypeHandler):
checked_size += 1; // NULL in the end.
}
if (!checked_size.IsValid()) {
- SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow");
+ SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
return;
}
size_t size = checked_size.ValueOrDefault(0);
while (size) {
ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_);
if (!buffer.valid() || buffer.size() == 0) {
- SetGLError(GL_OUT_OF_MEMORY, "glShaderSource", "too large");
+ SetGLError(GL_OUT_OF_MEMORY, "gl%(func_name)s", "too large");
return;
}
size_t copy_size = buffer.size();
@@ -6496,19 +6520,20 @@ class PUTSTRHandler(ArrayArgTypeHandler):
DCHECK_EQ(total_size.ValueOrDefault(0), offset);
"""
file.Write(data_code_block % {
- 'data': data_arg.name,
- 'length': length_arg.name if not length_arg == None else ''
+ 'data': data_arg.name,
+ 'length': length_arg.name if not length_arg == None else '',
+ 'func_name': func.name,
})
- bucket_cmd_arg_string = ""
- for arg in func.GetCmdArgs()[0:-2]:
- if bucket_cmd_arg_string:
- bucket_cmd_arg_string += ", "
- bucket_cmd_arg_string += arg.name
- if bucket_cmd_arg_string:
- bucket_cmd_arg_string += ", "
- bucket_cmd_arg_string += 'kResultBucketId'
+ bucket_args = []
+ for arg in func.GetOriginalArgs():
+ if arg.name == 'count' or arg == self.__GetLengthArg(func):
+ continue
+ if arg == self.__GetDataArg(func):
+ bucket_args.append('kResultBucketId')
+ else:
+ bucket_args.append(arg.name)
file.Write(" helper_->%sBucket(%s);\n" %
- (func.name, bucket_cmd_arg_string))
+ (func.name, ", ".join(bucket_args)))
file.Write(" helper_->SetBucketSize(kResultBucketId, 0);");
file.Write(" CheckGLError();\n")
file.Write("}\n")
@@ -6539,7 +6564,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
cmd::SetToken set_token2;
cmd::SetBucketData set_bucket_data2;
cmd::SetToken set_token3;
- cmds::ShaderSourceBucket shader_source_bucket;
+ cmds::%(name)sBucket cmd_bucket;
cmd::SetBucketSize clear_bucket_size;
};
@@ -6559,7 +6584,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id,
mem2.offset);
expected.set_token3.Init(GetNextToken());
- expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId);
+ expected.cmd_bucket.Init(%(bucket_args)s);
expected.clear_bucket_size.Init(kBucketId, 0);
const char* kStrings[] = { kString1, kString2 };
gl_->%(name)s(%(gl_args)s);
@@ -6567,21 +6592,22 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
}
"""
gl_args = []
- cmd_args = []
+ bucket_args = []
for arg in func.GetOriginalArgs():
if arg == self.__GetDataArg(func):
gl_args.append('kStrings')
+ bucket_args.append('kBucketId')
elif arg == self.__GetLengthArg(func):
gl_args.append('NULL')
elif arg.name == 'count':
gl_args.append('2')
else:
gl_args.append(arg.GetValidClientSideArg(func))
- cmd_args.append(arg.GetValidClientSideArg(func))
+ bucket_args.append(arg.GetValidClientSideArg(func))
file.Write(code % {
'name': func.name,
'gl_args': ", ".join(gl_args),
- 'cmd_args': ", ".join(cmd_args),
+ 'bucket_args': ", ".join(bucket_args),
})
if self.__GetLengthArg(func) == None:
@@ -6618,7 +6644,7 @@ TEST_F(GLES2ImplementationTest, %(name)sWithLength) {
expected.set_bucket_data.Init(
kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset);
expected.set_token2.Init(GetNextToken());
- expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId);
+ expected.shader_source_bucket.Init(%(bucket_args)s);
expected.clear_bucket_size.Init(kBucketId, 0);
const char* kStrings[] = { kString };
const GLint kLength[] = { kStringSize };
@@ -6639,33 +6665,42 @@ TEST_F(GLES2ImplementationTest, %(name)sWithLength) {
file.Write(code % {
'name': func.name,
'gl_args': ", ".join(gl_args),
- 'cmd_args': ", ".join(cmd_args),
+ 'bucket_args': ", ".join(bucket_args),
})
def WriteBucketServiceUnitTest(self, func, file, *extras):
"""Overrriden from TypeHandler."""
cmd_args = []
cmd_args_with_invalid_id = []
+ gl_args = []
for index, arg in enumerate(func.GetOriginalArgs()):
- if (arg == self.__GetLengthArg(func) or
- arg == self.__GetDataArg(func) or arg.name == 'count'):
- continue
- if index == 0: # Resource ID arg
+ if arg == self.__GetLengthArg(func):
+ gl_args.append('_')
+ elif arg.name == 'count':
+ gl_args.append('1')
+ elif arg == self.__GetDataArg(func):
+ cmd_args.append('kBucketId')
+ cmd_args_with_invalid_id.append('kBucketId')
+ gl_args.append('_')
+ elif index == 0: # Resource ID arg
cmd_args.append(arg.GetValidArg(func))
cmd_args_with_invalid_id.append('kInvalidClientId')
+ gl_args.append(arg.GetValidGLArg(func))
else:
cmd_args.append(arg.GetValidArg(func))
cmd_args_with_invalid_id.append(arg.GetValidArg(func))
+ gl_args.append(arg.GetValidGLArg(func))
test = """
TEST_P(%(test_name)s, %(name)sValidArgs) {
+ EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
const uint32 kBucketId = 123;
const char kSource0[] = "hello";
const char* kSource[] = { kSource0 };
const char kValidStrEnd = 0;
SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
cmds::%(name)s cmd;
- cmd.Init(%(cmd_args)s, kBucketId);
+ cmd.Init(%(cmd_args)s);
decoder_->set_unsafe_es3_apis_enabled(true);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));"""
if func.IsUnsafe():
@@ -6678,6 +6713,7 @@ TEST_P(%(test_name)s, %(name)sValidArgs) {
"""
self.WriteValidUnitTest(func, file, test, {
'cmd_args': ", ".join(cmd_args),
+ 'gl_args': ", ".join(gl_args),
}, *extras)
test = """
@@ -6689,11 +6725,11 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs) {
decoder_->set_unsafe_es3_apis_enabled(true);
cmds::%(name)s cmd;
// Test no bucket.
- cmd.Init(%(cmd_args)s, kBucketId);
+ cmd.Init(%(cmd_args)s);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
// Test invalid client.
SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
- cmd.Init(%(cmd_args_with_invalid_id)s, kBucketId);
+ cmd.Init(%(cmd_args_with_invalid_id)s);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
@@ -6711,24 +6747,18 @@ TEST_P(%(test_name)s, %(name)sInvalidHeader) {
const char kValidStrEnd = 0;
const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
const GLsizei kTests[] = {
- kCount,
+ kCount + 1,
0,
std::numeric_limits<GLsizei>::max(),
-1,
- kCount,
};
decoder_->set_unsafe_es3_apis_enabled(true);
for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
cmds::%(name)s cmd;
- cmd.Init(%(cmd_args)s, kBucketId);
- if (kTests[ii] == kCount) {
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- } else {
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
- }
+ cmd.Init(%(cmd_args)s);
+ EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
}
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
"""
self.WriteValidUnitTest(func, file, test, {
@@ -6743,10 +6773,9 @@ TEST_P(%(test_name)s, %(name)sInvalidStringEnding) {
const char kInvalidStrEnd = '*';
SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd);
cmds::%(name)s cmd;
- cmd.Init(%(cmd_args)s, kBucketId);
+ cmd.Init(%(cmd_args)s);
decoder_->set_unsafe_es3_apis_enabled(true);
EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
"""
self.WriteValidUnitTest(func, file, test, {
@@ -7551,21 +7580,29 @@ class SizeArgument(Argument):
def WriteValidationCode(self, file, func):
"""overridden from Argument."""
- file.Write(" if (%s < 0) {\n" % self.name)
- file.Write(
- " LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" %
- (func.original_name, self.name))
- file.Write(" return error::kNoError;\n")
- file.Write(" }\n")
+ if func.IsUnsafe():
+ return
+ code = """ if (%(var_name)s < 0) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0");
+ return error::kNoError;
+ }
+"""
+ file.Write(code % {
+ "var_name": self.name,
+ "func_name": func.original_name,
+ })
def WriteClientSideValidationCode(self, file, func):
"""overridden from Argument."""
- file.Write(" if (%s < 0) {\n" % self.name)
- file.Write(
- " SetGLError(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" %
- (func.original_name, self.name))
- file.Write(" return;\n")
- file.Write(" }\n")
+ code = """ if (%(var_name)s < 0) {
+ SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0");
+ return;
+ }
+"""
+ file.Write(code % {
+ "var_name": self.name,
+ "func_name": func.original_name,
+ })
class SizeNotNegativeArgument(SizeArgument):
« no previous file with comments | « gpu/PRESUBMIT.py ('k') | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698