From 5080684c4d4475a31371842da93a4eb4d533bcd2 Mon Sep 17 00:00:00 2001 From: "jiin.moon" Date: Tue, 19 Apr 2016 21:22:05 +0900 Subject: [PATCH] evas: revert latest patch in evas_common_convert_argb_premul api It makes blending issue with image mask. Refer to below description of reverted patch ================================================================== commit: 1e33454772183563e0d2ffca6c961ff5822392ef evas common: make logic same to c code version. As C version, It increase alpha value by 1 to avoid loosing of the remains while it divides values. Neon version does same technique to make same results. ================================================================== Change-Id: I980c739694bc1ce56b436a43d310c477e27d9cce --- src/lib/evas/common/evas_convert_color.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/lib/evas/common/evas_convert_color.c b/src/lib/evas/common/evas_convert_color.c index 7cdd3f6..3e68cdb 100644 --- a/src/lib/evas/common/evas_convert_color.c +++ b/src/lib/evas/common/evas_convert_color.c @@ -39,30 +39,24 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int len) uint8x8_t mask_0x01 = vdup_n_u8(1); uint8x8_t mask_0xff = vdup_n_u8(255); uint8x8_t cmp; - uint64x1_t tmp; while (data <= de - 8) { uint8x8x4_t rgba = vld4_u8(data); - cmp = vand_u8(vorr_u8(vceq_u8(rgba.val[3], mask_0xff), - vceq_u8(rgba.val[3], mask_0x00)), - mask_0x01); - tmp = vpaddl_u32(vpaddl_u16(vpaddl_u8(cmp))); - nas += vget_lane_u32(vreinterpret_u32_u64(tmp), 0); + cmp = vand_u8(vorr_u8( + vceq_u8(rgba.val[3], mask_0xff), + vceq_u8(rgba.val[3], mask_0x00) + ), mask_0x01); + nas += vpaddl_u32(vpaddl_u16(vpaddl_u8(cmp))); uint16x8x4_t lrgba; lrgba.val[0] = vmovl_u8(rgba.val[0]); lrgba.val[1] = vmovl_u8(rgba.val[1]); lrgba.val[2] = vmovl_u8(rgba.val[2]); - lrgba.val[3] = vaddl_u8(rgba.val[3], mask_0x01); - - rgba.val[0] = vshrn_n_u16(vmlaq_u16(lrgba.val[0], lrgba.val[0], - lrgba.val[3]), 8); - rgba.val[1] = vshrn_n_u16(vmlaq_u16(lrgba.val[1], lrgba.val[1], - lrgba.val[3]), 8); - rgba.val[2] = vshrn_n_u16(vmlaq_u16(lrgba.val[2], lrgba.val[2], - lrgba.val[3]), 8); + rgba.val[0] = vshrn_n_u16(vmlal_u8(lrgba.val[0], rgba.val[0], rgba.val[3]), 8); + rgba.val[1] = vshrn_n_u16(vmlal_u8(lrgba.val[1], rgba.val[1], rgba.val[3]), 8); + rgba.val[2] = vshrn_n_u16(vmlal_u8(lrgba.val[2], rgba.val[2], rgba.val[3]), 8); vst4_u8(data, rgba); data += 8; } -- 2.7.4