aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-05-17 09:54:36 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-17 15:10:55 +0000
commit68768170290d52db829e02459b24fbfb1c0a1929 (patch)
tree38358e50df327fdfe5e89b8c0112e146c6dae70f /src
parent861a90f3e55546e583d4f3b5fb355c317babcec7 (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.cpp30
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);
}