565 support for SIMD xfermodes
authormtklein <mtklein@chromium.org>
Wed, 22 Jul 2015 00:23:39 +0000 (17:23 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 22 Jul 2015 00:23:39 +0000 (17:23 -0700)
commit860dcaa2ddfdadc050af4f943a84a9d499315066
tree6265529dc51587c301017e2f9f54c059cd65629d
parentc71239b9ff7d8c19dc03cb6c9081e7dc4e0947d2
565 support for SIMD xfermodes

This uses the most basic approach possible:
  - to load an Sk4px from 565, convert to SkPMColors on the stack serially then load those SkPMColors.
  - to store an Sk4px to 565, store to SkPMColors on the stack then convert to 565 serially.

Clearly, we can optimize these loads and stores.  That's a TODO.

The code using SkPMFloat is the same idea but a little more long-term viable, as we're only operating on one pixel at a time anyway.  We could probably write 565 <-> SkPMFloat methods, but I'd rather not until it's really compelling.

The speedups are varied but similar across SSE and NEON: a few uninteresting, many 50% faster, some 2x faster, and SoftLight ~4x faster.

This will cause minor GM diffs, but I don't think any layout test changes.

BUG=skia:

Committed: https://skia.googlesource.com/skia/+/942930dcaa51f66d82cdaf46ae62efebd16c8cd0

Review URL: https://codereview.chromium.org/1245673002
src/core/Sk4px.h
src/core/Sk4pxXfermode.h
src/opts/Sk4px_NEON.h
src/opts/Sk4px_SSE2.h
src/opts/Sk4px_none.h