diff options
author | Nicolai Haehnle <nhaehnle@gmail.com> | 2008-07-27 16:36:05 +0200 |
---|---|---|
committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2008-07-27 16:48:24 +0200 |
commit | 0973d348d7a9c8d50829a33112dceb4e7f7a61ef (patch) | |
tree | 45a8ede4b419ecb333230cf1d8c1f301e001f6a0 /src/mesa/drivers/dri/r300/radeon_program_pair.c | |
parent | 1bdf5e09a049d8d60bf147f9d88bbdb2b8588752 (diff) |
r500: Handle non-native swizzles in texture instructions
This fixes piglit's fp-kil and fp-generic/kil-swizzle tests.
Diffstat (limited to 'src/mesa/drivers/dri/r300/radeon_program_pair.c')
-rw-r--r-- | src/mesa/drivers/dri/r300/radeon_program_pair.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/r300/radeon_program_pair.c b/src/mesa/drivers/dri/r300/radeon_program_pair.c index 8762422801..4307994d74 100644 --- a/src/mesa/drivers/dri/r300/radeon_program_pair.c +++ b/src/mesa/drivers/dri/r300/radeon_program_pair.c @@ -265,11 +265,21 @@ static void final_rewrite(struct pair_state *s, struct prog_instruction *inst) inst->SrcReg[0] = tmp; break; case OPCODE_MOV: - inst->SrcReg[1] = inst->SrcReg[0]; + /* AMD say we should use CMP. + * However, when we transform + * KIL -r0; + * into + * CMP tmp, -r0, -r0, 0; + * KIL tmp; + * we get incorrect behaviour on R500 when r0 == 0.0. + * It appears that the R500 KIL hardware treats -0.0 as less + * than zero. + */ + inst->SrcReg[1].File = PROGRAM_BUILTIN; + inst->SrcReg[1].Swizzle = SWIZZLE_1111; inst->SrcReg[2].File = PROGRAM_BUILTIN; inst->SrcReg[2].Swizzle = SWIZZLE_0000; - inst->Opcode = OPCODE_CMP; - // TODO: disable output modifiers on R500 + inst->Opcode = OPCODE_MAD; break; case OPCODE_MUL: inst->SrcReg[2].File = PROGRAM_BUILTIN; |