History log of /external/skia/src/opts/SkXfermode_opts.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
cd71f115a846332d95b29fbeed3f315d8c01753d 23-Aug-2017 Mike Klein <mtklein@chromium.org> make SkOpts functions inline, not static

When Skia's built with an interestingly advanced instruction set
baseline like SSSE3 or SSE4.1, we end up with two distinct copies of
some SkOpts functions, one default in SkOpts.o and one specialization
from SkOpts_{ssse3,sse41}.o. These functions are static, and so are
technically unrelated, even though they're the same code compiled with
the same instructions available. They're going to be identical.

What we want here is to remove static but mark them as inline instead.
In this case inline means "if the linker sees multiple copies of this,
that's cool, just pick any one arbitrarily". That's just what we want.

Now, when I disassemble a binary before and after this change, I do see
the redundant routines removed. However, the file size change is
minimal... I suspect that this must mean the linker has noticed that we
had identical code and physically folded the two logically independent
routines. I don't know how prevalent this optimization is, though, so
it doesn't hurt to give it more of a "one copy please" hint with inline.
There may also be a difference here between the binary size (~unchanged)
and the in-memory layout of that binary?

Change-Id: Id9c8f0ffc84aa1c9a066c22b623d34adab281857
Reviewed-on: https://skia-review.googlesource.com/37501
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
/external/skia/src/opts/SkXfermode_opts.h
ce9514c6cd91c7225ec0d7ccfffd1d964cb1ac6a 12-Jun-2017 Mike Reed <reed@google.com> remove unneeded proc fields

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
Bug: skia:
Change-Id: Ibf997c8d19a045d41d3e92b8db63c36f8fa10b3e
Reviewed-on: https://skia-review.googlesource.com/19441
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
/external/skia/src/opts/SkXfermode_opts.h
f066ac908eca30af2bb2fb241fb0eec78caa88db 09-Jun-2017 Mike Reed <reed@google.com> replace 4f procs with pipeline (only called in 2 places by ganesh)

enables lots of code to delete

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
Bug: skia:
Change-Id: I13631ead68a9232bd8c13c5ef54727f44def26ca
Reviewed-on: https://skia-review.googlesource.com/19278
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
/external/skia/src/opts/SkXfermode_opts.h
1608a1dd17187aeeada376e710ecfafb1e229af2 06-Jun-2017 Mike Reed <reed@google.com> remove unused xfermode methods

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
Bug: skia:
Change-Id: Ibc7d581bcc40134ee7cf57bb65fee2d70e119bc7
Reviewed-on: https://skia-review.googlesource.com/18842
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
/external/skia/src/opts/SkXfermode_opts.h
7d954ad797176afedb9262fdea4507d0fc60eb9d 28-Oct-2016 Mike Reed <reed@google.com> remove xfermode from public api

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4020

CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I19cd056f2af778f10e8c6c2b7b2735593b43dbac
Reviewed-on: https://skia-review.googlesource.com/4020
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
/external/skia/src/opts/SkXfermode_opts.h
f8f90e4a85638faa18e7b4133cfe4d1ff5b1b23e 21-Mar-2016 mtklein <mtklein@chromium.org> SkNx refresh

- rearrange a bit
- fewer macros
- hooks for all operators
- add left and right scalar operator overrides
- add +=, &=, <<=, etc.
- add SkNx_split() and SkNx_join()
- simplify the many rsqrt() and invert() options to just what we actually use

This refactoring pointed out that our float <-> int NEON conversions are not specialized, so I've implemented them. It seems nice that this is an error rather than silently falling back to serial code.

It's unclear to me if split/join want to be external, static methods, or non-static methods (SkNx_join(), Sk4f::Join(), x.join()). Time will tell?

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1812233003
CQ_EXTRA_TRYBOTS=client.skia.android:Test-Android-GCC-Nexus5-CPU-NEON-Arm7-Release-Trybot;client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1812233003
/external/skia/src/opts/SkXfermode_opts.h
7c249e531900929c2fe2cdde76619fa6d2538c49 21-Feb-2016 mtklein <mtklein@chromium.org> SkNx: kth<...>() -> [...]

