Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: src/effects/gradients/SkLinearGradient.cpp

Issue 1650653002: SkNx Load/store: take any pointer. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: simplify call sites Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/SkColorMatrixFilter.cpp ('k') | src/opts/SkColorCubeFilter_opts.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkLinearGradient.h" 8 #include "SkLinearGradient.h"
9 9
10 static const float kInv255Float = 1.0f / 255; 10 static const float kInv255Float = 1.0f / 255;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 } 126 }
127 127
128 if (fApplyAlphaAfterInterp) { 128 if (fApplyAlphaAfterInterp) {
129 // Our fColor values are in PMColor order, but are still unpremultiplied , allowing us to 129 // Our fColor values are in PMColor order, but are still unpremultiplied , allowing us to
130 // interpolate in unpremultiplied space first, and then scale by alpha r ight before we 130 // interpolate in unpremultiplied space first, and then scale by alpha r ight before we
131 // convert to SkPMColor bytes. 131 // convert to SkPMColor bytes.
132 const float paintAlpha = ctx.fPaint->getAlpha() * kInv255Float; 132 const float paintAlpha = ctx.fPaint->getAlpha() * kInv255Float;
133 const Sk4f scale(1, 1, 1, paintAlpha); 133 const Sk4f scale(1, 1, 1, paintAlpha);
134 for (int i = 0; i < count; ++i) { 134 for (int i = 0; i < count; ++i) {
135 uint32_t c = SkSwizzle_Color_to_PMColor(shader.fOrigColors[i]); 135 uint32_t c = SkSwizzle_Color_to_PMColor(shader.fOrigColors[i]);
136 rec[i].fColor = SkNx_cast<float>(Sk4b::Load((const uint8_t*)&c)) * s cale; 136 rec[i].fColor = SkNx_cast<float>(Sk4b::Load(&c)) * scale;
137 if (i > 0) { 137 if (i > 0) {
138 SkASSERT(rec[i - 1].fPos <= rec[i].fPos); 138 SkASSERT(rec[i - 1].fPos <= rec[i].fPos);
139 } 139 }
140 } 140 }
141 } else { 141 } else {
142 // Our fColor values are premultiplied, so converting to SkPMColor is ju st a matter 142 // Our fColor values are premultiplied, so converting to SkPMColor is ju st a matter
143 // of converting the floats down to bytes. 143 // of converting the floats down to bytes.
144 unsigned alphaScale = ctx.fPaint->getAlpha() + (ctx.fPaint->getAlpha() > > 7); 144 unsigned alphaScale = ctx.fPaint->getAlpha() + (ctx.fPaint->getAlpha() > > 7);
145 for (int i = 0; i < count; ++i) { 145 for (int i = 0; i < count; ++i) {
146 SkPMColor pmc = SkPreMultiplyColor(shader.fOrigColors[i]); 146 SkPMColor pmc = SkPreMultiplyColor(shader.fOrigColors[i]);
147 pmc = SkAlphaMulQ(pmc, alphaScale); 147 pmc = SkAlphaMulQ(pmc, alphaScale);
148 rec[i].fColor = SkNx_cast<float>(Sk4b::Load((const uint8_t*)&pmc)); 148 rec[i].fColor = SkNx_cast<float>(Sk4b::Load(&pmc));
149 if (i > 0) { 149 if (i > 0) {
150 SkASSERT(rec[i - 1].fPos <= rec[i].fPos); 150 SkASSERT(rec[i - 1].fPos <= rec[i].fPos);
151 } 151 }
152 } 152 }
153 } 153 }
154 } 154 }
155 155
156 #define NO_CHECK_ITER \ 156 #define NO_CHECK_ITER \
157 do { \ 157 do { \
158 unsigned fi = SkGradFixedToFixed(fx) >> SkGradientShaderBase::kCache32Shift; \ 158 unsigned fi = SkGradFixedToFixed(fx) >> SkGradientShaderBase::kCache32Shift; \
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 rec -= 1; 508 rec -= 1;
509 SkASSERT(rec[0].fPos >= 0 && rec[0].fPos <= 1); 509 SkASSERT(rec[0].fPos >= 0 && rec[0].fPos <= 1);
510 SkASSERT(rec[1].fPos >= 0 && rec[1].fPos <= 1); 510 SkASSERT(rec[1].fPos >= 0 && rec[1].fPos <= 1);
511 SkASSERT(rec[0].fPos <= rec[1].fPos); 511 SkASSERT(rec[0].fPos <= rec[1].fPos);
512 } 512 }
513 return rec; 513 return rec;
514 } 514 }
515 515
516 template <bool apply_alpha> SkPMColor trunc_from_255(const Sk4f& x) { 516 template <bool apply_alpha> SkPMColor trunc_from_255(const Sk4f& x) {
517 SkPMColor c; 517 SkPMColor c;
518 SkNx_cast<uint8_t>(x).store((uint8_t*)&c); 518 SkNx_cast<uint8_t>(x).store(&c);
519 if (apply_alpha) { 519 if (apply_alpha) {
520 c = SkPreMultiplyARGB(SkGetPackedA32(c), SkGetPackedR32(c), 520 c = SkPreMultiplyARGB(SkGetPackedA32(c), SkGetPackedR32(c),
521 SkGetPackedG32(c), SkGetPackedB32(c)); 521 SkGetPackedG32(c), SkGetPackedB32(c));
522 } 522 }
523 return c; 523 return c;
524 } 524 }
525 525
526 template <bool apply_alpha> void fill(SkPMColor dst[], int count, 526 template <bool apply_alpha> void fill(SkPMColor dst[], int count,
527 const Sk4f& c4, const Sk4f& c4other) { 527 const Sk4f& c4, const Sk4f& c4other) {
528 sk_memset32_dither(dst, trunc_from_255<apply_alpha>(c4), 528 sk_memset32_dither(dst, trunc_from_255<apply_alpha>(c4),
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 } 741 }
742 } else { 742 } else {
743 if (fApplyAlphaAfterInterp) { 743 if (fApplyAlphaAfterInterp) {
744 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe r); 744 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe r);
745 } else { 745 } else {
746 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith er); 746 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith er);
747 } 747 }
748 } 748 }
749 } 749 }
750 750
OLDNEW
« no previous file with comments | « src/effects/SkColorMatrixFilter.cpp ('k') | src/opts/SkColorCubeFilter_opts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698