r300-gallium: r500-fs: Clamp only when saturation flags are set.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 16 Mar 2009 13:41:57 +0000 (06:41 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 16 Mar 2009 13:49:22 +0000 (06:49 -0700)
src/gallium/drivers/r300/r300_state_shader.c

index e7e5a11..0a4f7c8 100644 (file)
@@ -228,9 +228,7 @@ static INLINE void r500_emit_alu(struct r500_fragment_shader* fs,
         R500_ALU_WMASK(dst->DstRegister.WriteMask);
     }
 
-    fs->instructions[i].inst0 |=
-        R500_INST_TEX_SEM_WAIT |
-        R500_INST_RGB_CLAMP | R500_INST_ALPHA_CLAMP;
+    fs->instructions[i].inst0 |= R500_INST_TEX_SEM_WAIT;
 
     fs->instructions[i].inst4 =
         R500_ALPHA_ADDRD(r300_fs_dst(assembler, &dst->DstRegister));
@@ -421,6 +419,12 @@ static void r500_fs_instruction(struct r500_fragment_shader* fs,
                     inst->Instruction.Opcode);
             break;
     }
+
+    /* Clamp, if saturation flags are set. */
+    if (inst->Instruction.Saturate == TGSI_SAT_ZERO_ONE) {
+        fs->instructions[fs->instruction_count - 1].inst0 |=
+            R500_INST_RGB_CLAMP | R500_INST_ALPHA_CLAMP;
+    }
 }
 
 static void r500_fs_finalize(struct r500_fragment_shader* fs,