OLD | NEW |
1 | |
2 /* | 1 /* |
3 * Copyright 2012 The Android Open Source Project | 2 * Copyright 2012 The Android Open Source Project |
4 * | 3 * |
5 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
7 */ | 6 */ |
8 | 7 |
9 | |
10 #include <arm_neon.h> | 8 #include <arm_neon.h> |
11 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
12 | 10 |
13 /* | 11 /* |
14 * Filter_32_opaque | 12 * Filter_32_opaque |
15 * | 13 * |
16 * There is no hard-n-fast rule that the filtering must produce | 14 * There is no hard-n-fast rule that the filtering must produce |
17 * exact results for the color components, but if the 4 incoming colors are | 15 * exact results for the color components, but if the 4 incoming colors are |
18 * all opaque, then the output color must also be opaque. Subsequent parts of | 16 * all opaque, then the output color must also be opaque. Subsequent parts of |
19 * the drawing pipeline may rely on this (e.g. which blitrow proc to use). | 17 * the drawing pipeline may rely on this (e.g. which blitrow proc to use). |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 tmp = vmla_u16(tmp, vget_low_u16(tmp1), v16_x); // tmp += a00 * (16-x) | 85 tmp = vmla_u16(tmp, vget_low_u16(tmp1), v16_x); // tmp += a00 * (16-x) |
88 tmp = vmla_u16(tmp, vget_low_u16(tmp2), v16_x); // tmp += a10 * (16-x) | 86 tmp = vmla_u16(tmp, vget_low_u16(tmp2), v16_x); // tmp += a10 * (16-x) |
89 | 87 |
90 vscale = vdup_n_u16(scale); // duplicate scale | 88 vscale = vdup_n_u16(scale); // duplicate scale |
91 tmp = vshr_n_u16(tmp, 8); // shift down result by 8 | 89 tmp = vshr_n_u16(tmp, 8); // shift down result by 8 |
92 tmp = vmul_u16(tmp, vscale); // multiply result by scale | 90 tmp = vmul_u16(tmp, vscale); // multiply result by scale |
93 | 91 |
94 vres = vshrn_n_u16(vcombine_u16(tmp, vcreate_u16(0)), 8); // shift down resu
lt by 8 | 92 vres = vshrn_n_u16(vcombine_u16(tmp, vcreate_u16(0)), 8); // shift down resu
lt by 8 |
95 vst1_lane_u32(dst, vreinterpret_u32_u8(vres), 0); // store result | 93 vst1_lane_u32(dst, vreinterpret_u32_u8(vres), 0); // store result |
96 } | 94 } |
OLD | NEW |