From 567aead92ae1b51578b0dea4709662b0d9c130e2 Mon Sep 17 00:00:00 2001 From: Corbin Simpson Date: Mon, 16 Mar 2009 06:41:57 -0700 Subject: [PATCH] r300-gallium: r500-fs: Clamp only when saturation flags are set. --- src/gallium/drivers/r300/r300_state_shader.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/r300/r300_state_shader.c b/src/gallium/drivers/r300/r300_state_shader.c index e7e5a119d09..0a4f7c8d7e9 100644 --- a/src/gallium/drivers/r300/r300_state_shader.c +++ b/src/gallium/drivers/r300/r300_state_shader.c @@ -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, -- 2.30.2