Update from https://crrev.com/312398
Involves adding many //testing/test.gni imports, fixing one
SkSurface::NewRenderTarget invocation inside sky, and fixing up
base::Process usage in the shell.
Review URL: https://codereview.chromium.org/862133002
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 922a496..38cbb49 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -598,6 +598,44 @@
'GL_RENDERBUFFER',
],
},
+ 'Bufferiv': {
+ 'type': 'GLenum',
+ 'valid': [
+ 'GL_COLOR',
+ 'GL_STENCIL',
+ ],
+ 'invalid': [
+ 'GL_RENDERBUFFER',
+ ],
+ },
+ 'Bufferuiv': {
+ 'type': 'GLenum',
+ 'valid': [
+ 'GL_COLOR',
+ ],
+ 'invalid': [
+ 'GL_RENDERBUFFER',
+ ],
+ },
+ 'Bufferfv': {
+ 'type': 'GLenum',
+ 'valid': [
+ 'GL_COLOR',
+ 'GL_DEPTH',
+ ],
+ 'invalid': [
+ 'GL_RENDERBUFFER',
+ ],
+ },
+ 'Bufferfi': {
+ 'type': 'GLenum',
+ 'valid': [
+ 'GL_DEPTH_STENCIL',
+ ],
+ 'invalid': [
+ 'GL_RENDERBUFFER',
+ ],
+ },
'BufferUsage': {
'type': 'GLenum',
'valid': [
@@ -1377,6 +1415,8 @@
# for this command.
# needs_size: If True a data_size field is added to the command.
# count: The number of units per element. For PUTn or PUT types.
+# use_count_func: If True the actual data count needs to be computed; the count
+# argument specifies the maximum count.
# unit_test: If False no service side unit test will be generated.
# client_test: If False no client side unit test will be generated.
# expectation: If False the unit test will have no expected calls.
@@ -1504,6 +1544,26 @@
'defer_draws': True,
'trace_level': 1,
},
+ 'ClearBufferiv': {
+ 'type': 'PUT',
+ 'use_count_func': True,
+ 'count': 4,
+ 'unsafe': True,
+ },
+ 'ClearBufferuiv': {
+ 'type': 'PUT',
+ 'count': 4,
+ 'unsafe': True,
+ },
+ 'ClearBufferfv': {
+ 'type': 'PUT',
+ 'use_count_func': True,
+ 'count': 4,
+ 'unsafe': True,
+ },
+ 'ClearBufferfi': {
+ 'unsafe': True,
+ },
'ClearColor': {
'type': 'StateSet',
'state': 'ClearColor',
@@ -5624,6 +5684,10 @@
file.Write(" return error::kOutOfBounds;\n")
file.Write(" }\n")
+ def __NeedsToCalcDataCount(self, func):
+ use_count_func = func.GetInfo('use_count_func')
+ return use_count_func != None and use_count_func != False
+
def WriteGLES2Implementation(self, func, file):
"""Overrriden from TypeHandler."""
impl_func = func.GetInfo('impl_func')
@@ -5635,11 +5699,16 @@
file.Write(" GPU_CLIENT_SINGLE_THREAD_CHECK();\n")
func.WriteDestinationInitalizationValidation(file)
self.WriteClientGLCallLog(func, file)
- last_arg_name = func.GetLastOriginalArg().name
- values_str = ' << ", " << '.join(
- ["%s[%d]" % (last_arg_name, ndx) \
- for ndx in range(0, self.GetArrayCount(func))])
- file.Write(' GPU_CLIENT_LOG("values: " << %s);\n' % values_str)
+
+ if self.__NeedsToCalcDataCount(func):
+ file.Write(" size_t count = GLES2Util::Calc%sDataCount(%s);\n" %
+ (func.name, func.GetOriginalArgs()[0].name))
+ file.Write(" DCHECK_LE(count, %du);\n" % self.GetArrayCount(func))
+ else:
+ file.Write(" size_t count = %d;" % self.GetArrayCount(func))
+ file.Write(" for (size_t ii = 0; ii < count; ++ii)\n")
+ file.Write(' GPU_CLIENT_LOG("value[" << ii << "]: " << %s[ii]);\n' %
+ func.GetLastOriginalArg().name)
for arg in func.GetOriginalArgs():
arg.WriteClientSideValidationCode(file, func)
file.Write(" helper_->%sImmediate(%s);\n" %
@@ -5689,14 +5758,24 @@
"""Overrriden from TypeHandler."""
file.Write(" static uint32_t ComputeDataSize() {\n")
file.Write(" return static_cast<uint32_t>(\n")
- file.Write(" sizeof(%s) * %d); // NOLINT\n" %
+ file.Write(" sizeof(%s) * %d);\n" %
(self.GetArrayType(func), self.GetArrayCount(func)))
file.Write(" }\n")
file.Write("\n")
+ if self.__NeedsToCalcDataCount(func):
+ file.Write(" static uint32_t ComputeEffectiveDataSize(%s %s) {\n" %
+ (func.GetOriginalArgs()[0].type,
+ func.GetOriginalArgs()[0].name))
+ file.Write(" return static_cast<uint32_t>(\n")
+ file.Write(" sizeof(%s) * GLES2Util::Calc%sDataCount(%s));\n" %
+ (self.GetArrayType(func), func.original_name,
+ func.GetOriginalArgs()[0].name))
+ file.Write(" }\n")
+ file.Write("\n")
file.Write(" static uint32_t ComputeSize() {\n")
file.Write(" return static_cast<uint32_t>(\n")
file.Write(
- " sizeof(ValueType) + ComputeDataSize()); // NOLINT\n")
+ " sizeof(ValueType) + ComputeDataSize());\n")
file.Write(" }\n")
file.Write("\n")
@@ -5719,7 +5798,17 @@
for arg in args:
file.Write(" %s = _%s;\n" % (arg.name, arg.name))
file.Write(" memcpy(ImmediateDataAddress(this),\n")
- file.Write(" _%s, ComputeDataSize());\n" % last_arg.name)
+ if self.__NeedsToCalcDataCount(func):
+ file.Write(" _%s, ComputeEffectiveDataSize(%s));" %
+ (last_arg.name, func.GetOriginalArgs()[0].name))
+ file.Write("""
+ DCHECK_GE(ComputeDataSize(), ComputeEffectiveDataSize(%(arg)s));
+ char* pointer = reinterpret_cast<char*>(ImmediateDataAddress(this)) +
+ ComputeEffectiveDataSize(%(arg)s);
+ memset(pointer, 0, ComputeDataSize() - ComputeEffectiveDataSize(%(arg)s));
+""" % { 'arg': func.GetOriginalArgs()[0].name, })
+ else:
+ file.Write(" _%s, ComputeDataSize());\n" % last_arg.name)
file.Write(" }\n")
file.Write("\n")
@@ -9307,7 +9396,8 @@
gen.WriteCommonUtilsImpl(
"gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h")
gen.WriteGLES2Header("gpu/GLES2/gl2chromium_autogen.h")
- mojo_gles2_prefix = "mojo/public/c/gles2/gles2_call_visitor"
+ mojo_gles2_prefix = ("third_party/mojo/src/mojo/public/c/gles2/"
+ "gles2_call_visitor")
gen.WriteMojoGLCallVisitor(mojo_gles2_prefix + "_autogen.h")
gen.WriteMojoGLCallVisitorForExtension(
mojo_gles2_prefix + "_chromium_texture_mailbox_autogen.h",
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h
index 9264881..597ab2e 100644
--- a/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -88,6 +88,25 @@
void GLES2Clear(GLbitfield mask) {
gles2::GetGLContext()->Clear(mask);
}
+void GLES2ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) {
+ gles2::GetGLContext()->ClearBufferfi(buffer, drawbuffers, depth, stencil);
+}
+void GLES2ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) {
+ gles2::GetGLContext()->ClearBufferfv(buffer, drawbuffers, value);
+}
+void GLES2ClearBufferiv(GLenum buffer, GLint drawbuffers, const GLint* value) {
+ gles2::GetGLContext()->ClearBufferiv(buffer, drawbuffers, value);
+}
+void GLES2ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) {
+ gles2::GetGLContext()->ClearBufferuiv(buffer, drawbuffers, value);
+}
void GLES2ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
@@ -1277,6 +1296,22 @@
reinterpret_cast<GLES2FunctionPointer>(glClear),
},
{
+ "glClearBufferfi",
+ reinterpret_cast<GLES2FunctionPointer>(glClearBufferfi),
+ },
+ {
+ "glClearBufferfv",
+ reinterpret_cast<GLES2FunctionPointer>(glClearBufferfv),
+ },
+ {
+ "glClearBufferiv",
+ reinterpret_cast<GLES2FunctionPointer>(glClearBufferiv),
+ },
+ {
+ "glClearBufferuiv",
+ reinterpret_cast<GLES2FunctionPointer>(glClearBufferuiv),
+ },
+ {
"glClearColor",
reinterpret_cast<GLES2FunctionPointer>(glClearColor),
},
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index 7f79e34..dc31b96 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -176,6 +176,49 @@
}
}
+void ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) {
+ gles2::cmds::ClearBufferfi* c = GetCmdSpace<gles2::cmds::ClearBufferfi>();
+ if (c) {
+ c->Init(buffer, drawbuffers, depth, stencil);
+ }
+}
+
+void ClearBufferfvImmediate(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) {
+ const uint32_t size = gles2::cmds::ClearBufferfvImmediate::ComputeSize();
+ gles2::cmds::ClearBufferfvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::ClearBufferfvImmediate>(size);
+ if (c) {
+ c->Init(buffer, drawbuffers, value);
+ }
+}
+
+void ClearBufferivImmediate(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) {
+ const uint32_t size = gles2::cmds::ClearBufferivImmediate::ComputeSize();
+ gles2::cmds::ClearBufferivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::ClearBufferivImmediate>(size);
+ if (c) {
+ c->Init(buffer, drawbuffers, value);
+ }
+}
+
+void ClearBufferuivImmediate(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) {
+ const uint32_t size = gles2::cmds::ClearBufferuivImmediate::ComputeSize();
+ gles2::cmds::ClearBufferuivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::ClearBufferuivImmediate>(size);
+ if (c) {
+ c->Init(buffer, drawbuffers, value);
+ }
+}
+
void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
gles2::cmds::ClearColor* c = GetCmdSpace<gles2::cmds::ClearColor>();
if (c) {
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index c2be814..16753ae 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -71,6 +71,23 @@
void Clear(GLbitfield mask) override;
+void ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) override;
+
+void ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) override;
+
+void ClearBufferiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) override;
+
+void ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) override;
+
void ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
index 95ca175..71ad0db 100644
--- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -222,6 +222,65 @@
CheckGLError();
}
+void GLES2Implementation::ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearBufferfi("
+ << GLES2Util::GetStringBufferfv(buffer) << ", "
+ << drawbuffers << ", " << depth << ", " << stencil << ")");
+ helper_->ClearBufferfi(buffer, drawbuffers, depth, stencil);
+ CheckGLError();
+}
+
+void GLES2Implementation::ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearBufferfv("
+ << GLES2Util::GetStringBufferfv(buffer) << ", "
+ << drawbuffers << ", " << static_cast<const void*>(value)
+ << ")");
+ size_t count = GLES2Util::CalcClearBufferfvDataCount(buffer);
+ DCHECK_LE(count, 4u);
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << value[ii]);
+ helper_->ClearBufferfvImmediate(buffer, drawbuffers, value);
+ CheckGLError();
+}
+
+void GLES2Implementation::ClearBufferiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearBufferiv("
+ << GLES2Util::GetStringBufferiv(buffer) << ", "
+ << drawbuffers << ", " << static_cast<const void*>(value)
+ << ")");
+ size_t count = GLES2Util::CalcClearBufferivDataCount(buffer);
+ DCHECK_LE(count, 4u);
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << value[ii]);
+ helper_->ClearBufferivImmediate(buffer, drawbuffers, value);
+ CheckGLError();
+}
+
+void GLES2Implementation::ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearBufferuiv("
+ << GLES2Util::GetStringBufferuiv(buffer) << ", "
+ << drawbuffers << ", " << static_cast<const void*>(value)
+ << ")");
+ size_t count = 4;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << value[ii]);
+ helper_->ClearBufferuivImmediate(buffer, drawbuffers, value);
+ CheckGLError();
+}
+
void GLES2Implementation::ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
@@ -1536,7 +1595,9 @@
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSamplerParameterfv(" << sampler
<< ", " << GLES2Util::GetStringSamplerParameter(pname)
<< ", " << static_cast<const void*>(params) << ")");
- GPU_CLIENT_LOG("values: " << params[0]);
+ size_t count = 1;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << params[ii]);
helper_->SamplerParameterfvImmediate(sampler, pname, params);
CheckGLError();
}
@@ -1559,7 +1620,9 @@
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSamplerParameteriv(" << sampler
<< ", " << GLES2Util::GetStringSamplerParameter(pname)
<< ", " << static_cast<const void*>(params) << ")");
- GPU_CLIENT_LOG("values: " << params[0]);
+ size_t count = 1;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << params[ii]);
helper_->SamplerParameterivImmediate(sampler, pname, params);
CheckGLError();
}
@@ -1665,7 +1728,9 @@
<< GLES2Util::GetStringTextureBindTarget(target) << ", "
<< GLES2Util::GetStringTextureParameter(pname) << ", "
<< static_cast<const void*>(params) << ")");
- GPU_CLIENT_LOG("values: " << params[0]);
+ size_t count = 1;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << params[ii]);
helper_->TexParameterfvImmediate(target, pname, params);
CheckGLError();
}
@@ -1690,7 +1755,9 @@
<< GLES2Util::GetStringTextureBindTarget(target) << ", "
<< GLES2Util::GetStringTextureParameter(pname) << ", "
<< static_cast<const void*>(params) << ")");
- GPU_CLIENT_LOG("values: " << params[0]);
+ size_t count = 1;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << params[ii]);
helper_->TexParameterivImmediate(target, pname, params);
CheckGLError();
}
@@ -2391,7 +2458,9 @@
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1fv(" << indx << ", "
<< static_cast<const void*>(values) << ")");
- GPU_CLIENT_LOG("values: " << values[0]);
+ size_t count = 1;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << values[ii]);
helper_->VertexAttrib1fvImmediate(indx, values);
CheckGLError();
}
@@ -2408,7 +2477,9 @@
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2fv(" << indx << ", "
<< static_cast<const void*>(values) << ")");
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1]);
+ size_t count = 2;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << values[ii]);
helper_->VertexAttrib2fvImmediate(indx, values);
CheckGLError();
}
@@ -2428,8 +2499,9 @@
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3fv(" << indx << ", "
<< static_cast<const void*>(values) << ")");
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", "
- << values[2]);
+ size_t count = 3;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << values[ii]);
helper_->VertexAttrib3fvImmediate(indx, values);
CheckGLError();
}
@@ -2450,8 +2522,9 @@
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4fv(" << indx << ", "
<< static_cast<const void*>(values) << ")");
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", "
- << values[2] << ", " << values[3]);
+ size_t count = 4;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << values[ii]);
helper_->VertexAttrib4fvImmediate(indx, values);
CheckGLError();
}
@@ -2472,8 +2545,9 @@
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttribI4iv(" << indx
<< ", " << static_cast<const void*>(values) << ")");
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", "
- << values[2] << ", " << values[3]);
+ size_t count = 4;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << values[ii]);
helper_->VertexAttribI4ivImmediate(indx, values);
CheckGLError();
}
@@ -2495,8 +2569,9 @@
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttribI4uiv(" << indx
<< ", " << static_cast<const void*>(values) << ")");
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", "
- << values[2] << ", " << values[3]);
+ size_t count = 4;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << values[ii]);
helper_->VertexAttribI4uivImmediate(indx, values);
CheckGLError();
}
@@ -3089,12 +3164,9 @@
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMatrixLoadfCHROMIUM("
<< GLES2Util::GetStringMatrixMode(matrixMode) << ", "
<< static_cast<const void*>(m) << ")");
- GPU_CLIENT_LOG("values: " << m[0] << ", " << m[1] << ", " << m[2] << ", "
- << m[3] << ", " << m[4] << ", " << m[5] << ", "
- << m[6] << ", " << m[7] << ", " << m[8] << ", "
- << m[9] << ", " << m[10] << ", " << m[11] << ", "
- << m[12] << ", " << m[13] << ", " << m[14] << ", "
- << m[15]);
+ size_t count = 16;
+ for (size_t ii = 0; ii < count; ++ii)
+ GPU_CLIENT_LOG("value[" << ii << "]: " << m[ii]);
helper_->MatrixLoadfCHROMIUMImmediate(matrixMode, m);
CheckGLError();
}
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index 0d49e42..29e86df 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -2647,6 +2647,9 @@
&size, &unpadded_row_size, &padded_row_size));
// Makes sure we can just send over the data in one command.
const GLsizei kHeight = MaxTransferBufferSize() / padded_row_size / kDepth;
+ ASSERT_TRUE(GLES2Util::ComputeImageDataSizes(
+ kWidth, kHeight, kDepth, kFormat, kType, kPixelStoreUnpackAlignment,
+ &size, NULL, NULL));
scoped_ptr<uint8[]> pixels(new uint8[size]);
for (uint32 ii = 0; ii < size; ++ii) {
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
index c398d61..a327aee 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
@@ -196,6 +196,65 @@
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest, ClearBufferfi) {
+ struct Cmds {
+ cmds::ClearBufferfi cmd;
+ };
+ Cmds expected;
+ expected.cmd.Init(GL_COLOR, 2, 3, 4);
+
+ gl_->ClearBufferfi(GL_COLOR, 2, 3, 4);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationTest, ClearBufferfv) {
+ GLfloat data[4] = {0};
+ struct Cmds {
+ cmds::ClearBufferfvImmediate cmd;
+ GLfloat data[4];
+ };
+
+ for (int jj = 0; jj < 4; ++jj) {
+ data[jj] = static_cast<GLfloat>(jj);
+ }
+ Cmds expected;
+ expected.cmd.Init(GL_COLOR, 2, &data[0]);
+ gl_->ClearBufferfv(GL_COLOR, 2, &data[0]);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationTest, ClearBufferiv) {
+ GLint data[4] = {0};
+ struct Cmds {
+ cmds::ClearBufferivImmediate cmd;
+ GLint data[4];
+ };
+
+ for (int jj = 0; jj < 4; ++jj) {
+ data[jj] = static_cast<GLint>(jj);
+ }
+ Cmds expected;
+ expected.cmd.Init(GL_COLOR, 2, &data[0]);
+ gl_->ClearBufferiv(GL_COLOR, 2, &data[0]);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationTest, ClearBufferuiv) {
+ GLuint data[4] = {0};
+ struct Cmds {
+ cmds::ClearBufferuivImmediate cmd;
+ GLuint data[4];
+ };
+
+ for (int jj = 0; jj < 4; ++jj) {
+ data[jj] = static_cast<GLuint>(jj);
+ }
+ Cmds expected;
+ expected.cmd.Init(GL_COLOR, 2, &data[0]);
+ gl_->ClearBufferuiv(GL_COLOR, 2, &data[0]);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
TEST_F(GLES2ImplementationTest, ClearColor) {
struct Cmds {
cmds::ClearColor cmd;
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h
index 56f4e10..42262ce 100644
--- a/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -51,6 +51,19 @@
const void* data) = 0;
virtual GLenum CheckFramebufferStatus(GLenum target) = 0;
virtual void Clear(GLbitfield mask) = 0;
+virtual void ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) = 0;
+virtual void ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) = 0;
+virtual void ClearBufferiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) = 0;
+virtual void ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) = 0;
virtual void ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index d2902c5..974bf39 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -50,6 +50,19 @@
const void* data) override;
GLenum CheckFramebufferStatus(GLenum target) override;
void Clear(GLbitfield mask) override;
+void ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) override;
+void ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) override;
+void ClearBufferiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) override;
+void ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) override;
void ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
index b53085f..ce953d7 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -79,6 +79,23 @@
}
void GLES2InterfaceStub::Clear(GLbitfield /* mask */) {
}
+void GLES2InterfaceStub::ClearBufferfi(GLenum /* buffer */,
+ GLint /* drawbuffers */,
+ GLfloat /* depth */,
+ GLint /* stencil */) {
+}
+void GLES2InterfaceStub::ClearBufferfv(GLenum /* buffer */,
+ GLint /* drawbuffers */,
+ const GLfloat* /* value */) {
+}
+void GLES2InterfaceStub::ClearBufferiv(GLenum /* buffer */,
+ GLint /* drawbuffers */,
+ const GLint* /* value */) {
+}
+void GLES2InterfaceStub::ClearBufferuiv(GLenum /* buffer */,
+ GLint /* drawbuffers */,
+ const GLuint* /* value */) {
+}
void GLES2InterfaceStub::ClearColor(GLclampf /* red */,
GLclampf /* green */,
GLclampf /* blue */,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index 8d4d69c..1f8008b 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -50,6 +50,19 @@
const void* data) override;
GLenum CheckFramebufferStatus(GLenum target) override;
void Clear(GLbitfield mask) override;
+void ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) override;
+void ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) override;
+void ClearBufferiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) override;
+void ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) override;
void ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
index 8e05baa..ed5c148 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -136,6 +136,35 @@
gl_->Clear(mask);
}
+void GLES2TraceImplementation::ClearBufferfi(GLenum buffer,
+ GLint drawbuffers,
+ GLfloat depth,
+ GLint stencil) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ClearBufferfi");
+ gl_->ClearBufferfi(buffer, drawbuffers, depth, stencil);
+}
+
+void GLES2TraceImplementation::ClearBufferfv(GLenum buffer,
+ GLint drawbuffers,
+ const GLfloat* value) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ClearBufferfv");
+ gl_->ClearBufferfv(buffer, drawbuffers, value);
+}
+
+void GLES2TraceImplementation::ClearBufferiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLint* value) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ClearBufferiv");
+ gl_->ClearBufferiv(buffer, drawbuffers, value);
+}
+
+void GLES2TraceImplementation::ClearBufferuiv(GLenum buffer,
+ GLint drawbuffers,
+ const GLuint* value) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ClearBufferuiv");
+ gl_->ClearBufferuiv(buffer, drawbuffers, value);
+}
+
void GLES2TraceImplementation::ClearColor(GLclampf red,
GLclampf green,
GLclampf blue,
diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt
index f82248c..71e99e1 100644
--- a/gpu/command_buffer/cmd_buffer_functions.txt
+++ b/gpu/command_buffer/cmd_buffer_functions.txt
@@ -24,6 +24,10 @@
GL_APICALL void GL_APIENTRY glBufferSubData (GLenumBufferTarget target, GLintptrNotNegative offset, GLsizeiptr size, const void* data);
GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenumFrameBufferTarget target);
GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearBufferfi (GLenumBufferfv buffer, GLint drawbuffers, GLfloat depth, GLint stencil);
+GL_APICALL void GL_APIENTRY glClearBufferfv (GLenumBufferfv buffer, GLint drawbuffers, const GLfloat* value);
+GL_APICALL void GL_APIENTRY glClearBufferiv (GLenumBufferiv buffer, GLint drawbuffers, const GLint* value);
+GL_APICALL void GL_APIENTRY glClearBufferuiv (GLenumBufferuiv buffer, GLint drawbuffers, const GLuint* value);
GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth);
GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
diff --git a/gpu/command_buffer/common/gles2_cmd_format.h b/gpu/command_buffer/common/gles2_cmd_format.h
index 765eeac..b23cae3 100644
--- a/gpu/command_buffer/common/gles2_cmd_format.h
+++ b/gpu/command_buffer/common/gles2_cmd_format.h
@@ -19,6 +19,7 @@
#include "gpu/command_buffer/common/bitfield_helpers.h"
#include "gpu/command_buffer/common/cmd_buffer_common.h"
#include "gpu/command_buffer/common/gles2_cmd_ids.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
// GL types are forward declared to avoid including the GL headers. The problem
// is determining which GL headers to include from code that is common to the
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index eb6bde3..eb35d4a 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -845,6 +845,216 @@
"offset of Clear header should be 0");
static_assert(offsetof(Clear, mask) == 4, "offset of Clear mask should be 4");
+struct ClearBufferfi {
+ typedef ClearBufferfi ValueType;
+ static const CommandId kCmdId = kClearBufferfi;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
+ }
+
+ void SetHeader() { header.SetCmd<ValueType>(); }
+
+ void Init(GLenum _buffer,
+ GLint _drawbuffers,
+ GLfloat _depth,
+ GLint _stencil) {
+ SetHeader();
+ buffer = _buffer;
+ drawbuffers = _drawbuffers;
+ depth = _depth;
+ stencil = _stencil;
+ }
+
+ void* Set(void* cmd,
+ GLenum _buffer,
+ GLint _drawbuffers,
+ GLfloat _depth,
+ GLint _stencil) {
+ static_cast<ValueType*>(cmd)->Init(_buffer, _drawbuffers, _depth, _stencil);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t buffer;
+ int32_t drawbuffers;
+ float depth;
+ int32_t stencil;
+};
+
+static_assert(sizeof(ClearBufferfi) == 20,
+ "size of ClearBufferfi should be 20");
+static_assert(offsetof(ClearBufferfi, header) == 0,
+ "offset of ClearBufferfi header should be 0");
+static_assert(offsetof(ClearBufferfi, buffer) == 4,
+ "offset of ClearBufferfi buffer should be 4");
+static_assert(offsetof(ClearBufferfi, drawbuffers) == 8,
+ "offset of ClearBufferfi drawbuffers should be 8");
+static_assert(offsetof(ClearBufferfi, depth) == 12,
+ "offset of ClearBufferfi depth should be 12");
+static_assert(offsetof(ClearBufferfi, stencil) == 16,
+ "offset of ClearBufferfi stencil should be 16");
+
+struct ClearBufferfvImmediate {
+ typedef ClearBufferfvImmediate ValueType;
+ static const CommandId kCmdId = kClearBufferfvImmediate;
+ static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 4);
+ }
+
+ static uint32_t ComputeEffectiveDataSize(GLenum buffer) {
+ return static_cast<uint32_t>(sizeof(GLfloat) *
+ GLES2Util::CalcClearBufferfvDataCount(buffer));
+ }
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
+ }
+
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
+
+ void Init(GLenum _buffer, GLint _drawbuffers, const GLfloat* _value) {
+ SetHeader();
+ buffer = _buffer;
+ drawbuffers = _drawbuffers;
+ memcpy(ImmediateDataAddress(this), _value,
+ ComputeEffectiveDataSize(buffer));
+ DCHECK_GE(ComputeDataSize(), ComputeEffectiveDataSize(buffer));
+ char* pointer = reinterpret_cast<char*>(ImmediateDataAddress(this)) +
+ ComputeEffectiveDataSize(buffer);
+ memset(pointer, 0, ComputeDataSize() - ComputeEffectiveDataSize(buffer));
+ }
+
+ void* Set(void* cmd,
+ GLenum _buffer,
+ GLint _drawbuffers,
+ const GLfloat* _value) {
+ static_cast<ValueType*>(cmd)->Init(_buffer, _drawbuffers, _value);
+ const uint32_t size = ComputeSize();
+ return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t buffer;
+ int32_t drawbuffers;
+};
+
+static_assert(sizeof(ClearBufferfvImmediate) == 12,
+ "size of ClearBufferfvImmediate should be 12");
+static_assert(offsetof(ClearBufferfvImmediate, header) == 0,
+ "offset of ClearBufferfvImmediate header should be 0");
+static_assert(offsetof(ClearBufferfvImmediate, buffer) == 4,
+ "offset of ClearBufferfvImmediate buffer should be 4");
+static_assert(offsetof(ClearBufferfvImmediate, drawbuffers) == 8,
+ "offset of ClearBufferfvImmediate drawbuffers should be 8");
+
+struct ClearBufferivImmediate {
+ typedef ClearBufferivImmediate ValueType;
+ static const CommandId kCmdId = kClearBufferivImmediate;
+ static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLint) * 4);
+ }
+
+ static uint32_t ComputeEffectiveDataSize(GLenum buffer) {
+ return static_cast<uint32_t>(sizeof(GLint) *
+ GLES2Util::CalcClearBufferivDataCount(buffer));
+ }
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
+ }
+
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
+
+ void Init(GLenum _buffer, GLint _drawbuffers, const GLint* _value) {
+ SetHeader();
+ buffer = _buffer;
+ drawbuffers = _drawbuffers;
+ memcpy(ImmediateDataAddress(this), _value,
+ ComputeEffectiveDataSize(buffer));
+ DCHECK_GE(ComputeDataSize(), ComputeEffectiveDataSize(buffer));
+ char* pointer = reinterpret_cast<char*>(ImmediateDataAddress(this)) +
+ ComputeEffectiveDataSize(buffer);
+ memset(pointer, 0, ComputeDataSize() - ComputeEffectiveDataSize(buffer));
+ }
+
+ void* Set(void* cmd,
+ GLenum _buffer,
+ GLint _drawbuffers,
+ const GLint* _value) {
+ static_cast<ValueType*>(cmd)->Init(_buffer, _drawbuffers, _value);
+ const uint32_t size = ComputeSize();
+ return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t buffer;
+ int32_t drawbuffers;
+};
+
+static_assert(sizeof(ClearBufferivImmediate) == 12,
+ "size of ClearBufferivImmediate should be 12");
+static_assert(offsetof(ClearBufferivImmediate, header) == 0,
+ "offset of ClearBufferivImmediate header should be 0");
+static_assert(offsetof(ClearBufferivImmediate, buffer) == 4,
+ "offset of ClearBufferivImmediate buffer should be 4");
+static_assert(offsetof(ClearBufferivImmediate, drawbuffers) == 8,
+ "offset of ClearBufferivImmediate drawbuffers should be 8");
+
+struct ClearBufferuivImmediate {
+ typedef ClearBufferuivImmediate ValueType;
+ static const CommandId kCmdId = kClearBufferuivImmediate;
+ static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLuint) * 4);
+ }
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
+ }
+
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
+
+ void Init(GLenum _buffer, GLint _drawbuffers, const GLuint* _value) {
+ SetHeader();
+ buffer = _buffer;
+ drawbuffers = _drawbuffers;
+ memcpy(ImmediateDataAddress(this), _value, ComputeDataSize());
+ }
+
+ void* Set(void* cmd,
+ GLenum _buffer,
+ GLint _drawbuffers,
+ const GLuint* _value) {
+ static_cast<ValueType*>(cmd)->Init(_buffer, _drawbuffers, _value);
+ const uint32_t size = ComputeSize();
+ return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t buffer;
+ int32_t drawbuffers;
+};
+
+static_assert(sizeof(ClearBufferuivImmediate) == 12,
+ "size of ClearBufferuivImmediate should be 12");
+static_assert(offsetof(ClearBufferuivImmediate, header) == 0,
+ "offset of ClearBufferuivImmediate header should be 0");
+static_assert(offsetof(ClearBufferuivImmediate, buffer) == 4,
+ "offset of ClearBufferuivImmediate buffer should be 4");
+static_assert(offsetof(ClearBufferuivImmediate, drawbuffers) == 8,
+ "offset of ClearBufferuivImmediate drawbuffers should be 8");
+
struct ClearColor {
typedef ClearColor ValueType;
static const CommandId kCmdId = kClearColor;
@@ -5509,12 +5719,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 1); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 1);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -5594,12 +5803,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLint) * 1); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLint) * 1);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -6246,12 +6454,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 1); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 1);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -6331,12 +6538,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLint) * 1); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLint) * 1);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -8231,12 +8437,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 1); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 1);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -8312,12 +8517,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 2); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 2);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -8397,12 +8601,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 3); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 3);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -8491,12 +8694,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 4); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 4);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -8580,12 +8782,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLint) * 4); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLint) * 4);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -8674,12 +8875,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLuint) * 4); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLuint) * 4);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -10370,12 +10570,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -10410,12 +10609,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -10460,12 +10658,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
@@ -11570,12 +11767,11 @@
static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
static uint32_t ComputeDataSize() {
- return static_cast<uint32_t>(sizeof(GLfloat) * 16); // NOLINT
+ return static_cast<uint32_t>(sizeof(GLfloat) * 16);
}
static uint32_t ComputeSize() {
- return static_cast<uint32_t>(sizeof(ValueType) +
- ComputeDataSize()); // NOLINT
+ return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
}
void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index 12b9842..319ce6e 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -275,6 +275,90 @@
CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
+TEST_F(GLES2FormatTest, ClearBufferfi) {
+ cmds::ClearBufferfi& cmd = *GetBufferAs<cmds::ClearBufferfi>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12),
+ static_cast<GLfloat>(13), static_cast<GLint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearBufferfi::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLenum>(11), cmd.buffer);
+ EXPECT_EQ(static_cast<GLint>(12), cmd.drawbuffers);
+ EXPECT_EQ(static_cast<GLfloat>(13), cmd.depth);
+ EXPECT_EQ(static_cast<GLint>(14), cmd.stencil);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
+TEST_F(GLES2FormatTest, ClearBufferfvImmediate) {
+ const int kSomeBaseValueToTestWith = 51;
+ static GLfloat data[] = {
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ };
+ cmds::ClearBufferfvImmediate& cmd =
+ *GetBufferAs<cmds::ClearBufferfvImmediate>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearBufferfvImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
+ cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLenum>(11), cmd.buffer);
+ EXPECT_EQ(static_cast<GLint>(12), cmd.drawbuffers);
+ CheckBytesWrittenMatchesExpectedSize(
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
+ // TODO(gman): Check that data was inserted;
+}
+
+TEST_F(GLES2FormatTest, ClearBufferivImmediate) {
+ const int kSomeBaseValueToTestWith = 51;
+ static GLint data[] = {
+ static_cast<GLint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 3),
+ };
+ cmds::ClearBufferivImmediate& cmd =
+ *GetBufferAs<cmds::ClearBufferivImmediate>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearBufferivImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
+ cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLenum>(11), cmd.buffer);
+ EXPECT_EQ(static_cast<GLint>(12), cmd.drawbuffers);
+ CheckBytesWrittenMatchesExpectedSize(
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
+ // TODO(gman): Check that data was inserted;
+}
+
+TEST_F(GLES2FormatTest, ClearBufferuivImmediate) {
+ const int kSomeBaseValueToTestWith = 51;
+ static GLuint data[] = {
+ static_cast<GLuint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLuint>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLuint>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLuint>(kSomeBaseValueToTestWith + 3),
+ };
+ cmds::ClearBufferuivImmediate& cmd =
+ *GetBufferAs<cmds::ClearBufferuivImmediate>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearBufferuivImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
+ cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLenum>(11), cmd.buffer);
+ EXPECT_EQ(static_cast<GLint>(12), cmd.drawbuffers);
+ CheckBytesWrittenMatchesExpectedSize(
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
+ // TODO(gman): Check that data was inserted;
+}
+
TEST_F(GLES2FormatTest, ClearColor) {
cmds::ClearColor& cmd = *GetBufferAs<cmds::ClearColor>();
void* next_cmd =
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
index c1dc521..b3ca924 100644
--- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -32,240 +32,244 @@
OP(BufferSubData) /* 273 */ \
OP(CheckFramebufferStatus) /* 274 */ \
OP(Clear) /* 275 */ \
- OP(ClearColor) /* 276 */ \
- OP(ClearDepthf) /* 277 */ \
- OP(ClearStencil) /* 278 */ \
- OP(ColorMask) /* 279 */ \
- OP(CompileShader) /* 280 */ \
- OP(CompressedTexImage2DBucket) /* 281 */ \
- OP(CompressedTexImage2D) /* 282 */ \
- OP(CompressedTexSubImage2DBucket) /* 283 */ \
- OP(CompressedTexSubImage2D) /* 284 */ \
- OP(CopyBufferSubData) /* 285 */ \
- OP(CopyTexImage2D) /* 286 */ \
- OP(CopyTexSubImage2D) /* 287 */ \
- OP(CreateProgram) /* 288 */ \
- OP(CreateShader) /* 289 */ \
- OP(CullFace) /* 290 */ \
- OP(DeleteBuffersImmediate) /* 291 */ \
- OP(DeleteFramebuffersImmediate) /* 292 */ \
- OP(DeleteProgram) /* 293 */ \
- OP(DeleteRenderbuffersImmediate) /* 294 */ \
- OP(DeleteSamplersImmediate) /* 295 */ \
- OP(DeleteShader) /* 296 */ \
- OP(DeleteTexturesImmediate) /* 297 */ \
- OP(DeleteTransformFeedbacksImmediate) /* 298 */ \
- OP(DepthFunc) /* 299 */ \
- OP(DepthMask) /* 300 */ \
- OP(DepthRangef) /* 301 */ \
- OP(DetachShader) /* 302 */ \
- OP(Disable) /* 303 */ \
- OP(DisableVertexAttribArray) /* 304 */ \
- OP(DrawArrays) /* 305 */ \
- OP(DrawElements) /* 306 */ \
- OP(Enable) /* 307 */ \
- OP(EnableVertexAttribArray) /* 308 */ \
- OP(Finish) /* 309 */ \
- OP(Flush) /* 310 */ \
- OP(FramebufferRenderbuffer) /* 311 */ \
- OP(FramebufferTexture2D) /* 312 */ \
- OP(FramebufferTextureLayer) /* 313 */ \
- OP(FrontFace) /* 314 */ \
- OP(GenBuffersImmediate) /* 315 */ \
- OP(GenerateMipmap) /* 316 */ \
- OP(GenFramebuffersImmediate) /* 317 */ \
- OP(GenRenderbuffersImmediate) /* 318 */ \
- OP(GenSamplersImmediate) /* 319 */ \
- OP(GenTexturesImmediate) /* 320 */ \
- OP(GenTransformFeedbacksImmediate) /* 321 */ \
- OP(GetActiveAttrib) /* 322 */ \
- OP(GetActiveUniform) /* 323 */ \
- OP(GetAttachedShaders) /* 324 */ \
- OP(GetAttribLocation) /* 325 */ \
- OP(GetBooleanv) /* 326 */ \
- OP(GetBufferParameteriv) /* 327 */ \
- OP(GetError) /* 328 */ \
- OP(GetFloatv) /* 329 */ \
- OP(GetFramebufferAttachmentParameteriv) /* 330 */ \
- OP(GetIntegerv) /* 331 */ \
- OP(GetInternalformativ) /* 332 */ \
- OP(GetProgramiv) /* 333 */ \
- OP(GetProgramInfoLog) /* 334 */ \
- OP(GetRenderbufferParameteriv) /* 335 */ \
- OP(GetSamplerParameterfv) /* 336 */ \
- OP(GetSamplerParameteriv) /* 337 */ \
- OP(GetShaderiv) /* 338 */ \
- OP(GetShaderInfoLog) /* 339 */ \
- OP(GetShaderPrecisionFormat) /* 340 */ \
- OP(GetShaderSource) /* 341 */ \
- OP(GetString) /* 342 */ \
- OP(GetTexParameterfv) /* 343 */ \
- OP(GetTexParameteriv) /* 344 */ \
- OP(GetUniformfv) /* 345 */ \
- OP(GetUniformiv) /* 346 */ \
- OP(GetUniformLocation) /* 347 */ \
- OP(GetVertexAttribfv) /* 348 */ \
- OP(GetVertexAttribiv) /* 349 */ \
- OP(GetVertexAttribPointerv) /* 350 */ \
- OP(Hint) /* 351 */ \
- OP(InvalidateFramebufferImmediate) /* 352 */ \
- OP(InvalidateSubFramebufferImmediate) /* 353 */ \
- OP(IsBuffer) /* 354 */ \
- OP(IsEnabled) /* 355 */ \
- OP(IsFramebuffer) /* 356 */ \
- OP(IsProgram) /* 357 */ \
- OP(IsRenderbuffer) /* 358 */ \
- OP(IsSampler) /* 359 */ \
- OP(IsShader) /* 360 */ \
- OP(IsTexture) /* 361 */ \
- OP(IsTransformFeedback) /* 362 */ \
- OP(LineWidth) /* 363 */ \
- OP(LinkProgram) /* 364 */ \
- OP(PauseTransformFeedback) /* 365 */ \
- OP(PixelStorei) /* 366 */ \
- OP(PolygonOffset) /* 367 */ \
- OP(ReadBuffer) /* 368 */ \
- OP(ReadPixels) /* 369 */ \
- OP(ReleaseShaderCompiler) /* 370 */ \
- OP(RenderbufferStorage) /* 371 */ \
- OP(ResumeTransformFeedback) /* 372 */ \
- OP(SampleCoverage) /* 373 */ \
- OP(SamplerParameterf) /* 374 */ \
- OP(SamplerParameterfvImmediate) /* 375 */ \
- OP(SamplerParameteri) /* 376 */ \
- OP(SamplerParameterivImmediate) /* 377 */ \
- OP(Scissor) /* 378 */ \
- OP(ShaderBinary) /* 379 */ \
- OP(ShaderSourceBucket) /* 380 */ \
- OP(StencilFunc) /* 381 */ \
- OP(StencilFuncSeparate) /* 382 */ \
- OP(StencilMask) /* 383 */ \
- OP(StencilMaskSeparate) /* 384 */ \
- OP(StencilOp) /* 385 */ \
- OP(StencilOpSeparate) /* 386 */ \
- OP(TexImage2D) /* 387 */ \
- OP(TexImage3D) /* 388 */ \
- OP(TexParameterf) /* 389 */ \
- OP(TexParameterfvImmediate) /* 390 */ \
- OP(TexParameteri) /* 391 */ \
- OP(TexParameterivImmediate) /* 392 */ \
- OP(TexStorage3D) /* 393 */ \
- OP(TexSubImage2D) /* 394 */ \
- OP(TexSubImage3D) /* 395 */ \
- OP(Uniform1f) /* 396 */ \
- OP(Uniform1fvImmediate) /* 397 */ \
- OP(Uniform1i) /* 398 */ \
- OP(Uniform1ivImmediate) /* 399 */ \
- OP(Uniform1ui) /* 400 */ \
- OP(Uniform1uivImmediate) /* 401 */ \
- OP(Uniform2f) /* 402 */ \
- OP(Uniform2fvImmediate) /* 403 */ \
- OP(Uniform2i) /* 404 */ \
- OP(Uniform2ivImmediate) /* 405 */ \
- OP(Uniform2ui) /* 406 */ \
- OP(Uniform2uivImmediate) /* 407 */ \
- OP(Uniform3f) /* 408 */ \
- OP(Uniform3fvImmediate) /* 409 */ \
- OP(Uniform3i) /* 410 */ \
- OP(Uniform3ivImmediate) /* 411 */ \
- OP(Uniform3ui) /* 412 */ \
- OP(Uniform3uivImmediate) /* 413 */ \
- OP(Uniform4f) /* 414 */ \
- OP(Uniform4fvImmediate) /* 415 */ \
- OP(Uniform4i) /* 416 */ \
- OP(Uniform4ivImmediate) /* 417 */ \
- OP(Uniform4ui) /* 418 */ \
- OP(Uniform4uivImmediate) /* 419 */ \
- OP(UniformMatrix2fvImmediate) /* 420 */ \
- OP(UniformMatrix2x3fvImmediate) /* 421 */ \
- OP(UniformMatrix2x4fvImmediate) /* 422 */ \
- OP(UniformMatrix3fvImmediate) /* 423 */ \
- OP(UniformMatrix3x2fvImmediate) /* 424 */ \
- OP(UniformMatrix3x4fvImmediate) /* 425 */ \
- OP(UniformMatrix4fvImmediate) /* 426 */ \
- OP(UniformMatrix4x2fvImmediate) /* 427 */ \
- OP(UniformMatrix4x3fvImmediate) /* 428 */ \
- OP(UseProgram) /* 429 */ \
- OP(ValidateProgram) /* 430 */ \
- OP(VertexAttrib1f) /* 431 */ \
- OP(VertexAttrib1fvImmediate) /* 432 */ \
- OP(VertexAttrib2f) /* 433 */ \
- OP(VertexAttrib2fvImmediate) /* 434 */ \
- OP(VertexAttrib3f) /* 435 */ \
- OP(VertexAttrib3fvImmediate) /* 436 */ \
- OP(VertexAttrib4f) /* 437 */ \
- OP(VertexAttrib4fvImmediate) /* 438 */ \
- OP(VertexAttribI4i) /* 439 */ \
- OP(VertexAttribI4ivImmediate) /* 440 */ \
- OP(VertexAttribI4ui) /* 441 */ \
- OP(VertexAttribI4uivImmediate) /* 442 */ \
- OP(VertexAttribIPointer) /* 443 */ \
- OP(VertexAttribPointer) /* 444 */ \
- OP(Viewport) /* 445 */ \
- OP(BlitFramebufferCHROMIUM) /* 446 */ \
- OP(RenderbufferStorageMultisampleCHROMIUM) /* 447 */ \
- OP(RenderbufferStorageMultisampleEXT) /* 448 */ \
- OP(FramebufferTexture2DMultisampleEXT) /* 449 */ \
- OP(TexStorage2DEXT) /* 450 */ \
- OP(GenQueriesEXTImmediate) /* 451 */ \
- OP(DeleteQueriesEXTImmediate) /* 452 */ \
- OP(BeginQueryEXT) /* 453 */ \
- OP(BeginTransformFeedback) /* 454 */ \
- OP(EndQueryEXT) /* 455 */ \
- OP(EndTransformFeedback) /* 456 */ \
- OP(InsertEventMarkerEXT) /* 457 */ \
- OP(PushGroupMarkerEXT) /* 458 */ \
- OP(PopGroupMarkerEXT) /* 459 */ \
- OP(GenVertexArraysOESImmediate) /* 460 */ \
- OP(DeleteVertexArraysOESImmediate) /* 461 */ \
- OP(IsVertexArrayOES) /* 462 */ \
- OP(BindVertexArrayOES) /* 463 */ \
- OP(SwapBuffers) /* 464 */ \
- OP(GetMaxValueInBufferCHROMIUM) /* 465 */ \
- OP(EnableFeatureCHROMIUM) /* 466 */ \
- OP(ResizeCHROMIUM) /* 467 */ \
- OP(GetRequestableExtensionsCHROMIUM) /* 468 */ \
- OP(RequestExtensionCHROMIUM) /* 469 */ \
- OP(GetProgramInfoCHROMIUM) /* 470 */ \
- OP(GetTranslatedShaderSourceANGLE) /* 471 */ \
- OP(PostSubBufferCHROMIUM) /* 472 */ \
- OP(TexImageIOSurface2DCHROMIUM) /* 473 */ \
- OP(CopyTextureCHROMIUM) /* 474 */ \
- OP(DrawArraysInstancedANGLE) /* 475 */ \
- OP(DrawElementsInstancedANGLE) /* 476 */ \
- OP(VertexAttribDivisorANGLE) /* 477 */ \
- OP(GenMailboxCHROMIUM) /* 478 */ \
- OP(ProduceTextureCHROMIUMImmediate) /* 479 */ \
- OP(ProduceTextureDirectCHROMIUMImmediate) /* 480 */ \
- OP(ConsumeTextureCHROMIUMImmediate) /* 481 */ \
- OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 482 */ \
- OP(BindUniformLocationCHROMIUMBucket) /* 483 */ \
- OP(GenValuebuffersCHROMIUMImmediate) /* 484 */ \
- OP(DeleteValuebuffersCHROMIUMImmediate) /* 485 */ \
- OP(IsValuebufferCHROMIUM) /* 486 */ \
- OP(BindValuebufferCHROMIUM) /* 487 */ \
- OP(SubscribeValueCHROMIUM) /* 488 */ \
- OP(PopulateSubscribedValuesCHROMIUM) /* 489 */ \
- OP(UniformValuebufferCHROMIUM) /* 490 */ \
- OP(BindTexImage2DCHROMIUM) /* 491 */ \
- OP(ReleaseTexImage2DCHROMIUM) /* 492 */ \
- OP(TraceBeginCHROMIUM) /* 493 */ \
- OP(TraceEndCHROMIUM) /* 494 */ \
- OP(AsyncTexSubImage2DCHROMIUM) /* 495 */ \
- OP(AsyncTexImage2DCHROMIUM) /* 496 */ \
- OP(WaitAsyncTexImage2DCHROMIUM) /* 497 */ \
- OP(WaitAllAsyncTexImage2DCHROMIUM) /* 498 */ \
- OP(DiscardFramebufferEXTImmediate) /* 499 */ \
- OP(LoseContextCHROMIUM) /* 500 */ \
- OP(InsertSyncPointCHROMIUM) /* 501 */ \
- OP(WaitSyncPointCHROMIUM) /* 502 */ \
- OP(DrawBuffersEXTImmediate) /* 503 */ \
- OP(DiscardBackbufferCHROMIUM) /* 504 */ \
- OP(ScheduleOverlayPlaneCHROMIUM) /* 505 */ \
- OP(SwapInterval) /* 506 */ \
- OP(MatrixLoadfCHROMIUMImmediate) /* 507 */ \
- OP(MatrixLoadIdentityCHROMIUM) /* 508 */ \
- OP(BlendBarrierKHR) /* 509 */
+ OP(ClearBufferfi) /* 276 */ \
+ OP(ClearBufferfvImmediate) /* 277 */ \
+ OP(ClearBufferivImmediate) /* 278 */ \
+ OP(ClearBufferuivImmediate) /* 279 */ \
+ OP(ClearColor) /* 280 */ \
+ OP(ClearDepthf) /* 281 */ \
+ OP(ClearStencil) /* 282 */ \
+ OP(ColorMask) /* 283 */ \
+ OP(CompileShader) /* 284 */ \
+ OP(CompressedTexImage2DBucket) /* 285 */ \
+ OP(CompressedTexImage2D) /* 286 */ \
+ OP(CompressedTexSubImage2DBucket) /* 287 */ \
+ OP(CompressedTexSubImage2D) /* 288 */ \
+ OP(CopyBufferSubData) /* 289 */ \
+ OP(CopyTexImage2D) /* 290 */ \
+ OP(CopyTexSubImage2D) /* 291 */ \
+ OP(CreateProgram) /* 292 */ \
+ OP(CreateShader) /* 293 */ \
+ OP(CullFace) /* 294 */ \
+ OP(DeleteBuffersImmediate) /* 295 */ \
+ OP(DeleteFramebuffersImmediate) /* 296 */ \
+ OP(DeleteProgram) /* 297 */ \
+ OP(DeleteRenderbuffersImmediate) /* 298 */ \
+ OP(DeleteSamplersImmediate) /* 299 */ \
+ OP(DeleteShader) /* 300 */ \
+ OP(DeleteTexturesImmediate) /* 301 */ \
+ OP(DeleteTransformFeedbacksImmediate) /* 302 */ \
+ OP(DepthFunc) /* 303 */ \
+ OP(DepthMask) /* 304 */ \
+ OP(DepthRangef) /* 305 */ \
+ OP(DetachShader) /* 306 */ \
+ OP(Disable) /* 307 */ \
+ OP(DisableVertexAttribArray) /* 308 */ \
+ OP(DrawArrays) /* 309 */ \
+ OP(DrawElements) /* 310 */ \
+ OP(Enable) /* 311 */ \
+ OP(EnableVertexAttribArray) /* 312 */ \
+ OP(Finish) /* 313 */ \
+ OP(Flush) /* 314 */ \
+ OP(FramebufferRenderbuffer) /* 315 */ \
+ OP(FramebufferTexture2D) /* 316 */ \
+ OP(FramebufferTextureLayer) /* 317 */ \
+ OP(FrontFace) /* 318 */ \
+ OP(GenBuffersImmediate) /* 319 */ \
+ OP(GenerateMipmap) /* 320 */ \
+ OP(GenFramebuffersImmediate) /* 321 */ \
+ OP(GenRenderbuffersImmediate) /* 322 */ \
+ OP(GenSamplersImmediate) /* 323 */ \
+ OP(GenTexturesImmediate) /* 324 */ \
+ OP(GenTransformFeedbacksImmediate) /* 325 */ \
+ OP(GetActiveAttrib) /* 326 */ \
+ OP(GetActiveUniform) /* 327 */ \
+ OP(GetAttachedShaders) /* 328 */ \
+ OP(GetAttribLocation) /* 329 */ \
+ OP(GetBooleanv) /* 330 */ \
+ OP(GetBufferParameteriv) /* 331 */ \
+ OP(GetError) /* 332 */ \
+ OP(GetFloatv) /* 333 */ \
+ OP(GetFramebufferAttachmentParameteriv) /* 334 */ \
+ OP(GetIntegerv) /* 335 */ \
+ OP(GetInternalformativ) /* 336 */ \
+ OP(GetProgramiv) /* 337 */ \
+ OP(GetProgramInfoLog) /* 338 */ \
+ OP(GetRenderbufferParameteriv) /* 339 */ \
+ OP(GetSamplerParameterfv) /* 340 */ \
+ OP(GetSamplerParameteriv) /* 341 */ \
+ OP(GetShaderiv) /* 342 */ \
+ OP(GetShaderInfoLog) /* 343 */ \
+ OP(GetShaderPrecisionFormat) /* 344 */ \
+ OP(GetShaderSource) /* 345 */ \
+ OP(GetString) /* 346 */ \
+ OP(GetTexParameterfv) /* 347 */ \
+ OP(GetTexParameteriv) /* 348 */ \
+ OP(GetUniformfv) /* 349 */ \
+ OP(GetUniformiv) /* 350 */ \
+ OP(GetUniformLocation) /* 351 */ \
+ OP(GetVertexAttribfv) /* 352 */ \
+ OP(GetVertexAttribiv) /* 353 */ \
+ OP(GetVertexAttribPointerv) /* 354 */ \
+ OP(Hint) /* 355 */ \
+ OP(InvalidateFramebufferImmediate) /* 356 */ \
+ OP(InvalidateSubFramebufferImmediate) /* 357 */ \
+ OP(IsBuffer) /* 358 */ \
+ OP(IsEnabled) /* 359 */ \
+ OP(IsFramebuffer) /* 360 */ \
+ OP(IsProgram) /* 361 */ \
+ OP(IsRenderbuffer) /* 362 */ \
+ OP(IsSampler) /* 363 */ \
+ OP(IsShader) /* 364 */ \
+ OP(IsTexture) /* 365 */ \
+ OP(IsTransformFeedback) /* 366 */ \
+ OP(LineWidth) /* 367 */ \
+ OP(LinkProgram) /* 368 */ \
+ OP(PauseTransformFeedback) /* 369 */ \
+ OP(PixelStorei) /* 370 */ \
+ OP(PolygonOffset) /* 371 */ \
+ OP(ReadBuffer) /* 372 */ \
+ OP(ReadPixels) /* 373 */ \
+ OP(ReleaseShaderCompiler) /* 374 */ \
+ OP(RenderbufferStorage) /* 375 */ \
+ OP(ResumeTransformFeedback) /* 376 */ \
+ OP(SampleCoverage) /* 377 */ \
+ OP(SamplerParameterf) /* 378 */ \
+ OP(SamplerParameterfvImmediate) /* 379 */ \
+ OP(SamplerParameteri) /* 380 */ \
+ OP(SamplerParameterivImmediate) /* 381 */ \
+ OP(Scissor) /* 382 */ \
+ OP(ShaderBinary) /* 383 */ \
+ OP(ShaderSourceBucket) /* 384 */ \
+ OP(StencilFunc) /* 385 */ \
+ OP(StencilFuncSeparate) /* 386 */ \
+ OP(StencilMask) /* 387 */ \
+ OP(StencilMaskSeparate) /* 388 */ \
+ OP(StencilOp) /* 389 */ \
+ OP(StencilOpSeparate) /* 390 */ \
+ OP(TexImage2D) /* 391 */ \
+ OP(TexImage3D) /* 392 */ \
+ OP(TexParameterf) /* 393 */ \
+ OP(TexParameterfvImmediate) /* 394 */ \
+ OP(TexParameteri) /* 395 */ \
+ OP(TexParameterivImmediate) /* 396 */ \
+ OP(TexStorage3D) /* 397 */ \
+ OP(TexSubImage2D) /* 398 */ \
+ OP(TexSubImage3D) /* 399 */ \
+ OP(Uniform1f) /* 400 */ \
+ OP(Uniform1fvImmediate) /* 401 */ \
+ OP(Uniform1i) /* 402 */ \
+ OP(Uniform1ivImmediate) /* 403 */ \
+ OP(Uniform1ui) /* 404 */ \
+ OP(Uniform1uivImmediate) /* 405 */ \
+ OP(Uniform2f) /* 406 */ \
+ OP(Uniform2fvImmediate) /* 407 */ \
+ OP(Uniform2i) /* 408 */ \
+ OP(Uniform2ivImmediate) /* 409 */ \
+ OP(Uniform2ui) /* 410 */ \
+ OP(Uniform2uivImmediate) /* 411 */ \
+ OP(Uniform3f) /* 412 */ \
+ OP(Uniform3fvImmediate) /* 413 */ \
+ OP(Uniform3i) /* 414 */ \
+ OP(Uniform3ivImmediate) /* 415 */ \
+ OP(Uniform3ui) /* 416 */ \
+ OP(Uniform3uivImmediate) /* 417 */ \
+ OP(Uniform4f) /* 418 */ \
+ OP(Uniform4fvImmediate) /* 419 */ \
+ OP(Uniform4i) /* 420 */ \
+ OP(Uniform4ivImmediate) /* 421 */ \
+ OP(Uniform4ui) /* 422 */ \
+ OP(Uniform4uivImmediate) /* 423 */ \
+ OP(UniformMatrix2fvImmediate) /* 424 */ \
+ OP(UniformMatrix2x3fvImmediate) /* 425 */ \
+ OP(UniformMatrix2x4fvImmediate) /* 426 */ \
+ OP(UniformMatrix3fvImmediate) /* 427 */ \
+ OP(UniformMatrix3x2fvImmediate) /* 428 */ \
+ OP(UniformMatrix3x4fvImmediate) /* 429 */ \
+ OP(UniformMatrix4fvImmediate) /* 430 */ \
+ OP(UniformMatrix4x2fvImmediate) /* 431 */ \
+ OP(UniformMatrix4x3fvImmediate) /* 432 */ \
+ OP(UseProgram) /* 433 */ \
+ OP(ValidateProgram) /* 434 */ \
+ OP(VertexAttrib1f) /* 435 */ \
+ OP(VertexAttrib1fvImmediate) /* 436 */ \
+ OP(VertexAttrib2f) /* 437 */ \
+ OP(VertexAttrib2fvImmediate) /* 438 */ \
+ OP(VertexAttrib3f) /* 439 */ \
+ OP(VertexAttrib3fvImmediate) /* 440 */ \
+ OP(VertexAttrib4f) /* 441 */ \
+ OP(VertexAttrib4fvImmediate) /* 442 */ \
+ OP(VertexAttribI4i) /* 443 */ \
+ OP(VertexAttribI4ivImmediate) /* 444 */ \
+ OP(VertexAttribI4ui) /* 445 */ \
+ OP(VertexAttribI4uivImmediate) /* 446 */ \
+ OP(VertexAttribIPointer) /* 447 */ \
+ OP(VertexAttribPointer) /* 448 */ \
+ OP(Viewport) /* 449 */ \
+ OP(BlitFramebufferCHROMIUM) /* 450 */ \
+ OP(RenderbufferStorageMultisampleCHROMIUM) /* 451 */ \
+ OP(RenderbufferStorageMultisampleEXT) /* 452 */ \
+ OP(FramebufferTexture2DMultisampleEXT) /* 453 */ \
+ OP(TexStorage2DEXT) /* 454 */ \
+ OP(GenQueriesEXTImmediate) /* 455 */ \
+ OP(DeleteQueriesEXTImmediate) /* 456 */ \
+ OP(BeginQueryEXT) /* 457 */ \
+ OP(BeginTransformFeedback) /* 458 */ \
+ OP(EndQueryEXT) /* 459 */ \
+ OP(EndTransformFeedback) /* 460 */ \
+ OP(InsertEventMarkerEXT) /* 461 */ \
+ OP(PushGroupMarkerEXT) /* 462 */ \
+ OP(PopGroupMarkerEXT) /* 463 */ \
+ OP(GenVertexArraysOESImmediate) /* 464 */ \
+ OP(DeleteVertexArraysOESImmediate) /* 465 */ \
+ OP(IsVertexArrayOES) /* 466 */ \
+ OP(BindVertexArrayOES) /* 467 */ \
+ OP(SwapBuffers) /* 468 */ \
+ OP(GetMaxValueInBufferCHROMIUM) /* 469 */ \
+ OP(EnableFeatureCHROMIUM) /* 470 */ \
+ OP(ResizeCHROMIUM) /* 471 */ \
+ OP(GetRequestableExtensionsCHROMIUM) /* 472 */ \
+ OP(RequestExtensionCHROMIUM) /* 473 */ \
+ OP(GetProgramInfoCHROMIUM) /* 474 */ \
+ OP(GetTranslatedShaderSourceANGLE) /* 475 */ \
+ OP(PostSubBufferCHROMIUM) /* 476 */ \
+ OP(TexImageIOSurface2DCHROMIUM) /* 477 */ \
+ OP(CopyTextureCHROMIUM) /* 478 */ \
+ OP(DrawArraysInstancedANGLE) /* 479 */ \
+ OP(DrawElementsInstancedANGLE) /* 480 */ \
+ OP(VertexAttribDivisorANGLE) /* 481 */ \
+ OP(GenMailboxCHROMIUM) /* 482 */ \
+ OP(ProduceTextureCHROMIUMImmediate) /* 483 */ \
+ OP(ProduceTextureDirectCHROMIUMImmediate) /* 484 */ \
+ OP(ConsumeTextureCHROMIUMImmediate) /* 485 */ \
+ OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 486 */ \
+ OP(BindUniformLocationCHROMIUMBucket) /* 487 */ \
+ OP(GenValuebuffersCHROMIUMImmediate) /* 488 */ \
+ OP(DeleteValuebuffersCHROMIUMImmediate) /* 489 */ \
+ OP(IsValuebufferCHROMIUM) /* 490 */ \
+ OP(BindValuebufferCHROMIUM) /* 491 */ \
+ OP(SubscribeValueCHROMIUM) /* 492 */ \
+ OP(PopulateSubscribedValuesCHROMIUM) /* 493 */ \
+ OP(UniformValuebufferCHROMIUM) /* 494 */ \
+ OP(BindTexImage2DCHROMIUM) /* 495 */ \
+ OP(ReleaseTexImage2DCHROMIUM) /* 496 */ \
+ OP(TraceBeginCHROMIUM) /* 497 */ \
+ OP(TraceEndCHROMIUM) /* 498 */ \
+ OP(AsyncTexSubImage2DCHROMIUM) /* 499 */ \
+ OP(AsyncTexImage2DCHROMIUM) /* 500 */ \
+ OP(WaitAsyncTexImage2DCHROMIUM) /* 501 */ \
+ OP(WaitAllAsyncTexImage2DCHROMIUM) /* 502 */ \
+ OP(DiscardFramebufferEXTImmediate) /* 503 */ \
+ OP(LoseContextCHROMIUM) /* 504 */ \
+ OP(InsertSyncPointCHROMIUM) /* 505 */ \
+ OP(WaitSyncPointCHROMIUM) /* 506 */ \
+ OP(DrawBuffersEXTImmediate) /* 507 */ \
+ OP(DiscardBackbufferCHROMIUM) /* 508 */ \
+ OP(ScheduleOverlayPlaneCHROMIUM) /* 509 */ \
+ OP(SwapInterval) /* 510 */ \
+ OP(MatrixLoadfCHROMIUMImmediate) /* 511 */ \
+ OP(MatrixLoadIdentityCHROMIUM) /* 512 */ \
+ OP(BlendBarrierKHR) /* 513 */
enum CommandId {
kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this.
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.cc b/gpu/command_buffer/common/gles2_cmd_utils.cc
index 1d31f70..6a483f6 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils.cc
+++ b/gpu/command_buffer/common/gles2_cmd_utils.cc
@@ -822,6 +822,28 @@
return true;
}
+size_t GLES2Util::CalcClearBufferivDataCount(int buffer) {
+ switch (buffer) {
+ case GL_COLOR:
+ return 4;
+ case GL_STENCIL:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+size_t GLES2Util::CalcClearBufferfvDataCount(int buffer) {
+ switch (buffer) {
+ case GL_COLOR:
+ return 4;
+ case GL_DEPTH:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
namespace {
// WebGraphicsContext3DCommandBufferImpl configuration attributes. Those in
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.h b/gpu/command_buffer/common/gles2_cmd_utils.h
index 414e140..127c2be 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils.h
@@ -184,6 +184,9 @@
int* element_index,
bool* getting_array);
+ static size_t CalcClearBufferivDataCount(int buffer);
+ static size_t CalcClearBufferfvDataCount(int buffer);
+
#include "../common/gles2_cmd_utils_autogen.h"
private:
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
index e6a26fe..8820225 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
@@ -17,6 +17,10 @@
static std::string GetStringBufferParameter(uint32_t value);
static std::string GetStringBufferTarget(uint32_t value);
static std::string GetStringBufferUsage(uint32_t value);
+static std::string GetStringBufferfi(uint32_t value);
+static std::string GetStringBufferfv(uint32_t value);
+static std::string GetStringBufferiv(uint32_t value);
+static std::string GetStringBufferuiv(uint32_t value);
static std::string GetStringCapability(uint32_t value);
static std::string GetStringCmpFunction(uint32_t value);
static std::string GetStringCompressedTextureFormat(uint32_t value);
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index 3fafbcb..b28c5e5 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -4502,6 +4502,38 @@
arraysize(string_table), value);
}
+std::string GLES2Util::GetStringBufferfi(uint32_t value) {
+ static const EnumToString string_table[] = {
+ {GL_DEPTH_STENCIL, "GL_DEPTH_STENCIL"},
+ };
+ return GLES2Util::GetQualifiedEnumString(string_table,
+ arraysize(string_table), value);
+}
+
+std::string GLES2Util::GetStringBufferfv(uint32_t value) {
+ static const EnumToString string_table[] = {
+ {GL_COLOR, "GL_COLOR"}, {GL_DEPTH, "GL_DEPTH"},
+ };
+ return GLES2Util::GetQualifiedEnumString(string_table,
+ arraysize(string_table), value);
+}
+
+std::string GLES2Util::GetStringBufferiv(uint32_t value) {
+ static const EnumToString string_table[] = {
+ {GL_COLOR, "GL_COLOR"}, {GL_STENCIL, "GL_STENCIL"},
+ };
+ return GLES2Util::GetQualifiedEnumString(string_table,
+ arraysize(string_table), value);
+}
+
+std::string GLES2Util::GetStringBufferuiv(uint32_t value) {
+ static const EnumToString string_table[] = {
+ {GL_COLOR, "GL_COLOR"},
+ };
+ return GLES2Util::GetQualifiedEnumString(string_table,
+ arraysize(string_table), value);
+}
+
std::string GLES2Util::GetStringCapability(uint32_t value) {
static const EnumToString string_table[] = {
{GL_BLEND, "GL_BLEND"},
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
index eadc34f..5b86b87 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
@@ -4,12 +4,14 @@
#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/sys_info.h"
#include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h"
#include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
#include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h"
#include "gpu/command_buffer/service/async_pixel_transfer_manager_sync.h"
+#include "gpu/command_buffer/service/gpu_switches.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_implementation.h"
@@ -75,6 +77,13 @@
AsyncPixelTransferManager* AsyncPixelTransferManager::Create(
gfx::GLContext* context) {
DCHECK(context->IsCurrent(NULL));
+ // Threaded mailbox uses EGLImage which conflicts with EGL uploader.
+ // The spec only allows one EGL image per sibling group, but currently the
+ // image handle cannot be shared between the threaded mailbox code and
+ // AsyncPixelTransferManagerEGL.
+ bool uses_threaded_mailboxes =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableThreadedTextureMailboxes);
switch (gfx::GetGLImplementation()) {
case gfx::kGLImplementationEGLGLES2:
DCHECK(context);
@@ -84,6 +93,7 @@
context->HasExtension("EGL_KHR_image_base") &&
context->HasExtension("EGL_KHR_gl_texture_2D_image") &&
context->HasExtension("GL_OES_EGL_image") &&
+ !uses_threaded_mailboxes &&
AllowTransferThreadForGpu()) {
TRACE_EVENT0("gpu", "AsyncPixelTransferManager_CreateWithThread");
return new AsyncPixelTransferManagerEGL;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index efd75dd..f56d47b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -6427,12 +6427,17 @@
glBindTexture(
textarget,
texture_manager()->black_texture_id(uniform_info->type));
- LOCAL_RENDER_WARNING(
- std::string("texture bound to texture unit ") +
- base::IntToString(texture_unit_index) +
- " is not renderable. It maybe non-power-of-2 and have"
- " incompatible texture filtering or is not"
- " 'texture complete'");
+ if (!texture_ref) {
+ LOCAL_RENDER_WARNING(
+ std::string("there is no texture bound to the unit ") +
+ base::IntToString(texture_unit_index));
+ } else {
+ LOCAL_RENDER_WARNING(
+ std::string("texture bound to texture unit ") +
+ base::IntToString(texture_unit_index) +
+ " is not renderable. It maybe non-power-of-2 and have"
+ " incompatible texture filtering.");
+ }
continue;
}
@@ -9140,10 +9145,17 @@
Clip(x, width, size.width(), ©X, ©Width);
Clip(y, height, size.height(), ©Y, ©Height);
- if (!texture_manager()->ClearTextureLevel(this, texture_ref, target, level)) {
- LOCAL_SET_GL_ERROR(
- GL_OUT_OF_MEMORY, "glCopyTexSubImage2D", "dimensions too big");
- return;
+ if (xoffset != 0 || yoffset != 0 || width != size.width() ||
+ height != size.height()) {
+ if (!texture_manager()->ClearTextureLevel(this, texture_ref, target,
+ level)) {
+ LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, "glCopyTexSubImage2D",
+ "dimensions too big");
+ return;
+ }
+ } else {
+ // Write all pixels in below.
+ texture_manager()->SetLevelCleared(texture_ref, target, level, true);
}
if (copyX != x ||
@@ -9748,6 +9760,9 @@
TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame");
}
+ ScopedGPUTrace scoped_gpu_trace(gpu_tracer_.get(), kTraceDecoder,
+ "gpu_toplevel", "SwapBuffer");
+
bool is_tracing;
TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("gpu.debug"),
&is_tracing);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index 6764910..7766b0d 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -384,6 +384,99 @@
return error::kNoError;
}
+error::Error GLES2DecoderImpl::HandleClearBufferfi(uint32_t immediate_data_size,
+ const void* cmd_data) {
+ if (!unsafe_es3_apis_enabled())
+ return error::kUnknownCommand;
+ const gles2::cmds::ClearBufferfi& c =
+ *static_cast<const gles2::cmds::ClearBufferfi*>(cmd_data);
+ (void)c;
+ GLenum buffer = static_cast<GLenum>(c.buffer);
+ GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
+ GLfloat depth = static_cast<GLfloat>(c.depth);
+ GLint stencil = static_cast<GLint>(c.stencil);
+ glClearBufferfi(buffer, drawbuffers, depth, stencil);
+ return error::kNoError;
+}
+
+error::Error GLES2DecoderImpl::HandleClearBufferfvImmediate(
+ uint32_t immediate_data_size,
+ const void* cmd_data) {
+ if (!unsafe_es3_apis_enabled())
+ return error::kUnknownCommand;
+ const gles2::cmds::ClearBufferfvImmediate& c =
+ *static_cast<const gles2::cmds::ClearBufferfvImmediate*>(cmd_data);
+ (void)c;
+ GLenum buffer = static_cast<GLenum>(c.buffer);
+ GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
+ uint32_t data_size;
+ if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
+ return error::kOutOfBounds;
+ }
+ if (data_size > immediate_data_size) {
+ return error::kOutOfBounds;
+ }
+ const GLfloat* value =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
+ if (value == NULL) {
+ return error::kOutOfBounds;
+ }
+ glClearBufferfv(buffer, drawbuffers, value);
+ return error::kNoError;
+}
+
+error::Error GLES2DecoderImpl::HandleClearBufferivImmediate(
+ uint32_t immediate_data_size,
+ const void* cmd_data) {
+ if (!unsafe_es3_apis_enabled())
+ return error::kUnknownCommand;
+ const gles2::cmds::ClearBufferivImmediate& c =
+ *static_cast<const gles2::cmds::ClearBufferivImmediate*>(cmd_data);
+ (void)c;
+ GLenum buffer = static_cast<GLenum>(c.buffer);
+ GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
+ uint32_t data_size;
+ if (!ComputeDataSize(1, sizeof(GLint), 4, &data_size)) {
+ return error::kOutOfBounds;
+ }
+ if (data_size > immediate_data_size) {
+ return error::kOutOfBounds;
+ }
+ const GLint* value =
+ GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size);
+ if (value == NULL) {
+ return error::kOutOfBounds;
+ }
+ glClearBufferiv(buffer, drawbuffers, value);
+ return error::kNoError;
+}
+
+error::Error GLES2DecoderImpl::HandleClearBufferuivImmediate(
+ uint32_t immediate_data_size,
+ const void* cmd_data) {
+ if (!unsafe_es3_apis_enabled())
+ return error::kUnknownCommand;
+ const gles2::cmds::ClearBufferuivImmediate& c =
+ *static_cast<const gles2::cmds::ClearBufferuivImmediate*>(cmd_data);
+ (void)c;
+ GLenum buffer = static_cast<GLenum>(c.buffer);
+ GLint drawbuffers = static_cast<GLint>(c.drawbuffers);
+ uint32_t data_size;
+ if (!ComputeDataSize(1, sizeof(GLuint), 4, &data_size)) {
+ return error::kOutOfBounds;
+ }
+ if (data_size > immediate_data_size) {
+ return error::kOutOfBounds;
+ }
+ const GLuint* value =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
+ if (value == NULL) {
+ return error::kOutOfBounds;
+ }
+ glClearBufferuiv(buffer, drawbuffers, value);
+ return error::kNoError;
+}
+
error::Error GLES2DecoderImpl::HandleClearColor(uint32_t immediate_data_size,
const void* cmd_data) {
const gles2::cmds::ClearColor& c =
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
index d1208f8..7794274 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
@@ -394,6 +394,72 @@
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
+TEST_P(GLES2DecoderTest1, ClearBufferfiValidArgs) {
+ EXPECT_CALL(*gl_, ClearBufferfi(GL_COLOR, 2, 3, 4));
+ SpecializedSetup<cmds::ClearBufferfi, 0>(true);
+ cmds::ClearBufferfi cmd;
+ cmd.Init(GL_COLOR, 2, 3, 4);
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ decoder_->set_unsafe_es3_apis_enabled(false);
+ EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest1, ClearBufferfvImmediateValidArgs) {
+ cmds::ClearBufferfvImmediate& cmd =
+ *GetImmediateAs<cmds::ClearBufferfvImmediate>();
+ SpecializedSetup<cmds::ClearBufferfvImmediate, 0>(true);
+ GLfloat temp[4] = {
+ 0,
+ };
+ cmd.Init(GL_COLOR, 2, &temp[0]);
+ EXPECT_CALL(*gl_,
+ ClearBufferfv(GL_COLOR, 2, reinterpret_cast<GLfloat*>(
+ ImmediateDataAddress(&cmd))));
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ decoder_->set_unsafe_es3_apis_enabled(false);
+ EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp)));
+}
+
+TEST_P(GLES2DecoderTest1, ClearBufferivImmediateValidArgs) {
+ cmds::ClearBufferivImmediate& cmd =
+ *GetImmediateAs<cmds::ClearBufferivImmediate>();
+ SpecializedSetup<cmds::ClearBufferivImmediate, 0>(true);
+ GLint temp[4] = {
+ 0,
+ };
+ cmd.Init(GL_COLOR, 2, &temp[0]);
+ EXPECT_CALL(*gl_, ClearBufferiv(
+ GL_COLOR, 2,
+ reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ decoder_->set_unsafe_es3_apis_enabled(false);
+ EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp)));
+}
+
+TEST_P(GLES2DecoderTest1, ClearBufferuivImmediateValidArgs) {
+ cmds::ClearBufferuivImmediate& cmd =
+ *GetImmediateAs<cmds::ClearBufferuivImmediate>();
+ SpecializedSetup<cmds::ClearBufferuivImmediate, 0>(true);
+ GLuint temp[4] = {
+ 0,
+ };
+ cmd.Init(GL_COLOR, 2, &temp[0]);
+ EXPECT_CALL(*gl_, ClearBufferuiv(
+ GL_COLOR, 2,
+ reinterpret_cast<GLuint*>(ImmediateDataAddress(&cmd))));
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ decoder_->set_unsafe_es3_apis_enabled(false);
+ EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp)));
+}
+
TEST_P(GLES2DecoderTest1, ClearColorValidArgs) {
EXPECT_CALL(*gl_, ClearColor(1, 2, 3, 4));
SpecializedSetup<cmds::ClearColor, 0>(true);
@@ -1930,25 +1996,4 @@
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-// TODO(gman): GetVertexAttribPointerv
-
-TEST_P(GLES2DecoderTest1, HintValidArgs) {
- EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST));
- SpecializedSetup<cmds::Hint, 0>(true);
- cmds::Hint cmd;
- cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTest1, HintInvalidArgs0_0) {
- EXPECT_CALL(*gl_, Hint(_, _)).Times(0);
- SpecializedSetup<cmds::Hint, 0>(false);
- cmds::Hint cmd;
- cmd.Init(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-// TODO(gman): InvalidateFramebufferImmediate
-// TODO(gman): InvalidateSubFramebufferImmediate
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
index 2e8f532..aa387be 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
@@ -12,6 +12,28 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
+// TODO(gman): GetVertexAttribPointerv
+
+TEST_P(GLES2DecoderTest2, HintValidArgs) {
+ EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST));
+ SpecializedSetup<cmds::Hint, 0>(true);
+ cmds::Hint cmd;
+ cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest2, HintInvalidArgs0_0) {
+ EXPECT_CALL(*gl_, Hint(_, _)).Times(0);
+ SpecializedSetup<cmds::Hint, 0>(false);
+ cmds::Hint cmd;
+ cmd.Init(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+// TODO(gman): InvalidateFramebufferImmediate
+// TODO(gman): InvalidateSubFramebufferImmediate
+
TEST_P(GLES2DecoderTest2, IsBufferValidArgs) {
SpecializedSetup<cmds::IsBuffer, 0>(true);
cmds::IsBuffer cmd;
@@ -1326,6 +1348,4 @@
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-// TODO(gman): TexStorage2DEXT
-// TODO(gman): GenQueriesEXTImmediate
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
index 314a9b6..ba2f4c2 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
@@ -12,6 +12,8 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
+// TODO(gman): TexStorage2DEXT
+// TODO(gman): GenQueriesEXTImmediate
// TODO(gman): DeleteQueriesEXTImmediate
// TODO(gman): BeginQueryEXT
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
index b0e8e8c..f0cadf1 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
@@ -1803,6 +1803,32 @@
CopyTexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+}
+
+TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedBackBufferSizedTexture) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kBackBufferWidth, kBackBufferHeight,
+ 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+
+ EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0,
+ kBackBufferWidth, kBackBufferHeight))
+ .Times(1)
+ .RetiresOnSaturation();
+ CopyTexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, kBackBufferWidth, kBackBufferHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_TRUE(texture->SafeToRenderFrom());
}
TEST_P(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
index 5692847..e163642 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
@@ -17,6 +17,10 @@
ValueValidator<GLenum> buffer_parameter;
ValueValidator<GLenum> buffer_target;
ValueValidator<GLenum> buffer_usage;
+ValueValidator<GLenum> bufferfi;
+ValueValidator<GLenum> bufferfv;
+ValueValidator<GLenum> bufferiv;
+ValueValidator<GLenum> bufferuiv;
ValueValidator<GLenum> capability;
ValueValidator<GLenum> cmp_function;
ValueValidator<GLenum> compressed_texture_format;
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index d81b896..febce20 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -44,6 +44,24 @@
GL_DYNAMIC_DRAW,
};
+static const GLenum valid_bufferfi_table[] = {
+ GL_DEPTH_STENCIL,
+};
+
+static const GLenum valid_bufferfv_table[] = {
+ GL_COLOR,
+ GL_DEPTH,
+};
+
+static const GLenum valid_bufferiv_table[] = {
+ GL_COLOR,
+ GL_STENCIL,
+};
+
+static const GLenum valid_bufferuiv_table[] = {
+ GL_COLOR,
+};
+
static const GLenum valid_capability_table[] = {
GL_BLEND,
GL_CULL_FACE,
@@ -573,6 +591,10 @@
arraysize(valid_buffer_target_table)),
buffer_usage(valid_buffer_usage_table,
arraysize(valid_buffer_usage_table)),
+ bufferfi(valid_bufferfi_table, arraysize(valid_bufferfi_table)),
+ bufferfv(valid_bufferfv_table, arraysize(valid_bufferfv_table)),
+ bufferiv(valid_bufferiv_table, arraysize(valid_bufferiv_table)),
+ bufferuiv(valid_bufferuiv_table, arraysize(valid_bufferuiv_table)),
capability(valid_capability_table, arraysize(valid_capability_table)),
cmp_function(valid_cmp_function_table,
arraysize(valid_cmp_function_table)),
diff --git a/gpu/command_buffer/service/gpu_tracer.cc b/gpu/command_buffer/service/gpu_tracer.cc
index 2853e96c..364159b 100644
--- a/gpu/command_buffer/service/gpu_tracer.cc
+++ b/gpu/command_buffer/service/gpu_tracer.cc
@@ -76,19 +76,15 @@
}
void TraceOutputter::TraceServiceBegin(const std::string& category,
- const std::string& name,
- void* id) {
- TRACE_EVENT_COPY_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("gpu.service"),
- name.c_str(), this,
- "gl_category", category.c_str());
+ const std::string& name) {
+ TRACE_EVENT_COPY_BEGIN1(TRACE_DISABLED_BY_DEFAULT("gpu.service"),
+ name.c_str(), "gl_category", category.c_str());
}
void TraceOutputter::TraceServiceEnd(const std::string& category,
- const std::string& name,
- void* id) {
- TRACE_EVENT_COPY_ASYNC_END1(TRACE_DISABLED_BY_DEFAULT("gpu.service"),
- name.c_str(), this,
- "gl_category", category.c_str());
+ const std::string& name) {
+ TRACE_EVENT_COPY_END1(TRACE_DISABLED_BY_DEFAULT("gpu.service"),
+ name.c_str(), "gl_category", category.c_str());
}
GPUTrace::GPUTrace(scoped_refptr<Outputter> outputter,
@@ -132,7 +128,7 @@
void GPUTrace::Start(bool trace_service) {
if (trace_service) {
- outputter_->TraceServiceBegin(category_, name_, this);
+ outputter_->TraceServiceBegin(category_, name_);
}
switch (tracer_type_) {
@@ -174,7 +170,7 @@
}
if (tracing_service) {
- outputter_->TraceServiceEnd(category_, name_, this);
+ outputter_->TraceServiceEnd(category_, name_);
}
}
diff --git a/gpu/command_buffer/service/gpu_tracer.h b/gpu/command_buffer/service/gpu_tracer.h
index 64f13cc..594a98e 100644
--- a/gpu/command_buffer/service/gpu_tracer.h
+++ b/gpu/command_buffer/service/gpu_tracer.h
@@ -134,12 +134,10 @@
int64 end_time) = 0;
virtual void TraceServiceBegin(const std::string& category,
- const std::string& name,
- void* id) = 0;
+ const std::string& name) = 0;
virtual void TraceServiceEnd(const std::string& category,
- const std::string& name,
- void* id) = 0;
+ const std::string& name) = 0;
protected:
virtual ~Outputter() {}
@@ -155,12 +153,10 @@
int64 end_time) override;
void TraceServiceBegin(const std::string& category,
- const std::string& name,
- void* id) override;
+ const std::string& name) override;
void TraceServiceEnd(const std::string& category,
- const std::string& name,
- void* id) override;
+ const std::string& name) override;
protected:
friend class base::RefCounted<Outputter>;
@@ -213,6 +209,24 @@
DISALLOW_COPY_AND_ASSIGN(GPUTrace);
};
+class ScopedGPUTrace {
+ public:
+ ScopedGPUTrace(GPUTracer* gpu_tracer, GpuTracerSource source,
+ const std::string& category, const std::string& name)
+ : gpu_tracer_(gpu_tracer),
+ source_(source) {
+ gpu_tracer_->Begin(category, name, source_);
+ }
+
+ ~ScopedGPUTrace() {
+ gpu_tracer_->End(source_);
+ }
+
+ private:
+ GPUTracer* gpu_tracer_;
+ GpuTracerSource source_;
+};
+
} // namespace gles2
} // namespace gpu
diff --git a/gpu/command_buffer/service/gpu_tracer_unittest.cc b/gpu/command_buffer/service/gpu_tracer_unittest.cc
index ae4c970..1b55e78 100644
--- a/gpu/command_buffer/service/gpu_tracer_unittest.cc
+++ b/gpu/command_buffer/service/gpu_tracer_unittest.cc
@@ -50,13 +50,11 @@
void(const std::string& category, const std::string& name,
int64 start_time, int64 end_time));
- MOCK_METHOD3(TraceServiceBegin,
- void(const std::string& category, const std::string& name,
- void* id));
+ MOCK_METHOD2(TraceServiceBegin,
+ void(const std::string& category, const std::string& name));
- MOCK_METHOD3(TraceServiceEnd,
- void(const std::string& category, const std::string& name,
- void* id));
+ MOCK_METHOD2(TraceServiceEnd,
+ void(const std::string& category, const std::string& name));
protected:
~MockOutputter() {}
@@ -287,7 +285,7 @@
const std::string& category,
const std::string& name) {
EXPECT_CALL(*outputter,
- TraceServiceBegin(category, name, NotNull()));
+ TraceServiceBegin(category, name));
}
void ExpectOutputterEndMocks(MockOutputter* outputter,
@@ -296,7 +294,7 @@
int64 expect_end_time,
bool trace_device) {
EXPECT_CALL(*outputter,
- TraceServiceEnd(category, name, NotNull()));
+ TraceServiceEnd(category, name));
if (trace_device) {
EXPECT_CALL(*outputter,
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index c312345..c671073 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -437,7 +437,11 @@
return false;
}
- if (service_->UseVirtualizedGLContexts()) {
+ if (service_->UseVirtualizedGLContexts() ||
+ decoder_->GetContextGroup()
+ ->feature_info()
+ ->workarounds()
+ .use_virtualized_gl_contexts) {
context_ = gl_share_group_->GetSharedContext();
if (!context_.get()) {
context_ = gfx::GLContext::CreateGLContext(
diff --git a/gpu/command_buffer/service/mailbox_manager_sync.cc b/gpu/command_buffer/service/mailbox_manager_sync.cc
index 65376af..b12e9b4 100644
--- a/gpu/command_buffer/service/mailbox_manager_sync.cc
+++ b/gpu/command_buffer/service/mailbox_manager_sync.cc
@@ -31,11 +31,6 @@
if (texture->target() != GL_TEXTURE_2D || needs_mips || !texture->IsDefined())
return true;
- // Skip compositor resources/tile textures.
- // TODO: Remove this, see crbug.com/399226.
- if (texture->pool() == GL_TEXTURE_POOL_MANAGED_CHROMIUM)
- return true;
-
return false;
}