mesa: append uniform values to the log file the first time we use a shader
authorBrian Paul <brianp@vmware.com>
Fri, 14 Aug 2009 18:58:21 +0000 (12:58 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 14 Aug 2009 18:58:21 +0000 (12:58 -0600)
This info is essential to using/debugging a shader outside of its normal
application.

src/mesa/main/context.c
src/mesa/main/mtypes.h

index 3547d0a220036a2d20c00d74da8528724e547146..38ec4188098850b53ef20136b2fd8297429de38a 100644 (file)
 #include "glapi/glapioffsets.h"
 #include "glapi/glapitable.h"
 #include "shader/program.h"
+#include "shader/prog_print.h"
 #include "shader/shader_api.h"
 #if FEATURE_ATI_fragment_shader
 #include "shader/atifragshader.h"
@@ -1614,6 +1615,32 @@ _mesa_valid_to_render(GLcontext *ctx, const char *where)
       return GL_FALSE;
    }
 
+#ifdef DEBUG
+   if (ctx->Shader.Flags & GLSL_LOG) {
+      struct gl_shader_program *shProg = ctx->Shader.CurrentProgram;
+      if (shProg) {
+         if (!shProg->_Used) {
+            /* This is the first time this shader is being used.
+             * Append shader's constants/uniforms to log file.
+             */
+            GLuint i;
+            for (i = 0; i < shProg->NumShaders; i++) {
+               struct gl_shader *sh = shProg->Shaders[i];
+               if (sh->Type == GL_VERTEX_SHADER) {
+                  _mesa_append_uniforms_to_file(sh,
+                                                &shProg->VertexProgram->Base);
+               }
+               else if (sh->Type == GL_FRAGMENT_SHADER) {
+                  _mesa_append_uniforms_to_file(sh,
+                                                &shProg->FragmentProgram->Base);
+               }
+            }
+            shProg->_Used = GL_TRUE;
+         }
+      }
+   }
+#endif
+
    return GL_TRUE;
 }
 
index 6a60ad1ceeee3db8cc7c4b33ccd3903764da18ef..41172788ef378c39b450f4f4088cb9f366f21b02 100644 (file)
@@ -2037,6 +2037,7 @@ struct gl_shader_program
    struct gl_program_parameter_list *Varying;
    GLboolean LinkStatus;   /**< GL_LINK_STATUS */
    GLboolean Validated;
+   GLboolean _Used;        /**< Ever used for drawing? */
    GLchar *InfoLog;
 };