Index: src/effects/gradients/SkRadialGradient.cpp |
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp |
index bf3c821f6b7a463cdb0eab7a31f7aea2c5ebeece..b25a8750a2329cf799528f3c3c217151c2858e78 100644 |
--- a/src/effects/gradients/SkRadialGradient.cpp |
+++ b/src/effects/gradients/SkRadialGradient.cpp |
@@ -8,7 +8,6 @@ |
#include "SkRadialGradient.h" |
#include "SkRadialGradient_Table.h" |
-#include "SkNx.h" |
#define kSQRT_TABLE_BITS 11 |
#define kSQRT_TABLE_SIZE (1 << kSQRT_TABLE_BITS) |
@@ -271,16 +270,13 @@ |
namespace { |
inline bool radial_completely_pinned(int fx, int dx, int fy, int dy) { |
- // fast, overly-conservative test: checks unit square instead of unit circle |
- bool xClamped = (fx >= SK_FixedHalf && dx >= 0) || (fx <= -SK_FixedHalf && dx <= 0); |
- bool yClamped = (fy >= SK_FixedHalf && dy >= 0) || (fy <= -SK_FixedHalf && dy <= 0); |
- return xClamped || yClamped; |
-} |
- |
-inline bool radial_completely_pinned(SkScalar fx, SkScalar dx, SkScalar fy, SkScalar dy) { |
- // fast, overly-conservative test: checks unit square instead of unit circle |
- bool xClamped = (fx >= 1 && dx >= 0) || (fx <= -1 && dx <= 0); |
- bool yClamped = (fy >= 1 && dy >= 0) || (fy <= -1 && dy <= 0); |
+ // fast, overly-conservative test: checks unit square instead |
+ // of unit circle |
+ bool xClamped = (fx >= SK_FixedHalf && dx >= 0) || |
+ (fx <= -SK_FixedHalf && dx <= 0); |
+ bool yClamped = (fy >= SK_FixedHalf && dy >= 0) || |
+ (fy <= -SK_FixedHalf && dy <= 0); |
+ |
return xClamped || yClamped; |
} |
@@ -377,70 +373,6 @@ |
} |
} |
-// TODO: can we get away with 0th approximatino of inverse-sqrt (i.e. faster than rsqrt)? |
-// seems like ~10bits is more than enough for our use, since we want a byte-index |
-static inline Sk4f fast_sqrt(const Sk4f& R) { |
- return R * R.rsqrt(); |
-} |
- |
-static inline Sk4f sum_squares(const Sk4f& a, const Sk4f& b) { |
- return a * a + b * b; |
-} |
- |
-void shadeSpan_radial_clamp2(SkScalar sfx, SkScalar sdx, SkScalar sfy, SkScalar sdy, |
- SkPMColor* SK_RESTRICT dstC, const SkPMColor* SK_RESTRICT cache, |
- int count, int toggle) { |
- if (radial_completely_pinned(sfx, sdx, sfy, sdy)) { |
- unsigned fi = SkGradientShaderBase::kCache32Count - 1; |
- sk_memset32_dither(dstC, |
- cache[toggle + fi], |
- cache[next_dither_toggle(toggle) + fi], |
- count); |
- } else { |
- const Sk4f max(255); |
- const float scale = 255; |
- sfx *= scale; |
- sfy *= scale; |
- sdx *= scale; |
- sdy *= scale; |
- const Sk4f fx4(sfx, sfx + sdx, sfx + 2*sdx, sfx + 3*sdx); |
- const Sk4f fy4(sfy, sfy + sdy, sfy + 2*sdy, sfy + 3*sdy); |
- const Sk4f dx4(sdx * 4); |
- const Sk4f dy4(sdy * 4); |
- |
- Sk4f tmpxy = fx4 * dx4 + fy4 * dy4; |
- Sk4f tmpdxdy = sum_squares(dx4, dy4); |
- Sk4f R = sum_squares(fx4, fy4); |
- Sk4f dR = tmpxy + tmpxy + tmpdxdy; |
- const Sk4f ddR = tmpdxdy + tmpdxdy; |
- |
- for (int i = 0; i < (count >> 2); ++i) { |
- Sk4f dist = Sk4f::Min(fast_sqrt(R), max); |
- R += dR; |
- dR += ddR; |
- |
- int fi[4]; |
- dist.castTrunc().store(fi); |
- |
- for (int i = 0; i < 4; i++) { |
- *dstC++ = cache[toggle + fi[i]]; |
- toggle = next_dither_toggle(toggle); |
- } |
- } |
- count &= 3; |
- if (count) { |
- Sk4f dist = Sk4f::Min(fast_sqrt(R), max); |
- |
- int fi[4]; |
- dist.castTrunc().store(fi); |
- for (int i = 0; i < count; i++) { |
- *dstC++ = cache[toggle + fi[i]]; |
- toggle = next_dither_toggle(toggle); |
- } |
- } |
- } |
-} |
- |
// Unrolling this loop doesn't seem to help (when float); we're stalling to |
// get the results of the sqrt (?), and don't have enough extra registers to |
// have many in flight. |
@@ -475,11 +407,6 @@ |
void SkRadialGradient::RadialGradientContext::shadeSpan(int x, int y, |
SkPMColor* SK_RESTRICT dstC, int count) { |
-#ifdef SK_SUPPORT_LEGACY_RADIAL_GRADIENT_SQRT |
- const bool use_new_proc = false; |
-#else |
- const bool use_new_proc = true; |
-#endif |
SkASSERT(count > 0); |
const SkRadialGradient& radialGradient = static_cast<const SkRadialGradient&>(fShader); |
@@ -508,7 +435,7 @@ |
RadialShadeProc shadeProc = shadeSpan_radial_repeat; |
if (SkShader::kClamp_TileMode == radialGradient.fTileMode) { |
- shadeProc = use_new_proc ? shadeSpan_radial_clamp2 : shadeSpan_radial_clamp; |
+ shadeProc = shadeSpan_radial_clamp; |
} else if (SkShader::kMirror_TileMode == radialGradient.fTileMode) { |
shadeProc = shadeSpan_radial_mirror; |
} else { |