radeon/llvm: Add some comments and fix coding style
[mesa.git] / src / gallium / drivers / r300 / compiler / radeon_pair_translate.c
index 2dae56a2428dce38624bc0e5994b1ba494dccea8..c6050bdf4ddc10ff9683d4ff865514a3f406bff0 100644 (file)
@@ -247,7 +247,13 @@ static void set_pair_instruction(struct r300_fragment_program_compiler *c,
                if (needalpha) {
                        unsigned int srcrgb = 0;
                        unsigned int srcalpha = 0;
-                       unsigned int swz = GET_SWZ(inst->SrcReg[i].Swizzle, istranscendent ? 0 : 3);
+                       unsigned int swz;
+                       if (istranscendent) {
+                               swz = rc_get_scalar_src_swz(inst->SrcReg[i].Swizzle);
+                       } else {
+                               swz = GET_SWZ(inst->SrcReg[i].Swizzle, 3);
+                       }
+
                        if (swz < 3)
                                srcrgb = 1;
                        else if (swz < 4)
@@ -262,7 +268,15 @@ static void set_pair_instruction(struct r300_fragment_program_compiler *c,
                        pair->Alpha.Arg[i].Source = source;
                        pair->Alpha.Arg[i].Swizzle = rc_init_swizzle(swz, 1);
                        pair->Alpha.Arg[i].Abs = inst->SrcReg[i].Abs;
-                       pair->Alpha.Arg[i].Negate = !!(inst->SrcReg[i].Negate & RC_MASK_W);
+
+                       if (istranscendent) {
+                               pair->Alpha.Arg[i].Negate =
+                                       !!(inst->SrcReg[i].Negate &
+                                                       inst->DstReg.WriteMask);
+                       } else {
+                               pair->Alpha.Arg[i].Negate =
+                                       !!(inst->SrcReg[i].Negate & RC_MASK_W);
+                       }
                }
        }
 
@@ -297,6 +311,13 @@ static void set_pair_instruction(struct r300_fragment_program_compiler *c,
                }
        }
 
+       if (needrgb) {
+               pair->RGB.Omod = inst->Omod;
+       }
+       if (needalpha) {
+               pair->Alpha.Omod = inst->Omod;
+       }
+
        if (inst->WriteALUResult) {
                pair->WriteALUResult = inst->WriteALUResult;
                pair->ALUResultCompare = inst->ALUResultCompare;