[Mesa-dev] [PATCH] mesa: Dump ARB_vp/fp source and IR when MESA_GLSL=dump.
Ian Romanick
idr at freedesktop.org
Mon May 12 10:00:30 PDT 2014
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 <kenneth at whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick at 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);
> + }
> }
>
>
>
More information about the mesa-dev
mailing list