mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
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 <oded.gabbay@gmail.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
02ac91d717
commit
529aa8249a
2 changed files with 7 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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); */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue