From: Emma Anholt Date: Wed, 1 Mar 2023 00:04:56 +0000 (-0800) Subject: glsl/standalone: Pull out a helper function for adding GLSL source shaders. X-Git-Tag: upstream/23.3.3~11251 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b5326bdc14f3ac2f7b2e029fca22411fce638b6;p=platform%2Fupstream%2Fmesa.git glsl/standalone: Pull out a helper function for adding GLSL source shaders. Reviewed-by: Marek Olšák Part-of: --- diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp index 2820b08..16f4c4c 100644 --- a/src/compiler/glsl/standalone.cpp +++ b/src/compiler/glsl/standalone.cpp @@ -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) { diff --git a/src/compiler/glsl/standalone_scaffolding.cpp b/src/compiler/glsl/standalone_scaffolding.cpp index d3e7190..6396d3e 100644 --- a/src/compiler/glsl/standalone_scaffolding.cpp +++ b/src/compiler/glsl/standalone_scaffolding.cpp @@ -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; +} diff --git a/src/compiler/glsl/standalone_scaffolding.h b/src/compiler/glsl/standalone_scaffolding.h index 3221259..9d005f5 100644 --- a/src/compiler/glsl/standalone_scaffolding.h +++ b/src/compiler/glsl/standalone_scaffolding.h @@ -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 */