projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mesa: Free all shader program data before deleting all
[mesa.git]
/
src
/
mesa
/
shader
/
shader_api.c
diff --git
a/src/mesa/shader/shader_api.c
b/src/mesa/shader/shader_api.c
index d0c823510376726db0e1d09e4dfafc60f6fcf9d2..01a237c525a231047b0f2d9e2936a0c82c806af4 100644
(file)
--- a/
src/mesa/shader/shader_api.c
+++ b/
src/mesa/shader/shader_api.c
@@
-79,7
+79,7
@@
_mesa_clear_shader_program_data(GLcontext *ctx,
/* to prevent a double-free in the next call */
shProg->VertexProgram->Base.Parameters = NULL;
}
/* to prevent a double-free in the next call */
shProg->VertexProgram->Base.Parameters = NULL;
}
-
_mesa_delete_p
rogram(ctx, &shProg->VertexProgram->Base);
+
ctx->Driver.DeleteP
rogram(ctx, &shProg->VertexProgram->Base);
shProg->VertexProgram = NULL;
}
shProg->VertexProgram = NULL;
}
@@
-88,7
+88,7
@@
_mesa_clear_shader_program_data(GLcontext *ctx,
/* to prevent a double-free in the next call */
shProg->FragmentProgram->Base.Parameters = NULL;
}
/* to prevent a double-free in the next call */
shProg->FragmentProgram->Base.Parameters = NULL;
}
-
_mesa_delete_p
rogram(ctx, &shProg->FragmentProgram->Base);
+
ctx->Driver.DeleteP
rogram(ctx, &shProg->FragmentProgram->Base);
shProg->FragmentProgram = NULL;
}
shProg->FragmentProgram = NULL;
}
@@
-127,6
+127,8
@@
_mesa_free_shader_program_data(GLcontext *ctx,
for (i = 0; i < shProg->NumShaders; i++) {
_mesa_reference_shader(ctx, &shProg->Shaders[i], NULL);
}
for (i = 0; i < shProg->NumShaders; i++) {
_mesa_reference_shader(ctx, &shProg->Shaders[i], NULL);
}
+ shProg->NumShaders = 0;
+
if (shProg->Shaders) {
_mesa_free(shProg->Shaders);
shProg->Shaders = NULL;
if (shProg->Shaders) {
_mesa_free(shProg->Shaders);
shProg->Shaders = NULL;
@@
-246,7
+248,7
@@
_mesa_free_shader(GLcontext *ctx, struct gl_shader *sh)
_mesa_free(sh->InfoLog);
for (i = 0; i < sh->NumPrograms; i++) {
assert(sh->Programs[i]);
_mesa_free(sh->InfoLog);
for (i = 0; i < sh->NumPrograms; i++) {
assert(sh->Programs[i]);
-
_mesa_delete_p
rogram(ctx, sh->Programs[i]);
+
ctx->Driver.DeleteP
rogram(ctx, sh->Programs[i]);
}
if (sh->Programs)
_mesa_free(sh->Programs);
}
if (sh->Programs)
_mesa_free(sh->Programs);