From: Brian Paul Date: Wed, 2 Apr 2014 23:12:02 +0000 (-0600) Subject: cso: check for no sampler view changes in cso_set_sampler_views() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5a2f8b2c48a1497ed65bdf1fbdb39957de3f1a88;p=mesa.git cso: check for no sampler view changes in cso_set_sampler_views() As we do for sampler states in single_sampler_done() and many other CSO functions. Reviewed-by: Roland Scheidegger Reviewed-by: José Fonseca Reviewed-by: Marek Olšák --- diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index dda3c205e22..dd0e3df8537 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -1177,20 +1177,25 @@ cso_set_sampler_views(struct cso_context *ctx, { struct sampler_info *info = &ctx->samplers[shader_stage]; unsigned i; + boolean any_change = FALSE; /* reference new views */ for (i = 0; i < count; i++) { + any_change |= info->views[i] != views[i]; pipe_sampler_view_reference(&info->views[i], views[i]); } /* unref extra old views, if any */ for (; i < info->nr_views; i++) { + any_change |= info->views[i] != NULL; pipe_sampler_view_reference(&info->views[i], NULL); } /* bind the new sampler views */ - ctx->pipe->set_sampler_views(ctx->pipe, shader_stage, 0, - MAX2(info->nr_views, count), - info->views); + if (any_change) { + ctx->pipe->set_sampler_views(ctx->pipe, shader_stage, 0, + MAX2(info->nr_views, count), + info->views); + } info->nr_views = count; }