From: Brian Date: Wed, 22 Aug 2007 15:41:20 +0000 (-0600) Subject: implement negation for src operands X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2154d1c5ac0bb37614ef00bed766e49635b519e8;p=mesa.git implement negation for src operands --- diff --git a/src/mesa/pipe/i915simple/i915_fpc_translate.c b/src/mesa/pipe/i915simple/i915_fpc_translate.c index cf6a142075e..6583cbfa280 100644 --- a/src/mesa/pipe/i915simple/i915_fpc_translate.c +++ b/src/mesa/pipe/i915simple/i915_fpc_translate.c @@ -178,11 +178,24 @@ src_vector(struct i915_fp_compile *p, source->SrcRegister.SwizzleZ, source->SrcRegister.SwizzleW); - assert(!source->SrcRegister.Negate); - assert(!source->SrcRegisterExtSwz.NegateX); - assert(!source->SrcRegisterExtSwz.NegateY); - assert(!source->SrcRegisterExtSwz.NegateZ); - assert(!source->SrcRegisterExtSwz.NegateW); + /* There's both negate-all-components and per-component negation. + * Try to handle both here. + */ + { + int nx = source->SrcRegisterExtSwz.NegateX; + int ny = source->SrcRegisterExtSwz.NegateY; + int nz = source->SrcRegisterExtSwz.NegateZ; + int nw = source->SrcRegisterExtSwz.NegateW; + if (source->SrcRegister.Negate) { + nx = !nx; + ny = !ny; + nz = !nz; + nw = !nw; + } + src = negate(src, nx, ny, nz, nw); + } + + /* no abs() or post-abs negation */ assert(!source->SrcRegisterExtMod.Absolute); assert(!source->SrcRegisterExtMod.Negate);