From 5a2f8b2c48a1497ed65bdf1fbdb39957de3f1a88 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 2 Apr 2014 17:12:02 -0600 Subject: [PATCH] cso: check for no sampler view changes in cso_set_sampler_views() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/gallium/auxiliary/cso_cache/cso_context.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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; }