diff options
author | Mike Klein <mtklein@chromium.org> | 2017-05-17 09:54:36 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-05-17 15:10:55 +0000 |
commit | 68768170290d52db829e02459b24fbfb1c0a1929 (patch) | |
tree | 38358e50df327fdfe5e89b8c0112e146c6dae70f /src | |
parent | 861a90f3e55546e583d4f3b5fb355c317babcec7 (diff) |
scalarize SkGradientShader stop setup
One of Clankium's GCC 4.9 builds is crashing when compiling the
existing Sk4f version, so let's try ordinary scalar math.
BUG=chromium:721682
Change-Id: Ie37bf530ada537363119acd31814ae46cd3adf73
Reviewed-on: https://skia-review.googlesource.com/17210
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index 0d380d78d3..0c6788dbf8 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -369,8 +369,19 @@ static void add_const_color(SkJumper_GradientCtx* ctx, size_t stop, SkPM4f color // the stop. Assume that the distance between stops is 1/gapCount. static void init_stop_evenly( SkJumper_GradientCtx* ctx, float gapCount, size_t stop, SkPM4f c_l, SkPM4f c_r) { - auto Fs = SkPM4f::From4f((c_r.to4f() - c_l.to4f()) * gapCount); - auto Bs = SkPM4f::From4f(c_l.to4f() - (Fs.to4f() * (stop/gapCount))); + // Clankium's GCC 4.9 targeting ARMv7 is barfing when we use Sk4f math here, so go scalar... + SkPM4f Fs = {{ + (c_r.r() - c_l.r()) * gapCount, + (c_r.g() - c_l.g()) * gapCount, + (c_r.b() - c_l.b()) * gapCount, + (c_r.a() - c_l.a()) * gapCount, + }}; + SkPM4f Bs = {{ + c_l.r() - Fs.r()*(stop/gapCount), + c_l.g() - Fs.g()*(stop/gapCount), + c_l.b() - Fs.b()*(stop/gapCount), + c_l.a() - Fs.a()*(stop/gapCount), + }}; add_stop_color(ctx, stop, Fs, Bs); } @@ -378,8 +389,19 @@ static void init_stop_evenly( // for any t between stops n and n+1, the color we want is B[n] + F[n]*t. static void init_stop_pos( SkJumper_GradientCtx* ctx, size_t stop, float t_l, float t_r, SkPM4f c_l, SkPM4f c_r) { - auto Fs = SkPM4f::From4f((c_r.to4f() - c_l.to4f()) / (t_r - t_l)); - auto Bs = SkPM4f::From4f(c_l.to4f() - (Fs.to4f() * t_l)); + // See note about Clankium's old compiler in init_stop_evenly(). + SkPM4f Fs = {{ + (c_r.r() - c_l.r()) / (t_r - t_l), + (c_r.g() - c_l.g()) / (t_r - t_l), + (c_r.b() - c_l.b()) / (t_r - t_l), + (c_r.a() - c_l.a()) / (t_r - t_l), + }}; + SkPM4f Bs = {{ + c_l.r() - Fs.r()*t_l, + c_l.g() - Fs.g()*t_l, + c_l.b() - Fs.b()*t_l, + c_l.a() - Fs.a()*t_l, + }}; ctx->ts[stop] = t_l; add_stop_color(ctx, stop, Fs, Bs); } |