nv50: fix TEX for WriteMask not equal 0xf
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 25 Sep 2009 08:53:01 +0000 (10:53 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 25 Sep 2009 09:01:45 +0000 (11:01 +0200)
If you e.g. only need alpha, it ends up in the first reg,
not the last, as it would when reading rgb too.

src/gallium/drivers/nv50/nv50_program.c

index 272fd8d90ba93d57271347d0f48f8e84bf0cfb1a..576d075318f9b187bc8ba7a3cb5ebaafa7dcddf9 100644 (file)
@@ -1166,10 +1166,11 @@ emit_tex(struct nv50_pc *pc, struct nv50_reg **dst, unsigned mask,
        emit(pc, e);
 
 #if 1
-       if (mask & 1) emit_mov(pc, dst[0], t[0]);
-       if (mask & 2) emit_mov(pc, dst[1], t[1]);
-       if (mask & 4) emit_mov(pc, dst[2], t[2]);
-       if (mask & 8) emit_mov(pc, dst[3], t[3]);
+       c = 0;
+       if (mask & 1) emit_mov(pc, dst[0], t[c++]);
+       if (mask & 2) emit_mov(pc, dst[1], t[c++]);
+       if (mask & 4) emit_mov(pc, dst[2], t[c++]);
+       if (mask & 8) emit_mov(pc, dst[3], t[c]);
 
        free_temp4(pc, t);
 #else