OLD | NEW |
1 #include "SkXfermode.h" | 1 #include "SkXfermode.h" |
2 #include "SkXfermode_proccoeff.h" | 2 #include "SkXfermode_proccoeff.h" |
3 #include "SkColorPriv.h" | 3 #include "SkColorPriv.h" |
4 | 4 |
5 #include <arm_neon.h> | 5 #include <arm_neon.h> |
6 #include "SkColor_opts_neon.h" | 6 #include "SkColor_opts_neon.h" |
7 #include "SkXfermode_opts_arm_neon.h" | 7 #include "SkXfermode_opts_arm_neon.h" |
8 | 8 |
9 #define SkAlphaMulAlpha(a, b) SkMulDiv255Round(a, b) | 9 #define SkAlphaMulAlpha(a, b) SkMulDiv255Round(a, b) |
10 | 10 |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 for (int i = 0; i < count; i++) { | 625 for (int i = 0; i < count; i++) { |
626 dst[i] = proc(src[i], dst[i]); | 626 dst[i] = proc(src[i], dst[i]); |
627 } | 627 } |
628 } else { | 628 } else { |
629 for (int i = count - 1; i >= 0; --i) { | 629 for (int i = count - 1; i >= 0; --i) { |
630 unsigned a = aa[i]; | 630 unsigned a = aa[i]; |
631 if (0 != a) { | 631 if (0 != a) { |
632 SkPMColor dstC = dst[i]; | 632 SkPMColor dstC = dst[i]; |
633 SkPMColor C = proc(src[i], dstC); | 633 SkPMColor C = proc(src[i], dstC); |
634 if (a != 0xFF) { | 634 if (a != 0xFF) { |
635 C = SkFourByteInterp(C, dstC, a); | 635 C = SkFourByteInterp_neon(C, dstC, a); |
636 } | 636 } |
637 dst[i] = C; | 637 dst[i] = C; |
638 } | 638 } |
639 } | 639 } |
640 } | 640 } |
641 } | 641 } |
642 | 642 |
643 void SkNEONProcCoeffXfermode::xfer16(uint16_t* SK_RESTRICT dst, | 643 void SkNEONProcCoeffXfermode::xfer16(uint16_t* SK_RESTRICT dst, |
644 const SkPMColor* SK_RESTRICT src, int count
, | 644 const SkPMColor* SK_RESTRICT src, int count
, |
645 const SkAlpha* SK_RESTRICT aa) const { | 645 const SkAlpha* SK_RESTRICT aa) const { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 SkPMColor dstC = SkPixel16ToPixel32(dst[i]); | 693 SkPMColor dstC = SkPixel16ToPixel32(dst[i]); |
694 dst[i] = SkPixel32ToPixel16_ToU16(proc(src[i], dstC)); | 694 dst[i] = SkPixel32ToPixel16_ToU16(proc(src[i], dstC)); |
695 } | 695 } |
696 } else { | 696 } else { |
697 for (int i = count - 1; i >= 0; --i) { | 697 for (int i = count - 1; i >= 0; --i) { |
698 unsigned a = aa[i]; | 698 unsigned a = aa[i]; |
699 if (0 != a) { | 699 if (0 != a) { |
700 SkPMColor dstC = SkPixel16ToPixel32(dst[i]); | 700 SkPMColor dstC = SkPixel16ToPixel32(dst[i]); |
701 SkPMColor C = proc(src[i], dstC); | 701 SkPMColor C = proc(src[i], dstC); |
702 if (0xFF != a) { | 702 if (0xFF != a) { |
703 C = SkFourByteInterp(C, dstC, a); | 703 C = SkFourByteInterp_neon(C, dstC, a); |
704 } | 704 } |
705 dst[i] = SkPixel32ToPixel16_ToU16(C); | 705 dst[i] = SkPixel32ToPixel16_ToU16(C); |
706 } | 706 } |
707 } | 707 } |
708 } | 708 } |
709 } | 709 } |
710 | 710 |
711 #ifdef SK_DEVELOPER | 711 #ifdef SK_DEVELOPER |
712 void SkNEONProcCoeffXfermode::toString(SkString* str) const { | 712 void SkNEONProcCoeffXfermode::toString(SkString* str) const { |
713 this->INHERITED::toString(str); | 713 this->INHERITED::toString(str); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 SkProcCoeffXfermode* SkPlatformXfermodeFactory_impl_neon(const ProcCoeff& rec, | 758 SkProcCoeffXfermode* SkPlatformXfermodeFactory_impl_neon(const ProcCoeff& rec, |
759 SkXfermode::Mode mode)
{ | 759 SkXfermode::Mode mode)
{ |
760 | 760 |
761 void* procSIMD = reinterpret_cast<void*>(gNEONXfermodeProcs[mode]); | 761 void* procSIMD = reinterpret_cast<void*>(gNEONXfermodeProcs[mode]); |
762 | 762 |
763 if (procSIMD != NULL) { | 763 if (procSIMD != NULL) { |
764 return SkNEW_ARGS(SkNEONProcCoeffXfermode, (rec, mode, procSIMD)); | 764 return SkNEW_ARGS(SkNEONProcCoeffXfermode, (rec, mode, procSIMD)); |
765 } | 765 } |
766 return NULL; | 766 return NULL; |
767 } | 767 } |
OLD | NEW |