mesa: additional debug flags for glsl debug/disassembly
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 1 Nov 2008 16:57:25 +0000 (10:57 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 1 Nov 2008 21:58:00 +0000 (15:58 -0600)
src/mesa/main/debug.c
src/mesa/main/mtypes.h
src/mesa/shader/slang/slang_link.c
src/mesa/shader/slang/slang_log.c

index 98ca65b96a998a61076e4e1c98e6f45720c8d7cc..77fef3255834b21051fb04dcd5340a3809b0dabc 100644 (file)
@@ -150,36 +150,32 @@ void _mesa_print_info( void )
 static void add_debug_flags( const char *debug )
 {
 #ifdef DEBUG
-   if (_mesa_strstr(debug, "varray")) 
-      MESA_VERBOSE |= VERBOSE_VARRAY;
-
-   if (_mesa_strstr(debug, "tex")) 
-      MESA_VERBOSE |= VERBOSE_TEXTURE;
-
-   if (_mesa_strstr(debug, "imm")) 
-      MESA_VERBOSE |= VERBOSE_IMMEDIATE;
-
-   if (_mesa_strstr(debug, "pipe")) 
-      MESA_VERBOSE |= VERBOSE_PIPELINE;
-
-   if (_mesa_strstr(debug, "driver")) 
-      MESA_VERBOSE |= VERBOSE_DRIVER;
-
-   if (_mesa_strstr(debug, "state")) 
-      MESA_VERBOSE |= VERBOSE_STATE;
-
-   if (_mesa_strstr(debug, "api")) 
-      MESA_VERBOSE |= VERBOSE_API;
-
-   if (_mesa_strstr(debug, "list")) 
-      MESA_VERBOSE |= VERBOSE_DISPLAY_LIST;
-
-   if (_mesa_strstr(debug, "lighting")) 
-      MESA_VERBOSE |= VERBOSE_LIGHTING;
+   struct debug_option {
+      const char *name;
+      GLbitfield flag;
+   };
+   static const struct debug_option debug_opt[] = {
+      { "varray",    VERBOSE_VARRAY },
+      { "tex",       VERBOSE_TEXTURE },
+      { "imm",       VERBOSE_IMMEDIATE },
+      { "pipe",      VERBOSE_PIPELINE },
+      { "driver",    VERBOSE_DRIVER },
+      { "state",     VERBOSE_STATE },
+      { "api",       VERBOSE_API },
+      { "list",      VERBOSE_DISPLAY_LIST },
+      { "lighting",  VERBOSE_LIGHTING },
+      { "disassem",  VERBOSE_DISASSEM },
+      { "glsl",      VERBOSE_GLSL },     /* report GLSL compile/link errors */
+      { "glsl_dump", VERBOSE_GLSL_DUMP } /* print shader GPU instructions */
+   };
+   GLuint i;
+
+   MESA_VERBOSE = 0x0;
+   for (i = 0; i < Elements(debug_opt); i++) {
+      if (_mesa_strstr(debug, debug_opt[i].name))
+         MESA_VERBOSE |= debug_opt[i].flag;
+   }
 
-   if (_mesa_strstr(debug, "disassem")) 
-      MESA_VERBOSE |= VERBOSE_DISASSEM;
-   
    /* Debug flag:
     */
    if (_mesa_strstr(debug, "flush")) 
index fab6ad05eeaf4de9beef1d9a23cfb7ab8312271b..732de2bb4328ef59787723cabc69bb685b1b0c63 100644 (file)
@@ -3162,7 +3162,9 @@ enum _verbose
    VERBOSE_LIGHTING            = 0x0200,
    VERBOSE_PRIMS               = 0x0400,
    VERBOSE_VERTS               = 0x0800,
-   VERBOSE_DISASSEM            = 0x1000
+   VERBOSE_DISASSEM            = 0x1000,
+   VERBOSE_GLSL                        = 0x2000,
+   VERBOSE_GLSL_DUMP           = 0x4000
 };
 
 
index 202080d9d447509f4fa7a5e011a6e4d989c8084d..5c8b626ea7d8d02a431e0caac5b5d54a10a667e9 100644 (file)
@@ -219,6 +219,7 @@ link_uniform_vars(struct gl_shader_program *shProg,
                 inst->Sampler, map[ inst->Sampler ]);
          */
          /* here, texUnit is really samplerUnit */
+         assert(inst->TexSrcUnit < MAX_SAMPLERS);
          inst->TexSrcUnit = samplerMap[inst->TexSrcUnit];
          prog->SamplerTargets[inst->TexSrcUnit] = inst->TexSrcTarget;
          prog->SamplersUsed |= (1 << inst->TexSrcUnit);
@@ -564,32 +565,30 @@ _slang_link(GLcontext *ctx,
       /* notify driver that a new fragment program has been compiled/linked */
       ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
                                       &shProg->FragmentProgram->Base);
-#if 0
-      printf("************** original fragment program\n");
-      _mesa_print_program(&fragProg->Base);
-      _mesa_print_program_parameters(ctx, &fragProg->Base);
-#endif
-#if 0
-      printf("************** linked fragment prog\n");
-      _mesa_print_program(&shProg->FragmentProgram->Base);
-      _mesa_print_program_parameters(ctx, &shProg->FragmentProgram->Base);
-#endif
+      if (MESA_VERBOSE & VERBOSE_GLSL_DUMP) {
+         printf("Mesa original fragment program:\n");
+         _mesa_print_program(&fragProg->Base);
+         _mesa_print_program_parameters(ctx, &fragProg->Base);
+
+         printf("Mesa post-link fragment program:\n");
+         _mesa_print_program(&shProg->FragmentProgram->Base);
+         _mesa_print_program_parameters(ctx, &shProg->FragmentProgram->Base);
+      }
    }
 
    if (vertProg && shProg->VertexProgram) {
       /* notify driver that a new vertex program has been compiled/linked */
       ctx->Driver.ProgramStringNotify(ctx, GL_VERTEX_PROGRAM_ARB,
                                       &shProg->VertexProgram->Base);
-#if 0
-      printf("************** original vertex program\n");
-      _mesa_print_program(&vertProg->Base);
-      _mesa_print_program_parameters(ctx, &vertProg->Base);
-#endif
-#if 0
-      printf("************** linked vertex prog\n");
-      _mesa_print_program(&shProg->VertexProgram->Base);
-      _mesa_print_program_parameters(ctx, &shProg->VertexProgram->Base);
-#endif
+      if (MESA_VERBOSE & VERBOSE_GLSL_DUMP) {
+         printf("Mesa original vertex program:\n");
+         _mesa_print_program(&vertProg->Base);
+         _mesa_print_program_parameters(ctx, &vertProg->Base);
+
+         printf("Mesa post-link vertex program:\n");
+         _mesa_print_program(&shProg->VertexProgram->Base);
+         _mesa_print_program_parameters(ctx, &shProg->VertexProgram->Base);
+      }
    }
 
    shProg->LinkStatus = (shProg->VertexProgram || shProg->FragmentProgram);
index 01591ceba5cb413fe5b5fce859e42aab361f5a92..dc838c72ade329d809ba0ecf747a4060608b603b 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include "main/imports.h"
+#include "main/context.h"
 #include "slang_log.h"
 #include "slang_utility.h"
 
@@ -86,9 +87,11 @@ slang_info_log_message(slang_info_log * log, const char *prefix,
    }
    slang_string_concat(log->text, msg);
    slang_string_concat(log->text, "\n");
-#if 0 /* debug */
-   _mesa_printf("Mesa GLSL error/warning: %s\n", log->text);
-#endif
+
+   if (MESA_VERBOSE & VERBOSE_GLSL) {
+      _mesa_printf("Mesa: GLSL %s\n", log->text);
+   }
+
    return 1;
 }