On 05/11/2014 11:03 PM, Kenneth Graunke wrote: > As far as I can tell, Mesa hasn't had a convenient way to dump ARB_vp/fp > source until now. Using MESA_GLSL=dump is convenient, since it means > you can use a single environment variable to dump a program's shaders, > no matter which language they're written in. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > --- > src/mesa/main/arbprogram.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > I've also got some shader-db patches to take advantage of this. > > diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c > index 247b492..fe8cd6b 100644 > --- a/src/mesa/main/arbprogram.c > +++ b/src/mesa/main/arbprogram.c > @@ -38,6 +38,7 @@ > #include "main/arbprogram.h" > #include "program/arbprogparse.h" > #include "program/program.h" > +#include "program/prog_print.h" > > > /** > @@ -308,6 +309,7 @@ _mesa_ProgramStringARB(GLenum target, GLenum format, > GLsizei len, > const GLvoid *string) > { > struct gl_program *base; > + bool failed; > GET_CURRENT_CONTEXT(ctx); > > FLUSH_VERTICES(ctx, _NEW_PROGRAM); > @@ -341,13 +343,36 @@ _mesa_ProgramStringARB(GLenum target, GLenum format, > GLsizei len, > return; > } > > - if (ctx->Program.ErrorPos == -1) { > + failed = ctx->Program.ErrorPos != -1; > + > + if (!failed) { > /* finally, give the program to the driver for translation/checking */ > if (!ctx->Driver.ProgramStringNotify(ctx, target, base)) { > + failed = true; > _mesa_error(ctx, GL_INVALID_OPERATION, > "glProgramStringARB(rejected by driver"); ^ Missing a closing paren, but I guess that isn't your bug. > } > } > + > + if (ctx->_Shader->Flags & GLSL_DUMP) { > + const char *shader_type = > + target == GL_FRAGMENT_PROGRAM_ARB ? "fragment" : "vertex"; > + > + fprintf(stderr, "ARB_%s_program source for program %d:\n", > + shader_type, base->Id); > + fprintf(stderr, "%s\n", (const char *) string); > + > + if (failed) { > + fprintf(stderr, "ARB_%s_program %d failed to compile.\n", > + shader_type, base->Id); > + } else { > + fprintf(stderr, "Mesa IR for ARB_%s_program %d:\n", > + shader_type, base->Id); > + _mesa_print_program(base); > + fprintf(stderr, "\n"); > + } > + fflush(stderr); > + } > } > > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev