glsl: report errors via GL_ARB_debug_output
authorDylan Noblesmith <nobled@dreamwidth.org>
Mon, 2 Apr 2012 16:26:05 +0000 (16:26 +0000)
committerDylan Noblesmith <nobled@dreamwidth.org>
Wed, 2 May 2012 16:12:23 +0000 (16:12 +0000)
Reviewed-by: Brian Paul <brianp@vmware.com>
src/glsl/glsl_parser_extras.cpp
src/glsl/standalone_scaffolding.cpp
src/glsl/standalone_scaffolding.h

index 4f26205b61629a4d4dce4ee9b269d6bc0751fab4..6f1c86b43ffe872e563e679570895af8d750f89b 100644 (file)
@@ -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");
 }
 
index 24cc64ad97b172a525726e471dce394428335508..f15f2d882debee728cfc1d99c9d96212017791ab 100644 (file)
@@ -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)
 {
index 877332006704beda186abe7c23c1439442cd9d57..41ce35befc628c2f8ab160940502077c6e52c1db 100644 (file)
@@ -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