Just some syntax cleanup. No real change: kth<...>() was calling [...] already.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1714363002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1714363002
/external/skia/src/opts/SkXfermode_opts.h
e4c0beed744d09dae4757c1893d8caa64ee09cd2 09-Feb-2016 mtklein <mtklein@chromium.org> sknx refactoring

- trim unused specializations (Sk4i, Sk2d) and apis (SkNx_dup)
- expand apis a little
* v[0] == v.kth<0>()
* SkNx_shuffle can now convert to different-sized vectors, e.g. Sk2f <-> Sk4f
- remove anonymous namespace

I believe it's safe to remove the anonymous namespace right now.
We're worried about violating the One Definition Rule; the anonymous namespace protected us from that.

In Release builds, this is mostly moot, as everything tends to inline completely.
In Debug builds, violating the ODR is at worst an inconvenience, time spent trying to figure out why the bot is broken.

Now that we're building with SSE2/NEON everywhere, very few bots have even a chance about getting confused by two definitions of the same type or function. Where we do compile variants depending on, e.g., SSSE3, we do so in static inline functions. These are not subject to the ODR.

I plan to follow up with a tedious .kth<...>() -> [...] auto-replace.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1683543002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1683543002
/external/skia/src/opts/SkXfermode_opts.h
e721a8e883231af1878772ecd23be325113fcc48 07-Feb-2016 mtklein <mtklein@chromium.org> flags and hacks to get MSAN bot going

This disables a few tests in DM:
- one BlurLargeImage GM maybe is really broken
- FontMgrAndroidParser uses libexpat, which I've not (yet?) built from source,
so MSAN can't see into it.

This extends some of the MSAN stifling we added around SkImageDecoder_libjpeg to SkCodec, and skips .wbmps, .pngs, and .bmps. We're only seeing issues in colortables for .png and .bmp.

I think I can probably back out disabling Codec and the RAW image decodes...
they should all be covered by the libjpeg stifles.

BUG=skia:4550,skia:4900
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1673663002

CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN-Trybot

TBR=msarett@google.com

Review URL: https://codereview.chromium.org/1673663002
/external/skia/src/opts/SkXfermode_opts.h
507ef6d68115ae9e6d884bb36436a1463523d893 31-Jan-2016 mtklein <mtklein@chromium.org> SkNx Load/store: take any pointer.

This means we can remove a lot of explicit casts in code that uses SkNx.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1650653002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1650653002
/external/skia/src/opts/SkXfermode_opts.h
d9c0037211e1ae56c7b9628e69659e7f3df9081d 08-Jan-2016 mtklein <mtklein@chromium.org> Clean up order of arguments to d,s[,aa].

This gets rid of those unsightly lambdas,
and makes the file more consistent both with itself and with Sk4px.

BUG=skia:4765
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1569373002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1569373002
/external/skia/src/opts/SkXfermode_opts.h
defa0daa6a0f4e97a3527a522ae602c6771a7c80 08-Jan-2016 mtklein <mtklein@chromium.org> Clean up SkXfermode_opts.h

It seems that MSVC + __vectorcall don't play well together,
so back ourselves out into a situation where we don't need it.

- Inline transfermode functions. This removes the need for SK_VECTORCALL.
- Remove 565 destination specializations.
Blending into 565 is not speed-critical enough to merit the code bloat.
- Removing 565 specializations means a bunch of Sk4px code is now dead.

8888 xfermodes generally speed up a bit from inlining, smoothly ranging from no change down to 0.65x for the fastest functions like Plus or Modulate.

565 xfermodes generally slow down because we're doing 565 -> 8888 and 8888->565 conversion serially[1] and using the stack, smoothly ranging from no change up to 2x slower for the fastest functions like Plus and Modulate.

[1] the 565->8888 conversion is actually being autovectorized

BUG=skia:4765,skia:4776
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1565223002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

No public API changes.
TBR=reed@google.com

Review URL: https://codereview.chromium.org/1565223002
/external/skia/src/opts/SkXfermode_opts.h
6f37b4a4757ea3eb00c76162cc37f8a56c3b8bdb 14-Dec-2015 mtklein <mtklein@chromium.org> Unify some SkNx code

