diff options
author | Brian Paul <[email protected]> | 2013-10-15 17:09:22 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2013-10-16 08:13:47 -0600 |
commit | e96c55ff495528fc70fb5363d60bf4c645bc2082 (patch) | |
tree | b99d8b66d39931b001f74f2be67e4c2790a3ddef | |
parent | 0d1011638b079f8d6df942416f58b20043eea892 (diff) |
cso: fix incorrect sampler view count in cso_restore_sampler_views()
During the recent bind_sampler_states() interface change in gallium
we changed the CSO single_sampler_done() function so that if we were
decreasing the number of sampler states bound in the driver, we'd
null-out the "extra/old" sampler states to unbind them. See commit
1e2fbf265.
However, we didn't make the corresponding fix for sampler views.
This caused an assertion to fail in the svga driver which checked
that the number of sampler views matched the number of sampler states.
This patch fixes cso_restore_sampler_views() so that it nulls-out
the extra/old sampler views if the number of new views is less than
the number of current/old views.
Reviewed-by: Jose Fonseca <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/cso_cache/cso_context.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index 6642c454e56..4d7c3871256 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -1221,6 +1221,7 @@ cso_restore_sampler_views(struct cso_context *ctx, unsigned shader_stage) { struct sampler_info *info = &ctx->samplers[shader_stage]; unsigned i, nr_saved = info->nr_views_saved; + unsigned num; for (i = 0; i < nr_saved; i++) { pipe_sampler_view_reference(&info->views[i], NULL); @@ -1232,16 +1233,18 @@ cso_restore_sampler_views(struct cso_context *ctx, unsigned shader_stage) pipe_sampler_view_reference(&info->views[i], NULL); } + num = MAX2(info->nr_views, nr_saved); + /* bind the old/saved sampler views */ switch (shader_stage) { case PIPE_SHADER_FRAGMENT: - ctx->pipe->set_fragment_sampler_views(ctx->pipe, nr_saved, info->views); + ctx->pipe->set_fragment_sampler_views(ctx->pipe, num, info->views); break; case PIPE_SHADER_VERTEX: - ctx->pipe->set_vertex_sampler_views(ctx->pipe, nr_saved, info->views); + ctx->pipe->set_vertex_sampler_views(ctx->pipe, num, info->views); break; case PIPE_SHADER_GEOMETRY: - ctx->pipe->set_geometry_sampler_views(ctx->pipe, nr_saved, info->views); + ctx->pipe->set_geometry_sampler_views(ctx->pipe, num, info->views); break; default: assert(!"bad shader type in cso_restore_sampler_views()"); |