On 24/07/18 09:41, Tapani Pälli wrote: > Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106283 > --- > src/mesa/main/arbprogram.c | 26 ++++++++++++++++++++++++++ > src/mesa/main/shaderapi.c | 17 ++++++++++------- > src/mesa/main/shaderapi.h | 6 ++++++ > 3 files changed, 42 insertions(+), 7 deletions(-) > > diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c > index b169bce0c5..d1dc5029a9 100644 > --- a/src/mesa/main/arbprogram.c > +++ b/src/mesa/main/arbprogram.c > @@ -326,6 +326,19 @@ get_env_param_pointer(struct gl_context *ctx, const char > *func, > } > } > > +static gl_shader_stage > +stage_from_target(GLenum target)
How about using _mesa_program_enum_to_shader_stage? As far as I see it is defined at both main/shaderobj.h and program/program.h, so hopefully one of those could be used. One wild guess is that you want to be sure that only VERTEX_PROGRAM/FRAGMENT_PROGRAM is used. If that is the case, ignore my comment. Reviewed-by: Alejandro Piñeiro <apinhe...@igalia.com> > +{ > + switch (target) { > + case GL_VERTEX_PROGRAM_ARB: > + return MESA_SHADER_VERTEX; > + case GL_FRAGMENT_PROGRAM_ARB: > + return MESA_SHADER_FRAGMENT; > + default: > + return -1; > + } > +} > + > void GLAPIENTRY > _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len, > const GLvoid *string) > @@ -347,6 +360,19 @@ _mesa_ProgramStringARB(GLenum target, GLenum format, > GLsizei len, > return; > } > > +#ifdef ENABLE_SHADER_CACHE > + GLcharARB *replacement; > + > + /* Dump original shader source to MESA_SHADER_DUMP_PATH and replace > + * if corresponding entry found from MESA_SHADER_READ_PATH. > + */ > + _mesa_dump_shader_source(stage_from_target(target), string); > + > + replacement = _mesa_read_shader_source(stage_from_target(target), string); > + if (replacement) > + string = replacement; > +#endif /* ENABLE_SHADER_CACHE */ > + > if (target == GL_VERTEX_PROGRAM_ARB && > ctx->Extensions.ARB_vertex_program) { > prog = ctx->VertexProgram.Current; > _mesa_parse_arb_vertex_program(ctx, target, string, len, prog); > diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c > index f7080847cc..2ea8d965ab 100644 > --- a/src/mesa/main/shaderapi.c > +++ b/src/mesa/main/shaderapi.c > @@ -1795,6 +1795,7 @@ generate_sha1(const char *source, char sha_str[64]) > * following format: > * > * <path>/<stage prefix>_<CHECKSUM>.glsl > + * <path>/<stage prefix>_<CHECKSUM>.arb > */ > static char * > construct_name(const gl_shader_stage stage, const char *source, > @@ -1805,15 +1806,17 @@ construct_name(const gl_shader_stage stage, const > char *source, > "VS", "TC", "TE", "GS", "FS", "CS", > }; > > + const char *format = strncmp(source, "!!ARB", 5) ? "glsl" : "arb"; > + > generate_sha1(source, sha); > - return ralloc_asprintf(NULL, "%s/%s_%s.glsl", path, types[stage], sha); > + return ralloc_asprintf(NULL, "%s/%s_%s.%s", path, types[stage], sha, > format); > } > > /** > * Write given shader source to a file in MESA_SHADER_DUMP_PATH. > */ > -static void > -dump_shader(const gl_shader_stage stage, const char *source) > +void > +_mesa_dump_shader_source(const gl_shader_stage stage, const char *source) > { > static bool path_exists = true; > char *dump_path; > @@ -1846,8 +1849,8 @@ dump_shader(const gl_shader_stage stage, const char > *source) > * Read shader source code from a file. > * Useful for debugging to override an app's shader. > */ > -static GLcharARB * > -read_shader(const gl_shader_stage stage, const char *source) > +GLcharARB * > +_mesa_read_shader_source(const gl_shader_stage stage, const char *source) > { > char *read_path; > static bool path_exists = true; > @@ -1971,9 +1974,9 @@ shader_source(struct gl_context *ctx, GLuint shaderObj, > GLsizei count, > /* Dump original shader source to MESA_SHADER_DUMP_PATH and replace > * if corresponding entry found from MESA_SHADER_READ_PATH. > */ > - dump_shader(sh->Stage, source); > + _mesa_dump_shader_source(sh->Stage, source); > > - replacement = read_shader(sh->Stage, source); > + replacement = _mesa_read_shader_source(sh->Stage, source); > if (replacement) { > free(source); > source = replacement; > diff --git a/src/mesa/main/shaderapi.h b/src/mesa/main/shaderapi.h > index dbfd68fd3a..a8227ecc96 100644 > --- a/src/mesa/main/shaderapi.h > +++ b/src/mesa/main/shaderapi.h > @@ -374,6 +374,12 @@ extern GLvoid GLAPIENTRY > _mesa_GetProgramStageiv(GLuint program, GLenum shadertype, > GLenum pname, GLint *values); > > +GLcharARB * > +_mesa_read_shader_source(const gl_shader_stage stage, const char *source); > + > +void > +_mesa_dump_shader_source(const gl_shader_stage stage, const char *source); > + > #ifdef __cplusplus > } > #endif _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev