On 4/11/19 3:32 AM, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@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.pa...@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",

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to