From: Søren Sandmann Pedersen Date: Fri, 7 Aug 2009 15:26:23 +0000 (-0400) Subject: Fix vmx_combine_over_ca(). X-Git-Tag: 1.0_branch~798^2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9650cd7432ef03c05895df04940e2ab6245f2618;p=profile%2Fivi%2Fpixman.git Fix vmx_combine_over_ca(). In the non-vector code, the mask needs to be multiplied with source alpha. --- diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c index 511c8cb..0038752 100644 --- a/pixman/pixman-vmx.c +++ b/pixman/pixman-vmx.c @@ -1170,30 +1170,35 @@ vmx_combine_over_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__); */ for (i = width / 4; i > 0; i--) { - + LOAD_VECTORSC (dest, src, mask); - + vdest = in_over (vsrc, splat_alpha (vsrc), vmask, vdest); - + STORE_VECTOR (dest); - + mask += 4; src += 4; dest += 4; } - + for (i = width % 4; --i >= 0;) { uint32_t a = mask[i]; uint32_t s = src[i]; uint32_t d = dest[i]; + uint32_t sa = ALPHA_8 (s); + UN8x4_MUL_UN8x4 (s, a); + UN8x4_MUL_UN8 (a, sa); UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ~a, s); + dest[i] = d; } }