[Mesa-dev] [PATCH] mesa: don't overwrite existing shader files with MESA_SHADER_CAPTURE_PATH
Tapani Pälli
tapani.palli at intel.com
Thu Apr 11 06:53:14 UTC 2019
On 4/11/19 3:32 AM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
> src/mesa/main/shaderapi.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
> index 01342c04e8f..6b73e6c7e7a 100644
> --- a/src/mesa/main/shaderapi.c
> +++ b/src/mesa/main/shaderapi.c
> @@ -1233,24 +1233,38 @@ link_program(struct gl_context *ctx, struct gl_shader_program *shProg,
> if (shProg->_LinkedShaders[stage])
> prog = shProg->_LinkedShaders[stage]->Program;
>
> _mesa_use_program(ctx, stage, shProg, prog, ctx->_Shader);
> }
> }
>
> /* Capture .shader_test files. */
> const char *capture_path = _mesa_get_shader_capture_path();
> if (shProg->Name != 0 && shProg->Name != ~0 && capture_path != NULL) {
> - FILE *file;
> - char *filename = ralloc_asprintf(NULL, "%s/%u.shader_test",
> + /* Find an unused filename. */
> + char *filename = NULL;
> + for (unsigned i = 0;; i++) {
> + if (i) {
> + filename = ralloc_asprintf(NULL, "%s/%u-%u.shader_test",
> + capture_path, shProg->Name, i);
> + } else {
> + filename = ralloc_asprintf(NULL, "%s/%u.shader_test",
> capture_path, shProg->Name);
How about just having the counter always there, to simplify a bit and
have consistent filename scheme? Just a suggestion.
> - file = fopen(filename, "w");
> + }
> + FILE *file = fopen(filename, "r");
> + if (!file)
> + break;
I'm surprised we don't have some helper like 'util_path_exists' but this
works, I guess then we should have 'util_path_isdir|isfile' and others
as well.
With or without the suggestion;
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
> + fclose(file);
> + ralloc_free(filename);
> + }
> +
> + FILE *file = fopen(filename, "w");
> if (file) {
> fprintf(file, "[require]\nGLSL%s >= %u.%02u\n",
> shProg->IsES ? " ES" : "",
> shProg->data->Version / 100, shProg->data->Version % 100);
> if (shProg->SeparateShader)
> fprintf(file, "GL_ARB_separate_shader_objects\nSSO ENABLED\n");
> fprintf(file, "\n");
>
> for (unsigned i = 0; i < shProg->NumShaders; i++) {
> fprintf(file, "[%s shader]\n%s\n",
>
More information about the mesa-dev
mailing list