- one base case and one N=1 case instead of two each (or three with doubles)
- use SkNx_cast instead of FromBytes/toBytes
- 4-at-a-time Sk4f::ToBytes becomes a special standalone Sk4f_ToBytes

If I did everything right, this'll be perf- and pixel- neutral.

https://gold.skia.org/search2?issue=1526523003&unt=true&query=source_type%3Dgm&master=false

BUG=skia:
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1526523003
/external/skia/src/opts/SkXfermode_opts.h
29d60e5ab594b39d1f533bff090877b1bb821e06 19-Nov-2015 mtklein <mtklein@chromium.org> Revert float xfermodes back to Sk4f (from Sk8f).

Generally this was a performance win, even on devices without AVX due
to unrolling, but on ARM+NEON it looks like that unrolling hurt a bit.

while (...) { blend a pixel }
~~~>
while (...) { blend two pixels }
if (n % 2) { blend last pixel }

BUG=chromium:555278
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1465483002
/external/skia/src/opts/SkXfermode_opts.h
084db25d47dbad3ffbd7d15c04b63d344b351f90 11-Nov-2015 mtklein <mtklein@chromium.org> float xfermodes (burn, dodge, softlight) in Sk8f, possibly using AVX.

Xfermode_ColorDodge_aa 10.3ms -> 7.85ms 0.76x
Xfermode_SoftLight_aa 13.8ms -> 10.2ms 0.74x
Xfermode_ColorBurn_aa 10.7ms -> 7.82ms 0.73x
Xfermode_SoftLight 33.6ms -> 23.2ms 0.69x
Xfermode_ColorDodge 25ms -> 16.5ms 0.66x
Xfermode_ColorBurn 26.1ms -> 16.6ms 0.63x

Ought to be no pixel diffs:
https://gold.skia.org/search2?issue=1432903002&unt=true&query=source_type%3Dgm&master=false

Incidental stuff:

I made the SkNx(T) constructors implicit to make writing math expressions simpler.
This allows us to write expressions like
Sk4f v;
...
v = v*4;
rather than
Sk4f v;
...
v = v * Sk4f(4);

As written it only works when the constant is on the right-hand side,
so expressions like `(Sk4f(1) - da)` have to stay for now. I plan on
following up with a CL that lets those become `(1 - da)` too.

BUG=skia:4117
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review URL: https://codereview.chromium.org/1432903002
/external/skia/src/opts/SkXfermode_opts.h
a1c0ee40040fa8bb06f5f68ba4bcb3a68f789924 10-Sep-2015 mtklein <mtklein@chromium.org> SkNx_shuffle

This allows us to express shuffles more directly in code while also giving us a
convenient point to platform-specify particular shuffles for particular types.

No specializations yet. Everyone just uses the (pretty good) default option.

BUG=skia:

Review URL: https://codereview.chromium.org/1301413006
/external/skia/src/opts/SkXfermode_opts.h
dde03ff89f58d7df9b9e37ca06c2ce8ea67ec7a2 01-Sep-2015 mtklein <mtklein@chromium.org> Clean up remaining users of SkPMFloat

This switches over SkXfermodes_opts.h and SkColorMatrixFilter to use Sk4f,
and converts the SkPMFloat benches to Sk4f benches.

No pixels should change here, and no code beyond the Sk4f_ benches should change speed.
The benches are faster than the old versions.

BUG=skia:4117

Review URL: https://codereview.chromium.org/1324743002
/external/skia/src/opts/SkXfermode_opts.h
96fcdcc219d2a0d3579719b84b28bede76efba64 27-Aug-2015 halcanary <halcanary@google.com> Style Change: NULL->nullptr
DOCS_PREVIEW= https://skia.org/?cl=1316233002

Review URL: https://codereview.chromium.org/1316233002
/external/skia/src/opts/SkXfermode_opts.h
385fe4d4b62d7d1dd76116dd570df3290a2f487b 26-Aug-2015 halcanary <halcanary@google.com> Style Change: SkNEW->new; SkDELETE->delete
DOCS_PREVIEW= https://skia.org/?cl=1316123003

Review URL: https://codereview.chromium.org/1316123003
/external/skia/src/opts/SkXfermode_opts.h
08f9234eaafcda33ebf5e74ec27ca72f4abda4fb 18-Aug-2015 mtklein <mtklein@chromium.org> Try again to put SkXfermode_opts in SK_OPTS_NS

