diff options
author | 2013-12-06 11:32:27 +0000 | |
---|---|---|
committer | 2013-12-06 11:32:27 +0000 | |
commit | d611864e679a58865b111e74fe7ac919cba42163 (patch) | |
tree | e4fc8d0a73242c1be46e6fa9472eebd0ac1f4275 /src/core/SkXfermode.cpp | |
parent | 726b97a3c497cdec2fb9f7fd01da4109e2e5ac46 (diff) |
ARM Skia NEON patches - 32 - Xfermode: 1-pixel NEON modeprocs
In some cases, it's easy to provide a NEON version of the 1-pixel modeprocs.
Combined with https://codereview.chromium.org/23724013/ (merged) it allows
up to 35% speed improvement on Xfermodes when aa is non-NULL.
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
BUG=
R=djsollen@google.com, reed@google.com, mtklein@google.com, luisjoseromeroesclusa@hotmail.com
Author: kevin.petit.arm@gmail.com
Review URL: https://codereview.chromium.org/104883004
git-svn-id: http://skia.googlecode.com/svn/trunk@12525 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkXfermode.cpp')
-rw-r--r-- | src/core/SkXfermode.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index 313e2aef8c..8cb79c2dbd 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -1669,6 +1669,7 @@ void SkXfermode::Term() { extern SkProcCoeffXfermode* SkPlatformXfermodeFactory(const ProcCoeff& rec, SkXfermode::Mode mode); +extern SkXfermodeProc SkPlatformXfermodeProcFactory(SkXfermode::Mode mode); SkXfermode* SkXfermode::Create(Mode mode) { SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount); @@ -1690,7 +1691,13 @@ SkXfermode* SkXfermode::Create(Mode mode) { SkXfermode* xfer = gCachedXfermodes[mode]; if (NULL == xfer) { - const ProcCoeff& rec = gProcCoeffs[mode]; + ProcCoeff rec = gProcCoeffs[mode]; + + SkXfermodeProc pp = SkPlatformXfermodeProcFactory(mode); + + if (pp != NULL) { + rec.fProc = pp; + } // check if we have a platform optim for that SkProcCoeffXfermode* xfm = SkPlatformXfermodeFactory(rec, mode); |