gallium: if VERBOSE_GLSL flag is set, check for non-initialized uniforms at draw...
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 5 Nov 2008 21:05:04 +0000 (14:05 -0700)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 5 Nov 2008 21:05:04 +0000 (14:05 -0700)
This will warn the user that the shader being run may be using uninitialized
uniform variables.

src/mesa/state_tracker/st_draw.c

index 61949a93884f4b91e7265ddd21269eb0ebb268c9..ed3ae3e91a2d286ac47508686100d7d3d13235a9 100644 (file)
@@ -33,6 +33,7 @@
 #include "main/imports.h"
 #include "main/image.h"
 #include "main/macros.h"
+#include "shader/prog_uniform.h"
 
 #include "vbo/vbo.h"
 
@@ -483,6 +484,28 @@ setup_non_interleaved_attribs(GLcontext *ctx,
 
 
 
+/**
+ * Prior to drawing, check that any uniforms referenced by the
+ * current shader have been set.  If a uniform has not been set,
+ * issue a warning.
+ */
+static void
+check_uniforms(GLcontext *ctx)
+{
+   const struct gl_shader_program *shProg = ctx->Shader.CurrentProgram;
+   if (shProg && shProg->LinkStatus) {
+      GLuint i;
+      for (i = 0; i < shProg->Uniforms->NumUniforms; i++) {
+         const struct gl_uniform *u = &shProg->Uniforms->Uniforms[i];
+         if (!u->Initialized) {
+            _mesa_warning(ctx,
+                          "Using shader with uninitialized uniform: %s",
+                          u->Name);
+         }
+      }
+   }
+}
+
 
 /**
  * This function gets plugged into the VBO module and is called when
@@ -516,6 +539,10 @@ st_draw_vbo(GLcontext *ctx,
    vp = ctx->st->vp;
    vs = &ctx->st->vp->state;
 
+   if (MESA_VERBOSE & VERBOSE_GLSL) {
+      check_uniforms(ctx);
+   }
+
    /*
     * Setup the vbuffer[] and velements[] arrays.
     */