+void
+llvmpipe_destroy_fs(struct llvmpipe_context *llvmpipe,
+ struct lp_fragment_shader *shader);
+
+static inline void
+lp_fs_reference(struct llvmpipe_context *llvmpipe,
+ struct lp_fragment_shader **ptr,
+ struct lp_fragment_shader *shader)
+{
+ struct lp_fragment_shader *old_ptr = *ptr;
+ if (pipe_reference(old_ptr ? &(*ptr)->reference : NULL, shader ? &shader->reference : NULL)) {
+ llvmpipe_destroy_fs(llvmpipe, old_ptr);
+ }
+ *ptr = shader;
+}
+
+void
+llvmpipe_destroy_shader_variant(struct llvmpipe_context *lp,
+ struct lp_fragment_shader_variant *variant);
+
+static inline void
+lp_fs_variant_reference(struct llvmpipe_context *llvmpipe,
+ struct lp_fragment_shader_variant **ptr,
+ struct lp_fragment_shader_variant *variant)
+{
+ struct lp_fragment_shader_variant *old_ptr = *ptr;
+ if (pipe_reference(old_ptr ? &(*ptr)->reference : NULL, variant ? &variant->reference : NULL)) {
+ llvmpipe_destroy_shader_variant(llvmpipe, old_ptr);
+ }
+ *ptr = variant;
+}
+