From 1bdf5e09a049d8d60bf147f9d88bbdb2b8588752 Mon Sep 17 00:00:00 2001 From: Nicolai Haehnle Date: Sun, 27 Jul 2008 15:14:07 +0200 Subject: r500: Redirect TEX writes to output registers While R500 fragment program texture instructions appear to support writemasks, they cannot write to the output FIFO immediately, so we need to insert a MOV for these instructions. This fixes piglit's fp-fragment-position and fp-incomplete-tex tests. --- src/mesa/drivers/dri/r300/r500_fragprog.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/mesa/drivers/dri/r300/r500_fragprog.c b/src/mesa/drivers/dri/r300/r500_fragprog.c index 7b18efa69d..c78deab2ac 100644 --- a/src/mesa/drivers/dri/r300/r500_fragprog.c +++ b/src/mesa/drivers/dri/r300/r500_fragprog.c @@ -74,6 +74,13 @@ static GLboolean transform_TEX( inst.DstReg.File = PROGRAM_TEMPORARY; inst.DstReg.Index = radeonFindFreeTemporary(t); inst.DstReg.WriteMask = WRITEMASK_XYZW; + } else if (inst.Opcode != OPCODE_KIL && inst.DstReg.File != PROGRAM_TEMPORARY) { + int tempreg = radeonFindFreeTemporary(t); + + inst.DstReg.File = PROGRAM_TEMPORARY; + inst.DstReg.Index = tempreg; + inst.DstReg.WriteMask = WRITEMASK_XYZW; + destredirect = GL_TRUE; } tgt = radeonAppendInstructions(t->Program, 1); -- cgit v1.2.3