st/mesa: fix indirect addressing of input/output regs
authorBrian Paul <brianp@vmware.com>
Wed, 2 Jun 2010 23:37:42 +0000 (17:37 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 2 Jun 2010 23:43:39 +0000 (17:43 -0600)
This fixes an issue that was missed with commit
9f544394c1d059ce09c8bb2b5e11f5e871c7915f.
Fixes piglit glsl-texcoord-array.shader_test

src/mesa/state_tracker/st_mesa_to_tgsi.c

index 6df6cdf..35016d8 100644 (file)
@@ -319,10 +319,15 @@ translate_src( struct st_translate *t,
 
    if (SrcReg->RelAddr) {
       src = ureg_src_indirect( src, ureg_src(t->address[0]));
-      /* If SrcReg->Index was negative, it was set to zero in
-       * src_register().  Reassign it now.
-       */
-      src.Index = SrcReg->Index;
+      if (SrcReg->File != PROGRAM_INPUT &&
+          SrcReg->File != PROGRAM_OUTPUT) {
+         /* If SrcReg->Index was negative, it was set to zero in
+          * src_register().  Reassign it now.  But don't do this
+          * for input/output regs since they get remapped while
+          * const buffers don't.
+          */
+         src.Index = SrcReg->Index;
+      }
    }
 
    return src;