glamor: Use GL_ARB_debug_output to log GL errors.
This should help people debugging when glamor does something stupid on their driver. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
parent
f4dfd282d3
commit
3703c88ac1
|
@ -384,6 +384,45 @@ glamor_check_instruction_count(int gl_version)
|
||||||
return TRUE;
|
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. */
|
/** Set up glamor for an already-configured GL context. */
|
||||||
Bool
|
Bool
|
||||||
glamor_init(ScreenPtr screen, unsigned int flags)
|
glamor_init(ScreenPtr screen, unsigned int flags)
|
||||||
|
@ -531,6 +570,8 @@ glamor_init(ScreenPtr screen, unsigned int flags)
|
||||||
epoxy_gl_version() >= 30 ||
|
epoxy_gl_version() >= 30 ||
|
||||||
epoxy_has_gl_extension("GL_NV_pack_subimage");
|
epoxy_has_gl_extension("GL_NV_pack_subimage");
|
||||||
|
|
||||||
|
glamor_setup_debug_output(screen);
|
||||||
|
|
||||||
glamor_priv->use_quads = (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP);
|
glamor_priv->use_quads = (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP);
|
||||||
/* Driver-specific hack: Avoid using GL_QUADS on VC4, where
|
/* Driver-specific hack: Avoid using GL_QUADS on VC4, where
|
||||||
* they'll be emulated more expensively than we can with our
|
* they'll be emulated more expensively than we can with our
|
||||||
|
|
Loading…
Reference in New Issue
Block a user