| 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 16ef4548cb6a991192c71935b8d5524af55fa764..d5f663f307a58422082cc0f96ef0b441fed83262 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 "Window System";
|
| + 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
|
|
|