diff options
author | Brian Paul <[email protected]> | 2014-04-02 17:12:02 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2014-04-03 19:39:23 -0600 |
commit | 5a2f8b2c48a1497ed65bdf1fbdb39957de3f1a88 (patch) | |
tree | 36f48dab3a60d957a33901352ea67472ee60cd77 /src/gallium/auxiliary/cso_cache | |
parent | ffa39ab067ae360ceffdf8f1eb6d84f0ebdf6c94 (diff) |
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 <[email protected]>
Reviewed-by: José Fonseca <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/cso_cache')
-rw-r--r-- | src/gallium/auxiliary/cso_cache/cso_context.c | 11 |
1 files 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; } |