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)
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);
+ }
}
}
}
}
+ 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;