[PATCH] glamor: Use GL_ARB_debug_output to log GL errors.
Eric Anholt
eric at anholt.net
Wed Jul 1 17:43:03 PDT 2015
This should help people debugging when glamor does something stupid on
their driver.
Signed-off-by: Eric Anholt <eric at anholt.net>
---
glamor/glamor.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/glamor/glamor.c b/glamor/glamor.c
index 295f415..317f451 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -322,6 +322,45 @@ glamor_check_instruction_count(int gl_version)
return TRUE;
}
+static void GLAPIENTRY
+glamor_debug_output_callback(GLenum source,
+ GLenum type,
+ GLuint id,
+ GLenum severity,
+ GLsizei length,
+ const GLchar *message,
+ const void *userParam)
+{
+ ScreenPtr screen = (void *)userParam;
+ LogMessageVerb(X_ERROR, 0, "glamor%d: GL error: %*s\n",
+ screen->myNum, length, message);
+}
+
+/**
+ * Configures GL_ARB_debug_output to give us immediate callbacks when
+ * GL errors occur, so that we can log them.
+ */
+static void
+glamor_setup_debug_output(ScreenPtr screen)
+{
+ if (!epoxy_has_gl_extension("GL_ARB_debug_output"))
+ return;
+
+ glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
+ glDebugMessageControl(GL_DEBUG_SOURCE_API,
+ GL_DEBUG_TYPE_ERROR,
+ GL_DONT_CARE,
+ 0, NULL, GL_TRUE);
+ glDebugMessageCallback(glamor_debug_output_callback,
+ screen);
+
+ /* If KHR_debug is present, all debug output is disabled by
+ * default on non-debug contexts.
+ */
+ if (epoxy_has_gl_extension("GL_KHR_debug"))
+ glEnable(GL_DEBUG_OUTPUT);
+}
+
/** Set up glamor for an already-configured GL context. */
Bool
glamor_init(ScreenPtr screen, unsigned int flags)
@@ -468,6 +507,8 @@ glamor_init(ScreenPtr screen, unsigned int flags)
epoxy_gl_version() >= 30 ||
epoxy_has_gl_extension("GL_NV_pack_subimage");
+ glamor_setup_debug_output(screen);
+
glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &glamor_priv->max_fbo_size);
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &glamor_priv->max_fbo_size);
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, max_viewport_size);
--
2.1.4
More information about the xorg-devel
mailing list