glsl/standalone: Pull out a helper function for adding GLSL source shaders.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21886>
This commit is contained in:
Emma Anholt
2023-02-28 16:04:56 -08:00
committed by Marge Bot
parent 1c47609888
commit 9b5326bdc1
3 changed files with 31 additions and 19 deletions
+11 -19
View 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) {
@@ -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;
}
@@ -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 */