diff options
Diffstat (limited to 'src/mesa/shader')
-rw-r--r-- | src/mesa/shader/shader_api.c | 16 | ||||
-rw-r--r-- | src/mesa/shader/shader_api.h | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 88aa8c50f5b..002b42721df 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -212,6 +212,22 @@ _mesa_init_shader_state(GLcontext * ctx) /** + * Free the per-context shader-related state. + */ +void +_mesa_free_shader_state(GLcontext *ctx) +{ + if (ctx->Shader.CurrentProgram) { + ctx->Shader.CurrentProgram->RefCount--; + if (ctx->Shader.CurrentProgram->RefCount <= 0) { + _mesa_free_shader_program(ctx, ctx->Shader.CurrentProgram); + ctx->Shader.CurrentProgram = NULL; + } + } +} + + +/** * Copy string from <src> to <dst>, up to maxLength characters, returning * length of <dst> in <length>. * \param src the strings source diff --git a/src/mesa/shader/shader_api.h b/src/mesa/shader/shader_api.h index 315f60a35f7..16ed1a0c108 100644 --- a/src/mesa/shader/shader_api.h +++ b/src/mesa/shader/shader_api.h @@ -38,6 +38,9 @@ extern void _mesa_init_shader_state(GLcontext * ctx); +extern void +_mesa_free_shader_state(GLcontext *ctx); + extern struct gl_shader_program * _mesa_new_shader_program(GLcontext *ctx, GLuint name); |