ir_to_mesa: Print shader source and compiled IR under MESA_GLSL=dump.
authorEric Anholt <eric@anholt.net>
Thu, 5 Aug 2010 02:43:41 +0000 (19:43 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 5 Aug 2010 03:52:33 +0000 (20:52 -0700)
While the Mesa IR dumping includes some corresponding GLSL IR for
correlating Mesa IR to GLSL IR, it doesn't completely express it.
This printing includes things like variable declarations and control
flow structure that is hard to read otherwise.

src/mesa/program/ir_to_mesa.cpp

index 1cec4aa6212a46a7f03e19d0a568a8d45f363867..2fd07ca6115849c00907ff634f7e85a3ffe0f595 100644 (file)
@@ -2545,7 +2545,14 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program *shader_program,
 
    set_branchtargets(&v, mesa_instructions, num_instructions);
    if (ctx->Shader.Flags & GLSL_DUMP) {
-      printf("Mesa %s program:\n", target_string);
+      printf("\n");
+      printf("GLSL IR for linked %s program %d:\n", target_string,
+            shader_program->Name);
+      _mesa_print_ir(shader->ir, NULL);
+      printf("\n");
+      printf("\n");
+      printf("Mesa IR for linked %s program %d:\n", target_string,
+            shader_program->Name);
       print_program(mesa_instructions, mesa_instruction_annotation,
                    num_instructions);
    }
@@ -2635,6 +2642,15 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
       _mesa_write_shader_to_file(shader);
    }
 
+   if (ctx->Shader.Flags & GLSL_DUMP) {
+      printf("GLSL source for shader %d:\n", shader->Name);
+      printf("%s\n", shader->Source);
+
+      printf("GLSL IR for shader %d:\n", shader->Name);
+      _mesa_print_ir(shader->ir, NULL);
+      printf("\n\n");
+   }
+
    /* Retain any live IR, but trash the rest. */
    reparent_ir(shader->ir, shader);