diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 00:06:19 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 00:06:19 +0000 |
commit | cae201773a5e81fc5cf80a07f9a1ca6891c3c51d (patch) | |
tree | 2e42dfe195b31ea71b7486f6ed959b104dbe40b6 /gpu | |
parent | 1a1399b8dfcae5e3c55fa54e36ccde927b8476c2 (diff) | |
download | chromium_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-x | gpu/command_buffer/build_gles2_cmd_buffer.py | 16 | ||||
-rw-r--r-- | gpu/command_buffer/client/gles2_implementation.cc | 75 | ||||
-rw-r--r-- | gpu/command_buffer/client/gles2_implementation.h | 16 | ||||
-rw-r--r-- | gpu/command_buffer/client/gles2_implementation_impl_autogen.h | 162 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder.cc | 39 | ||||
-rw-r--r-- | gpu/command_buffer/service/gpu_switches.cc | 6 | ||||
-rw-r--r-- | gpu/command_buffer/service/gpu_switches.h | 1 | ||||
-rw-r--r-- | gpu/command_buffer/service/program_manager.cc | 30 |
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; } |