Module: Mesa Branch: master Commit: 529aa8249a29577f160e1f289472b0da7241b90f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=529aa8249a29577f160e1f289472b0da7241b90f
Author: Oded Gabbay <[email protected]> Date: Sun Jan 17 14:25:32 2016 +0200 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]> --- src/gallium/auxiliary/util/u_pwr8.h | 6 ++++++ src/gallium/drivers/llvmpipe/lp_setup_tri.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/util/u_pwr8.h b/src/gallium/auxiliary/util/u_pwr8.h index 1eca6d6..ffd9f92 100644 --- a/src/gallium/auxiliary/util/u_pwr8.h +++ b/src/gallium/auxiliary/util/u_pwr8.h @@ -153,6 +153,12 @@ vec_mullo_epi32 (__m128i a, __m128i b) return v; } +static inline __m128i +vec_andnot_si128 (__m128i a, __m128i b) +{ + return vec_andc (b, a); +} + static inline void transpose4_epi32(const __m128i * restrict a, const __m128i * restrict b, diff --git a/src/gallium/drivers/llvmpipe/lp_setup_tri.c b/src/gallium/drivers/llvmpipe/lp_setup_tri.c index aa24176..907129d 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); */ _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
