Chromium Code Reviews| Index: src/core/SkXfermode.cpp |
| diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp |
| index 20d88162a43d2b0d3bafa005c1695113ef947cd4..0623f1a30a1431059371724c3deafa79763fbfa4 100644 |
| --- a/src/core/SkXfermode.cpp |
| +++ b/src/core/SkXfermode.cpp |
| @@ -124,6 +124,7 @@ static SkPMColor dstout_modeproc(SkPMColor src, SkPMColor dst) { |
| return SkAlphaMulQ(dst, SkAlpha255To256(255 - SkGetPackedA32(src))); |
| } |
| +#if !SK_ARM_NEON_IS_ALWAYS |
|
djsollen
2013/12/05 15:11:36
I would like to remove this. I think we could do
kevin.petit.not.used.account
2013/12/05 17:02:46
Done. I've used a factory approach, like suggested
|
| // kSrcATop_Mode, //!< [Da, Sc * Da + (1 - Sa) * Dc] |
| static SkPMColor srcatop_modeproc(SkPMColor src, SkPMColor dst) { |
| unsigned sa = SkGetPackedA32(src); |
| @@ -189,6 +190,7 @@ static SkPMColor modulate_modeproc(SkPMColor src, SkPMColor dst) { |
| int b = SkAlphaMulAlpha(SkGetPackedB32(src), SkGetPackedB32(dst)); |
| return SkPackARGB32(a, r, g, b); |
| } |
| +#endif |
| static inline int srcover_byte(int a, int b) { |
| return a + b - SkAlphaMulAlpha(a, b); |
| @@ -631,36 +633,36 @@ static SkPMColor luminosity_modeproc(SkPMColor src, SkPMColor dst) { |
| } |
| const ProcCoeff gProcCoeffs[] = { |
| - { clear_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kZero_Coeff }, |
| - { src_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kZero_Coeff }, |
| - { dst_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kOne_Coeff }, |
| - { srcover_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kISA_Coeff }, |
| - { dstover_modeproc, SkXfermode::kIDA_Coeff, SkXfermode::kOne_Coeff }, |
| - { srcin_modeproc, SkXfermode::kDA_Coeff, SkXfermode::kZero_Coeff }, |
| - { dstin_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kSA_Coeff }, |
| - { srcout_modeproc, SkXfermode::kIDA_Coeff, SkXfermode::kZero_Coeff }, |
| - { dstout_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kISA_Coeff }, |
| - { srcatop_modeproc, SkXfermode::kDA_Coeff, SkXfermode::kISA_Coeff }, |
| - { dstatop_modeproc, SkXfermode::kIDA_Coeff, SkXfermode::kSA_Coeff }, |
| - { xor_modeproc, SkXfermode::kIDA_Coeff, SkXfermode::kISA_Coeff }, |
| - |
| - { plus_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kOne_Coeff }, |
| - { modulate_modeproc,SkXfermode::kZero_Coeff, SkXfermode::kSC_Coeff }, |
| - { screen_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kISC_Coeff }, |
| - { overlay_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { darken_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { lighten_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { colordodge_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { colorburn_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { hardlight_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { softlight_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { difference_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { exclusion_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { multiply_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { hue_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { saturation_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { color_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| - { luminosity_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { clear_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kZero_Coeff }, |
| + { src_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kZero_Coeff }, |
| + { dst_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kOne_Coeff }, |
| + { srcover_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kISA_Coeff }, |
| + { dstover_modeproc, SkXfermode::kIDA_Coeff, SkXfermode::kOne_Coeff }, |
| + { srcin_modeproc, SkXfermode::kDA_Coeff, SkXfermode::kZero_Coeff }, |
| + { dstin_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kSA_Coeff }, |
| + { srcout_modeproc, SkXfermode::kIDA_Coeff, SkXfermode::kZero_Coeff }, |
| + { dstout_modeproc, SkXfermode::kZero_Coeff, SkXfermode::kISA_Coeff }, |
| + { SK_ARM_NEON_WRAP(srcatop_modeproc), SkXfermode::kDA_Coeff, SkXfermode::kISA_Coeff }, |
|
djsollen
2013/12/05 14:17:05
this is going to be problematic on chrome as their
kevin.petit.not.used.account
2013/12/05 17:02:46
I thought that would be problematic in a way or an
|
| + { SK_ARM_NEON_WRAP(dstatop_modeproc), SkXfermode::kIDA_Coeff, SkXfermode::kSA_Coeff }, |
| + { SK_ARM_NEON_WRAP(xor_modeproc), SkXfermode::kIDA_Coeff, SkXfermode::kISA_Coeff }, |
| + |
| + { SK_ARM_NEON_WRAP(plus_modeproc), SkXfermode::kOne_Coeff, SkXfermode::kOne_Coeff }, |
| + { SK_ARM_NEON_WRAP(modulate_modeproc), SkXfermode::kZero_Coeff, SkXfermode::kSC_Coeff }, |
| + { screen_modeproc, SkXfermode::kOne_Coeff, SkXfermode::kISC_Coeff }, |
| + { overlay_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { darken_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { lighten_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { colordodge_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { colorburn_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { hardlight_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { softlight_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { difference_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { exclusion_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { multiply_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { hue_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { saturation_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { color_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| + { luminosity_modeproc, CANNOT_USE_COEFF, CANNOT_USE_COEFF }, |
| }; |
| /////////////////////////////////////////////////////////////////////////////// |