[Mesa-dev] [RFC] [PATCH] Hack around bug #64913
Krzysztof A. Sobiecki
sobkas at gmail.com
Mon Jul 15 13:03:01 PDT 2013
Still work in progress. Should I bother to finish it or wait for
more general fix mentioned in pipe_sampler_view_release?
What do you think about it?
From: "Krzysztof A. Sobiecki" <sobkas at gmail.com>
Date: Mon, 15 Jul 2013 20:32:23 +0200
For now it should use explict context, otherwise it might cause crashes in apps.
It should hide bug #64913.
---
src/gallium/auxiliary/cso_cache/cso_context.c | 14 ++++++-------
src/gallium/auxiliary/draw/draw_pipe_aaline.c | 10 +++++-----
src/gallium/auxiliary/draw/draw_pipe_pstipple.c | 10 +++++-----
src/gallium/auxiliary/hud/hud_context.c | 2 +-
src/gallium/auxiliary/postprocess/pp_mlaa.c | 4 ++--
src/gallium/auxiliary/postprocess/pp_run.c | 2 +-
src/gallium/auxiliary/util/u_blit.c | 4 ++--
src/gallium/auxiliary/util/u_blitter.c | 10 +++++-----
src/gallium/auxiliary/util/u_blitter.h | 2 +-
src/gallium/auxiliary/util/u_inlines.h | 13 ++++++++++--
src/gallium/auxiliary/vl/vl_compositor.c | 16 +++++++--------
src/gallium/auxiliary/vl/vl_idct.c | 24 +++++++++++------------
src/gallium/auxiliary/vl/vl_mpeg12_decoder.c | 14 ++++++-------
src/gallium/auxiliary/vl/vl_video_buffer.c | 8 ++++----
src/gallium/auxiliary/vl/vl_zscan.c | 10 +++++-----
src/gallium/drivers/freedreno/freedreno_texture.c | 4 ++--
src/gallium/drivers/galahad/glhd_objects.c | 2 +-
src/gallium/drivers/i915/i915_state.c | 4 ++--
src/gallium/drivers/ilo/ilo_state.c | 12 ++++++------
src/gallium/drivers/llvmpipe/lp_context.c | 6 +++---
src/gallium/drivers/llvmpipe/lp_state_sampler.c | 2 +-
src/gallium/drivers/nouveau/nouveau_video.c | 10 +++++-----
src/gallium/drivers/nv30/nv30_fragtex.c | 4 ++--
src/gallium/drivers/nv30/nv40_verttex.c | 4 ++--
src/gallium/drivers/nv50/nv50_context.c | 2 +-
src/gallium/drivers/nv50/nv50_state.c | 4 ++--
src/gallium/drivers/nv50/nv50_surface.c | 4 ++--
src/gallium/drivers/nvc0/nvc0_context.c | 2 +-
src/gallium/drivers/nvc0/nvc0_state.c | 8 ++++----
src/gallium/drivers/nvc0/nvc0_surface.c | 4 ++--
src/gallium/drivers/nvc0/nvc0_video.c | 4 ++--
src/gallium/drivers/r300/r300_blit.c | 2 +-
src/gallium/drivers/r300/r300_context.c | 4 ++--
src/gallium/drivers/r300/r300_state.c | 2 ++
src/gallium/drivers/r300/r300_state_derived.c | 1 +
src/gallium/drivers/r600/r600_blit.c | 2 +-
src/gallium/drivers/r600/r600_state_common.c | 6 +++---
src/gallium/drivers/radeonsi/si_state.c | 3 ++-
src/gallium/drivers/softpipe/sp_context.c | 4 ++--
src/gallium/drivers/softpipe/sp_state_derived.c | 4 ++--
src/gallium/drivers/softpipe/sp_state_sampler.c | 2 +-
src/gallium/drivers/svga/svga_pipe_sampler.c | 2 +-
src/gallium/drivers/trace/tr_context.c | 2 +-
src/gallium/state_trackers/vdpau/bitmap.c | 4 +++-
src/gallium/state_trackers/vdpau/device.c | 7 +++++--
src/gallium/state_trackers/vdpau/output.c | 15 ++++++++------
src/gallium/state_trackers/vega/api_filters.c | 4 ++--
src/gallium/state_trackers/vega/image.c | 4 ++--
src/gallium/state_trackers/vega/mask.c | 2 +-
src/gallium/state_trackers/vega/paint.c | 12 +++++++-----
src/gallium/state_trackers/vega/vg_context.c | 8 ++++----
src/gallium/state_trackers/xa/xa_composite.c | 8 ++++----
src/gallium/state_trackers/xa/xa_context.c | 2 +-
src/gallium/state_trackers/xa/xa_renderer.c | 2 +-
src/gallium/state_trackers/xorg/xorg_composite.c | 6 +++---
src/gallium/state_trackers/xorg/xorg_exa.c | 4 ++--
src/gallium/state_trackers/xorg/xorg_xv.c | 6 +++---
src/gallium/state_trackers/xvmc/subpicture.c | 9 +++++++--
src/gallium/tests/trivial/quad-tex.c | 2 +-
src/mesa/state_tracker/st_atom_texture.c | 4 ++--
src/mesa/state_tracker/st_cb_bitmap.c | 4 ++--
src/mesa/state_tracker/st_cb_drawpixels.c | 6 +++---
src/mesa/state_tracker/st_cb_eglimage.c | 3 ++-
src/mesa/state_tracker/st_gen_mipmap.c | 4 ++--
64 files changed, 199 insertions(+), 170 deletions(-)
diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
index 6805427..417fca1 100644
--- a/src/gallium/auxiliary/cso_cache/cso_context.c
+++ b/src/gallium/auxiliary/cso_cache/cso_context.c
@@ -322,8 +322,8 @@ void cso_release_all( struct cso_context *ctx )
for (shader = 0; shader < Elements(ctx->samplers); shader++) {
struct sampler_info *info = &ctx->samplers[shader];
for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
- pipe_sampler_view_reference(&info->views[i], NULL);
- pipe_sampler_view_reference(&info->views_saved[i], NULL);
+ pipe_sampler_view_reference(ctx->pipe, &info->views[i], NULL);
+ pipe_sampler_view_reference(ctx->pipe, &info->views_saved[i], NULL);
}
}
@@ -1173,11 +1173,11 @@ cso_set_sampler_views(struct cso_context *ctx,
/* reference new views */
for (i = 0; i < count; i++) {
- pipe_sampler_view_reference(&info->views[i], views[i]);
+ pipe_sampler_view_reference(ctx->pipe, &info->views[i], views[i]);
}
/* unref extra old views, if any */
for (; i < info->nr_views; i++) {
- pipe_sampler_view_reference(&info->views[i], NULL);
+ pipe_sampler_view_reference(ctx->pipe, &info->views[i], NULL);
}
info->nr_views = count;
@@ -1209,7 +1209,7 @@ cso_save_sampler_views(struct cso_context *ctx, unsigned shader_stage)
for (i = 0; i < info->nr_views; i++) {
assert(!info->views_saved[i]);
- pipe_sampler_view_reference(&info->views_saved[i], info->views[i]);
+ pipe_sampler_view_reference(ctx->pipe, &info->views_saved[i], info->views[i]);
}
}
@@ -1221,13 +1221,13 @@ cso_restore_sampler_views(struct cso_context *ctx, unsigned shader_stage)
unsigned i, nr_saved = info->nr_views_saved;
for (i = 0; i < nr_saved; i++) {
- pipe_sampler_view_reference(&info->views[i], NULL);
+ pipe_sampler_view_reference(ctx->pipe, &info->views[i], NULL);
/* move the reference from one pointer to another */
info->views[i] = info->views_saved[i];
info->views_saved[i] = NULL;
}
for (; i < info->nr_views; i++) {
- pipe_sampler_view_reference(&info->views[i], NULL);
+ pipe_sampler_view_reference(ctx->pipe, &info->views[i], NULL);
}
/* bind the old/saved sampler views */
diff --git a/src/gallium/auxiliary/draw/draw_pipe_aaline.c b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
index aa88459..22d7500 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_aaline.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
@@ -706,7 +706,7 @@ aaline_first_line(struct draw_stage *stage, struct prim_header *header)
num_samplers = MAX2(num_samplers, aaline->fs->sampler_unit + 1);
aaline->state.sampler[aaline->fs->sampler_unit] = aaline->sampler_cso;
- pipe_sampler_view_reference(&aaline->state.sampler_views[aaline->fs->sampler_unit],
+ pipe_sampler_view_reference(pipe, &aaline->state.sampler_views[aaline->fs->sampler_unit],
aaline->sampler_view);
draw->suspend_flushing = TRUE;
@@ -770,7 +770,7 @@ aaline_destroy(struct draw_stage *stage)
uint i;
for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
- pipe_sampler_view_reference(&aaline->state.sampler_views[i], NULL);
+ pipe_sampler_view_reference(pipe, &aaline->state.sampler_views[i], NULL);
}
if (aaline->sampler_cso)
@@ -780,7 +780,7 @@ aaline_destroy(struct draw_stage *stage)
pipe_resource_reference(&aaline->texture, NULL);
if (aaline->sampler_view) {
- pipe_sampler_view_reference(&aaline->sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &aaline->sampler_view, NULL);
}
draw_free_temp_verts( stage );
@@ -941,10 +941,10 @@ aaline_set_sampler_views(struct pipe_context *pipe,
/* save current */
for (i = 0; i < num; i++) {
- pipe_sampler_view_reference(&aaline->state.sampler_views[i], views[i]);
+ pipe_sampler_view_reference(pipe, &aaline->state.sampler_views[i], views[i]);
}
for ( ; i < PIPE_MAX_SAMPLERS; i++) {
- pipe_sampler_view_reference(&aaline->state.sampler_views[i], NULL);
+ pipe_sampler_view_reference(pipe, &aaline->state.sampler_views[i], NULL);
}
aaline->num_sampler_views = num;
diff --git a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
index 51f5a86..1c1a79d 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
@@ -541,7 +541,7 @@ pstip_first_tri(struct draw_stage *stage, struct prim_header *header)
/* plug in our sampler, texture */
pstip->state.samplers[pstip->fs->sampler_unit] = pstip->sampler_cso;
- pipe_sampler_view_reference(&pstip->state.sampler_views[pstip->fs->sampler_unit],
+ pipe_sampler_view_reference(pipe, &pstip->state.sampler_views[pstip->fs->sampler_unit],
pstip->sampler_view);
assert(num_samplers <= PIPE_MAX_SAMPLERS);
@@ -593,7 +593,7 @@ pstip_destroy(struct draw_stage *stage)
uint i;
for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
- pipe_sampler_view_reference(&pstip->state.sampler_views[i], NULL);
+ pipe_sampler_view_reference(pstip->pipe, &pstip->state.sampler_views[i], NULL);
}
pstip->pipe->delete_sampler_state(pstip->pipe, pstip->sampler_cso);
@@ -601,7 +601,7 @@ pstip_destroy(struct draw_stage *stage)
pipe_resource_reference(&pstip->texture, NULL);
if (pstip->sampler_view) {
- pipe_sampler_view_reference(&pstip->sampler_view, NULL);
+ pipe_sampler_view_reference(pstip->pipe, &pstip->sampler_view, NULL);
}
draw_free_temp_verts( stage );
@@ -729,10 +729,10 @@ pstip_set_sampler_views(struct pipe_context *pipe,
/* save current */
for (i = 0; i < num; i++) {
- pipe_sampler_view_reference(&pstip->state.sampler_views[i], views[i]);
+ pipe_sampler_view_reference(pstip->pipe, &pstip->state.sampler_views[i], views[i]);
}
for (; i < PIPE_MAX_SAMPLERS; i++) {
- pipe_sampler_view_reference(&pstip->state.sampler_views[i], NULL);
+ pipe_sampler_view_reference(pstip->pipe, &pstip->state.sampler_views[i], NULL);
}
pstip->num_sampler_views = num;
diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c
index c4a4f18..84d926e 100644
--- a/src/gallium/auxiliary/hud/hud_context.c
+++ b/src/gallium/auxiliary/hud/hud_context.c
@@ -1091,7 +1091,7 @@ hud_destroy(struct hud_context *hud)
pipe->delete_fs_state(pipe, hud->fs_color);
pipe->delete_fs_state(pipe, hud->fs_text);
pipe->delete_vs_state(pipe, hud->vs);
- pipe_sampler_view_reference(&hud->font_sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &hud->font_sampler_view, NULL);
pipe_resource_reference(&hud->font.texture, NULL);
u_upload_destroy(hud->uploader);
FREE(hud);
diff --git a/src/gallium/auxiliary/postprocess/pp_mlaa.c b/src/gallium/auxiliary/postprocess/pp_mlaa.c
index 503749b..f553b8a 100644
--- a/src/gallium/auxiliary/postprocess/pp_mlaa.c
+++ b/src/gallium/auxiliary/postprocess/pp_mlaa.c
@@ -180,7 +180,7 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
pp_filter_draw(p);
pp_filter_end_pass(p);
- pipe_sampler_view_reference(&arr[1], NULL);
+ pipe_sampler_view_reference(p->pipe, &arr[1], NULL);
/* Third pass: smoothed edges */
@@ -214,7 +214,7 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
pp_filter_draw(p);
pp_filter_end_pass(p);
- pipe_sampler_view_reference(&arr[0], NULL);
+ pipe_sampler_view_reference(p->pipe, &arr[0], NULL);
p->blend.rt[0].blend_enable = 0;
p->framebuffer.zsbuf = NULL;
diff --git a/src/gallium/auxiliary/postprocess/pp_run.c b/src/gallium/auxiliary/postprocess/pp_run.c
index 0d95c72..dda75f4 100644
--- a/src/gallium/auxiliary/postprocess/pp_run.c
+++ b/src/gallium/auxiliary/postprocess/pp_run.c
@@ -191,7 +191,7 @@ void
pp_filter_end_pass(struct program *p)
{
pipe_surface_reference(&p->framebuffer.cbufs[0], NULL);
- pipe_sampler_view_reference(&p->view, NULL);
+ pipe_sampler_view_reference(p->pipe, &p->view, NULL);
}
/**
diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c
index 8cc080c..96261f8 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -736,7 +736,7 @@ util_blit_pixels(struct blit_state *ctx,
views[1] = pipe->create_sampler_view(pipe, views[0]->texture, &templ);
cso_set_sampler_views(ctx->cso, PIPE_SHADER_FRAGMENT, 2, views);
- pipe_sampler_view_reference(&views[1], NULL);
+ pipe_sampler_view_reference(pipe, &views[1], NULL);
}
else {
cso_set_sampler_views(ctx->cso, PIPE_SHADER_FRAGMENT, 1, &sampler_view);
@@ -804,7 +804,7 @@ util_blit_pixels(struct blit_state *ctx,
cso_restore_stream_outputs(ctx->cso);
cso_restore_render_condition(ctx->cso);
- pipe_sampler_view_reference(&sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &sampler_view, NULL);
if (dst_surface != dst)
pipe_surface_reference(&dst_surface, NULL);
}
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index be839d4..12aed3d 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -539,7 +539,7 @@ static void blitter_restore_textures(struct blitter_context_priv *ctx)
ctx->base.saved_sampler_views);
for (i = 0; i < ctx->base.saved_num_sampler_views; i++)
- pipe_sampler_view_reference(&ctx->base.saved_sampler_views[i], NULL);
+ pipe_sampler_view_reference(pipe, &ctx->base.saved_sampler_views[i], NULL);
ctx->base.saved_num_sampler_views = ~0;
}
@@ -1187,7 +1187,7 @@ void util_blitter_copy_texture(struct blitter_context *blitter,
copy_all_samples);
pipe_surface_reference(&dst_view, NULL);
- pipe_sampler_view_reference(&src_view, NULL);
+ pipe_sampler_view_reference(pipe, &src_view, NULL);
}
void util_blitter_blit_generic(struct blitter_context *blitter,
@@ -1311,7 +1311,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
pipe->set_fragment_sampler_views(pipe, 2, views);
pipe->bind_fragment_sampler_states(pipe, 2, samplers);
- pipe_sampler_view_reference(&views[1], NULL);
+ pipe_sampler_view_reference(pipe, &views[1], NULL);
} else if (blit_stencil) {
/* Set a stencil-only sampler view for it not to sample depth instead. */
struct pipe_sampler_view templ;
@@ -1326,7 +1326,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
pipe->set_fragment_sampler_views(pipe, 1, &view);
pipe->bind_fragment_sampler_states(pipe, 1, &sampler_state);
- pipe_sampler_view_reference(&view, NULL);
+ pipe_sampler_view_reference(pipe, &view, NULL);
} else {
pipe->set_fragment_sampler_views(pipe, 1, &src);
pipe->bind_fragment_sampler_states(pipe, 1, &sampler_state);
@@ -1464,7 +1464,7 @@ util_blitter_blit(struct blitter_context *blitter,
info->scissor_enable ? &info->scissor : NULL, TRUE);
pipe_surface_reference(&dst_view, NULL);
- pipe_sampler_view_reference(&src_view, NULL);
+ pipe_sampler_view_reference(pipe, &src_view, NULL);
}
/* Clear a region of a color surface to a constant value. */
diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h
index d9cefde..2335df3 100644
--- a/src/gallium/auxiliary/util/u_blitter.h
+++ b/src/gallium/auxiliary/util/u_blitter.h
@@ -477,7 +477,7 @@ util_blitter_save_fragment_sampler_views(struct blitter_context *blitter,
blitter->saved_num_sampler_views = num_views;
for (i = 0; i < num_views; i++)
- pipe_sampler_view_reference(&blitter->saved_sampler_views[i],
+ pipe_sampler_view_reference(blitter->pipe, &blitter->saved_sampler_views[i],
views[i]);
}
diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
index 6e65ee6..cb9f1ef 100644
--- a/src/gallium/auxiliary/util/u_inlines.h
+++ b/src/gallium/auxiliary/util/u_inlines.h
@@ -142,13 +142,22 @@ pipe_resource_reference(struct pipe_resource **ptr, struct pipe_resource *tex)
}
static INLINE void
-pipe_sampler_view_reference(struct pipe_sampler_view **ptr, struct pipe_sampler_view *view)
+pipe_sampler_view_reference(struct pipe_context *ctx, struct pipe_sampler_view **ptr, struct pipe_sampler_view *view)
{
struct pipe_sampler_view *old_view = *ptr;
if (pipe_reference_described(&(*ptr)->reference, &view->reference,
(debug_reference_descriptor)debug_describe_sampler_view))
- old_view->context->sampler_view_destroy(old_view->context, old_view);
+ {
+ if (ctx)
+ {
+ ctx->sampler_view_destroy(ctx, old_view);
+ }
+ else
+ {
+ old_view->context->sampler_view_destroy(old_view->context, old_view);
+ }
+ }
*ptr = view;
}
diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
index 4b83087..93aad4c 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -788,7 +788,7 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
s->layers[i].viewport.translate[3] = 0;
for ( j = 0; j < 3; j++)
- pipe_sampler_view_reference(&s->layers[i].sampler_views[j], NULL);
+ pipe_sampler_view_reference(s->pipe, &s->layers[i].sampler_views[j], NULL);
for ( j = 0; j < 4; ++j)
s->layers[i].colors[j] = v_one;
}
@@ -887,7 +887,7 @@ vl_compositor_set_buffer_layer(struct vl_compositor_state *s,
sampler_views = buffer->get_sampler_view_components(buffer);
for (i = 0; i < 3; ++i) {
s->layers[layer].samplers[i] = c->sampler_linear;
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[i], sampler_views[i]);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[i], sampler_views[i]);
}
calc_src_and_dst(&s->layers[layer], buffer->width, buffer->height,
@@ -942,9 +942,9 @@ vl_compositor_set_palette_layer(struct vl_compositor_state *s,
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = c->sampler_nearest;
s->layers[layer].samplers[2] = NULL;
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[0], indexes);
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[1], palette);
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[2], NULL);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[0], indexes);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[1], palette);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[2], NULL);
calc_src_and_dst(&s->layers[layer], indexes->texture->width0, indexes->texture->height0,
src_rect ? *src_rect : default_rect(&s->layers[layer]),
dst_rect ? *dst_rect : default_rect(&s->layers[layer]));
@@ -970,9 +970,9 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
s->layers[layer].samplers[0] = c->sampler_linear;
s->layers[layer].samplers[1] = NULL;
s->layers[layer].samplers[2] = NULL;
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[0], rgba);
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[1], NULL);
- pipe_sampler_view_reference(&s->layers[layer].sampler_views[2], NULL);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[0], rgba);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[1], NULL);
+ pipe_sampler_view_reference(s->pipe, &s->layers[layer].sampler_views[2], NULL);
calc_src_and_dst(&s->layers[layer], rgba->texture->width0, rgba->texture->height0,
src_rect ? *src_rect : default_rect(&s->layers[layer]),
dst_rect ? *dst_rect : default_rect(&s->layers[layer]));
diff --git a/src/gallium/auxiliary/vl/vl_idct.c b/src/gallium/auxiliary/vl/vl_idct.c
index 5346cbc..9a280cd 100644
--- a/src/gallium/auxiliary/vl/vl_idct.c
+++ b/src/gallium/auxiliary/vl/vl_idct.c
@@ -621,7 +621,7 @@ cleanup_source(struct vl_idct_buffer *buffer)
pipe_surface_reference(&buffer->fb_state_mismatch.cbufs[0], NULL);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.source, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.source, NULL);
}
static bool
@@ -674,7 +674,7 @@ cleanup_intermediate(struct vl_idct_buffer *buffer)
for(i = 0; i < PIPE_MAX_COLOR_BUFS; ++i)
pipe_surface_reference(&buffer->fb_state.cbufs[i], NULL);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.intermediate, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.intermediate, NULL);
}
struct pipe_sampler_view *
@@ -758,8 +758,8 @@ bool vl_idct_init(struct vl_idct *idct, struct pipe_context *pipe,
idct->buffer_height = buffer_height;
idct->nr_of_render_targets = nr_of_render_targets;
- pipe_sampler_view_reference(&idct->matrix, matrix);
- pipe_sampler_view_reference(&idct->transpose, transpose);
+ pipe_sampler_view_reference(pipe, &idct->matrix, matrix);
+ pipe_sampler_view_reference(pipe, &idct->transpose, transpose);
if(!init_shaders(idct))
return false;
@@ -778,8 +778,8 @@ vl_idct_cleanup(struct vl_idct *idct)
cleanup_shaders(idct);
cleanup_state(idct);
- pipe_sampler_view_reference(&idct->matrix, NULL);
- pipe_sampler_view_reference(&idct->transpose, NULL);
+ pipe_sampler_view_reference(NULL, &idct->matrix, NULL);
+ pipe_sampler_view_reference(NULL, &idct->transpose, NULL);
}
bool
@@ -792,10 +792,10 @@ vl_idct_init_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer,
memset(buffer, 0, sizeof(struct vl_idct_buffer));
- pipe_sampler_view_reference(&buffer->sampler_views.individual.matrix, idct->matrix);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.source, source);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.transpose, idct->transpose);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.intermediate, intermediate);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.matrix, idct->matrix);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.source, source);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.transpose, idct->transpose);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.intermediate, intermediate);
if (!init_source(idct, buffer))
return false;
@@ -814,8 +814,8 @@ vl_idct_cleanup_buffer(struct vl_idct_buffer *buffer)
cleanup_source(buffer);
cleanup_intermediate(buffer);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.matrix, NULL);
- pipe_sampler_view_reference(&buffer->sampler_views.individual.transpose, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.matrix, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->sampler_views.individual.transpose, NULL);
}
void
diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c b/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c
index 1eb9708..d790fff 100644
--- a/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c
+++ b/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c
@@ -137,7 +137,7 @@ error_plane:
error_surface:
error_sampler:
- pipe_sampler_view_reference(&buffer->zscan_source, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->zscan_source, NULL);
error_source:
return false;
@@ -153,7 +153,7 @@ cleanup_zscan_buffer(struct vl_mpeg12_buffer *buffer)
for (i = 0; i < VL_NUM_COMPONENTS; ++i)
vl_zscan_cleanup_buffer(&buffer->zscan[i]);
- pipe_sampler_view_reference(&buffer->zscan_source, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->zscan_source, NULL);
}
static bool
@@ -432,9 +432,9 @@ vl_mpeg12_destroy(struct pipe_video_decoder *decoder)
pipe_resource_reference(&dec->quads.buffer, NULL);
pipe_resource_reference(&dec->pos.buffer, NULL);
- pipe_sampler_view_reference(&dec->zscan_linear, NULL);
- pipe_sampler_view_reference(&dec->zscan_normal, NULL);
- pipe_sampler_view_reference(&dec->zscan_alternate, NULL);
+ pipe_sampler_view_reference(NULL, &dec->zscan_linear, NULL);
+ pipe_sampler_view_reference(NULL, &dec->zscan_normal, NULL);
+ pipe_sampler_view_reference(NULL, &dec->zscan_alternate, NULL);
for (i = 0; i < 4; ++i)
if (dec->dec_buffers[i])
@@ -933,7 +933,7 @@ init_idct(struct vl_mpeg12_decoder *dec, const struct format_config* format_conf
nr_of_idct_render_targets, matrix, matrix))
goto error_c;
- pipe_sampler_view_reference(&matrix, NULL);
+ pipe_sampler_view_reference(NULL, &matrix, NULL);
return true;
@@ -941,7 +941,7 @@ error_c:
vl_idct_cleanup(&dec->idct_y);
error_y:
- pipe_sampler_view_reference(&matrix, NULL);
+ pipe_sampler_view_reference(NULL, &matrix, NULL);
error_matrix:
dec->mc_source->destroy(dec->mc_source);
diff --git a/src/gallium/auxiliary/vl/vl_video_buffer.c b/src/gallium/auxiliary/vl/vl_video_buffer.c
index 6ef95e4..71670eb 100644
--- a/src/gallium/auxiliary/vl/vl_video_buffer.c
+++ b/src/gallium/auxiliary/vl/vl_video_buffer.c
@@ -253,8 +253,8 @@ vl_video_buffer_destroy(struct pipe_video_buffer *buffer)
assert(buf);
for (i = 0; i < VL_NUM_COMPONENTS; ++i) {
- pipe_sampler_view_reference(&buf->sampler_view_planes[i], NULL);
- pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
+ pipe_sampler_view_reference(buf->base.context ,&buf->sampler_view_planes[i], NULL);
+ pipe_sampler_view_reference(buf->base.context, &buf->sampler_view_components[i], NULL);
pipe_resource_reference(&buf->resources[i], NULL);
}
@@ -296,7 +296,7 @@ vl_video_buffer_sampler_view_planes(struct pipe_video_buffer *buffer)
error:
for (i = 0; i < buf->num_planes; ++i )
- pipe_sampler_view_reference(&buf->sampler_view_planes[i], NULL);
+ pipe_sampler_view_reference(pipe, &buf->sampler_view_planes[i], NULL);
return NULL;
}
@@ -344,7 +344,7 @@ vl_video_buffer_sampler_view_components(struct pipe_video_buffer *buffer)
error:
for (i = 0; i < VL_NUM_COMPONENTS; ++i )
- pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
+ pipe_sampler_view_reference(pipe, &buf->sampler_view_components[i], NULL);
return NULL;
}
diff --git a/src/gallium/auxiliary/vl/vl_zscan.c b/src/gallium/auxiliary/vl/vl_zscan.c
index 33baa3d..5a6e66f 100644
--- a/src/gallium/auxiliary/vl/vl_zscan.c
+++ b/src/gallium/auxiliary/vl/vl_zscan.c
@@ -465,7 +465,7 @@ vl_zscan_init_buffer(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer,
memset(buffer, 0, sizeof(struct vl_zscan_buffer));
- pipe_sampler_view_reference(&buffer->src, src);
+ pipe_sampler_view_reference(NULL, &buffer->src, src);
buffer->viewport.scale[0] = dst->width;
buffer->viewport.scale[1] = dst->height;
@@ -511,9 +511,9 @@ vl_zscan_cleanup_buffer(struct vl_zscan_buffer *buffer)
{
assert(buffer);
- pipe_sampler_view_reference(&buffer->src, NULL);
- pipe_sampler_view_reference(&buffer->layout, NULL);
- pipe_sampler_view_reference(&buffer->quant, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->src, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->layout, NULL);
+ pipe_sampler_view_reference(NULL, &buffer->quant, NULL);
pipe_surface_reference(&buffer->fb_state.cbufs[0], NULL);
}
@@ -523,7 +523,7 @@ vl_zscan_set_layout(struct vl_zscan_buffer *buffer, struct pipe_sampler_view *la
assert(buffer);
assert(layout);
- pipe_sampler_view_reference(&buffer->layout, layout);
+ pipe_sampler_view_reference(NULL, &buffer->layout, layout);
}
void
diff --git a/src/gallium/drivers/freedreno/freedreno_texture.c b/src/gallium/drivers/freedreno/freedreno_texture.c
index ff8a445..b90d867 100644
--- a/src/gallium/drivers/freedreno/freedreno_texture.c
+++ b/src/gallium/drivers/freedreno/freedreno_texture.c
@@ -79,12 +79,12 @@ static void set_sampler_views(struct fd_texture_stateobj *prog,
for (i = 0; i < nr; i++) {
if (views[i])
new_nr++;
- pipe_sampler_view_reference(&prog->textures[i], views[i]);
+ pipe_sampler_view_reference(NULL, &prog->textures[i], views[i]);
prog->dirty_samplers |= (1 << i);
}
for (; i < prog->num_textures; i++) {
- pipe_sampler_view_reference(&prog->textures[i], NULL);
+ pipe_sampler_view_reference(NULL, &prog->textures[i], NULL);
prog->dirty_samplers |= (1 << i);
}
diff --git a/src/gallium/drivers/galahad/glhd_objects.c b/src/gallium/drivers/galahad/glhd_objects.c
index e4a8f28..9a18c33 100644
--- a/src/gallium/drivers/galahad/glhd_objects.c
+++ b/src/gallium/drivers/galahad/glhd_objects.c
@@ -140,7 +140,7 @@ void
galahad_sampler_view_destroy(struct galahad_context *glhd_context,
struct galahad_sampler_view *glhd_view)
{
- pipe_sampler_view_reference(&glhd_view->sampler_view, NULL);
+ pipe_sampler_view_reference(glhd_context->pipe, &glhd_view->sampler_view, NULL);
pipe_resource_reference(&glhd_view->base.texture, NULL);
FREE(glhd_view);
}
diff --git a/src/gallium/drivers/i915/i915_state.c b/src/gallium/drivers/i915/i915_state.c
index 06d4d3b..d4e3474 100644
--- a/src/gallium/drivers/i915/i915_state.c
+++ b/src/gallium/drivers/i915/i915_state.c
@@ -719,7 +719,7 @@ static void i915_set_fragment_sampler_views(struct pipe_context *pipe,
* was already destroyed.
*/
pipe_sampler_view_release(pipe, &i915->fragment_sampler_views[i]);
- pipe_sampler_view_reference(&i915->fragment_sampler_views[i],
+ pipe_sampler_view_reference(pipe, &i915->fragment_sampler_views[i],
views[i]);
}
@@ -750,7 +750,7 @@ i915_set_vertex_sampler_views(struct pipe_context *pipe,
for (i = 0; i < Elements(i915->vertex_sampler_views); i++) {
struct pipe_sampler_view *view = i < num ? views[i] : NULL;
- pipe_sampler_view_reference(&i915->vertex_sampler_views[i], view);
+ pipe_sampler_view_reference(pipe, &i915->vertex_sampler_views[i], view);
}
i915->num_vertex_sampler_views = num;
diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c
index 59cc8ff..80aedbb 100644
--- a/src/gallium/drivers/ilo/ilo_state.c
+++ b/src/gallium/drivers/ilo/ilo_state.c
@@ -773,11 +773,11 @@ ilo_set_sampler_views(struct pipe_context *pipe, unsigned shader,
/* views not in range are also unbound */
for (i = 0; i < start; i++)
- pipe_sampler_view_reference(&dst->states[i], NULL);
+ pipe_sampler_view_reference(ilo->pipe, &dst->states[i], NULL);
for (; i < start + count; i++)
- pipe_sampler_view_reference(&dst->states[i], views[i - start]);
+ pipe_sampler_view_reference(ilo->pipe, &dst->states[i], views[i - start]);
for (; i < dst->count; i++)
- pipe_sampler_view_reference(&dst->states[i], NULL);
+ pipe_sampler_view_reference(ilo->pipe, &dst->states[i], NULL);
dst->count = start + count;
@@ -786,11 +786,11 @@ ilo_set_sampler_views(struct pipe_context *pipe, unsigned shader,
if (views) {
for (i = 0; i < count; i++)
- pipe_sampler_view_reference(&dst->states[start + i], views[i]);
+ pipe_sampler_view_reference(ilo->pipe, &dst->states[start + i], views[i]);
}
else {
for (i = 0; i < count; i++)
- pipe_sampler_view_reference(&dst->states[start + i], NULL);
+ pipe_sampler_view_reference(ilo->pipe, &dst->states[start + i], NULL);
}
if (dst->count <= start + count) {
@@ -1313,7 +1313,7 @@ ilo_cleanup_states(struct ilo_context *ilo)
for (sh = 0; sh < PIPE_SHADER_TYPES; sh++) {
for (i = 0; i < ilo->view[sh].count; i++) {
struct pipe_sampler_view *view = ilo->view[sh].states[i];
- pipe_sampler_view_reference(&view, NULL);
+ pipe_sampler_view_reference(ilo->pipe, &view, NULL);
}
for (i = 0; i < Elements(ilo->cbuf[sh].cso); i++) {
diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c
index 9a6d13b..5d3f567 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.c
+++ b/src/gallium/drivers/llvmpipe/lp_context.c
@@ -74,15 +74,15 @@ static void llvmpipe_destroy( struct pipe_context *pipe )
pipe_surface_reference(&llvmpipe->framebuffer.zsbuf, NULL);
for (i = 0; i < Elements(llvmpipe->sampler_views[0]); i++) {
- pipe_sampler_view_reference(&llvmpipe->sampler_views[PIPE_SHADER_FRAGMENT][i], NULL);
+ pipe_sampler_view_reference(pipe, &llvmpipe->sampler_views[PIPE_SHADER_FRAGMENT][i], NULL);
}
for (i = 0; i < Elements(llvmpipe->sampler_views[0]); i++) {
- pipe_sampler_view_reference(&llvmpipe->sampler_views[PIPE_SHADER_VERTEX][i], NULL);
+ pipe_sampler_view_reference(pipe, &llvmpipe->sampler_views[PIPE_SHADER_VERTEX][i], NULL);
}
for (i = 0; i < Elements(llvmpipe->sampler_views[0]); i++) {
- pipe_sampler_view_reference(&llvmpipe->sampler_views[PIPE_SHADER_GEOMETRY][i], NULL);
+ pipe_sampler_view_reference(pipe, &llvmpipe->sampler_views[PIPE_SHADER_GEOMETRY][i], NULL);
}
for (i = 0; i < Elements(llvmpipe->constants); i++) {
diff --git a/src/gallium/drivers/llvmpipe/lp_state_sampler.c b/src/gallium/drivers/llvmpipe/lp_state_sampler.c
index ee2e444..de157b7 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_sampler.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_sampler.c
@@ -159,7 +159,7 @@ llvmpipe_set_sampler_views(struct pipe_context *pipe,
/* set the new sampler views */
for (i = 0; i < num; i++) {
- pipe_sampler_view_reference(&llvmpipe->sampler_views[shader][start + i],
+ pipe_sampler_view_reference(pipe, &llvmpipe->sampler_views[shader][start + i],
views[i]);
}
diff --git a/src/gallium/drivers/nouveau/nouveau_video.c b/src/gallium/drivers/nouveau/nouveau_video.c
index 9357508..8f3a849 100644
--- a/src/gallium/drivers/nouveau/nouveau_video.c
+++ b/src/gallium/drivers/nouveau/nouveau_video.c
@@ -684,7 +684,7 @@ nouveau_video_buffer_sampler_view_planes(struct pipe_video_buffer *buffer)
error:
for (i = 0; i < buf->num_planes; ++i )
- pipe_sampler_view_reference(&buf->sampler_view_planes[i], NULL);
+ pipe_sampler_view_reference(pipe, &buf->sampler_view_planes[i], NULL);
return NULL;
}
@@ -723,7 +723,7 @@ nouveau_video_buffer_sampler_view_components(struct pipe_video_buffer *buffer)
error:
for (i = 0; i < 3; ++i )
- pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
+ pipe_sampler_view_reference(pipe, &buf->sampler_view_components[i], NULL);
return NULL;
}
@@ -769,12 +769,12 @@ nouveau_video_buffer_destroy(struct pipe_video_buffer *buffer)
for (i = 0; i < buf->num_planes; ++i) {
pipe_surface_reference(&buf->surfaces[i], NULL);
- pipe_sampler_view_reference(&buf->sampler_view_planes[i], NULL);
- pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
+ pipe_sampler_view_reference(buf->base.context, &buf->sampler_view_planes[i], NULL);
+ pipe_sampler_view_reference(buf->base.context, &buf->sampler_view_components[i], NULL);
pipe_resource_reference(&buf->resources[i], NULL);
}
for (;i < 3;++i)
- pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
+ pipe_sampler_view_reference(buf->base.context, &buf->sampler_view_components[i], NULL);
FREE(buffer);
}
diff --git a/src/gallium/drivers/nv30/nv30_fragtex.c b/src/gallium/drivers/nv30/nv30_fragtex.c
index 1d22cc3..491f19a 100644
--- a/src/gallium/drivers/nv30/nv30_fragtex.c
+++ b/src/gallium/drivers/nv30/nv30_fragtex.c
@@ -180,13 +180,13 @@ nv30_fragtex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
for (i = 0; i < nr; i++) {
nouveau_bufctx_reset(nv30->bufctx, BUFCTX_FRAGTEX(i));
- pipe_sampler_view_reference(&nv30->fragprog.textures[i], views[i]);
+ pipe_sampler_view_reference(pipe, &nv30->fragprog.textures[i], views[i]);
nv30->fragprog.dirty_samplers |= (1 << i);
}
for (; i < nv30->fragprog.num_textures; i++) {
nouveau_bufctx_reset(nv30->bufctx, BUFCTX_FRAGTEX(i));
- pipe_sampler_view_reference(&nv30->fragprog.textures[i], NULL);
+ pipe_sampler_view_reference(pipe, &nv30->fragprog.textures[i], NULL);
nv30->fragprog.dirty_samplers |= (1 << i);
}
diff --git a/src/gallium/drivers/nv30/nv40_verttex.c b/src/gallium/drivers/nv30/nv40_verttex.c
index 4ff2278..2bbd23e 100644
--- a/src/gallium/drivers/nv30/nv40_verttex.c
+++ b/src/gallium/drivers/nv30/nv40_verttex.c
@@ -78,13 +78,13 @@ nv40_verttex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
for (i = 0; i < nr; i++) {
nouveau_bufctx_reset(nv30->bufctx, BUFCTX_VERTTEX(i));
- pipe_sampler_view_reference(&nv30->vertprog.textures[i], views[i]);
+ pipe_sampler_view_reference(pipe, &nv30->vertprog.textures[i], views[i]);
nv30->vertprog.dirty_samplers |= (1 << i);
}
for (; i < nv30->vertprog.num_textures; i++) {
nouveau_bufctx_reset(nv30->bufctx, BUFCTX_VERTTEX(i));
- pipe_sampler_view_reference(&nv30->vertprog.textures[i], NULL);
+ pipe_sampler_view_reference(pipe, &nv30->vertprog.textures[i], NULL);
nv30->vertprog.dirty_samplers |= (1 << i);
}
diff --git a/src/gallium/drivers/nv50/nv50_context.c b/src/gallium/drivers/nv50/nv50_context.c
index 5781c4b..422842a 100644
--- a/src/gallium/drivers/nv50/nv50_context.c
+++ b/src/gallium/drivers/nv50/nv50_context.c
@@ -87,7 +87,7 @@ nv50_context_unreference_resources(struct nv50_context *nv50)
for (s = 0; s < 3; ++s) {
for (i = 0; i < nv50->num_textures[s]; ++i)
- pipe_sampler_view_reference(&nv50->textures[s][i], NULL);
+ pipe_sampler_view_reference(&nv50->base.pipe, &nv50->textures[s][i], NULL);
for (i = 0; i < NV50_MAX_PIPE_CONSTBUFS; ++i)
if (!nv50->constbuf[s][i].user)
diff --git a/src/gallium/drivers/nv50/nv50_state.c b/src/gallium/drivers/nv50/nv50_state.c
index 2454a3d..6fbc6e9 100644
--- a/src/gallium/drivers/nv50/nv50_state.c
+++ b/src/gallium/drivers/nv50/nv50_state.c
@@ -630,7 +630,7 @@ nv50_stage_set_sampler_views(struct nv50_context *nv50, int s,
if (old)
nv50_screen_tic_unlock(nv50->screen, old);
- pipe_sampler_view_reference(&nv50->textures[s][i], views[i]);
+ pipe_sampler_view_reference(&nv50->base.pipe, &nv50->textures[s][i], views[i]);
}
for (i = nr; i < nv50->num_textures[s]; ++i) {
@@ -639,7 +639,7 @@ nv50_stage_set_sampler_views(struct nv50_context *nv50, int s,
continue;
nv50_screen_tic_unlock(nv50->screen, old);
- pipe_sampler_view_reference(&nv50->textures[s][i], NULL);
+ pipe_sampler_view_reference(&nv50->base.pipe, &nv50->textures[s][i], NULL);
}
nv50->num_textures[s] = nr;
diff --git a/src/gallium/drivers/nv50/nv50_surface.c b/src/gallium/drivers/nv50/nv50_surface.c
index 30dab0b..9ba37b6 100644
--- a/src/gallium/drivers/nv50/nv50_surface.c
+++ b/src/gallium/drivers/nv50/nv50_surface.c
@@ -896,8 +896,8 @@ nv50_blitctx_post_blit(struct nv50_blitctx *blit)
nv50->gmtyprog = blit->saved.gp;
nv50->fragprog = blit->saved.fp;
- pipe_sampler_view_reference(&nv50->textures[2][0], NULL);
- pipe_sampler_view_reference(&nv50->textures[2][1], NULL);
+ pipe_sampler_view_reference(&nv50->base.pipe, &nv50->textures[2][0], NULL);
+ pipe_sampler_view_reference(&nv50->base.pipe, &nv50->textures[2][1], NULL);
for (s = 0; s < 3; ++s) {
nv50->num_textures[s] = blit->saved.num_textures[s];
diff --git a/src/gallium/drivers/nvc0/nvc0_context.c b/src/gallium/drivers/nvc0/nvc0_context.c
index cd86040..04f301e 100644
--- a/src/gallium/drivers/nvc0/nvc0_context.c
+++ b/src/gallium/drivers/nvc0/nvc0_context.c
@@ -74,7 +74,7 @@ nvc0_context_unreference_resources(struct nvc0_context *nvc0)
for (s = 0; s < 6; ++s) {
for (i = 0; i < nvc0->num_textures[s]; ++i)
- pipe_sampler_view_reference(&nvc0->textures[s][i], NULL);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[s][i], NULL);
for (i = 0; i < NVC0_MAX_PIPE_CONSTBUFS; ++i)
if (!nvc0->constbuf[s][i].user)
diff --git a/src/gallium/drivers/nvc0/nvc0_state.c b/src/gallium/drivers/nvc0/nvc0_state.c
index 2f40369..01358c9 100644
--- a/src/gallium/drivers/nvc0/nvc0_state.c
+++ b/src/gallium/drivers/nvc0/nvc0_state.c
@@ -571,7 +571,7 @@ nvc0_stage_set_sampler_views(struct nvc0_context *nvc0, int s,
nvc0_screen_tic_unlock(nvc0->screen, old);
}
- pipe_sampler_view_reference(&nvc0->textures[s][i], views[i]);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[s][i], views[i]);
}
for (i = nr; i < nvc0->num_textures[s]; ++i) {
@@ -579,7 +579,7 @@ nvc0_stage_set_sampler_views(struct nvc0_context *nvc0, int s,
if (old) {
nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_TEX(s, i));
nvc0_screen_tic_unlock(nvc0->screen, old);
- pipe_sampler_view_reference(&nvc0->textures[s][i], NULL);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[s][i], NULL);
}
}
@@ -637,7 +637,7 @@ nvc0_stage_set_sampler_views_range(struct nvc0_context *nvc0, const unsigned s,
nouveau_bufctx_reset(bctx, bin + i);
nvc0_screen_tic_unlock(nvc0->screen, old);
}
- pipe_sampler_view_reference(&nvc0->textures[s][i], views[p]);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[s][i], views[p]);
}
} else {
for (i = start; i < end; ++i) {
@@ -647,7 +647,7 @@ nvc0_stage_set_sampler_views_range(struct nvc0_context *nvc0, const unsigned s,
nvc0->textures_dirty[s] |= 1 << i;
nvc0_screen_tic_unlock(nvc0->screen, old);
- pipe_sampler_view_reference(&nvc0->textures[s][i], NULL);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[s][i], NULL);
nouveau_bufctx_reset(bctx, bin + i);
}
}
diff --git a/src/gallium/drivers/nvc0/nvc0_surface.c b/src/gallium/drivers/nvc0/nvc0_surface.c
index c8d26f5..328c45f 100644
--- a/src/gallium/drivers/nvc0/nvc0_surface.c
+++ b/src/gallium/drivers/nvc0/nvc0_surface.c
@@ -782,8 +782,8 @@ nvc0_blitctx_post_blit(struct nvc0_blitctx *blit)
nvc0->gmtyprog = blit->saved.gp;
nvc0->fragprog = blit->saved.fp;
- pipe_sampler_view_reference(&nvc0->textures[4][0], NULL);
- pipe_sampler_view_reference(&nvc0->textures[4][1], NULL);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[4][0], NULL);
+ pipe_sampler_view_reference(&nvc0->base.pipe, &nvc0->textures[4][1], NULL);
for (s = 0; s <= 4; ++s) {
nvc0->num_textures[s] = blit->saved.num_textures[s];
diff --git a/src/gallium/drivers/nvc0/nvc0_video.c b/src/gallium/drivers/nvc0/nvc0_video.c
index ad40b94..34de6ff 100644
--- a/src/gallium/drivers/nvc0/nvc0_video.c
+++ b/src/gallium/drivers/nvc0/nvc0_video.c
@@ -537,8 +537,8 @@ nvc0_video_buffer_destroy(struct pipe_video_buffer *buffer)
for (i = 0; i < VL_NUM_COMPONENTS; ++i) {
pipe_resource_reference(&buf->resources[i], NULL);
- pipe_sampler_view_reference(&buf->sampler_view_planes[i], NULL);
- pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
+ pipe_sampler_view_reference(buffer->context, &buf->sampler_view_planes[i], NULL);
+ pipe_sampler_view_reference(buffer->context, &buf->sampler_view_components[i], NULL);
pipe_surface_reference(&buf->surfaces[i * 2], NULL);
pipe_surface_reference(&buf->surfaces[i * 2 + 1], NULL);
}
diff --git a/src/gallium/drivers/r300/r300_blit.c b/src/gallium/drivers/r300/r300_blit.c
index 7802594..7f947dd 100644
--- a/src/gallium/drivers/r300/r300_blit.c
+++ b/src/gallium/drivers/r300/r300_blit.c
@@ -674,7 +674,7 @@ static void r300_resource_copy_region(struct pipe_context *pipe,
r300_blitter_end(r300);
pipe_surface_reference(&dst_view, NULL);
- pipe_sampler_view_reference(&src_view, NULL);
+ pipe_sampler_view_reference(pipe, &src_view, NULL);
}
static boolean r300_is_simple_msaa_resolve(const struct pipe_blit_info *info)
diff --git a/src/gallium/drivers/r300/r300_context.c b/src/gallium/drivers/r300/r300_context.c
index 7647f9e..6c2251e 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -50,12 +50,12 @@ static void r300_release_referenced_objects(struct r300_context *r300)
/* Textures. */
for (i = 0; i < textures->sampler_view_count; i++)
- pipe_sampler_view_reference(
+ pipe_sampler_view_reference(&r300->context,
(struct pipe_sampler_view**)&textures->sampler_views[i], NULL);
/* The special dummy texture for texkill. */
if (r300->texkill_sampler) {
- pipe_sampler_view_reference(
+ pipe_sampler_view_reference(&r300->context,
(struct pipe_sampler_view**)&r300->texkill_sampler,
NULL);
}
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index 6cfc192..b942c84 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -1602,6 +1602,7 @@ static void r300_set_fragment_sampler_views(struct pipe_context* pipe,
for (i = 0; i < count; i++) {
pipe_sampler_view_reference(
+ &r300->context,
(struct pipe_sampler_view**)&state->sampler_views[i],
views[i]);
@@ -1627,6 +1628,7 @@ static void r300_set_fragment_sampler_views(struct pipe_context* pipe,
for (i = count; i < tex_units; i++) {
if (state->sampler_views[i]) {
pipe_sampler_view_reference(
+ &r300->context,
(struct pipe_sampler_view**)&state->sampler_views[i],
NULL);
}
diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c
index 1013557..5050afe 100644
--- a/src/gallium/drivers/r300/r300_state_derived.c
+++ b/src/gallium/drivers/r300/r300_state_derived.c
@@ -978,6 +978,7 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
* the first unit enabled all the time. */
if (i == 0 && !r300->screen->caps.is_r500) {
pipe_sampler_view_reference(
+ &r300->context,
(struct pipe_sampler_view**)&state->sampler_views[i],
&r300->texkill_sampler->base);
diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c
index 2230e7b..e3cf2cc 100644
--- a/src/gallium/drivers/r600/r600_blit.c
+++ b/src/gallium/drivers/r600/r600_blit.c
@@ -773,7 +773,7 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
r600_blitter_end(ctx);
pipe_surface_reference(&dst_view, NULL);
- pipe_sampler_view_reference(&src_view, NULL);
+ pipe_sampler_view_reference(ctx, &src_view, NULL);
}
/* For MSAA integer resolving to work, we change the format to NORM using this function. */
diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index ea5a4e7..ffba698 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -589,7 +589,7 @@ static void r600_set_sampler_views(struct pipe_context *pipe, unsigned shader,
i = u_bit_scan(&remaining_mask);
assert(dst->views.views[i]);
- pipe_sampler_view_reference((struct pipe_sampler_view **)&dst->views.views[i], NULL);
+ pipe_sampler_view_reference(pipe, (struct pipe_sampler_view **)&dst->views.views[i], NULL);
}
for (i = 0; i < count; i++) {
@@ -624,11 +624,11 @@ static void r600_set_sampler_views(struct pipe_context *pipe, unsigned shader,
dirty_sampler_states_mask |= 1 << i;
}
- pipe_sampler_view_reference((struct pipe_sampler_view **)&dst->views.views[i], views[i]);
+ pipe_sampler_view_reference(pipe, (struct pipe_sampler_view **)&dst->views.views[i], views[i]);
new_mask |= 1 << i;
r600_context_add_resource_size(pipe, views[i]->texture);
} else {
- pipe_sampler_view_reference((struct pipe_sampler_view **)&dst->views.views[i], NULL);
+ pipe_sampler_view_reference(pipe, (struct pipe_sampler_view **)&dst->views.views[i], NULL);
disable_mask |= 1 << i;
}
}
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 58e5a56..40595b4 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2506,6 +2506,7 @@ static struct si_pm4_state *si_set_sampler_view(struct r600_context *rctx,
si_pm4_sh_data_begin(pm4);
for (i = 0; i < count; i++) {
pipe_sampler_view_reference(
+ rctx->pipe,
(struct pipe_sampler_view **)&samplers->views[i],
views[i]);
@@ -2531,7 +2532,7 @@ static struct si_pm4_state *si_set_sampler_view(struct r600_context *rctx,
for (i = count; i < NUM_TEX_UNITS; i++) {
if (samplers->views[i])
- pipe_sampler_view_reference((struct pipe_sampler_view **)&samplers->views[i], NULL);
+ pipe_sampler_view_reference(rctx->pipe, (struct pipe_sampler_view **)&samplers->views[i], NULL);
}
si_pm4_sh_data_end(pm4, user_data_reg, SI_SGPR_RESOURCE);
diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
index 14cfdc8..56742ac 100644
--- a/src/gallium/drivers/softpipe/sp_context.c
+++ b/src/gallium/drivers/softpipe/sp_context.c
@@ -65,7 +65,7 @@ softpipe_destroy( struct pipe_context *pipe )
pipe->delete_sampler_state(pipe, softpipe->pstipple.sampler);
pipe_resource_reference(&softpipe->pstipple.texture, NULL);
- pipe_sampler_view_reference(&softpipe->pstipple.sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &softpipe->pstipple.sampler_view, NULL);
#endif
if (softpipe->blitter) {
@@ -98,7 +98,7 @@ softpipe_destroy( struct pipe_context *pipe )
for (sh = 0; sh < Elements(softpipe->tex_cache); sh++) {
for (i = 0; i < Elements(softpipe->tex_cache[0]); i++) {
sp_destroy_tex_tile_cache(softpipe->tex_cache[sh][i]);
- pipe_sampler_view_reference(&softpipe->sampler_views[sh][i], NULL);
+ pipe_sampler_view_reference(pipe, &softpipe->sampler_views[sh][i], NULL);
}
}
diff --git a/src/gallium/drivers/softpipe/sp_state_derived.c b/src/gallium/drivers/softpipe/sp_state_derived.c
index 6115349..1f72fda 100644
--- a/src/gallium/drivers/softpipe/sp_state_derived.c
+++ b/src/gallium/drivers/softpipe/sp_state_derived.c
@@ -312,8 +312,8 @@ update_polygon_stipple_pattern(struct softpipe_context *softpipe)
view = util_pstipple_create_sampler_view(&softpipe->pipe,
softpipe->pstipple.texture);
- pipe_sampler_view_reference(&softpipe->pstipple.sampler_view, view);
- pipe_sampler_view_reference(&view, NULL);
+ pipe_sampler_view_reference(&softpipe->pipe, &softpipe->pstipple.sampler_view, view);
+ pipe_sampler_view_reference(&softpipe->pipe, &view, NULL);
}
diff --git a/src/gallium/drivers/softpipe/sp_state_sampler.c b/src/gallium/drivers/softpipe/sp_state_sampler.c
index aeb2b9d..10ea0ad 100644
--- a/src/gallium/drivers/softpipe/sp_state_sampler.c
+++ b/src/gallium/drivers/softpipe/sp_state_sampler.c
@@ -155,7 +155,7 @@ softpipe_set_sampler_views(struct pipe_context *pipe,
struct sp_sampler_view *sp_sviewdst =
&softpipe->tgsi.sampler[shader]->sp_sview[start + i];
struct pipe_sampler_view **pview = &softpipe->sampler_views[shader][start + i];
- pipe_sampler_view_reference(pview, views[i]);
+ pipe_sampler_view_reference(pipe, pview, views[i]);
sp_tex_tile_cache_set_sampler_view(softpipe->tex_cache[shader][start + i],
views[i]);
/*
diff --git a/src/gallium/drivers/svga/svga_pipe_sampler.c b/src/gallium/drivers/svga/svga_pipe_sampler.c
index 03d604d..ccf79b9 100644
--- a/src/gallium/drivers/svga/svga_pipe_sampler.c
+++ b/src/gallium/drivers/svga/svga_pipe_sampler.c
@@ -263,7 +263,7 @@ svga_set_sampler_views(struct pipe_context *pipe,
* was already destroyed.
*/
pipe_sampler_view_release(pipe, &svga->curr.sampler_views[start + i]);
- pipe_sampler_view_reference(&svga->curr.sampler_views[start + i],
+ pipe_sampler_view_reference(pipe, &svga->curr.sampler_views[start + i],
views[i]);
}
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c
index 26df371..b5341a1 100644
--- a/src/gallium/drivers/trace/tr_context.c
+++ b/src/gallium/drivers/trace/tr_context.c
@@ -867,7 +867,7 @@ trace_context_sampler_view_destroy(struct pipe_context *_pipe,
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, view);
- pipe_sampler_view_reference(&tr_view->sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &tr_view->sampler_view, NULL);
trace_dump_call_end();
diff --git a/src/gallium/state_trackers/vdpau/bitmap.c b/src/gallium/state_trackers/vdpau/bitmap.c
index 469f3e8..420689d 100644
--- a/src/gallium/state_trackers/vdpau/bitmap.c
+++ b/src/gallium/state_trackers/vdpau/bitmap.c
@@ -114,13 +114,15 @@ VdpStatus
vlVdpBitmapSurfaceDestroy(VdpBitmapSurface surface)
{
vlVdpBitmapSurface *vlsurface;
+ struct pipe_context *pipe;
vlsurface = vlGetDataHTAB(surface);
if (!vlsurface)
return VDP_STATUS_INVALID_HANDLE;
+ pipe = vlsurface->device->context;
pipe_mutex_lock(vlsurface->device->mutex);
- pipe_sampler_view_reference(&vlsurface->sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &vlsurface->sampler_view, NULL);
pipe_mutex_unlock(vlsurface->device->mutex);
vlRemoveDataHTAB(surface);
diff --git a/src/gallium/state_trackers/vdpau/device.c b/src/gallium/state_trackers/vdpau/device.c
index a829c27..a23314c 100644
--- a/src/gallium/state_trackers/vdpau/device.c
+++ b/src/gallium/state_trackers/vdpau/device.c
@@ -264,7 +264,8 @@ vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, str
{
struct vl_compositor_state *cstate;
vlVdpOutputSurface *vlsurface;
-
+ struct pipe_context * pipe;
+
assert(dev);
cstate = dev->delayed_rendering.cstate;
@@ -274,6 +275,8 @@ vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, str
vlsurface = vlGetDataHTAB(dev->delayed_rendering.surface);
if (!vlsurface)
return;
+
+ pipe = vlsurface->device->context;
if (!surface) {
surface = vlsurface->surface;
@@ -291,7 +294,7 @@ vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, str
struct pipe_sampler_view sv_templ;
vlVdpDefaultSamplerViewTemplate(&sv_templ, res);
- pipe_sampler_view_reference(&vlsurface->sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &vlsurface->sampler_view, NULL);
vlsurface->sampler_view = dev->context->create_sampler_view(dev->context, res, &sv_templ);
}
diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
index 7266cdb..1b2ee42 100644
--- a/src/gallium/state_trackers/vdpau/output.c
+++ b/src/gallium/state_trackers/vdpau/output.c
@@ -145,7 +145,7 @@ vlVdpOutputSurfaceDestroy(VdpOutputSurface surface)
vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
pipe_surface_reference(&vlsurface->surface, NULL);
- pipe_sampler_view_reference(&vlsurface->sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &vlsurface->sampler_view, NULL);
pipe->screen->fence_reference(pipe->screen, &vlsurface->fence, NULL);
vl_compositor_cleanup_state(&vlsurface->cstate);
pipe_mutex_unlock(vlsurface->device->mutex);
@@ -283,11 +283,14 @@ vlVdpOutputSurfacePutBitsIndexed(VdpOutputSurface surface,
struct pipe_box box;
struct u_rect dst_rect;
+ struct pipe_context * pipe;
vlsurface = vlGetDataHTAB(surface);
if (!vlsurface)
return VDP_STATUS_INVALID_HANDLE;
-
+
+ pipe = vlsurface->device->context;
+
context = vlsurface->device->context;
compositor = &vlsurface->device->compositor;
cstate = &vlsurface->cstate;
@@ -384,15 +387,15 @@ vlVdpOutputSurfacePutBitsIndexed(VdpOutputSurface surface,
vl_compositor_set_layer_dst_area(cstate, 0, RectToPipe(destination_rect, &dst_rect));
vl_compositor_render(cstate, compositor, vlsurface->surface, &vlsurface->dirty_area, false);
- pipe_sampler_view_reference(&sv_idx, NULL);
- pipe_sampler_view_reference(&sv_tbl, NULL);
+ pipe_sampler_view_reference(pipe, &sv_idx, NULL);
+ pipe_sampler_view_reference(pipe, &sv_tbl, NULL);
pipe_mutex_unlock(vlsurface->device->mutex);
return VDP_STATUS_OK;
error_resource:
- pipe_sampler_view_reference(&sv_idx, NULL);
- pipe_sampler_view_reference(&sv_tbl, NULL);
+ pipe_sampler_view_reference(pipe, &sv_idx, NULL);
+ pipe_sampler_view_reference(pipe, &sv_tbl, NULL);
pipe_mutex_unlock(vlsurface->device->mutex);
return VDP_STATUS_RESOURCES;
}
diff --git a/src/gallium/state_trackers/vega/api_filters.c b/src/gallium/state_trackers/vega/api_filters.c
index 480ced1..0ff5bae 100644
--- a/src/gallium/state_trackers/vega/api_filters.c
+++ b/src/gallium/state_trackers/vega/api_filters.c
@@ -630,7 +630,7 @@ void vegaLookup(VGImage dst, VGImage src,
execute_filter(ctx, &info);
- pipe_sampler_view_reference(&lut_texture_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &lut_texture_view, NULL);
}
void vegaLookupSingle(VGImage dst, VGImage src,
@@ -701,5 +701,5 @@ void vegaLookupSingle(VGImage dst, VGImage src,
execute_filter(ctx, &info);
- pipe_sampler_view_reference(&lut_texture_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &lut_texture_view, NULL);
}
diff --git a/src/gallium/state_trackers/vega/image.c b/src/gallium/state_trackers/vega/image.c
index 4434550..6e5d2be 100644
--- a/src/gallium/state_trackers/vega/image.c
+++ b/src/gallium/state_trackers/vega/image.c
@@ -351,7 +351,7 @@ void image_destroy(struct vg_image *img)
vg_free_object(&img->base);
- pipe_sampler_view_reference(&img->sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &img->sampler_view, NULL);
FREE(img);
}
@@ -488,7 +488,7 @@ struct vg_image * image_child_image(struct vg_image *parent,
image->height = height;
image->parent = parent;
image->sampler_view = NULL;
- pipe_sampler_view_reference(&image->sampler_view,
+ pipe_sampler_view_reference(ctx->pipe, &image->sampler_view,
parent->sampler_view);
image->sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
diff --git a/src/gallium/state_trackers/vega/mask.c b/src/gallium/state_trackers/vega/mask.c
index ca8edd0..a5f2f7d 100644
--- a/src/gallium/state_trackers/vega/mask.c
+++ b/src/gallium/state_trackers/vega/mask.c
@@ -375,7 +375,7 @@ void mask_layer_destroy(struct vg_mask_layer *layer)
struct vg_context *ctx = vg_current_context();
vg_context_remove_object(ctx, &layer->base);
- pipe_sampler_view_reference(&layer->sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &layer->sampler_view, NULL);
vg_free_object(&layer->base);
FREE(layer);
}
diff --git a/src/gallium/state_trackers/vega/paint.c b/src/gallium/state_trackers/vega/paint.c
index 79b7a27..46b4bb0 100644
--- a/src/gallium/state_trackers/vega/paint.c
+++ b/src/gallium/state_trackers/vega/paint.c
@@ -226,9 +226,9 @@ struct vg_paint * paint_create(struct vg_context *ctx)
void paint_destroy(struct vg_paint *paint)
{
struct vg_context *ctx = paint->base.ctx;
- pipe_sampler_view_reference(&paint->gradient.sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &paint->gradient.sampler_view, NULL);
if (paint->pattern.sampler_view)
- pipe_sampler_view_reference(&paint->pattern.sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &paint->pattern.sampler_view, NULL);
if (ctx) {
vg_context_remove_object(ctx, &paint->base);
vg_free_object(&paint->base);
@@ -385,6 +385,7 @@ void paint_set_type(struct vg_paint *paint, VGPaintType type)
void paint_set_ramp_stops(struct vg_paint *paint, const VGfloat *stops,
int num)
{
+ struct vg_context *ctx = paint->base.ctx;
const VGfloat default_stops[] = {0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
VGint i;
@@ -421,7 +422,7 @@ void paint_set_ramp_stops(struct vg_paint *paint, const VGfloat *stops,
1024);
if (paint->gradient.sampler_view) {
- pipe_sampler_view_reference(&paint->gradient.sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &paint->gradient.sampler_view, NULL);
paint->gradient.sampler_view = NULL;
}
@@ -485,11 +486,12 @@ void paint_set_radial_gradient(struct vg_paint *paint,
void paint_set_pattern(struct vg_paint *paint,
struct vg_image *img)
{
+ struct vg_context *ctx = paint->base.ctx;
if (paint->pattern.sampler_view)
- pipe_sampler_view_reference(&paint->pattern.sampler_view, NULL);
+ pipe_sampler_view_reference(ctx->pipe, &paint->pattern.sampler_view, NULL);
paint->pattern.sampler_view = NULL;
- pipe_sampler_view_reference(&paint->pattern.sampler_view,
+ pipe_sampler_view_reference(ctx->pipe, &paint->pattern.sampler_view,
img->sampler_view);
}
diff --git a/src/gallium/state_trackers/vega/vg_context.c b/src/gallium/state_trackers/vega/vg_context.c
index c636188..ad50e07 100644
--- a/src/gallium/state_trackers/vega/vg_context.c
+++ b/src/gallium/state_trackers/vega/vg_context.c
@@ -306,7 +306,7 @@ vg_context_update_surface_mask_view(struct vg_context *ctx,
if (!stfb->surface_mask_view) {
if (old_sampler_view)
- pipe_sampler_view_reference(&old_sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &old_sampler_view, NULL);
return;
}
@@ -335,7 +335,7 @@ vg_context_update_surface_mask_view(struct vg_context *ctx,
/* Free the old texture
*/
if (old_sampler_view)
- pipe_sampler_view_reference(&old_sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &old_sampler_view, NULL);
}
static void
@@ -354,7 +354,7 @@ vg_context_update_blend_texture_view(struct vg_context *ctx,
stfb->blend_texture_view = create_tex_and_view(pipe,
PIPE_FORMAT_B8G8R8A8_UNORM, width, height);
- pipe_sampler_view_reference(&old, NULL);
+ pipe_sampler_view_reference(pipe, &old, NULL);
}
static boolean
@@ -477,7 +477,7 @@ struct pipe_sampler_view *vg_prepare_blend_surface(struct vg_context *ctx)
vg_prepare_blend_texture(ctx, view);
- pipe_sampler_view_reference(&view, NULL);
+ pipe_sampler_view_reference(pipe, &view, NULL);
return stfb->blend_texture_view;
}
diff --git a/src/gallium/state_trackers/xa/xa_composite.c b/src/gallium/state_trackers/xa/xa_composite.c
index eb949b9..2262fda 100644
--- a/src/gallium/state_trackers/xa/xa_composite.c
+++ b/src/gallium/state_trackers/xa/xa_composite.c
@@ -401,7 +401,7 @@ bind_samplers(struct xa_context *ctx,
if (src_pic) {
if (ctx->has_solid_color) {
samplers[0] = NULL;
- pipe_sampler_view_reference(&ctx->bound_sampler_views[0], NULL);
+ pipe_sampler_view_reference(pipe, &ctx->bound_sampler_views[0], NULL);
} else {
unsigned src_wrap = xa_repeat_to_gallium(src_pic->wrap);
int filter;
@@ -421,7 +421,7 @@ bind_samplers(struct xa_context *ctx,
src_pic->srf->tex->format);
src_view = pipe->create_sampler_view(pipe, src_pic->srf->tex,
&view_templ);
- pipe_sampler_view_reference(&ctx->bound_sampler_views[0], NULL);
+ pipe_sampler_view_reference(pipe, &ctx->bound_sampler_views[0], NULL);
ctx->bound_sampler_views[0] = src_view;
}
}
@@ -445,7 +445,7 @@ bind_samplers(struct xa_context *ctx,
mask_pic->srf->tex->format);
src_view = pipe->create_sampler_view(pipe, mask_pic->srf->tex,
&view_templ);
- pipe_sampler_view_reference(&ctx->bound_sampler_views[1], NULL);
+ pipe_sampler_view_reference(pipe, &ctx->bound_sampler_views[1], NULL);
ctx->bound_sampler_views[1] = src_view;
@@ -454,7 +454,7 @@ bind_samplers(struct xa_context *ctx,
* dummy one that will not be used anyway.
*/
if (ctx->bound_sampler_views[0] == NULL)
- pipe_sampler_view_reference(&ctx->bound_sampler_views[0],
+ pipe_sampler_view_reference(pipe, &ctx->bound_sampler_views[0],
src_view);
}
diff --git a/src/gallium/state_trackers/xa/xa_context.c b/src/gallium/state_trackers/xa/xa_context.c
index b31d555..e0a5742d 100644
--- a/src/gallium/state_trackers/xa/xa_context.c
+++ b/src/gallium/state_trackers/xa/xa_context.c
@@ -391,6 +391,6 @@ xa_ctx_sampler_views_destroy(struct xa_context *ctx)
int i;
for (i = 0; i < ctx->num_bound_samplers; ++i)
- pipe_sampler_view_reference(&ctx->bound_sampler_views[i], NULL);
+ pipe_sampler_view_reference(ctx->pipe, &ctx->bound_sampler_views[i], NULL);
ctx->num_bound_samplers = 0;
}
diff --git a/src/gallium/state_trackers/xa/xa_renderer.c b/src/gallium/state_trackers/xa/xa_renderer.c
index b775509..2fbaec1 100644
--- a/src/gallium/state_trackers/xa/xa_renderer.c
+++ b/src/gallium/state_trackers/xa/xa_renderer.c
@@ -447,7 +447,7 @@ renderer_copy_prepare(struct xa_context *r,
src_texture, src_texture->format);
src_view = pipe->create_sampler_view(pipe, src_texture, &templ);
cso_set_sampler_views(r->cso, PIPE_SHADER_FRAGMENT, 1, &src_view);
- pipe_sampler_view_reference(&src_view, NULL);
+ pipe_sampler_view_reference(pipe, &src_view, NULL);
}
/* shaders */
diff --git a/src/gallium/state_trackers/xorg/xorg_composite.c b/src/gallium/state_trackers/xorg/xorg_composite.c
index 7ccb3fe..bdba0b1 100644
--- a/src/gallium/state_trackers/xorg/xorg_composite.c
+++ b/src/gallium/state_trackers/xorg/xorg_composite.c
@@ -370,7 +370,7 @@ bind_samplers(struct exa_context *exa, int op,
if (exa->has_solid_color) {
debug_assert(!"solid color with textures");
samplers[0] = NULL;
- pipe_sampler_view_reference(&exa->bound_sampler_views[0], NULL);
+ pipe_sampler_view_reference(pipe, &exa->bound_sampler_views[0], NULL);
} else {
unsigned src_wrap = render_repeat_to_gallium(
pSrcPicture->repeatType);
@@ -390,7 +390,7 @@ bind_samplers(struct exa_context *exa, int op,
pSrc->tex,
pSrc->tex->format);
src_view = pipe->create_sampler_view(pipe, pSrc->tex, &view_templ);
- pipe_sampler_view_reference(&exa->bound_sampler_views[0], NULL);
+ pipe_sampler_view_reference(pipe, &exa->bound_sampler_views[0], NULL);
exa->bound_sampler_views[0] = src_view;
}
}
@@ -414,7 +414,7 @@ bind_samplers(struct exa_context *exa, int op,
pMask->tex,
pMask->tex->format);
src_view = pipe->create_sampler_view(pipe, pMask->tex, &view_templ);
- pipe_sampler_view_reference(&exa->bound_sampler_views[1], NULL);
+ pipe_sampler_view_reference(pipe, &exa->bound_sampler_views[1], NULL);
exa->bound_sampler_views[1] = src_view;
}
diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c b/src/gallium/state_trackers/xorg/xorg_exa.c
index 3e764f8..7e8a7a2 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa.c
@@ -958,8 +958,8 @@ xorg_exa_close(ScrnInfoPtr pScrn)
modesettingPtr ms = modesettingPTR(pScrn);
struct exa_context *exa = ms->exa;
- pipe_sampler_view_reference(&exa->bound_sampler_views[0], NULL);
- pipe_sampler_view_reference(&exa->bound_sampler_views[1], NULL);
+ pipe_sampler_view_reference(exa->pipe, &exa->bound_sampler_views[0], NULL);
+ pipe_sampler_view_reference(exa->pipe, &exa->bound_sampler_views[1], NULL);
renderer_destroy(exa->renderer);
diff --git a/src/gallium/state_trackers/xorg/xorg_xv.c b/src/gallium/state_trackers/xorg/xorg_xv.c
index 3097d00..fdaa0b1 100644
--- a/src/gallium/state_trackers/xorg/xorg_xv.c
+++ b/src/gallium/state_trackers/xorg/xorg_xv.c
@@ -191,19 +191,19 @@ check_yuv_textures(struct xorg_xv_port_priv *priv, int width, int height)
dst[0]->width0 != width ||
dst[0]->height0 != height) {
pipe_resource_reference(&dst[0], NULL);
- pipe_sampler_view_reference(&dst_view[0], NULL);
+ pipe_sampler_view_reference(pipe, &dst_view[0], NULL);
}
if (!dst[1] ||
dst[1]->width0 != width ||
dst[1]->height0 != height) {
pipe_resource_reference(&dst[1], NULL);
- pipe_sampler_view_reference(&dst_view[1], NULL);
+ pipe_sampler_view_reference(pipe, &dst_view[1], NULL);
}
if (!dst[2] ||
dst[2]->width0 != width ||
dst[2]->height0 != height) {
pipe_resource_reference(&dst[2], NULL);
- pipe_sampler_view_reference(&dst_view[2], NULL);
+ pipe_sampler_view_reference(pipe, &dst_view[2], NULL);
}
if (!dst[0]) {
diff --git a/src/gallium/state_trackers/xvmc/subpicture.c b/src/gallium/state_trackers/xvmc/subpicture.c
index 3e13aa6..91f62ad 100644
--- a/src/gallium/state_trackers/xvmc/subpicture.c
+++ b/src/gallium/state_trackers/xvmc/subpicture.c
@@ -376,6 +376,8 @@ PUBLIC
Status XvMCDestroySubpicture(Display *dpy, XvMCSubpicture *subpicture)
{
XvMCSubpicturePrivate *subpicture_priv;
+ XvMCContextPrivate *context_priv;
+ struct pipe_context *pipe;
XVMC_MSG(XVMC_TRACE, "[XvMC] Destroying subpicture %p.\n", subpicture);
@@ -385,8 +387,11 @@ Status XvMCDestroySubpicture(Display *dpy, XvMCSubpicture *subpicture)
return XvMCBadSubpicture;
subpicture_priv = subpicture->privData;
- pipe_sampler_view_reference(&subpicture_priv->sampler, NULL);
- pipe_sampler_view_reference(&subpicture_priv->palette, NULL);
+ context_priv = subpicture_priv->context->privData;
+ pipe = context_priv->pipe;
+
+ pipe_sampler_view_reference(pipe, &subpicture_priv->sampler, NULL);
+ pipe_sampler_view_reference(pipe, &subpicture_priv->palette, NULL);
FREE(subpicture_priv);
XVMC_MSG(XVMC_TRACE, "[XvMC] Subpicture %p destroyed.\n", subpicture);
diff --git a/src/gallium/tests/trivial/quad-tex.c b/src/gallium/tests/trivial/quad-tex.c
index 5ed741b..1ce2c97 100644
--- a/src/gallium/tests/trivial/quad-tex.c
+++ b/src/gallium/tests/trivial/quad-tex.c
@@ -287,7 +287,7 @@ static void close_prog(struct program *p)
p->pipe->delete_fs_state(p->pipe, p->fs);
pipe_surface_reference(&p->framebuffer.cbufs[0], NULL);
- pipe_sampler_view_reference(&p->view, NULL);
+ pipe_sampler_view_reference(p->pipe, &p->view, NULL);
pipe_resource_reference(&p->target, NULL);
pipe_resource_reference(&p->tex, NULL);
pipe_resource_reference(&p->vbuf, NULL);
diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
index d79e04c..6be518a 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -255,7 +255,7 @@ update_single_texture(struct st_context *st,
stObj->base.DepthMode) ||
(view_format != stObj->sampler_view->format) ||
stObj->base.BaseLevel != stObj->sampler_view->u.tex.first_level) {
- pipe_sampler_view_reference(&stObj->sampler_view, NULL);
+ pipe_sampler_view_reference(pipe, &stObj->sampler_view, NULL);
}
}
@@ -303,7 +303,7 @@ update_textures(struct st_context *st,
break;
}
- pipe_sampler_view_reference(&(sampler_views[unit]), sampler_view);
+ pipe_sampler_view_reference(st->pipe, &(sampler_views[unit]), sampler_view);
}
/* Ex: if old_max = 3 and *num_textures = 1, we need to pass an
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index e96f4b3..a679583 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -657,7 +657,7 @@ st_flush_bitmap_cache(struct st_context *st)
sv,
cache->color);
- pipe_sampler_view_reference(&sv, NULL);
+ pipe_sampler_view_reference(st->pipe, &sv, NULL);
}
/* release/free the texture */
@@ -787,7 +787,7 @@ st_Bitmap(struct gl_context *ctx, GLint x, GLint y,
width, height, sv,
st->ctx->Current.RasterColor);
- pipe_sampler_view_reference(&sv, NULL);
+ pipe_sampler_view_reference(st->pipe, &sv, NULL);
}
/* release/free the texture */
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 2ce4728..4141a11 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -1194,9 +1194,9 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
driver_vp,
driver_fp,
color, GL_FALSE, write_depth, write_stencil);
- pipe_sampler_view_reference(&sv[0], NULL);
+ pipe_sampler_view_reference(st->pipe, &sv[0], NULL);
if (num_sampler_view > 1)
- pipe_sampler_view_reference(&sv[1], NULL);
+ pipe_sampler_view_reference(st->pipe, &sv[1], NULL);
}
pipe_resource_reference(&pt, NULL);
}
@@ -1668,7 +1668,7 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
color, invertTex, GL_FALSE, GL_FALSE);
pipe_resource_reference(&pt, NULL);
- pipe_sampler_view_reference(&sv[0], NULL);
+ pipe_sampler_view_reference(pipe, &sv[0], NULL);
}
diff --git a/src/mesa/state_tracker/st_cb_eglimage.c b/src/mesa/state_tracker/st_cb_eglimage.c
index b871cdd..72fd054 100644
--- a/src/mesa/state_tracker/st_cb_eglimage.c
+++ b/src/mesa/state_tracker/st_cb_eglimage.c
@@ -98,6 +98,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
{
struct st_texture_object *stObj;
struct st_texture_image *stImage;
+ struct st_context *st = st_context(ctx);
GLenum internalFormat;
gl_format texFormat;
@@ -124,7 +125,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
/* FIXME create a non-default sampler view from the pipe_surface? */
pipe_resource_reference(&stObj->pt, ps->texture);
- pipe_sampler_view_reference(&stObj->sampler_view, NULL);
+ pipe_sampler_view_reference(st->pipe, &stObj->sampler_view, NULL);
pipe_resource_reference(&stImage->pt, stObj->pt);
stObj->width0 = ps->width;
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index d01a21e..dde3816 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -96,7 +96,7 @@ st_render_mipmap(struct st_context *st,
util_gen_mipmap(st->gen_mipmap, psv, face, baseLevel, lastLevel,
PIPE_TEX_FILTER_LINEAR);
- pipe_sampler_view_reference(&psv, NULL);
+ pipe_sampler_view_reference(pipe, &psv, NULL);
return TRUE;
}
@@ -182,7 +182,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
/* release the old tex (will likely be freed too) */
pipe_resource_reference(&oldTex, NULL);
- pipe_sampler_view_reference(&stObj->sampler_view, NULL);
+ pipe_sampler_view_reference(st->pipe, &stObj->sampler_view, NULL);
}
else {
/* Make sure that the base texture image data is present in the
--
1.8.3.1
--
X was an interactive protocol:
alpha blending a full-screen image looked like slugs racing down the monitor.
http://www.keithp.com/~keithp/talks/usenix2000/render.html
More information about the mesa-dev
mailing list