From 3a672785df247e6f8ce95616166b74d4fd10ede0 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 6 Sep 2010 09:13:50 +1000 Subject: r600g: search for sampler views in context on removal. Need to remove from context as well. --- src/gallium/drivers/r600/r600_state.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/gallium') diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index ae5139bfb3..e630e1af40 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -103,11 +103,28 @@ static void *r600_create_sampler_state(struct pipe_context *ctx, return rstate; } +static void r600_remove_sampler_view(struct r600_shader_sampler_states *sampler, + struct r600_context_state *rstate) +{ + int i, j; + + for (i = 0; i < sampler->nview; i++) { + for (j = 0; j < rstate->nrstate; j++) { + if (sampler->view[i] == &rstate->rstate[j]) + sampler->view[i] = NULL; + } + } +} static void r600_sampler_view_destroy(struct pipe_context *ctx, struct pipe_sampler_view *state) { struct r600_context_state *rstate = (struct r600_context_state *)state; + struct r600_context *rctx = r600_context(ctx); + int i; + /* need to search list of vs/ps sampler views and remove it from any - uggh */ + r600_remove_sampler_view(&rctx->ps_sampler, rstate); + r600_remove_sampler_view(&rctx->vs_sampler, rstate); r600_context_state_decref(rstate); } -- cgit v1.2.3