r300/compiler: add a function for swizzling a mask
This commit is contained in:
@@ -54,12 +54,7 @@ static struct rc_src_register chain_srcregs(struct rc_src_register outer, struct
|
||||
combine.Negate = outer.Negate;
|
||||
} else {
|
||||
combine.Abs = inner.Abs;
|
||||
combine.Negate = 0;
|
||||
for(unsigned int chan = 0; chan < 4; ++chan) {
|
||||
unsigned int swz = GET_SWZ(outer.Swizzle, chan);
|
||||
if (swz < 4)
|
||||
combine.Negate |= GET_BIT(inner.Negate, swz) << chan;
|
||||
}
|
||||
combine.Negate = swizzle_mask(outer.Swizzle, inner.Negate);
|
||||
combine.Negate ^= outer.Negate;
|
||||
}
|
||||
combine.Swizzle = combine_swizzles(inner.Swizzle, outer.Swizzle);
|
||||
|
||||
@@ -204,6 +204,20 @@ static inline rc_swizzle rc_mask_to_swizzle(unsigned int mask)
|
||||
}
|
||||
return RC_SWIZZLE_UNUSED;
|
||||
}
|
||||
|
||||
/* Reorder mask bits according to swizzle. */
|
||||
static inline unsigned swizzle_mask(unsigned swizzle, unsigned mask)
|
||||
{
|
||||
unsigned ret = 0;
|
||||
for (unsigned chan = 0; chan < 4; ++chan) {
|
||||
unsigned swz = GET_SWZ(swizzle, chan);
|
||||
if (swz < 4)
|
||||
ret |= GET_BIT(mask, swz) << chan;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
struct rc_src_register lmul_swizzle(unsigned int swizzle, struct rc_src_register srcreg);
|
||||
|
||||
static inline void reset_srcreg(struct rc_src_register* reg)
|
||||
|
||||
Reference in New Issue
Block a user