From: James Benton Date: Thu, 10 May 2012 16:15:27 +0000 (+0100) Subject: llvmpipe: Change triangle rasterization comparison from < 0 to <= 0 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0c8a8a35e107bcb04de94154933156165fed62a8;p=mesa.git llvmpipe: Change triangle rasterization comparison from < 0 to <= 0 Tested with custom rasterisation test tool added to piglit suite, reduced errors Signed-off-by: José Fonseca --- diff --git a/src/gallium/drivers/llvmpipe/lp_rast_tri.c b/src/gallium/drivers/llvmpipe/lp_rast_tri.c index 71d0ddf5e75..230b80a945f 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast_tri.c +++ b/src/gallium/drivers/llvmpipe/lp_rast_tri.c @@ -290,6 +290,10 @@ lp_rast_triangle_3_16(struct lp_rasterizer_task *task, c = _mm_add_epi32(c, mm_mullo_epi32(dcdy, _mm_set1_epi32(y))); rej4 = _mm_slli_epi32(rej4, 2); + /* Adjust so we can just check the sign bit (< 0 comparison), instead of having to do a less efficient <= 0 comparison */ + c = _mm_sub_epi32(c, _mm_set1_epi32(1)); + rej4 = _mm_add_epi32(rej4, _mm_set1_epi32(1)); + dcdx2 = _mm_add_epi32(dcdx, dcdx); dcdx3 = _mm_add_epi32(dcdx2, dcdx); @@ -383,7 +387,7 @@ lp_rast_triangle_3_4(struct lp_rasterizer_task *task, __m128i span_1; /* 0,dcdx,2dcdx,3dcdx for plane 1 */ __m128i span_2; /* 0,dcdx,2dcdx,3dcdx for plane 2 */ __m128i unused; - + transpose4_epi32(&p0, &p1, &p2, &zero, &c, &dcdx, &dcdy, &unused); @@ -394,6 +398,9 @@ lp_rast_triangle_3_4(struct lp_rasterizer_task *task, c = _mm_add_epi32(c, mm_mullo_epi32(dcdx, _mm_set1_epi32(x))); c = _mm_add_epi32(c, mm_mullo_epi32(dcdy, _mm_set1_epi32(y))); + /* Adjust so we can just check the sign bit (< 0 comparison), instead of having to do a less efficient <= 0 comparison */ + c = _mm_sub_epi32(c, _mm_set1_epi32(1)); + dcdx2 = _mm_add_epi32(dcdx, dcdx); dcdx3 = _mm_add_epi32(dcdx2, dcdx);