Mesa (master): mesa: append uniform values to the log file the first time we use a shader

Brian Paul brianp at kemper.freedesktop.org
Fri Aug 14 19:07:43 UTC 2009


Module: Mesa
Branch: master
Commit: 71b1610941f9bfefa01d827fd19cc2368e6cdae3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=71b1610941f9bfefa01d827fd19cc2368e6cdae3

Author: Brian Paul <brianp at vmware.com>
Date:   Fri Aug 14 12:58:21 2009 -0600

mesa: append uniform values to the log file the first time we use a shader

This info is essential to using/debugging a shader outside of its normal
application.

---

 src/mesa/main/context.c |   27 +++++++++++++++++++++++++++
 src/mesa/main/mtypes.h  |    1 +
 2 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 3547d0a..38ec418 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -150,6 +150,7 @@
 #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;
 }
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 6a60ad1..4117278 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -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;
 };   
 




More information about the mesa-commit mailing list