st/mesa: set debug callback for debug contexts

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Ilia Mirkin 2015-10-30 23:28:01 -04:00
parent fc76cc05e3
commit c93c9d220b

View file

@ -623,6 +623,58 @@ st_context_destroy(struct st_context_iface *stctxi)
st_destroy_context(st);
}
static void
st_debug_message(void *data,
unsigned *id,
enum pipe_debug_type ptype,
const char *fmt,
va_list args)
{
struct st_context *st = data;
enum mesa_debug_source source;
enum mesa_debug_type type;
enum mesa_debug_severity severity;
switch (ptype) {
case PIPE_DEBUG_TYPE_OUT_OF_MEMORY:
source = MESA_DEBUG_SOURCE_API;
type = MESA_DEBUG_TYPE_ERROR;
severity = MESA_DEBUG_SEVERITY_MEDIUM;
break;
case PIPE_DEBUG_TYPE_ERROR:
source = MESA_DEBUG_SOURCE_API;
type = MESA_DEBUG_TYPE_ERROR;
severity = MESA_DEBUG_SEVERITY_MEDIUM;
break;
case PIPE_DEBUG_TYPE_SHADER_INFO:
source = MESA_DEBUG_SOURCE_SHADER_COMPILER;
type = MESA_DEBUG_TYPE_OTHER;
severity = MESA_DEBUG_SEVERITY_NOTIFICATION;
break;
case PIPE_DEBUG_TYPE_PERF_INFO:
source = MESA_DEBUG_SOURCE_API;
type = MESA_DEBUG_TYPE_PERFORMANCE;
severity = MESA_DEBUG_SEVERITY_NOTIFICATION;
break;
case PIPE_DEBUG_TYPE_INFO:
source = MESA_DEBUG_SOURCE_API;
type = MESA_DEBUG_TYPE_OTHER;
severity = MESA_DEBUG_SEVERITY_NOTIFICATION;
break;
case PIPE_DEBUG_TYPE_FALLBACK:
source = MESA_DEBUG_SOURCE_API;
type = MESA_DEBUG_TYPE_PERFORMANCE;
severity = MESA_DEBUG_SEVERITY_NOTIFICATION;
break;
case PIPE_DEBUG_TYPE_CONFORMANCE:
source = MESA_DEBUG_SOURCE_API;
type = MESA_DEBUG_TYPE_OTHER;
severity = MESA_DEBUG_SEVERITY_NOTIFICATION;
break;
}
_mesa_gl_vdebug(st->ctx, id, source, type, severity, fmt, args);
}
static struct st_context_iface *
st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
const struct st_context_attribs *attribs,
@ -677,6 +729,11 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
return NULL;
}
st->ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
if (pipe->set_debug_callback) {
struct pipe_debug_callback cb = { st_debug_message, st };
pipe->set_debug_callback(pipe, &cb);
}
}
if (attribs->flags & ST_CONTEXT_FLAG_FORWARD_COMPATIBLE)