r300/compiler: fix swizzle lowering with a presubtract source operand
authorMarek Olšák <maraeo@gmail.com>
Sat, 11 Dec 2010 12:22:19 +0000 (13:22 +0100)
committerMarek Olšák <maraeo@gmail.com>
Sat, 11 Dec 2010 12:37:57 +0000 (13:37 +0100)
If a source operand has a non-native swizzle (e.g. the KIL instruction
cannot have a swizzle other than .xyzw), the lowering pass uses one or more
MOV instructions to move the operand to an intermediate temporary with
native swizzles.

This commit fixes that the presubtract information was lost during
the lowering.

NOTE: This is a candidate for both the 7.9 and 7.10 branches.

src/mesa/drivers/dri/r300/compiler/radeon_dataflow_swizzles.c

index a0f7bd81741ed3da80cc28e4c7de2bbc2b61f9e1..133a9f72ec7a1731e2d320647f575a827734d67e 100644 (file)
@@ -56,6 +56,7 @@ static void rewrite_source(struct radeon_compiler * c,
                mov->U.I.DstReg.Index = tempreg;
                mov->U.I.DstReg.WriteMask = split.Phase[phase];
                mov->U.I.SrcReg[0] = inst->U.I.SrcReg[src];
+               mov->U.I.PreSub = inst->U.I.PreSub;
 
                phase_refmask = 0;
                for(unsigned int chan = 0; chan < 4; ++chan) {