From d5a10dba6464d6cc40b3abcd6b704fb087e1056c Mon Sep 17 00:00:00 2001 From: Dylan Noblesmith Date: Mon, 2 Apr 2012 16:26:05 +0000 Subject: [PATCH] glsl: report errors via GL_ARB_debug_output Reviewed-by: Brian Paul --- src/glsl/glsl_parser_extras.cpp | 11 +++++++++++ src/glsl/standalone_scaffolding.cpp | 6 ++++++ src/glsl/standalone_scaffolding.h | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp index 4f26205b616..6f1c86b43ff 100644 --- a/src/glsl/glsl_parser_extras.cpp +++ b/src/glsl/glsl_parser_extras.cpp @@ -146,12 +146,23 @@ _mesa_glsl_msg(const YYLTYPE *locp, _mesa_glsl_parse_state *state, bool error = (type == GL_DEBUG_TYPE_ERROR_ARB); assert(state->info_log != NULL); + + /* Get the offset that the new message will be written to. */ + int msg_offset = strlen(state->info_log); + ralloc_asprintf_append(&state->info_log, "%u:%u(%u): %s: ", locp->source, locp->first_line, locp->first_column, error ? "error" : "warning"); ralloc_vasprintf_append(&state->info_log, fmt, ap); + + const char *const msg = &state->info_log[msg_offset]; + struct gl_context *ctx = state->ctx; + /* Report the error via GL_ARB_debug_output. */ + if (error) + _mesa_shader_debug(ctx, type, id, msg, strlen(msg)); + ralloc_strcat(&state->info_log, "\n"); } diff --git a/src/glsl/standalone_scaffolding.cpp b/src/glsl/standalone_scaffolding.cpp index 24cc64ad97b..f15f2d882de 100644 --- a/src/glsl/standalone_scaffolding.cpp +++ b/src/glsl/standalone_scaffolding.cpp @@ -41,6 +41,12 @@ _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, *ptr = sh; } +void +_mesa_shader_debug(struct gl_context *, GLenum, GLuint, + const char *, int) +{ +} + struct gl_shader * _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type) { diff --git a/src/glsl/standalone_scaffolding.h b/src/glsl/standalone_scaffolding.h index 87733200670..41ce35befc6 100644 --- a/src/glsl/standalone_scaffolding.h +++ b/src/glsl/standalone_scaffolding.h @@ -40,6 +40,10 @@ _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, extern "C" struct gl_shader * _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type); +extern "C" void +_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint id, + const char *msg, int len); + /** * Initialize the given gl_context structure to a reasonable set of * defaults representing the minimum capabilities required by the -- 2.30.2