On 28 July 2015 at 20:05, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com>
Reviewed-by: Dave Airlie <airl...@redhat.com> > > --- > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 66 > ++++++++++++++++++++++++++++++ > 1 file changed, 66 insertions(+) > > diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > index 4c6e48a..6f00727 100644 > --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > @@ -5877,6 +5877,71 @@ get_mesa_program(struct gl_context *ctx, > > extern "C" { > > +static void > +st_dump_program_for_shader_db(struct gl_context *ctx, > + struct gl_shader_program *prog) > +{ > + /* Dump only successfully compiled and linked shaders to the specified > + * file. This is for shader-db. > + * > + * These options allow some pre-processing of shaders while dumping, > + * because some apps have ill-formed shaders. > + */ > + const char *dump_filename = os_get_option("ST_DUMP_SHADERS"); > + const char *insert_directives = os_get_option("ST_DUMP_INSERT"); > + > + if (dump_filename && prog->Name != 0) { > + FILE *f = fopen(dump_filename, "a"); > + > + if (f) { > + for (unsigned i = 0; i < prog->NumShaders; i++) { > + const struct gl_shader *sh = prog->Shaders[i]; > + const char *source; > + bool skip_version = false; > + > + if (!sh) > + continue; > + > + source = sh->Source; > + > + /* This string mustn't be changed. shader-db uses it to find > + * where the shader begins. > + */ > + fprintf(f, "GLSL %s shader %d source for linked program %d:\n", > + _mesa_shader_stage_to_string(sh->Stage), > + i, prog->Name); > + > + /* Dump the forced version if set. */ > + if (ctx->Const.ForceGLSLVersion) { > + fprintf(f, "#version %i\n", ctx->Const.ForceGLSLVersion); > + skip_version = true; > + } > + > + /* Insert directives (optional). */ > + if (insert_directives) { > + if (!ctx->Const.ForceGLSLVersion && prog->Version) > + fprintf(f, "#version %i\n", prog->Version); > + fprintf(f, "%s\n", insert_directives); > + skip_version = true; > + } > + > + if (skip_version && strncmp(source, "#version ", 9) == 0) { > + const char *next_line = strstr(source, "\n"); > + > + if (next_line) > + source = next_line + 1; > + else > + continue; > + } > + > + fprintf(f, "%s", source); > + fprintf(f, "\n"); > + } > + fclose(f); > + } > + } > +} > + > /** > * Link a shader. > * Called via ctx->Driver.LinkShader() > @@ -5997,6 +6062,7 @@ st_link_shader(struct gl_context *ctx, struct > gl_shader_program *prog) > _mesa_reference_program(ctx, &linked_prog, NULL); > } > > + st_dump_program_for_shader_db(ctx, prog); > return GL_TRUE; > } > > -- > 2.1.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev