*ptr = tex;
}
+/**
+ * Set *ptr to \p view with proper reference counting.
+ *
+ * The caller must guarantee that \p view and *ptr must have been created in
+ * the same context (if they exist), and that this must be the current context.
+ */
static inline void
pipe_sampler_view_reference(struct pipe_sampler_view **ptr, struct pipe_sampler_view *view)
{
/**
* Similar to pipe_sampler_view_reference() but always set the pointer to
- * NULL and pass in an explicit context. Passing an explicit context is a
- * work-around for fixing a dangling context pointer problem when textures
- * are shared by multiple contexts. XXX fix this someday.
+ * NULL and pass in the current context explicitly.
+ *
+ * If *ptr is non-NULL, it may refer to a view that was created in a different
+ * context (however, that context must still be alive).
*/
static inline void
pipe_sampler_view_release(struct pipe_context *ctx,
struct pipe_sampler_view **ptr)
{
struct pipe_sampler_view *old_view = *ptr;
- if (*ptr && (*ptr)->context != ctx) {
- debug_printf_once(("context mis-match in pipe_sampler_view_release()\n"));
- }
if (pipe_reference_described(&(*ptr)->reference, NULL,
(debug_reference_descriptor)debug_describe_sampler_view)) {
ctx->sampler_view_destroy(ctx, old_view);
struct pipe_resource *texture,
const struct pipe_sampler_view *templat);
+ /**
+ * Destroy a view on a texture.
+ *
+ * \param ctx the current context
+ * \param view the view to be destroyed
+ *
+ * \note The current context may not be the context in which the view was
+ * created (view->context). However, the caller must guarantee that
+ * the context which created the view is still alive.
+ */
void (*sampler_view_destroy)(struct pipe_context *ctx,
struct pipe_sampler_view *view);