[Mesa-dev] [PATCH] st/mesa: fix sampler view counting

Brian Paul brianp at vmware.com
Fri Aug 17 07:28:10 PDT 2012


In the past, when we called pipe::set_sampler_views(n) the drivers set
samplers [n..MAX] to NULL.  We no longer do that.  The state tracker
code was already trying to set unused sampler views to NULL to cover
that case, but the logic was broken and unnoticed until now.  This patch
fixes it.

Fixes http://bugs.freedesktop.org/show_bug.cgi?id=53617
---
 src/mesa/state_tracker/st_atom_texture.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
index 6e2efd9..df05e83 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -265,7 +265,7 @@ update_textures(struct st_context *st,
 {
    const GLuint old_max = *num_textures;
    GLbitfield samplers_used = prog->SamplersUsed;
-   GLuint unit;
+   GLuint unit, new_count;
 
    if (samplers_used == 0x0 && old_max == 0)
       return;
@@ -294,9 +294,16 @@ update_textures(struct st_context *st,
       pipe_sampler_view_reference(&(sampler_views[unit]), sampler_view);
    }
 
+   /* Ex: if old_max = 3 and *num_textures = 1, we need to pass an
+    * array of views={X, NULL, NULL} to unref the old texture views
+    * at positions [1] and [2].
+    */
+   new_count = MAX2(*num_textures, old_max);
+   assert(new_count <= max_units);
+
    cso_set_sampler_views(st->cso_context,
                          shader_stage,
-                         MIN2(*num_textures, max_units),
+                         new_count,
                          sampler_views);
 }
 
-- 
1.7.3.4



More information about the mesa-dev mailing list