From 498df0f0bf2437130ed305fb757ae0fae90bebb7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Fri, 7 Aug 2009 11:32:31 -0400 Subject: [PATCH] Fix vmx_combine_vmx_atop_ca() It didn't compute the mask correct before. --- pixman/pixman-vmx.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c index 0038752..fbea24e 100644 --- a/pixman/pixman-vmx.c +++ b/pixman/pixman-vmx.c @@ -1215,7 +1215,7 @@ vmx_combine_over_reverse_ca (pixman_implementation_t *imp, vector unsigned int vdest, vsrc, vmask; vector unsigned char tmp1, tmp2, tmp3, tmp4, edges, dest_mask, mask_mask, src_mask, store_mask; - + COMPUTE_SHIFT_MASKC (dest, src, mask); /* printf("%s\n",__PRETTY_FUNCTION__); */ @@ -1421,30 +1421,32 @@ vmx_combine_atop_ca (pixman_implementation_t *imp, int width) { int i; - vector unsigned int vdest, vsrc, vmask; + vector unsigned int vdest, vsrc, vmask, vsrca; vector unsigned char tmp1, tmp2, tmp3, tmp4, edges, dest_mask, mask_mask, src_mask, store_mask; - + COMPUTE_SHIFT_MASKC (dest, src, mask); - + /* printf ("%s\n",__PRETTY_FUNCTION__); */ for (i = width / 4; i > 0; i--) { - LOAD_VECTORSC (dest, src, mask); - - vdest = pix_add_mul (pix_multiply (vsrc, vmask), splat_alpha (vdest), - vdest, - negate (pix_multiply (vmask, - splat_alpha (vmask)))); - + + vsrca = splat_alpha (vsrc); + + vsrc = pix_multiply (vsrc, vmask); + vmask = pix_multiply (vmask, vsrca); + + vdest = pix_add_mul (vsrc, splat_alpha (negate (vdest)), + negate (vmask), vdest); + STORE_VECTOR (dest); - + src += 4; dest += 4; mask += 4; } - + for (i = width % 4; --i >= 0;) { uint32_t a = mask[i]; @@ -1452,7 +1454,7 @@ vmx_combine_atop_ca (pixman_implementation_t *imp, uint32_t d = dest[i]; uint32_t sa = ALPHA_8 (s); uint32_t da = ALPHA_8 (d); - + UN8x4_MUL_UN8x4 (s, a); UN8x4_MUL_UN8 (a, sa); UN8x4_MUL_UN8x4_ADD_UN8x4_MUL_UN8 (d, ~a, s, da); -- 2.7.4