Chromium Code Reviews| Index: gpu/command_buffer/service/gl_utils.cc |
| diff --git a/gpu/command_buffer/service/gl_utils.cc b/gpu/command_buffer/service/gl_utils.cc |
| index 331db1262d34a1e64dedc75901badbc71d179a48..5a8fd50025224a2bcf25d0a0729f7a9b898118f3 100644 |
| --- a/gpu/command_buffer/service/gl_utils.cc |
| +++ b/gpu/command_buffer/service/gl_utils.cc |
| @@ -12,6 +12,63 @@ |
| namespace gpu { |
| namespace gles2 { |
| +namespace { |
| +const char* GetDebugSourceString(GLenum source) { |
| + switch (source) { |
| + case GL_DEBUG_SOURCE_API: |
| + return "OpenGL"; |
| + case GL_DEBUG_SOURCE_WINDOW_SYSTEM: |
| + return "Windows"; |
|
piman
2016/11/02 18:46:53
nit: "Window System" ?
Geoff Lang
2016/11/03 14:16:14
Done.
|
| + case GL_DEBUG_SOURCE_SHADER_COMPILER: |
| + return "Shader Compiler"; |
| + case GL_DEBUG_SOURCE_THIRD_PARTY: |
| + return "Third Party"; |
| + case GL_DEBUG_SOURCE_APPLICATION: |
| + return "Application"; |
| + case GL_DEBUG_SOURCE_OTHER: |
| + return "Other"; |
| + default: |
| + return "UNKNOWN"; |
| + } |
| +} |
| + |
| +const char* GetDebugTypeString(GLenum type) { |
| + switch (type) { |
| + case GL_DEBUG_TYPE_ERROR: |
| + return "Error"; |
| + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: |
| + return "Deprecated behavior"; |
| + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: |
| + return "Undefined behavior"; |
| + case GL_DEBUG_TYPE_PORTABILITY: |
| + return "Portability"; |
| + case GL_DEBUG_TYPE_PERFORMANCE: |
| + return "Performance"; |
| + case GL_DEBUG_TYPE_OTHER: |
| + return "Other"; |
| + case GL_DEBUG_TYPE_MARKER: |
| + return "Marker"; |
| + default: |
| + return "UNKNOWN"; |
| + } |
| +} |
| + |
| +const char* GetDebugSeverityString(GLenum severity) { |
| + switch (severity) { |
| + case GL_DEBUG_SEVERITY_HIGH: |
| + return "High"; |
| + case GL_DEBUG_SEVERITY_MEDIUM: |
| + return "Medium"; |
| + case GL_DEBUG_SEVERITY_LOW: |
| + return "Low"; |
| + case GL_DEBUG_SEVERITY_NOTIFICATION: |
| + return "Notification"; |
| + default: |
| + return "UNKNOWN"; |
| + } |
| +} |
| +} |
| + |
| std::vector<int> GetAllGLErrors() { |
| int gl_errors[] = { |
| GL_NO_ERROR, |
| @@ -184,5 +241,34 @@ bool CheckUniqueAndNonNullIds(GLsizei n, const GLuint* client_ids) { |
| (unique_ids.find(0) == unique_ids.end()); |
| } |
| +void APIENTRY LogGLDebugMessage(GLenum source, |
| + GLenum type, |
| + GLuint id, |
| + GLenum severity, |
| + GLsizei length, |
| + const GLchar* message, |
| + GLvoid* user_param) { |
| + LOG(ERROR) << "GL Driver Message (" << GetDebugSourceString(source) << ", " |
| + << GetDebugTypeString(type) << ", " << id << ", " |
| + << GetDebugSeverityString(severity) << "): " << message; |
| +} |
| + |
| +void InitializeGLDebugLogging() { |
| + glEnable(GL_DEBUG_OUTPUT); |
| + glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); |
| + |
| + // Enable logging of medium and high severity messages |
| + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, |
| + nullptr, GL_TRUE); |
| + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, |
| + nullptr, GL_TRUE); |
| + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_LOW, 0, |
| + nullptr, GL_FALSE); |
| + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, |
| + GL_DEBUG_SEVERITY_NOTIFICATION, 0, nullptr, GL_FALSE); |
| + |
| + glDebugMessageCallback(&LogGLDebugMessage, nullptr); |
| +} |
| + |
| } // namespace gles2 |
| } // namespace gpu |