Remember failed attempt https://codereview.chromium.org/1286093004/ ? I think this one is simpler and safer and even technically legal C++.

BUG=skia:4117

Review URL: https://codereview.chromium.org/1296183004
/external/skia/src/opts/SkXfermode_opts.h
5a16cf654548190841b5af27af04e7995582ad7b 13-Aug-2015 mtklein <mtklein@chromium.org> Normalize SkXfermode_opts.h argument order as d,s[,aa].

At head they're s,d[,aa] in SkXfermode_opts.h but Sk4px::Map* expect d,s[,aa]
so we ended up having to write weird little lambda shims to match impedance.

There's no reason for these to disagree, and d,s[,aa] is the One True Order
(because no matter what you're doing in graphics, there's always a dst).

Should be no perf or image diff, though I'm suspicious it might help MSVC code generation.

BUG=skia:4117

Committed: https://skia.googlesource.com/skia/+/6028a8476504022fe40b6870b1460b5e4a80969f

CQ_EXTRA_TRYBOTS=client.skia:Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86-Release-Trybot

Review URL: https://codereview.chromium.org/1289903002
/external/skia/src/opts/SkXfermode_opts.h
0010945335b497ee08ef12e1ce862ff2fefb8e01 12-Aug-2015 mtklein <mtklein@google.com> Revert of Normalize SkXfermode_opts.h argument order as d,s[,aa]. (patchset #1 id:1 of https://codereview.chromium.org/1289903002/ )

Reason for revert:
?

Original issue's description:
> Normalize SkXfermode_opts.h argument order as d,s[,aa].
>
> At head they're s,d[,aa] in SkXfermode_opts.h but Sk4px::Map* expect d,s[,aa]
> so we ended up having to write weird little lambda shims to match impedance.
>
> There's no reason for these to disagree, and d,s[,aa] is the One True Order
> (because no matter what you're doing in graphics, there's always a dst).
>
> Should be no perf or image diff, though I'm suspicious it might help MSVC code generation.
>
> BUG=skia:4117
>
> Committed: https://skia.googlesource.com/skia/+/6028a8476504022fe40b6870b1460b5e4a80969f

TBR=djsollen@google.com,mtklein@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:4117

Review URL: https://codereview.chromium.org/1284363002
/external/skia/src/opts/SkXfermode_opts.h
082e329887a8f1efe4e1020f0a0a6ea09961712d 12-Aug-2015 mtklein <mtklein@google.com> Revert of Refactor to put SkXfermode_opts inside SK_OPTS_NS. (patchset #1 id:1 of https://codereview.chromium.org/1286093004/ )

Reason for revert:
Maybe causing test / gold problems?

Original issue's description:
> Refactor to put SkXfermode_opts inside SK_OPTS_NS.
>
> Without this refactor I was getting warnings previously about having code
> inside namespace SK_OPTS_NS (e.g. namespace sse2, namespace neon) referring to
> code inside an anonymous namespace (Sk4px, SkPMFloat, Sk4f, etc) [1].
>
> That low-level code was in an anonymous namespace to allow multiple independent
> copies of its methods to be instantiated without the linker getting confused /
> offended about violating the One Definition Rule. This was only happening in
> Debug mode where the methods were not being inlined.
>
> To fix this all, I've force-inlined the methods of the low-level code and
> removed the anonymous namespace.
>
> BUG=skia:4117
>
>
> [1] Here is what those errors looked like:
>
> In file included from ../../../../src/core/SkOpts.cpp:18:0:
> ../../../../src/opts/SkXfermode_opts.h:193:7: error: 'portable::Sk4pxXfermode' has a field 'portable::Sk4pxXfermode::fProc4' whose type uses the anonymous namespace [-Werror]
> class Sk4pxXfermode : public SkProcCoeffXfermode {
> ^
> ../../../../src/opts/SkXfermode_opts.h:193:7: error: 'portable::Sk4pxXfermode' has a field 'portable::Sk4pxXfermode::fAAProc4' whose type uses the anonymous namespace [-Werror]
> ../../../../src/opts/SkXfermode_opts.h:235:7: error: 'portable::SkPMFloatXfermode' has a field 'portable::SkPMFloatXfermode::fProcF' whose type uses the anonymous namespace [-Werror]
> class SkPMFloatXfermode : public SkProcCoeffXfermode {
> ^
> cc1plus: all warnings being treated as errors
>
> Committed: https://skia.googlesource.com/skia/+/b07bee3121680b53b98b780ac08d14d374dd4c6f

TBR=djsollen@google.com,mtklein@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:4117

Review URL: https://codereview.chromium.org/1284333002
/external/skia/src/opts/SkXfermode_opts.h
6028a8476504022fe40b6870b1460b5e4a80969f 12-Aug-2015 mtklein <mtklein@chromium.org> Normalize SkXfermode_opts.h argument order as d,s[,aa].

At head they're s,d[,aa] in SkXfermode_opts.h but Sk4px::Map* expect d,s[,aa]
so we ended up having to write weird little lambda shims to match impedance.

There's no reason for these to disagree, and d,s[,aa] is the One True Order
(because no matter what you're doing in graphics, there's always a dst).

Should be no perf or image diff, though I'm suspicious it might help MSVC code generation.

BUG=skia:4117

Review URL: https://codereview.chromium.org/1289903002
/external/skia/src/opts/SkXfermode_opts.h
b07bee3121680b53b98b780ac08d14d374dd4c6f 12-Aug-2015 mtklein <mtklein@chromium.org> Refactor to put SkXfermode_opts inside SK_OPTS_NS.

Without this refactor I was getting warnings previously about having code
inside namespace SK_OPTS_NS (e.g. namespace sse2, namespace neon) referring to
code inside an anonymous namespace (Sk4px, SkPMFloat, Sk4f, etc) [1].

That low-level code was in an anonymous namespace to allow multiple independent
copies of its methods to be instantiated without the linker getting confused /
offended about violating the One Definition Rule. This was only happening in
Debug mode where the methods were not being inlined.

To fix this all, I've force-inlined the methods of the low-level code and
removed the anonymous namespace.

BUG=skia:4117

[1] Here is what those errors looked like:

In file included from ../../../../src/core/SkOpts.cpp:18:0:
../../../../src/opts/SkXfermode_opts.h:193:7: error: 'portable::Sk4pxXfermode' has a field 'portable::Sk4pxXfermode::fProc4' whose type uses the anonymous namespace [-Werror]
class Sk4pxXfermode : public SkProcCoeffXfermode {
^
../../../../src/opts/SkXfermode_opts.h:193:7: error: 'portable::Sk4pxXfermode' has a field 'portable::Sk4pxXfermode::fAAProc4' whose type uses the anonymous namespace [-Werror]
../../../../src/opts/SkXfermode_opts.h:235:7: error: 'portable::SkPMFloatXfermode' has a field 'portable::SkPMFloatXfermode::fProcF' whose type uses the anonymous namespace [-Werror]
class SkPMFloatXfermode : public SkProcCoeffXfermode {
^
cc1plus: all warnings being treated as errors

Review URL: https://codereview.chromium.org/1286093004
/external/skia/src/opts/SkXfermode_opts.h
dce5ce4276e2825efc6d8c4daa819c965794cd12 04-Aug-2015 mtklein <mtklein@chromium.org> Port SkBlurImage opts to SkOpts.

+268 -535 lines

I also rearranged the code a little bit to encapsulate itself better,
mostly replacing static helper functions with lambdas. This also
let me merge the SSE2 and SSE4.1 code paths.

BUG=skia:4117

Review URL: https://codereview.chromium.org/1264103004
/external/skia/src/opts/SkXfermode_opts.h
490b61569d27c9b7ba164fbc4394994d2e7cb022 31-Jul-2015 mtklein <mtklein@chromium.org> Port SkXfermode opts to SkOpts.h

Renames Sk4pxXfermode.h to SkXfermode_opts.h,
and refactors it a tiny bit internally.

This moves xfermode optimization from being "compile-time everywhere but NEON"
to simply "runtime everywhere". I don't anticipate any effect on perf or
correctness.

BUG=skia:4117

Review URL: https://codereview.chromium.org/1264543006
/external/skia/src/opts/SkXfermode_opts.h