cso: null-out previously bound sampler states
authorBrian Paul <brianp@vmware.com>
Mon, 2 May 2016 16:24:43 +0000 (10:24 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 3 May 2016 21:40:49 +0000 (15:40 -0600)
If, for example, we previously had 2 sampler states bound and now we
are binding one, we'd leave the second sampler state unchanged.
This change nulls-out the second sampler state in this situation.
We're already doing the same thing for sampler views.

This silences an occasional warning issued by the VMware driver when
the number of sampler views and sampler states disagreed.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/auxiliary/cso_cache/cso_context.c

index 4e0cbdd8f9a0850a8e4e9454a20da00a47d63419..4cf3b2bddd54d7c7e0b58c07280bbbe44841380d 100644 (file)
@@ -1203,6 +1203,7 @@ void
 cso_single_sampler_done(struct cso_context *ctx, unsigned shader_stage)
 {
    struct sampler_info *info = &ctx->samplers[shader_stage];
+   const unsigned old_nr_samplers = info->nr_samplers;
    unsigned i;
 
    /* find highest non-null sampler */
@@ -1212,7 +1213,8 @@ cso_single_sampler_done(struct cso_context *ctx, unsigned shader_stage)
    }
 
    info->nr_samplers = i;
-   ctx->pipe->bind_sampler_states(ctx->pipe, shader_stage, 0, i,
+   ctx->pipe->bind_sampler_states(ctx->pipe, shader_stage, 0,
+                                  MAX2(old_nr_samplers, info->nr_samplers),
                                   info->samplers);
 }