summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-07 00:06:19 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-07 00:06:19 +0000
commitcae201773a5e81fc5cf80a07f9a1ca6891c3c51d (patch)
tree2e42dfe195b31ea71b7486f6ed959b104dbe40b6 /gpu
parent1a1399b8dfcae5e3c55fa54e36ccde927b8476c2 (diff)
downloadchromium_src-cae201773a5e81fc5cf80a07f9a1ca6891c3c51d.zip
chromium_src-cae201773a5e81fc5cf80a07f9a1ca6891c3c51d.tar.gz
chromium_src-cae201773a5e81fc5cf80a07f9a1ca6891c3c51d.tar.bz2
Add more gl debug logging
BUG=none Review URL: https://chromiumcodereview.appspot.com/11444025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171647 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py16
-rw-r--r--gpu/command_buffer/client/gles2_implementation.cc75
-rw-r--r--gpu/command_buffer/client/gles2_implementation.h16
-rw-r--r--gpu/command_buffer/client/gles2_implementation_impl_autogen.h162
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc39
-rw-r--r--gpu/command_buffer/service/gpu_switches.cc6
-rw-r--r--gpu/command_buffer/service/gpu_switches.h1
-rw-r--r--gpu/command_buffer/service/program_manager.cc30
8 files changed, 324 insertions, 21 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 42c3d73..fb1cb88 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -2826,6 +2826,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
arg.WriteClientSideValidationCode(file, func)
file.Write(" helper_->%s(%s);\n" %
(func.name, func.MakeOriginalArgString("")))
+ file.Write(" CheckGLError();\n")
self.WriteClientGLReturnLog(func, file)
file.Write("}\n")
file.Write("\n")
@@ -3563,6 +3564,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
if (Bind%(type)sHelper(%(arg_string)s)) {
helper_->%(name)s(%(arg_string)s);
}
+ CheckGLError();
}
"""
@@ -3679,6 +3681,7 @@ class GENnHandler(TypeHandler):
helper_->%(name)sImmediate(%(args)s);
helper_->CommandBufferHelper::Flush();
%(log_code)s
+ CheckGLError();
}
"""
@@ -3931,6 +3934,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
file.Write(" helper_->%s(%s);\n" %
(func.name, func.MakeCmdArgString("")))
file.Write(' GPU_CLIENT_LOG("returned " << client_id);\n')
+ file.Write(" CheckGLError();\n")
file.Write(" return client_id;\n")
file.Write("}\n")
file.Write("\n")
@@ -3960,6 +3964,7 @@ class DeleteHandler(TypeHandler):
" GPU_CLIENT_DCHECK(%s != 0);\n" % func.GetOriginalArgs()[-1].name)
file.Write(" %sHelper(%s);\n" %
(func.original_name, func.GetOriginalArgs()[-1].name))
+ file.Write(" CheckGLError();\n")
file.Write("}\n")
file.Write("\n")
@@ -4111,6 +4116,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
for arg in func.GetOriginalArgs():
arg.WriteClientSideValidationCode(file, func)
code = """ %(name)sHelper(%(args)s);
+ CheckGLError();
}
"""
@@ -4294,6 +4300,7 @@ class GETnHandler(TypeHandler):
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
"""
file.Write(code % {
@@ -4501,6 +4508,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
arg.WriteClientSideValidationCode(file, func)
file.Write(" helper_->%sImmediate(%s);\n" %
(func.name, func.MakeOriginalArgString("")))
+ file.Write(" CheckGLError();\n")
file.Write("}\n")
file.Write("\n")
@@ -4764,6 +4772,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
arg.WriteClientSideValidationCode(file, func)
file.Write(" helper_->%sImmediate(%s);\n" %
(func.name, func.MakeOriginalArgString("")))
+ file.Write(" CheckGLError();\n")
file.Write("}\n")
file.Write("\n")
@@ -5238,8 +5247,10 @@ TEST_F(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
" helper_->%s(%s%sGetResultShmId(), GetResultShmOffset());\n" %
(func.name, arg_string, comma))
file.Write(" WaitForCmd();\n")
- file.Write(' GPU_CLIENT_LOG("returned " << *result);\n')
- file.Write(" return *result;\n")
+ file.Write(" %s result_value = *result;\n" % func.return_type)
+ file.Write(' GPU_CLIENT_LOG("returned " << result_value);\n')
+ file.Write(" CheckGLError();\n")
+ file.Write(" return result_value;\n")
file.Write("}\n")
file.Write("\n")
@@ -5316,6 +5327,7 @@ class STRnHandler(TypeHandler):
if (%(length_name)s != NULL) {
*%(length_name)s = max_size;
}
+ CheckGLError();
}
"""
args = func.GetOriginalArgs()
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index 641a19e..5ff6263 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -341,11 +341,24 @@ GLenum GLES2Implementation::GetGLError() {
return error;
}
+#if defined(GL_CLIENT_FAIL_GL_ERRORS)
+void GLES2Implementation::FailGLError(GLenum error) {
+ if (error != GL_NO_ERROR) {
+ GPU_NOTREACHED() << "Error";
+ }
+}
+// NOTE: Calling GetGLError overwrites data in the result buffer.
+void GLES2Implementation::CheckGLError() {
+ FailGLError(GetGLError());
+}
+#endif // defined(GPU_CLIENT_FAIL_GL_ERRORS)
+
void GLES2Implementation::SetGLError(
GLenum error, const char* function_name, const char* msg) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] Client Synthesized Error: "
<< GLES2Util::GetStringError(error) << ": "
<< function_name << ": " << msg);
+ FailGLError(error);
if (msg) {
last_error_ = msg;
}
@@ -474,6 +487,7 @@ void GLES2Implementation::Disable(GLenum cap) {
if (!state_.SetCapabilityState(cap, false, &changed) || changed) {
helper_->Disable(cap);
}
+ CheckGLError();
}
void GLES2Implementation::Enable(GLenum cap) {
@@ -484,6 +498,7 @@ void GLES2Implementation::Enable(GLenum cap) {
if (!state_.SetCapabilityState(cap, true, &changed) || changed) {
helper_->Enable(cap);
}
+ CheckGLError();
}
GLboolean GLES2Implementation::IsEnabled(GLenum cap) {
@@ -504,6 +519,7 @@ GLboolean GLES2Implementation::IsEnabled(GLenum cap) {
}
GPU_CLIENT_LOG("returned " << state);
+ CheckGLError();
return state;
}
@@ -641,6 +657,7 @@ GLuint GLES2Implementation::GetMaxValueInBufferCHROMIUM(
GLuint result = GetMaxValueInBufferCHROMIUMHelper(
buffer_id, count, type, offset);
GPU_CLIENT_LOG("returned " << result);
+ CheckGLError();
return result;
}
@@ -686,6 +703,7 @@ void GLES2Implementation::DrawElements(
}
helper_->DrawElements(mode, count, type, offset);
RestoreElementAndArrayBuffers(simulated);
+ CheckGLError();
}
void GLES2Implementation::Flush() {
@@ -841,6 +859,7 @@ void GLES2Implementation::BindAttribLocation(
SetBucketAsString(kResultBucketId, name);
helper_->BindAttribLocationBucket(program, index, kResultBucketId);
helper_->SetBucketSize(kResultBucketId, 0);
+ CheckGLError();
}
void GLES2Implementation::BindUniformLocationCHROMIUM(
@@ -852,6 +871,7 @@ void GLES2Implementation::BindUniformLocationCHROMIUM(
helper_->BindUniformLocationCHROMIUMBucket(
program, location, kResultBucketId);
helper_->SetBucketSize(kResultBucketId, 0);
+ CheckGLError();
}
void GLES2Implementation::GetVertexAttribPointerv(
@@ -880,6 +900,7 @@ void GLES2Implementation::GetVertexAttribPointerv(
GPU_CLIENT_LOG(" " << i << ": " << ptr[i]);
}
});
+ CheckGLError();
}
bool GLES2Implementation::DeleteProgramHelper(GLuint program) {
@@ -947,6 +968,7 @@ GLint GLES2Implementation::GetAttribLocation(
GLint loc = share_group_->program_info_manager()->GetAttribLocation(
this, program, name);
GPU_CLIENT_LOG("returned " << loc);
+ CheckGLError();
return loc;
}
@@ -975,6 +997,7 @@ GLint GLES2Implementation::GetUniformLocation(
GLint loc = share_group_->program_info_manager()->GetUniformLocation(
this, program, name);
GPU_CLIENT_LOG("returned " << loc);
+ CheckGLError();
return loc;
}
@@ -985,6 +1008,7 @@ void GLES2Implementation::UseProgram(GLuint program) {
current_program_ = program;
helper_->UseProgram(program);
}
+ CheckGLError();
}
bool GLES2Implementation::GetProgramivHelper(
@@ -1004,6 +1028,7 @@ void GLES2Implementation::LinkProgram(GLuint program) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLinkProgram(" << program << ")");
helper_->LinkProgram(program);
share_group_->program_info_manager()->CreateInfo(program);
+ CheckGLError();
}
void GLES2Implementation::ShaderBinary(
@@ -1043,6 +1068,7 @@ void GLES2Implementation::ShaderBinary(
buffer.shm_id(),
buffer.offset() + shader_id_size,
length);
+ CheckGLError();
}
void GLES2Implementation::PixelStorei(GLenum pname, GLint param) {
@@ -1077,6 +1103,7 @@ void GLES2Implementation::PixelStorei(GLenum pname, GLint param) {
break;
}
helper_->PixelStorei(pname, param);
+ CheckGLError();
}
@@ -1108,6 +1135,7 @@ void GLES2Implementation::VertexAttribPointer(
helper_->VertexAttribPointer(index, size, type, normalized, stride,
ToGLuint(ptr));
#endif // !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
+ CheckGLError();
}
void GLES2Implementation::VertexAttribDivisorANGLE(
@@ -1119,6 +1147,7 @@ void GLES2Implementation::VertexAttribDivisorANGLE(
// Record the info on the client side.
vertex_array_object_manager_->SetAttribDivisor(index, divisor);
helper_->VertexAttribDivisorANGLE(index, divisor);
+ CheckGLError();
}
void GLES2Implementation::ShaderSource(
@@ -1187,6 +1216,7 @@ void GLES2Implementation::ShaderSource(
helper_->ShaderSourceBucket(shader, kResultBucketId);
helper_->SetBucketSize(kResultBucketId, 0);
+ CheckGLError();
}
void GLES2Implementation::BufferDataHelper(
@@ -1250,6 +1280,7 @@ void GLES2Implementation::BufferDataHelper(
// Make the buffer with BufferData then send via BufferSubData
helper_->BufferData(target, size, 0, 0, usage);
BufferSubDataHelperImpl(target, 0, size, data, &buffer);
+ CheckGLError();
}
void GLES2Implementation::BufferData(
@@ -1261,6 +1292,7 @@ void GLES2Implementation::BufferData(
<< static_cast<const void*>(data) << ", "
<< GLES2Util::GetStringBufferUsage(usage) << ")");
BufferDataHelper(target, size, data, usage);
+ CheckGLError();
}
void GLES2Implementation::BufferSubDataHelper(
@@ -1330,6 +1362,7 @@ void GLES2Implementation::BufferSubData(
<< offset << ", " << size << ", "
<< static_cast<const void*>(data) << ")");
BufferSubDataHelper(target, offset, size, data);
+ CheckGLError();
}
BufferTracker::Buffer*
@@ -1390,6 +1423,7 @@ void GLES2Implementation::CompressedTexImage2D(
// and we don't have to wait for the result so from the client's perspective
// it's cheap.
helper_->SetBucketSize(kResultBucketId, 0);
+ CheckGLError();
}
void GLES2Implementation::CompressedTexSubImage2D(
@@ -1427,6 +1461,7 @@ void GLES2Implementation::CompressedTexSubImage2D(
// and we don't have to wait for the result so from the client's perspective
// it's cheap.
helper_->SetBucketSize(kResultBucketId, 0);
+ CheckGLError();
}
namespace {
@@ -1500,6 +1535,7 @@ void GLES2Implementation::TexImage2D(
helper_->TexImage2D(
target, level, internalformat, width, height, border, format, type,
buffer->shm_id(), buffer->shm_offset() + offset);
+ CheckGLError();
return;
}
@@ -1508,6 +1544,7 @@ void GLES2Implementation::TexImage2D(
helper_->TexImage2D(
target, level, internalformat, width, height, border, format, type,
0, 0);
+ CheckGLError();
return;
}
@@ -1547,6 +1584,7 @@ void GLES2Implementation::TexImage2D(
helper_->TexImage2D(
target, level, internalformat, width, height, border, format, type,
buffer.shm_id(), buffer.offset());
+ CheckGLError();
return;
}
@@ -1557,6 +1595,7 @@ void GLES2Implementation::TexImage2D(
TexSubImage2DImpl(
target, level, 0, 0, width, height, format, type, unpadded_row_size,
pixels, src_padded_row_size, GL_TRUE, &buffer, padded_row_size);
+ CheckGLError();
}
void GLES2Implementation::TexSubImage2D(
@@ -1599,6 +1638,7 @@ void GLES2Implementation::TexSubImage2D(
helper_->TexSubImage2D(
target, level, xoffset, yoffset, width, height, format, type,
buffer->shm_id(), buffer->shm_offset() + offset, false);
+ CheckGLError();
return;
}
@@ -1630,6 +1670,7 @@ void GLES2Implementation::TexSubImage2D(
target, level, xoffset, yoffset, width, height, format, type,
unpadded_row_size, pixels, src_padded_row_size, GL_FALSE, &buffer,
padded_row_size);
+ CheckGLError();
}
static GLint ComputeNumRowsThatFitInBuffer(
@@ -1751,6 +1792,7 @@ void GLES2Implementation::GetActiveAttrib(
GPU_CLIENT_LOG(" name: " << name);
}
}
+ CheckGLError();
}
bool GLES2Implementation::GetActiveUniformHelper(
@@ -1821,6 +1863,7 @@ void GLES2Implementation::GetActiveUniform(
GPU_CLIENT_LOG(" name: " << name);
}
}
+ CheckGLError();
}
void GLES2Implementation::GetAttachedShaders(
@@ -1859,6 +1902,7 @@ void GLES2Implementation::GetAttachedShaders(
}
});
transfer_buffer_->FreePendingToken(result, token);
+ CheckGLError();
}
void GLES2Implementation::GetShaderPrecisionFormat(
@@ -1891,6 +1935,7 @@ void GLES2Implementation::GetShaderPrecisionFormat(
GPU_CLIENT_LOG(" min_range: " << precision[0]);
}
}
+ CheckGLError();
}
const GLubyte* GLES2Implementation::GetStringHelper(GLenum name) {
@@ -1944,6 +1989,7 @@ const GLubyte* GLES2Implementation::GetString(GLenum name) {
<< GLES2Util::GetStringStringType(name) << ")");
const GLubyte* result = GetStringHelper(name);
GPU_CLIENT_LOG(" returned " << reinterpret_cast<const char*>(result));
+ CheckGLError();
return result;
}
@@ -1969,6 +2015,7 @@ void GLES2Implementation::GetUniformfv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetUniformiv(
@@ -1993,6 +2040,7 @@ void GLES2Implementation::GetUniformiv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::ReadPixels(
@@ -2083,6 +2131,7 @@ void GLES2Implementation::ReadPixels(
yoffset += num_rows;
height -= num_rows;
}
+ CheckGLError();
}
void GLES2Implementation::ActiveTexture(GLenum texture) {
@@ -2099,6 +2148,7 @@ void GLES2Implementation::ActiveTexture(GLenum texture) {
active_texture_unit_ = texture_index;
helper_->ActiveTexture(texture);
+ CheckGLError();
}
void GLES2Implementation::GenBuffersHelper(
@@ -2377,6 +2427,7 @@ void GLES2Implementation::DisableVertexAttribArray(GLuint index) {
"[" << GetLogPrefix() << "] glDisableVertexAttribArray(" << index << ")");
vertex_array_object_manager_->SetAttribEnable(index, false);
helper_->DisableVertexAttribArray(index);
+ CheckGLError();
}
void GLES2Implementation::EnableVertexAttribArray(GLuint index) {
@@ -2385,6 +2436,7 @@ void GLES2Implementation::EnableVertexAttribArray(GLuint index) {
<< index << ")");
vertex_array_object_manager_->SetAttribEnable(index, true);
helper_->EnableVertexAttribArray(index);
+ CheckGLError();
}
void GLES2Implementation::DrawArrays(GLenum mode, GLint first, GLsizei count) {
@@ -2403,6 +2455,7 @@ void GLES2Implementation::DrawArrays(GLenum mode, GLint first, GLsizei count) {
}
helper_->DrawArrays(mode, first, count);
RestoreArrayBuffer(simulated);
+ CheckGLError();
}
void GLES2Implementation::GetVertexAttribfv(
@@ -2433,6 +2486,7 @@ void GLES2Implementation::GetVertexAttribfv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetVertexAttribiv(
@@ -2463,6 +2517,7 @@ void GLES2Implementation::GetVertexAttribiv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
GLboolean GLES2Implementation::EnableFeatureCHROMIUM(
@@ -2536,6 +2591,7 @@ void GLES2Implementation::UnmapBufferSubDataCHROMIUM(const void* mem) {
mb.target, mb.offset, mb.size, mb.shm_id, mb.shm_offset);
mapped_memory_->FreePendingToken(mb.shm_memory, helper_->InsertToken());
mapped_buffers_.erase(it);
+ CheckGLError();
}
void* GLES2Implementation::MapTexSubImage2DCHROMIUM(
@@ -2610,6 +2666,7 @@ void GLES2Implementation::UnmapTexSubImage2DCHROMIUM(const void* mem) {
mt.format, mt.type, mt.shm_id, mt.shm_offset, GL_FALSE);
mapped_memory_->FreePendingToken(mt.shm_memory, helper_->InsertToken());
mapped_textures_.erase(it);
+ CheckGLError();
}
void GLES2Implementation::ResizeCHROMIUM(GLuint width, GLuint height) {
@@ -2617,6 +2674,7 @@ void GLES2Implementation::ResizeCHROMIUM(GLuint width, GLuint height) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glResizeCHROMIUM("
<< width << ", " << height << ")");
helper_->ResizeCHROMIUM(width, height);
+ CheckGLError();
}
const GLchar* GLES2Implementation::GetRequestableExtensionsCHROMIUM() {
@@ -2734,6 +2792,7 @@ void GLES2Implementation::GetMultipleIntegervCHROMIUM(
GPU_CLIENT_LOG(" " << i << ": " << (results[i]));
}
});
+ CheckGLError();
}
void GLES2Implementation::GetProgramInfoCHROMIUMHelper(
@@ -2793,8 +2852,9 @@ GLuint GLES2Implementation::CreateStreamTextureCHROMIUM(GLuint texture) {
GetResultShmId(),
GetResultShmOffset());
WaitForCmd();
-
- return *result;
+ GLuint result_value = *result;
+ CheckGLError();
+ return result_value;
}
void GLES2Implementation::DestroyStreamTextureCHROMIUM(GLuint texture) {
@@ -2803,6 +2863,7 @@ void GLES2Implementation::DestroyStreamTextureCHROMIUM(GLuint texture) {
<< texture << ")");
TRACE_EVENT0("gpu", "GLES2::DestroyStreamTextureCHROMIUM");
helper_->DestroyStreamTextureCHROMIUM(texture);
+ CheckGLError();
}
void GLES2Implementation::PostSubBufferCHROMIUM(
@@ -2919,6 +2980,7 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
current_query_ = query;
query->Begin(this);
+ CheckGLError();
}
void GLES2Implementation::EndQueryEXT(GLenum target) {
@@ -2943,6 +3005,7 @@ void GLES2Implementation::EndQueryEXT(GLenum target) {
current_query_->End(this);
current_query_ = NULL;
+ CheckGLError();
}
void GLES2Implementation::GetQueryivEXT(
@@ -2960,6 +3023,7 @@ void GLES2Implementation::GetQueryivEXT(
*params = (current_query_ && current_query_->target() == target) ?
current_query_->id() : 0;
GPU_CLIENT_LOG(" " << *params);
+ CheckGLError();
}
void GLES2Implementation::GetQueryObjectuivEXT(
@@ -3009,6 +3073,7 @@ void GLES2Implementation::GetQueryObjectuivEXT(
break;
}
GPU_CLIENT_LOG(" " << *params);
+ CheckGLError();
}
void GLES2Implementation::DrawArraysInstancedANGLE(
@@ -3036,6 +3101,7 @@ void GLES2Implementation::DrawArraysInstancedANGLE(
}
helper_->DrawArraysInstancedANGLE(mode, first, count, primcount);
RestoreArrayBuffer(simulated);
+ CheckGLError();
}
void GLES2Implementation::DrawElementsInstancedANGLE(
@@ -3073,6 +3139,7 @@ void GLES2Implementation::DrawElementsInstancedANGLE(
}
helper_->DrawElementsInstancedANGLE(mode, count, type, offset, primcount);
RestoreElementAndArrayBuffers(simulated);
+ CheckGLError();
}
void GLES2Implementation::GenMailboxCHROMIUM(
@@ -3088,6 +3155,7 @@ void GLES2Implementation::GenMailboxCHROMIUM(
GetBucketContents(kResultBucketId, &result);
std::copy(result.begin(), result.end(), mailbox);
+ CheckGLError();
}
void GLES2Implementation::PushGroupMarkerEXT(
@@ -3168,6 +3236,7 @@ void* GLES2Implementation::MapBufferCHROMIUM(GLuint target, GLenum access) {
GPU_DCHECK(buffer->address());
GPU_CLIENT_LOG(" returned " << buffer->address());
+ CheckGLError();
return buffer->address();
}
@@ -3190,7 +3259,7 @@ GLboolean GLES2Implementation::UnmapBufferCHROMIUM(GLuint target) {
return false;
}
buffer->set_mapped(false);
-
+ CheckGLError();
return true;
}
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h
index 0791558..75dba70 100644
--- a/gpu/command_buffer/client/gles2_implementation.h
+++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -49,6 +49,14 @@
#define GPU_CLIENT_DCHECK_CODE_BLOCK(code)
#endif
+#if defined(GPU_CLIENT_DEBUG)
+ // Set to 1 to have the client fail when a GL error is generated.
+ // This helps find bugs in the renderer since the debugger stops on the error.
+# if 0
+# define GL_CLIENT_FAIL_GL_ERRORS
+# endif
+#endif
+
// Check that destination pointers point to initialized memory.
// When the context is lost, calling GL function has no effect so if destination
// pointers point to initialized memory it can often lead to crash bugs. eg.
@@ -475,6 +483,14 @@ class GLES2_IMPL_EXPORT GLES2Implementation : public GLES2Interface {
const std::string& GetLogPrefix() const;
+#if defined(GL_CLIENT_FAIL_GL_ERRORS)
+ void CheckGLError();
+ void FailGLError(GLenum error);
+#else
+ void CheckGLError() { }
+ void FailGLError(GLenum /* error */) { }
+#endif
+
GLES2Util util_;
GLES2CmdHelper* helper_;
TransferBufferInterface* transfer_buffer_;
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
index 8e452c2..9cc5923 100644
--- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -15,6 +15,7 @@ void GLES2Implementation::AttachShader(GLuint program, GLuint shader) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glAttachShader(" << program << ", " << shader << ")"); // NOLINT
helper_->AttachShader(program, shader);
+ CheckGLError();
}
void GLES2Implementation::BindBuffer(GLenum target, GLuint buffer) {
@@ -27,6 +28,7 @@ void GLES2Implementation::BindBuffer(GLenum target, GLuint buffer) {
if (BindBufferHelper(target, buffer)) {
helper_->BindBuffer(target, buffer);
}
+ CheckGLError();
}
void GLES2Implementation::BindFramebuffer(GLenum target, GLuint framebuffer) {
@@ -40,6 +42,7 @@ void GLES2Implementation::BindFramebuffer(GLenum target, GLuint framebuffer) {
if (BindFramebufferHelper(target, framebuffer)) {
helper_->BindFramebuffer(target, framebuffer);
}
+ CheckGLError();
}
void GLES2Implementation::BindRenderbuffer(
@@ -54,6 +57,7 @@ void GLES2Implementation::BindRenderbuffer(
if (BindRenderbufferHelper(target, renderbuffer)) {
helper_->BindRenderbuffer(target, renderbuffer);
}
+ CheckGLError();
}
void GLES2Implementation::BindTexture(GLenum target, GLuint texture) {
@@ -66,6 +70,7 @@ void GLES2Implementation::BindTexture(GLenum target, GLuint texture) {
if (BindTextureHelper(target, texture)) {
helper_->BindTexture(target, texture);
}
+ CheckGLError();
}
void GLES2Implementation::BlendColor(
@@ -73,12 +78,14 @@ void GLES2Implementation::BlendColor(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendColor(" << red << ", " << green << ", " << blue << ", " << alpha << ")"); // NOLINT
helper_->BlendColor(red, green, blue, alpha);
+ CheckGLError();
}
void GLES2Implementation::BlendEquation(GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquation(" << GLES2Util::GetStringEquation(mode) << ")"); // NOLINT
helper_->BlendEquation(mode);
+ CheckGLError();
}
void GLES2Implementation::BlendEquationSeparate(
@@ -86,12 +93,14 @@ void GLES2Implementation::BlendEquationSeparate(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquationSeparate(" << GLES2Util::GetStringEquation(modeRGB) << ", " << GLES2Util::GetStringEquation(modeAlpha) << ")"); // NOLINT
helper_->BlendEquationSeparate(modeRGB, modeAlpha);
+ CheckGLError();
}
void GLES2Implementation::BlendFunc(GLenum sfactor, GLenum dfactor) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFunc(" << GLES2Util::GetStringSrcBlendFactor(sfactor) << ", " << GLES2Util::GetStringDstBlendFactor(dfactor) << ")"); // NOLINT
helper_->BlendFunc(sfactor, dfactor);
+ CheckGLError();
}
void GLES2Implementation::BlendFuncSeparate(
@@ -99,6 +108,7 @@ void GLES2Implementation::BlendFuncSeparate(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFuncSeparate(" << GLES2Util::GetStringSrcBlendFactor(srcRGB) << ", " << GLES2Util::GetStringDstBlendFactor(dstRGB) << ", " << GLES2Util::GetStringSrcBlendFactor(srcAlpha) << ", " << GLES2Util::GetStringDstBlendFactor(dstAlpha) << ")"); // NOLINT
helper_->BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+ CheckGLError();
}
GLenum GLES2Implementation::CheckFramebufferStatus(GLenum target) {
@@ -113,14 +123,17 @@ GLenum GLES2Implementation::CheckFramebufferStatus(GLenum target) {
helper_->CheckFramebufferStatus(
target, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLenum result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
void GLES2Implementation::Clear(GLbitfield mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClear(" << mask << ")");
helper_->Clear(mask);
+ CheckGLError();
}
void GLES2Implementation::ClearColor(
@@ -128,18 +141,21 @@ void GLES2Implementation::ClearColor(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearColor(" << red << ", " << green << ", " << blue << ", " << alpha << ")"); // NOLINT
helper_->ClearColor(red, green, blue, alpha);
+ CheckGLError();
}
void GLES2Implementation::ClearDepthf(GLclampf depth) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearDepthf(" << depth << ")");
helper_->ClearDepthf(depth);
+ CheckGLError();
}
void GLES2Implementation::ClearStencil(GLint s) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearStencil(" << s << ")");
helper_->ClearStencil(s);
+ CheckGLError();
}
void GLES2Implementation::ColorMask(
@@ -147,12 +163,14 @@ void GLES2Implementation::ColorMask(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glColorMask(" << GLES2Util::GetStringBool(red) << ", " << GLES2Util::GetStringBool(green) << ", " << GLES2Util::GetStringBool(blue) << ", " << GLES2Util::GetStringBool(alpha) << ")"); // NOLINT
helper_->ColorMask(red, green, blue, alpha);
+ CheckGLError();
}
void GLES2Implementation::CompileShader(GLuint shader) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompileShader(" << shader << ")"); // NOLINT
helper_->CompileShader(shader);
+ CheckGLError();
}
void GLES2Implementation::CopyTexImage2D(
@@ -170,6 +188,7 @@ void GLES2Implementation::CopyTexImage2D(
}
helper_->CopyTexImage2D(
target, level, internalformat, x, y, width, height, border);
+ CheckGLError();
}
void GLES2Implementation::CopyTexSubImage2D(
@@ -187,6 +206,7 @@ void GLES2Implementation::CopyTexSubImage2D(
}
helper_->CopyTexSubImage2D(
target, level, xoffset, yoffset, x, y, width, height);
+ CheckGLError();
}
GLuint GLES2Implementation::CreateProgram() {
@@ -197,6 +217,7 @@ GLuint GLES2Implementation::CreateProgram() {
MakeIds(this, 0, 1, &client_id);
helper_->CreateProgram(client_id);
GPU_CLIENT_LOG("returned " << client_id);
+ CheckGLError();
return client_id;
}
@@ -208,6 +229,7 @@ GLuint GLES2Implementation::CreateShader(GLenum type) {
MakeIds(this, 0, 1, &client_id);
helper_->CreateShader(type, client_id);
GPU_CLIENT_LOG("returned " << client_id);
+ CheckGLError();
return client_id;
}
@@ -215,6 +237,7 @@ void GLES2Implementation::CullFace(GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCullFace(" << GLES2Util::GetStringFaceType(mode) << ")"); // NOLINT
helper_->CullFace(mode);
+ CheckGLError();
}
void GLES2Implementation::DeleteBuffers(GLsizei n, const GLuint* buffers) {
@@ -235,6 +258,7 @@ void GLES2Implementation::DeleteBuffers(GLsizei n, const GLuint* buffers) {
return;
}
DeleteBuffersHelper(n, buffers);
+ CheckGLError();
}
void GLES2Implementation::DeleteFramebuffers(
@@ -256,6 +280,7 @@ void GLES2Implementation::DeleteFramebuffers(
return;
}
DeleteFramebuffersHelper(n, framebuffers);
+ CheckGLError();
}
void GLES2Implementation::DeleteProgram(GLuint program) {
@@ -263,6 +288,7 @@ void GLES2Implementation::DeleteProgram(GLuint program) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteProgram(" << program << ")"); // NOLINT
GPU_CLIENT_DCHECK(program != 0);
DeleteProgramHelper(program);
+ CheckGLError();
}
void GLES2Implementation::DeleteRenderbuffers(
@@ -284,6 +310,7 @@ void GLES2Implementation::DeleteRenderbuffers(
return;
}
DeleteRenderbuffersHelper(n, renderbuffers);
+ CheckGLError();
}
void GLES2Implementation::DeleteShader(GLuint shader) {
@@ -291,6 +318,7 @@ void GLES2Implementation::DeleteShader(GLuint shader) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteShader(" << shader << ")");
GPU_CLIENT_DCHECK(shader != 0);
DeleteShaderHelper(shader);
+ CheckGLError();
}
void GLES2Implementation::DeleteTextures(GLsizei n, const GLuint* textures) {
@@ -311,30 +339,35 @@ void GLES2Implementation::DeleteTextures(GLsizei n, const GLuint* textures) {
return;
}
DeleteTexturesHelper(n, textures);
+ CheckGLError();
}
void GLES2Implementation::DepthFunc(GLenum func) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthFunc(" << GLES2Util::GetStringCmpFunction(func) << ")"); // NOLINT
helper_->DepthFunc(func);
+ CheckGLError();
}
void GLES2Implementation::DepthMask(GLboolean flag) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthMask(" << GLES2Util::GetStringBool(flag) << ")"); // NOLINT
helper_->DepthMask(flag);
+ CheckGLError();
}
void GLES2Implementation::DepthRangef(GLclampf zNear, GLclampf zFar) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthRangef(" << zNear << ", " << zFar << ")"); // NOLINT
helper_->DepthRangef(zNear, zFar);
+ CheckGLError();
}
void GLES2Implementation::DetachShader(GLuint program, GLuint shader) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDetachShader(" << program << ", " << shader << ")"); // NOLINT
helper_->DetachShader(program, shader);
+ CheckGLError();
}
void GLES2Implementation::FramebufferRenderbuffer(
@@ -344,6 +377,7 @@ void GLES2Implementation::FramebufferRenderbuffer(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferRenderbuffer(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << GLES2Util::GetStringAttachment(attachment) << ", " << GLES2Util::GetStringRenderBufferTarget(renderbuffertarget) << ", " << renderbuffer << ")"); // NOLINT
helper_->FramebufferRenderbuffer(
target, attachment, renderbuffertarget, renderbuffer);
+ CheckGLError();
}
void GLES2Implementation::FramebufferTexture2D(
@@ -352,12 +386,14 @@ void GLES2Implementation::FramebufferTexture2D(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferTexture2D(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << GLES2Util::GetStringAttachment(attachment) << ", " << GLES2Util::GetStringTextureTarget(textarget) << ", " << texture << ", " << level << ")"); // NOLINT
helper_->FramebufferTexture2D(target, attachment, textarget, texture, level);
+ CheckGLError();
}
void GLES2Implementation::FrontFace(GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFrontFace(" << GLES2Util::GetStringFaceMode(mode) << ")"); // NOLINT
helper_->FrontFace(mode);
+ CheckGLError();
}
void GLES2Implementation::GenBuffers(GLsizei n, GLuint* buffers) {
@@ -377,12 +413,14 @@ void GLES2Implementation::GenBuffers(GLsizei n, GLuint* buffers) {
GPU_CLIENT_LOG(" " << i << ": " << buffers[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GenerateMipmap(GLenum target) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenerateMipmap(" << GLES2Util::GetStringTextureBindTarget(target) << ")"); // NOLINT
helper_->GenerateMipmap(target);
+ CheckGLError();
}
void GLES2Implementation::GenFramebuffers(GLsizei n, GLuint* framebuffers) {
@@ -402,6 +440,7 @@ void GLES2Implementation::GenFramebuffers(GLsizei n, GLuint* framebuffers) {
GPU_CLIENT_LOG(" " << i << ": " << framebuffers[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
@@ -421,6 +460,7 @@ void GLES2Implementation::GenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
GPU_CLIENT_LOG(" " << i << ": " << renderbuffers[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GenTextures(GLsizei n, GLuint* textures) {
@@ -440,6 +480,7 @@ void GLES2Implementation::GenTextures(GLsizei n, GLuint* textures) {
GPU_CLIENT_LOG(" " << i << ": " << textures[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetBooleanv(GLenum pname, GLboolean* params) {
@@ -464,6 +505,7 @@ void GLES2Implementation::GetBooleanv(GLenum pname, GLboolean* params) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetBufferParameteriv(
GLenum target, GLenum pname, GLint* params) {
@@ -488,6 +530,7 @@ void GLES2Implementation::GetBufferParameteriv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetFloatv(GLenum pname, GLfloat* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
@@ -510,6 +553,7 @@ void GLES2Implementation::GetFloatv(GLenum pname, GLfloat* params) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetFramebufferAttachmentParameteriv(
GLenum target, GLenum attachment, GLenum pname, GLint* params) {
@@ -535,6 +579,7 @@ void GLES2Implementation::GetFramebufferAttachmentParameteriv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetIntegerv(GLenum pname, GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
@@ -558,6 +603,7 @@ void GLES2Implementation::GetIntegerv(GLenum pname, GLint* params) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetProgramiv(
GLuint program, GLenum pname, GLint* params) {
@@ -582,6 +628,7 @@ void GLES2Implementation::GetProgramiv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetProgramInfoLog(
GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) {
@@ -609,6 +656,7 @@ void GLES2Implementation::GetProgramInfoLog(
if (length != NULL) {
*length = max_size;
}
+ CheckGLError();
}
void GLES2Implementation::GetRenderbufferParameteriv(
GLenum target, GLenum pname, GLint* params) {
@@ -633,6 +681,7 @@ void GLES2Implementation::GetRenderbufferParameteriv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetShaderiv(
GLuint shader, GLenum pname, GLint* params) {
@@ -657,6 +706,7 @@ void GLES2Implementation::GetShaderiv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetShaderInfoLog(
GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) {
@@ -684,6 +734,7 @@ void GLES2Implementation::GetShaderInfoLog(
if (length != NULL) {
*length = max_size;
}
+ CheckGLError();
}
void GLES2Implementation::GetShaderSource(
GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
@@ -711,6 +762,7 @@ void GLES2Implementation::GetShaderSource(
if (length != NULL) {
*length = max_size;
}
+ CheckGLError();
}
void GLES2Implementation::GetTexParameterfv(
GLenum target, GLenum pname, GLfloat* params) {
@@ -734,6 +786,7 @@ void GLES2Implementation::GetTexParameterfv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::GetTexParameteriv(
GLenum target, GLenum pname, GLint* params) {
@@ -758,11 +811,13 @@ void GLES2Implementation::GetTexParameteriv(
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::Hint(GLenum target, GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glHint(" << GLES2Util::GetStringHintTarget(target) << ", " << GLES2Util::GetStringHintMode(mode) << ")"); // NOLINT
helper_->Hint(target, mode);
+ CheckGLError();
}
GLboolean GLES2Implementation::IsBuffer(GLuint buffer) {
@@ -776,8 +831,10 @@ GLboolean GLES2Implementation::IsBuffer(GLuint buffer) {
*result = 0;
helper_->IsBuffer(buffer, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
GLboolean GLES2Implementation::IsFramebuffer(GLuint framebuffer) {
@@ -791,8 +848,10 @@ GLboolean GLES2Implementation::IsFramebuffer(GLuint framebuffer) {
*result = 0;
helper_->IsFramebuffer(framebuffer, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
GLboolean GLES2Implementation::IsProgram(GLuint program) {
@@ -806,8 +865,10 @@ GLboolean GLES2Implementation::IsProgram(GLuint program) {
*result = 0;
helper_->IsProgram(program, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
GLboolean GLES2Implementation::IsRenderbuffer(GLuint renderbuffer) {
@@ -822,8 +883,10 @@ GLboolean GLES2Implementation::IsRenderbuffer(GLuint renderbuffer) {
helper_->IsRenderbuffer(
renderbuffer, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
GLboolean GLES2Implementation::IsShader(GLuint shader) {
@@ -837,8 +900,10 @@ GLboolean GLES2Implementation::IsShader(GLuint shader) {
*result = 0;
helper_->IsShader(shader, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
GLboolean GLES2Implementation::IsTexture(GLuint texture) {
@@ -852,26 +917,31 @@ GLboolean GLES2Implementation::IsTexture(GLuint texture) {
*result = 0;
helper_->IsTexture(texture, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
void GLES2Implementation::LineWidth(GLfloat width) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLineWidth(" << width << ")");
helper_->LineWidth(width);
+ CheckGLError();
}
void GLES2Implementation::PolygonOffset(GLfloat factor, GLfloat units) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPolygonOffset(" << factor << ", " << units << ")"); // NOLINT
helper_->PolygonOffset(factor, units);
+ CheckGLError();
}
void GLES2Implementation::ReleaseShaderCompiler() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseShaderCompiler(" << ")");
helper_->ReleaseShaderCompiler();
+ CheckGLError();
}
void GLES2Implementation::RenderbufferStorage(
@@ -887,12 +957,14 @@ void GLES2Implementation::RenderbufferStorage(
return;
}
helper_->RenderbufferStorage(target, internalformat, width, height);
+ CheckGLError();
}
void GLES2Implementation::SampleCoverage(GLclampf value, GLboolean invert) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSampleCoverage(" << value << ", " << GLES2Util::GetStringBool(invert) << ")"); // NOLINT
helper_->SampleCoverage(value, invert);
+ CheckGLError();
}
void GLES2Implementation::Scissor(
@@ -908,12 +980,14 @@ void GLES2Implementation::Scissor(
return;
}
helper_->Scissor(x, y, width, height);
+ CheckGLError();
}
void GLES2Implementation::StencilFunc(GLenum func, GLint ref, GLuint mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFunc(" << GLES2Util::GetStringCmpFunction(func) << ", " << ref << ", " << mask << ")"); // NOLINT
helper_->StencilFunc(func, ref, mask);
+ CheckGLError();
}
void GLES2Implementation::StencilFuncSeparate(
@@ -921,24 +995,28 @@ void GLES2Implementation::StencilFuncSeparate(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFuncSeparate(" << GLES2Util::GetStringFaceType(face) << ", " << GLES2Util::GetStringCmpFunction(func) << ", " << ref << ", " << mask << ")"); // NOLINT
helper_->StencilFuncSeparate(face, func, ref, mask);
+ CheckGLError();
}
void GLES2Implementation::StencilMask(GLuint mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilMask(" << mask << ")");
helper_->StencilMask(mask);
+ CheckGLError();
}
void GLES2Implementation::StencilMaskSeparate(GLenum face, GLuint mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilMaskSeparate(" << GLES2Util::GetStringFaceType(face) << ", " << mask << ")"); // NOLINT
helper_->StencilMaskSeparate(face, mask);
+ CheckGLError();
}
void GLES2Implementation::StencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOp(" << GLES2Util::GetStringStencilOp(fail) << ", " << GLES2Util::GetStringStencilOp(zfail) << ", " << GLES2Util::GetStringStencilOp(zpass) << ")"); // NOLINT
helper_->StencilOp(fail, zfail, zpass);
+ CheckGLError();
}
void GLES2Implementation::StencilOpSeparate(
@@ -946,6 +1024,7 @@ void GLES2Implementation::StencilOpSeparate(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOpSeparate(" << GLES2Util::GetStringFaceType(face) << ", " << GLES2Util::GetStringStencilOp(fail) << ", " << GLES2Util::GetStringStencilOp(zfail) << ", " << GLES2Util::GetStringStencilOp(zpass) << ")"); // NOLINT
helper_->StencilOpSeparate(face, fail, zfail, zpass);
+ CheckGLError();
}
void GLES2Implementation::TexParameterf(
@@ -953,6 +1032,7 @@ void GLES2Implementation::TexParameterf(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterf(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << param << ")"); // NOLINT
helper_->TexParameterf(target, pname, param);
+ CheckGLError();
}
void GLES2Implementation::TexParameterfv(
@@ -961,6 +1041,7 @@ void GLES2Implementation::TexParameterfv(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterfv(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << params[0]);
helper_->TexParameterfvImmediate(target, pname, params);
+ CheckGLError();
}
void GLES2Implementation::TexParameteri(
@@ -968,6 +1049,7 @@ void GLES2Implementation::TexParameteri(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteri(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << param << ")"); // NOLINT
helper_->TexParameteri(target, pname, param);
+ CheckGLError();
}
void GLES2Implementation::TexParameteriv(
@@ -976,12 +1058,14 @@ void GLES2Implementation::TexParameteriv(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteriv(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << params[0]);
helper_->TexParameterivImmediate(target, pname, params);
+ CheckGLError();
}
void GLES2Implementation::Uniform1f(GLint location, GLfloat x) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1f(" << location << ", " << x << ")"); // NOLINT
helper_->Uniform1f(location, x);
+ CheckGLError();
}
void GLES2Implementation::Uniform1fv(
@@ -998,12 +1082,14 @@ void GLES2Implementation::Uniform1fv(
return;
}
helper_->Uniform1fvImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform1i(GLint location, GLint x) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1i(" << location << ", " << x << ")"); // NOLINT
helper_->Uniform1i(location, x);
+ CheckGLError();
}
void GLES2Implementation::Uniform1iv(
@@ -1020,12 +1106,14 @@ void GLES2Implementation::Uniform1iv(
return;
}
helper_->Uniform1ivImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform2f(GLint location, GLfloat x, GLfloat y) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2f(" << location << ", " << x << ", " << y << ")"); // NOLINT
helper_->Uniform2f(location, x, y);
+ CheckGLError();
}
void GLES2Implementation::Uniform2fv(
@@ -1042,12 +1130,14 @@ void GLES2Implementation::Uniform2fv(
return;
}
helper_->Uniform2fvImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform2i(GLint location, GLint x, GLint y) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2i(" << location << ", " << x << ", " << y << ")"); // NOLINT
helper_->Uniform2i(location, x, y);
+ CheckGLError();
}
void GLES2Implementation::Uniform2iv(
@@ -1064,6 +1154,7 @@ void GLES2Implementation::Uniform2iv(
return;
}
helper_->Uniform2ivImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform3f(
@@ -1071,6 +1162,7 @@ void GLES2Implementation::Uniform3f(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3f(" << location << ", " << x << ", " << y << ", " << z << ")"); // NOLINT
helper_->Uniform3f(location, x, y, z);
+ CheckGLError();
}
void GLES2Implementation::Uniform3fv(
@@ -1087,6 +1179,7 @@ void GLES2Implementation::Uniform3fv(
return;
}
helper_->Uniform3fvImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform3i(
@@ -1094,6 +1187,7 @@ void GLES2Implementation::Uniform3i(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3i(" << location << ", " << x << ", " << y << ", " << z << ")"); // NOLINT
helper_->Uniform3i(location, x, y, z);
+ CheckGLError();
}
void GLES2Implementation::Uniform3iv(
@@ -1110,6 +1204,7 @@ void GLES2Implementation::Uniform3iv(
return;
}
helper_->Uniform3ivImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform4f(
@@ -1117,6 +1212,7 @@ void GLES2Implementation::Uniform4f(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4f(" << location << ", " << x << ", " << y << ", " << z << ", " << w << ")"); // NOLINT
helper_->Uniform4f(location, x, y, z, w);
+ CheckGLError();
}
void GLES2Implementation::Uniform4fv(
@@ -1133,6 +1229,7 @@ void GLES2Implementation::Uniform4fv(
return;
}
helper_->Uniform4fvImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::Uniform4i(
@@ -1140,6 +1237,7 @@ void GLES2Implementation::Uniform4i(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4i(" << location << ", " << x << ", " << y << ", " << z << ", " << w << ")"); // NOLINT
helper_->Uniform4i(location, x, y, z, w);
+ CheckGLError();
}
void GLES2Implementation::Uniform4iv(
@@ -1156,6 +1254,7 @@ void GLES2Implementation::Uniform4iv(
return;
}
helper_->Uniform4ivImmediate(location, count, v);
+ CheckGLError();
}
void GLES2Implementation::UniformMatrix2fv(
@@ -1172,6 +1271,7 @@ void GLES2Implementation::UniformMatrix2fv(
return;
}
helper_->UniformMatrix2fvImmediate(location, count, transpose, value);
+ CheckGLError();
}
void GLES2Implementation::UniformMatrix3fv(
@@ -1188,6 +1288,7 @@ void GLES2Implementation::UniformMatrix3fv(
return;
}
helper_->UniformMatrix3fvImmediate(location, count, transpose, value);
+ CheckGLError();
}
void GLES2Implementation::UniformMatrix4fv(
@@ -1204,18 +1305,21 @@ void GLES2Implementation::UniformMatrix4fv(
return;
}
helper_->UniformMatrix4fvImmediate(location, count, transpose, value);
+ CheckGLError();
}
void GLES2Implementation::ValidateProgram(GLuint program) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glValidateProgram(" << program << ")"); // NOLINT
helper_->ValidateProgram(program);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib1f(GLuint indx, GLfloat x) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1f(" << indx << ", " << x << ")"); // NOLINT
helper_->VertexAttrib1f(indx, x);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib1fv(GLuint indx, const GLfloat* values) {
@@ -1223,12 +1327,14 @@ void GLES2Implementation::VertexAttrib1fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << values[0]);
helper_->VertexAttrib1fvImmediate(indx, values);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2f(" << indx << ", " << x << ", " << y << ")"); // NOLINT
helper_->VertexAttrib2f(indx, x, y);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib2fv(GLuint indx, const GLfloat* values) {
@@ -1236,6 +1342,7 @@ void GLES2Implementation::VertexAttrib2fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1]);
helper_->VertexAttrib2fvImmediate(indx, values);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib3f(
@@ -1243,6 +1350,7 @@ void GLES2Implementation::VertexAttrib3f(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3f(" << indx << ", " << x << ", " << y << ", " << z << ")"); // NOLINT
helper_->VertexAttrib3f(indx, x, y, z);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib3fv(GLuint indx, const GLfloat* values) {
@@ -1250,6 +1358,7 @@ void GLES2Implementation::VertexAttrib3fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", " << values[2]); // NOLINT
helper_->VertexAttrib3fvImmediate(indx, values);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib4f(
@@ -1257,6 +1366,7 @@ void GLES2Implementation::VertexAttrib4f(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4f(" << indx << ", " << x << ", " << y << ", " << z << ", " << w << ")"); // NOLINT
helper_->VertexAttrib4f(indx, x, y, z, w);
+ CheckGLError();
}
void GLES2Implementation::VertexAttrib4fv(GLuint indx, const GLfloat* values) {
@@ -1264,6 +1374,7 @@ void GLES2Implementation::VertexAttrib4fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", " << values[2] << ", " << values[3]); // NOLINT
helper_->VertexAttrib4fvImmediate(indx, values);
+ CheckGLError();
}
void GLES2Implementation::Viewport(
@@ -1279,6 +1390,7 @@ void GLES2Implementation::Viewport(
return;
}
helper_->Viewport(x, y, width, height);
+ CheckGLError();
}
void GLES2Implementation::BlitFramebufferEXT(
@@ -1288,6 +1400,7 @@ void GLES2Implementation::BlitFramebufferEXT(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlitFramebufferEXT(" << srcX0 << ", " << srcY0 << ", " << srcX1 << ", " << srcY1 << ", " << dstX0 << ", " << dstY0 << ", " << dstX1 << ", " << dstY1 << ", " << mask << ", " << GLES2Util::GetStringBlitFilter(filter) << ")"); // NOLINT
helper_->BlitFramebufferEXT(
srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ CheckGLError();
}
void GLES2Implementation::RenderbufferStorageMultisampleEXT(
@@ -1312,6 +1425,7 @@ void GLES2Implementation::RenderbufferStorageMultisampleEXT(
}
helper_->RenderbufferStorageMultisampleEXT(
target, samples, internalformat, width, height);
+ CheckGLError();
}
void GLES2Implementation::TexStorage2DEXT(
@@ -1332,6 +1446,7 @@ void GLES2Implementation::TexStorage2DEXT(
return;
}
helper_->TexStorage2DEXT(target, levels, internalFormat, width, height);
+ CheckGLError();
}
void GLES2Implementation::GenQueriesEXT(GLsizei n, GLuint* queries) {
@@ -1351,6 +1466,7 @@ void GLES2Implementation::GenQueriesEXT(GLsizei n, GLuint* queries) {
GPU_CLIENT_LOG(" " << i << ": " << queries[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::DeleteQueriesEXT(GLsizei n, const GLuint* queries) {
@@ -1371,6 +1487,7 @@ void GLES2Implementation::DeleteQueriesEXT(GLsizei n, const GLuint* queries) {
return;
}
DeleteQueriesEXTHelper(n, queries);
+ CheckGLError();
}
void GLES2Implementation::GenVertexArraysOES(GLsizei n, GLuint* arrays) {
@@ -1390,6 +1507,7 @@ void GLES2Implementation::GenVertexArraysOES(GLsizei n, GLuint* arrays) {
GPU_CLIENT_LOG(" " << i << ": " << arrays[i]);
}
});
+ CheckGLError();
}
void GLES2Implementation::DeleteVertexArraysOES(
@@ -1411,6 +1529,7 @@ void GLES2Implementation::DeleteVertexArraysOES(
return;
}
DeleteVertexArraysOESHelper(n, arrays);
+ CheckGLError();
}
GLboolean GLES2Implementation::IsVertexArrayOES(GLuint array) {
@@ -1424,8 +1543,10 @@ GLboolean GLES2Implementation::IsVertexArrayOES(GLuint array) {
*result = 0;
helper_->IsVertexArrayOES(array, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
- GPU_CLIENT_LOG("returned " << *result);
- return *result;
+ GLboolean result_value = *result;
+ GPU_CLIENT_LOG("returned " << result_value);
+ CheckGLError();
+ return result_value;
}
void GLES2Implementation::BindVertexArrayOES(GLuint array) {
@@ -1439,6 +1560,7 @@ void GLES2Implementation::BindVertexArrayOES(GLuint array) {
if (BindVertexArrayHelper(array)) {
helper_->BindVertexArrayOES(array);
}
+ CheckGLError();
}
void GLES2Implementation::GetTranslatedShaderSourceANGLE(
@@ -1467,6 +1589,7 @@ void GLES2Implementation::GetTranslatedShaderSourceANGLE(
if (length != NULL) {
*length = max_size;
}
+ CheckGLError();
}
void GLES2Implementation::TexImageIOSurface2DCHROMIUM(
GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
@@ -1484,6 +1607,7 @@ void GLES2Implementation::TexImageIOSurface2DCHROMIUM(
}
helper_->TexImageIOSurface2DCHROMIUM(
target, width, height, ioSurfaceId, plane);
+ CheckGLError();
}
void GLES2Implementation::CopyTextureCHROMIUM(
@@ -1493,6 +1617,7 @@ void GLES2Implementation::CopyTextureCHROMIUM(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTextureCHROMIUM(" << GLES2Util::GetStringEnum(target) << ", " << GLES2Util::GetStringEnum(source_id) << ", " << GLES2Util::GetStringEnum(dest_id) << ", " << level << ", " << internalformat << ")"); // NOLINT
helper_->CopyTextureCHROMIUM(
target, source_id, dest_id, level, internalformat);
+ CheckGLError();
}
void GLES2Implementation::ProduceTextureCHROMIUM(
@@ -1501,6 +1626,7 @@ void GLES2Implementation::ProduceTextureCHROMIUM(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glProduceTextureCHROMIUM(" << GLES2Util::GetStringTextureTarget(target) << ", " << static_cast<const void*>(mailbox) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << mailbox[0] << ", " << mailbox[1] << ", " << mailbox[2] << ", " << mailbox[3] << ", " << mailbox[4] << ", " << mailbox[5] << ", " << mailbox[6] << ", " << mailbox[7] << ", " << mailbox[8] << ", " << mailbox[9] << ", " << mailbox[10] << ", " << mailbox[11] << ", " << mailbox[12] << ", " << mailbox[13] << ", " << mailbox[14] << ", " << mailbox[15] << ", " << mailbox[16] << ", " << mailbox[17] << ", " << mailbox[18] << ", " << mailbox[19] << ", " << mailbox[20] << ", " << mailbox[21] << ", " << mailbox[22] << ", " << mailbox[23] << ", " << mailbox[24] << ", " << mailbox[25] << ", " << mailbox[26] << ", " << mailbox[27] << ", " << mailbox[28] << ", " << mailbox[29] << ", " << mailbox[30] << ", " << mailbox[31] << ", " << mailbox[32] << ", " << mailbox[33] << ", " << mailbox[34] << ", " << mailbox[35] << ", " << mailbox[36] << ", " << mailbox[37] << ", " << mailbox[38] << ", " << mailbox[39] << ", " << mailbox[40] << ", " << mailbox[41] << ", " << mailbox[42] << ", " << mailbox[43] << ", " << mailbox[44] << ", " << mailbox[45] << ", " << mailbox[46] << ", " << mailbox[47] << ", " << mailbox[48] << ", " << mailbox[49] << ", " << mailbox[50] << ", " << mailbox[51] << ", " << mailbox[52] << ", " << mailbox[53] << ", " << mailbox[54] << ", " << mailbox[55] << ", " << mailbox[56] << ", " << mailbox[57] << ", " << mailbox[58] << ", " << mailbox[59] << ", " << mailbox[60] << ", " << mailbox[61] << ", " << mailbox[62] << ", " << mailbox[63]); // NOLINT
helper_->ProduceTextureCHROMIUMImmediate(target, mailbox);
+ CheckGLError();
}
void GLES2Implementation::ConsumeTextureCHROMIUM(
@@ -1509,6 +1635,7 @@ void GLES2Implementation::ConsumeTextureCHROMIUM(
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glConsumeTextureCHROMIUM(" << GLES2Util::GetStringTextureTarget(target) << ", " << static_cast<const void*>(mailbox) << ")"); // NOLINT
GPU_CLIENT_LOG("values: " << mailbox[0] << ", " << mailbox[1] << ", " << mailbox[2] << ", " << mailbox[3] << ", " << mailbox[4] << ", " << mailbox[5] << ", " << mailbox[6] << ", " << mailbox[7] << ", " << mailbox[8] << ", " << mailbox[9] << ", " << mailbox[10] << ", " << mailbox[11] << ", " << mailbox[12] << ", " << mailbox[13] << ", " << mailbox[14] << ", " << mailbox[15] << ", " << mailbox[16] << ", " << mailbox[17] << ", " << mailbox[18] << ", " << mailbox[19] << ", " << mailbox[20] << ", " << mailbox[21] << ", " << mailbox[22] << ", " << mailbox[23] << ", " << mailbox[24] << ", " << mailbox[25] << ", " << mailbox[26] << ", " << mailbox[27] << ", " << mailbox[28] << ", " << mailbox[29] << ", " << mailbox[30] << ", " << mailbox[31] << ", " << mailbox[32] << ", " << mailbox[33] << ", " << mailbox[34] << ", " << mailbox[35] << ", " << mailbox[36] << ", " << mailbox[37] << ", " << mailbox[38] << ", " << mailbox[39] << ", " << mailbox[40] << ", " << mailbox[41] << ", " << mailbox[42] << ", " << mailbox[43] << ", " << mailbox[44] << ", " << mailbox[45] << ", " << mailbox[46] << ", " << mailbox[47] << ", " << mailbox[48] << ", " << mailbox[49] << ", " << mailbox[50] << ", " << mailbox[51] << ", " << mailbox[52] << ", " << mailbox[53] << ", " << mailbox[54] << ", " << mailbox[55] << ", " << mailbox[56] << ", " << mailbox[57] << ", " << mailbox[58] << ", " << mailbox[59] << ", " << mailbox[60] << ", " << mailbox[61] << ", " << mailbox[62] << ", " << mailbox[63]); // NOLINT
helper_->ConsumeTextureCHROMIUMImmediate(target, mailbox);
+ CheckGLError();
}
void GLES2Implementation::BindTexImage2DCHROMIUM(
@@ -1516,6 +1643,7 @@ void GLES2Implementation::BindTexImage2DCHROMIUM(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexImage2DCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << imageId << ")"); // NOLINT
helper_->BindTexImage2DCHROMIUM(target, imageId);
+ CheckGLError();
}
void GLES2Implementation::ReleaseTexImage2DCHROMIUM(
@@ -1523,12 +1651,14 @@ void GLES2Implementation::ReleaseTexImage2DCHROMIUM(
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseTexImage2DCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << imageId << ")"); // NOLINT
helper_->ReleaseTexImage2DCHROMIUM(target, imageId);
+ CheckGLError();
}
void GLES2Implementation::TraceEndCHROMIUM() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTraceEndCHROMIUM(" << ")");
helper_->TraceEndCHROMIUM();
+ CheckGLError();
}
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index bcdba58..78aa414 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -790,6 +790,32 @@ class GLES2DecoderImpl : public GLES2Decoder {
return program_manager()->GetProgramInfo(client_id);
}
+#if defined(NDEBUG)
+ void LogClientServiceMapping(
+ const char* /* function_name */,
+ GLuint /* client_id */,
+ GLuint /* service_id */) {
+ }
+ template<typename T>
+ void LogClientServiceForInfo(
+ T* /* info */, GLuint /* client_id */, const char* /* function_name */) {
+ }
+#else
+ void LogClientServiceMapping(
+ const char* function_name, GLuint client_id, GLuint service_id) {
+ DLOG(INFO) << "[" << GetLogPrefix() << "] " << function_name
+ << ": client_id = " << client_id
+ << ", service_id = " << service_id;
+ }
+ template<typename T>
+ void LogClientServiceForInfo(
+ T* info, GLuint client_id, const char* function_name) {
+ if (service_logging_ && info) {
+ LogClientServiceMapping(function_name, client_id, info->service_id());
+ }
+ }
+#endif
+
// Gets the program info for the given program. If it's not a program
// generates a GL error. Returns NULL if not program.
ProgramManager::ProgramInfo* GetProgramInfoNotShader(
@@ -803,6 +829,7 @@ class GLES2DecoderImpl : public GLES2Decoder {
SetGLError(GL_INVALID_VALUE, function_name, "unknown program");
}
}
+ LogClientServiceForInfo(info, client_id, function_name);
return info;
}
@@ -835,6 +862,7 @@ class GLES2DecoderImpl : public GLES2Decoder {
GL_INVALID_VALUE, function_name, "unknown shader");
}
}
+ LogClientServiceForInfo(info, client_id, function_name);
return info;
}
@@ -1580,6 +1608,9 @@ class GLES2DecoderImpl : public GLES2Decoder {
bool compile_shader_always_succeeds_;
+ // Log extra info.
+ bool service_logging_;
+
#if defined(OS_MACOSX)
typedef std::map<GLuint, CFTypeRef> TextureToIOSurfaceMap;
TextureToIOSurfaceMap texture_to_io_surface_map_;
@@ -1982,6 +2013,8 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
force_webgl_glsl_validation_(false),
derivatives_explicitly_enabled_(false),
compile_shader_always_succeeds_(false),
+ service_logging_(CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableGPUServiceLoggingGPU)),
viewport_max_width_(0),
viewport_max_height_(0),
texture_upload_count_(0) {
@@ -3311,6 +3344,7 @@ void GLES2DecoderImpl::DoBindBuffer(GLenum target, GLuint client_id) {
id_allocator->MarkAsUsed(client_id);
}
}
+ LogClientServiceForInfo(info, client_id, "glBindBuffer");
if (info) {
if (!buffer_manager()->SetTarget(info, target)) {
SetGLError(GL_INVALID_OPERATION,
@@ -3436,6 +3470,7 @@ void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) {
}
info->MarkAsValid();
}
+ LogClientServiceForInfo(info, client_id, "glBindFramebuffer");
if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) {
state_.bound_draw_framebuffer = info;
@@ -3480,6 +3515,7 @@ void GLES2DecoderImpl::DoBindRenderbuffer(GLenum target, GLuint client_id) {
}
info->MarkAsValid();
}
+ LogClientServiceForInfo(info, client_id, "glBindRenerbuffer");
state_.bound_renderbuffer = info;
glBindRenderbufferEXT(target, service_id);
}
@@ -3521,6 +3557,7 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) {
"glBindTexture", "illegal target for stream texture.");
return;
}
+ LogClientServiceForInfo(info, client_id, "glBindTexture");
if (info->target() == 0) {
texture_manager()->SetInfoTarget(info, target);
}
@@ -4654,6 +4691,7 @@ void GLES2DecoderImpl::DoLinkProgram(GLuint program) {
return;
}
+ LogClientServiceForInfo(info, program, "glLinkProgram");
ShaderTranslator* vertex_translator = NULL;
ShaderTranslator* fragment_translator = NULL;
if (use_shader_translator_) {
@@ -5135,6 +5173,7 @@ void GLES2DecoderImpl::DoUseProgram(GLuint program) {
program_manager()->UnuseProgram(shader_manager(), state_.current_program);
}
state_.current_program = info;
+ LogClientServiceMapping("glUseProgram", program, service_id);
glUseProgram(service_id);
if (state_.current_program) {
program_manager()->UseProgram(state_.current_program);
diff --git a/gpu/command_buffer/service/gpu_switches.cc b/gpu/command_buffer/service/gpu_switches.cc
index d96fd71..dd84f0b 100644
--- a/gpu/command_buffer/service/gpu_switches.cc
+++ b/gpu/command_buffer/service/gpu_switches.cc
@@ -26,6 +26,11 @@ const char kEnableGPUCommandLogging[] = "enable-gpu-command-logging";
// Turn on Calling GL Error after every command.
const char kEnableGPUDebugging[] = "enable-gpu-debugging";
+// Enable GPU service logging. Note: This is the same switch as the one in
+// gl_switches.cc. It's defined here again to avoid dependencies between
+// dlls.
+const char kEnableGPUServiceLoggingGPU[] = "enable-gpu-service-logging";
+
// Turn on user-defined name hashing in shaders.
const char kEnableShaderNameHashing[] = "enable-shader-name-hashing";
@@ -55,6 +60,7 @@ const char* kGpuSwitches[] = {
kDisableGpuDriverBugWorkarounds,
kEnableGPUCommandLogging,
kEnableGPUDebugging,
+ kEnableGPUServiceLoggingGPU,
kDisableGpuProgramCache,
kEnforceGLMinimums,
kForceGLFinishWorkaround,
diff --git a/gpu/command_buffer/service/gpu_switches.h b/gpu/command_buffer/service/gpu_switches.h
index 90d4a97..0c45be6 100644
--- a/gpu/command_buffer/service/gpu_switches.h
+++ b/gpu/command_buffer/service/gpu_switches.h
@@ -17,6 +17,7 @@ GPU_EXPORT extern const char kDisableGLSLTranslator[];
GPU_EXPORT extern const char kDisableGpuDriverBugWorkarounds[];
GPU_EXPORT extern const char kEnableGPUCommandLogging[];
GPU_EXPORT extern const char kEnableGPUDebugging[];
+GPU_EXPORT extern const char kEnableGPUServiceLoggingGPU[];
GPU_EXPORT extern const char kEnableShaderNameHashing[];
GPU_EXPORT extern const char kDisableGpuProgramCache[];
GPU_EXPORT extern const char kEnforceGLMinimums[];
diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc
index dcc6745..ffa2f59 100644
--- a/gpu/command_buffer/service/program_manager.cc
+++ b/gpu/command_buffer/service/program_manager.cc
@@ -307,6 +307,20 @@ void ProgramManager::ProgramInfo::Update() {
attrib_location_to_index_map_[info.location] = ii;
}
+#if !defined(NDEBUG)
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableGPUServiceLoggingGPU)) {
+ DLOG(INFO) << "----: attribs for service_id: " << service_id();
+ for (size_t ii = 0; ii < attrib_infos_.size(); ++ii) {
+ const VertexAttribInfo& info = attrib_infos_[ii];
+ DLOG(INFO) << ii << ": loc = " << info.location
+ << ", size = " << info.size
+ << ", type = " << GLES2Util::GetStringEnum(info.type)
+ << ", name = " << info.name;
+ }
+ }
+#endif
+
max_len = 0;
GLint num_uniforms = 0;
glGetProgramiv(service_id_, GL_ACTIVE_UNIFORMS, &num_uniforms);
@@ -371,6 +385,22 @@ void ProgramManager::ProgramInfo::Update() {
}
}
+#if !defined(NDEBUG)
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableGPUServiceLoggingGPU)) {
+ DLOG(INFO) << "----: uniforms for service_id: " << service_id();
+ for (size_t ii = 0; ii < uniform_infos_.size(); ++ii) {
+ const UniformInfo& info = uniform_infos_[ii];
+ if (info.IsValid()) {
+ DLOG(INFO) << ii << ": loc = " << info.element_locations[0]
+ << ", size = " << info.size
+ << ", type = " << GLES2Util::GetStringEnum(info.type)
+ << ", name = " << info.name;
+ }
+ }
+ }
+#endif
+
valid_ = true;
}