summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/llvmpipe
diff options
context:
space:
mode:
authorOded Gabbay <[email protected]>2016-01-17 14:25:32 +0200
committerOded Gabbay <[email protected]>2016-01-17 21:07:27 +0200
commit529aa8249a29577f160e1f289472b0da7241b90f (patch)
tree7efed8d807afdb0029120ba0ce6b55964c29f749 /src/gallium/drivers/llvmpipe
parent02ac91d717036be0c8390b99860d37ff390c50e2 (diff)
llvmpipe: fix arguments order given to vec_andc
This patch fixes a classic "confuse the enemy" bug. _mm_andnot_si128 (SSE) and vec_andc (VMX) do the same operation, but the arguments are opposite. _mm_andnot_si128 performs "r = (~a) & b" while vec_andc performs "r = a & (~b)" To make sure this error won't return in another place, I added a wrapper function, vec_andnot_si128, in u_pwr8.h, which makes the swap inside. Signed-off-by: Oded Gabbay <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/drivers/llvmpipe')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_setup_tri.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_setup_tri.c b/src/gallium/drivers/llvmpipe/lp_setup_tri.c
index aa241761586..907129dbd1b 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup_tri.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup_tri.c
@@ -556,7 +556,7 @@ do_triangle_ccw(struct lp_setup_context *setup,
/* Calculate trivial reject values:
*/
- eo = vec_sub_epi32(vec_andc(dcdy_neg_mask, dcdy),
+ eo = vec_sub_epi32(vec_andnot_si128(dcdy_neg_mask, dcdy),
vec_and(dcdx_neg_mask, dcdx));
/* ei = _mm_sub_epi32(_mm_sub_epi32(dcdy, dcdx), eo); */