mesa: rework _mesa_read_shader() debug hook
authorBrian Paul <brianp@vmware.com>
Tue, 13 Oct 2009 22:32:15 +0000 (16:32 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 13 Oct 2009 22:33:36 +0000 (16:33 -0600)
Look for shaders named "newshader_<CHECKSUM>" to replace the incoming
shader text.  For debug purposes.

src/mesa/main/shaders.c

index bc76b912913a08083294f7b3917c5112eec70a83..96fd8695a59e96804f0c6cea0e5202718160bab7 100644 (file)
@@ -388,7 +388,6 @@ _mesa_read_shader(const char *fname)
    int len;
 
    if (!f) {
-      _mesa_fprintf(stderr, "Unable to open shader file %s\n", fname);
       return NULL;
    }
 
@@ -401,11 +400,6 @@ _mesa_read_shader(const char *fname)
    shader = _mesa_strdup(buffer);
    free(buffer);
 
-   if (0) {
-      _mesa_fprintf(stderr, "Read shader %s:\n", fname);
-      _mesa_fprintf(stderr, "%s\n", shader);
-   }
-
    return shader;
 }
 
@@ -475,19 +469,25 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count,
    source[totalLength - 1] = '\0';
    source[totalLength - 2] = '\0';
 
-#if 0
    if (0) {
+      /* Compute the shader's source code checksum then try to open a file
+       * named newshader_<CHECKSUM>.  If it exists, use it in place of the
+       * original shader source code.  For debugging.
+       */
+      const GLuint checksum = _mesa_str_checksum(source);
+      char filename[100];
       GLcharARB *newSource;
 
-      newSource = _mesa_read_shader("newshader.frag");
+      sprintf(filename, "newshader_%d", checksum);
+
+      newSource = _mesa_read_shader(filename);
       if (newSource) {
+         _mesa_fprintf(stderr, "Mesa: Replacing shader %u chksum=%d with %s\n",
+                       shaderObj, checksum, filename);
          _mesa_free(source);
          source = newSource;
       }
-   }
-#else
-   (void) _mesa_read_shader;
-#endif
+   }      
 
    ctx->Driver.ShaderSource(ctx, shaderObj, source);