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);