r300-gallium: r500-fs: Properly set up TEX/OUT.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Tue, 17 Mar 2009 00:00:27 +0000 (17:00 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Tue, 17 Mar 2009 09:13:03 +0000 (02:13 -0700)
src/gallium/drivers/r300/r300_state_shader.c

index 7803494130870c70fe4d59bfda6cae17c7b6979e..0b600b9f519ecaed3a4f620dc0799780ffbfaa8a 100644 (file)
@@ -350,11 +350,21 @@ static INLINE void r500_emit_tex(struct r500_fragment_shader* fs,
 
     if (dst->DstRegister.File == TGSI_FILE_OUTPUT) {
         fs->instructions[i].inst2 |=
-            R500_TEX_DST_ADDR(assembler->temp_offset +
-                    assembler->temp_count);
-    }
+            R500_TEX_DST_ADDR(assembler->temp_count +
+                    assembler->temp_offset);
 
-    fs->instruction_count++;
+        fs->instruction_count++;
+
+        /* Setup and emit a MOV. */
+        src[0].SrcRegister.Index = assembler->temp_count;
+        src[0].SrcRegister.File = TGSI_FILE_TEMPORARY;
+
+        src[1] = src[0];
+        src[2] = r500_constant_zero;
+        r500_emit_maths(fs, assembler, src, dst, TGSI_OPCODE_MOV, 3);
+    } else {
+        fs->instruction_count++;
+    }
 }
 
 static void r500_fs_instruction(struct r500_fragment_shader* fs,