i965: fix incorrect tex unit in emit_tex() and emit_txb()
authorBrian Paul <brianp@vmware.com>
Wed, 26 Aug 2009 20:46:58 +0000 (14:46 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 26 Aug 2009 20:46:58 +0000 (14:46 -0600)
The instructions we're translating already went through the brw_wm_pass_fp()
function which does the sampler->texture unit mapping.  We were applying
the sample->unit mapping a second time in the GLSL texture emitters.
Often, this made no difference but other times it could lead to accessing
an invalid texture and could cause a GPU lockup.

src/mesa/drivers/dri/i965/brw_wm_glsl.c

index c68056df6fd8bfaa120f3833645512c7e1c67273..7c210abbce3e0d538a50d759e0bae8dc89474e55 100644 (file)
@@ -2623,7 +2623,8 @@ static void emit_txb(struct brw_wm_compile *c,
 {
     struct brw_compile *p = &c->func;
     struct brw_reg dst[4], src[4], payload_reg;
-    GLuint unit = c->fp->program.Base.SamplerUnits[inst->TexSrcUnit];
+    /* Note: TexSrcUnit was already looked up through SamplerTextures[] */
+    const GLuint unit = inst->TexSrcUnit;
     GLuint i;
     GLuint msg_type;
 
@@ -2689,7 +2690,8 @@ static void emit_tex(struct brw_wm_compile *c,
 {
     struct brw_compile *p = &c->func;
     struct brw_reg dst[4], src[4], payload_reg;
-    GLuint unit = c->fp->program.Base.SamplerUnits[inst->TexSrcUnit];
+    /* Note: TexSrcUnit was already looked up through SamplerTextures[] */
+    const GLuint unit = inst->TexSrcUnit;
     GLuint msg_len;
     GLuint i, nr;
     GLuint emit;