glsl/standalone: Pull out a helper function for adding GLSL source shaders.
authorEmma Anholt <emma@anholt.net>
Wed, 1 Mar 2023 00:04:56 +0000 (16:04 -0800)
committerMarge Bot <emma+marge@anholt.net>
Wed, 22 Mar 2023 22:52:45 +0000 (22:52 +0000)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21886>

src/compiler/glsl/standalone.cpp
src/compiler/glsl/standalone_scaffolding.cpp
src/compiler/glsl/standalone_scaffolding.h

index 2820b08..16f4c4c 100644 (file)
@@ -443,44 +443,36 @@ standalone_compile_shader(const struct standalone_options *_options,
    struct gl_shader_program *whole_program = standalone_create_shader_program();
 
    for (unsigned i = 0; i < num_files; i++) {
-      whole_program->Shaders =
-            reralloc(whole_program, whole_program->Shaders,
-                  struct gl_shader *, whole_program->NumShaders + 1);
-      assert(whole_program->Shaders != NULL);
-
-      struct gl_shader *shader = rzalloc(whole_program, gl_shader);
-
-      whole_program->Shaders[whole_program->NumShaders] = shader;
-      whole_program->NumShaders++;
-
       const unsigned len = strlen(files[i]);
       if (len < 6)
          goto fail;
 
       const char *const ext = & files[i][len - 5];
       /* TODO add support to read a .shader_test */
+      GLenum type;
       if (strncmp(".vert", ext, 5) == 0 || strncmp(".glsl", ext, 5) == 0)
-        shader->Type = GL_VERTEX_SHADER;
+         type = GL_VERTEX_SHADER;
       else if (strncmp(".tesc", ext, 5) == 0)
-        shader->Type = GL_TESS_CONTROL_SHADER;
+         type = GL_TESS_CONTROL_SHADER;
       else if (strncmp(".tese", ext, 5) == 0)
-        shader->Type = GL_TESS_EVALUATION_SHADER;
+         type = GL_TESS_EVALUATION_SHADER;
       else if (strncmp(".geom", ext, 5) == 0)
-        shader->Type = GL_GEOMETRY_SHADER;
+         type = GL_GEOMETRY_SHADER;
       else if (strncmp(".frag", ext, 5) == 0)
-        shader->Type = GL_FRAGMENT_SHADER;
+         type = GL_FRAGMENT_SHADER;
       else if (strncmp(".comp", ext, 5) == 0)
-         shader->Type = GL_COMPUTE_SHADER;
+         type = GL_COMPUTE_SHADER;
       else
          goto fail;
-      shader->Stage = _mesa_shader_enum_to_shader_stage(shader->Type);
 
-      shader->Source = load_text_file(whole_program, files[i]);
-      if (shader->Source == NULL) {
+      const char *source = load_text_file(whole_program, files[i]);
+      if (source == NULL) {
          printf("File \"%s\" does not exist.\n", files[i]);
          exit(EXIT_FAILURE);
       }
 
+      struct gl_shader *shader = standalone_add_shader_source(ctx, whole_program, type, source);
+
       compile_shader(ctx, shader);
 
       if (strlen(shader->InfoLog) > 0) {
index d3e7190..6396d3e 100644 (file)
@@ -307,3 +307,21 @@ standalone_destroy_shader_program(struct gl_shader_program *whole_program)
 
    ralloc_free(whole_program);
 }
+
+struct gl_shader *
+standalone_add_shader_source(struct gl_context *ctx, struct gl_shader_program *whole_program, GLenum type, const char *source)
+{
+   struct gl_shader *shader = rzalloc(whole_program, gl_shader);
+   shader->Type = type;
+   shader->Stage = _mesa_shader_enum_to_shader_stage(type);
+   shader->Source = source;
+
+   whole_program->Shaders = reralloc(whole_program, whole_program->Shaders,
+                                     struct gl_shader *, whole_program->NumShaders + 1);
+   assert(whole_program->Shaders != NULL);
+
+   whole_program->Shaders[whole_program->NumShaders] = shader;
+   whole_program->NumShaders++;
+
+   return shader;
+}
index 3221259..9d005f5 100644 (file)
@@ -113,5 +113,7 @@ struct gl_shader_program *
 standalone_create_shader_program(void);
 void
 standalone_destroy_shader_program(struct gl_shader_program *whole_program);
+struct gl_shader *
+standalone_add_shader_source(struct gl_context *ctx, struct gl_shader_program *whole_program, GLenum type, const char *source);
 
 #endif /* STANDALONE_SCAFFOLDING_H */