mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-16 07:38:14 +02:00
mesa: Ensure that gl_shader_program::InfoLog is never NULL
This prevents assertion failures in ralloc_strcat. The ralloc_free in
_mesa_free_shader_program_data can be omitted because freeing the
gl_shader_program in _mesa_delete_shader_program will take care of
this automatically.
A bunch of this code could use a refactor to use ralloc a bit more
effectively. A bunch of the things that are allocated with malloc and
owned by the gl_shader_program should be allocated with ralloc (using
the gl_shader_program as the context).
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
(cherry picked from commit 89193933cb)
This commit is contained in:
parent
e458c3ddbb
commit
a864b15b83
2 changed files with 7 additions and 5 deletions
|
|
@ -275,6 +275,7 @@ main(int argc, char **argv)
|
|||
|
||||
whole_program = rzalloc (NULL, struct gl_shader_program);
|
||||
assert(whole_program != NULL);
|
||||
whole_program->InfoLog = ralloc_strdup(whole_program, "");
|
||||
|
||||
for (/* empty */; argc > optind; optind++) {
|
||||
whole_program->Shaders =
|
||||
|
|
|
|||
|
|
@ -244,6 +244,8 @@ _mesa_init_shader_program(struct gl_context *ctx, struct gl_shader_program *prog
|
|||
prog->Geom.InputType = GL_TRIANGLES;
|
||||
prog->Geom.OutputType = GL_TRIANGLE_STRIP;
|
||||
#endif
|
||||
|
||||
prog->InfoLog = ralloc_strdup(prog, "");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -283,6 +285,10 @@ _mesa_clear_shader_program_data(struct gl_context *ctx,
|
|||
_mesa_free_parameter_list(shProg->Varying);
|
||||
shProg->Varying = NULL;
|
||||
}
|
||||
|
||||
assert(shProg->InfoLog != NULL);
|
||||
ralloc_free(shProg->InfoLog);
|
||||
shProg->InfoLog = ralloc_strdup(shProg, "");
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -317,11 +323,6 @@ _mesa_free_shader_program_data(struct gl_context *ctx,
|
|||
shProg->Shaders = NULL;
|
||||
}
|
||||
|
||||
if (shProg->InfoLog) {
|
||||
ralloc_free(shProg->InfoLog);
|
||||
shProg->InfoLog = NULL;
|
||||
}
|
||||
|
||||
/* Transform feedback varying vars */
|
||||
for (i = 0; i < shProg->TransformFeedback.NumVarying; i++) {
|
||||
free(shProg->TransformFeedback.VaryingNames[i]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue