New _mesa_reference_shader/program() function to consolidate refcounting.
Note that (unlike texture objects), shader handles remain valid (in the
hash table) after glDeleteShader/Program() if the refcount isn't zero.
diff --git a/src/mesa/shader/shader_api.h b/src/mesa/shader/shader_api.h
index 16ed1a0..27e5870 100644
--- a/src/mesa/shader/shader_api.h
+++ b/src/mesa/shader/shader_api.h
@@ -45,12 +45,21 @@
_mesa_new_shader_program(GLcontext *ctx, GLuint name);
extern void
+_mesa_clear_shader_program_data(GLcontext *ctx,
+ struct gl_shader_program *shProg);
+
+extern void
_mesa_free_shader_program_data(GLcontext *ctx,
struct gl_shader_program *shProg);
extern void
_mesa_free_shader_program(GLcontext *ctx, struct gl_shader_program *shProg);
+extern void
+_mesa_reference_shader_program(GLcontext *ctx,
+ struct gl_shader_program **ptr,
+ struct gl_shader_program *shProg);
+
extern struct gl_shader_program *
_mesa_lookup_shader_program(GLcontext *ctx, GLuint name);
@@ -61,6 +70,10 @@
extern void
_mesa_free_shader(GLcontext *ctx, struct gl_shader *sh);
+extern void
+_mesa_reference_shader(GLcontext *ctx, struct gl_shader **ptr,
+ struct gl_shader *sh);
+
extern struct gl_shader *
_mesa_lookup_shader(GLcontext *ctx, GLuint name);