From 67383fcfc1adc5ef14965e85fa9a24f56919e696 Mon Sep 17 00:00:00 2001 From: reed Date: Tue, 5 May 2015 07:55:19 -0700 Subject: remove dead code for SK_SUPPORT_LEGACY_RADIAL_GRADIENT_SQRT BUG=skia: TBR= Review URL: https://codereview.chromium.org/1122933002 --- src/effects/gradients/SkRadialGradient.cpp | 102 +---------------------------- 1 file changed, 1 insertion(+), 101 deletions(-) (limited to 'src/effects/gradients/SkRadialGradient.cpp') diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index 71d2b4d308..bc2d15ab6b 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -270,13 +270,6 @@ void SkRadialGradient::flatten(SkWriteBuffer& buffer) const { 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); @@ -284,99 +277,11 @@ inline bool radial_completely_pinned(SkScalar fx, SkScalar dx, SkScalar fy, SkSc return xClamped || yClamped; } -// Return true if (fx * fy) is always inside the unit circle -// SkPin32 is expensive, but so are all the SkFixedMul in this test, -// so it shouldn't be run if count is small. -inline bool no_need_for_radial_pin(int fx, int dx, - int fy, int dy, int count) { - SkASSERT(count > 0); - if (SkAbs32(fx) > 0x7FFF || SkAbs32(fy) > 0x7FFF) { - return false; - } - if (fx*fx + fy*fy > 0x7FFF*0x7FFF) { - return false; - } - fx += (count - 1) * dx; - fy += (count - 1) * dy; - if (SkAbs32(fx) > 0x7FFF || SkAbs32(fy) > 0x7FFF) { - return false; - } - return fx*fx + fy*fy <= 0x7FFF*0x7FFF; -} - -#define UNPINNED_RADIAL_STEP \ - fi = (fx * fx + fy * fy) >> (14 + 16 - kSQRT_TABLE_BITS); \ - *dstC++ = cache[toggle + \ - (sqrt_table[fi] >> SkGradientShaderBase::kSqrt32Shift)]; \ - toggle = next_dither_toggle(toggle); \ - fx += dx; \ - fy += dy; - typedef void (* RadialShadeProc)(SkScalar sfx, SkScalar sdx, SkScalar sfy, SkScalar sdy, SkPMColor* dstC, const SkPMColor* cache, int count, int toggle); -// On Linux, this is faster with SkPMColor[] params than SkPMColor* SK_RESTRICT -void shadeSpan_radial_clamp(SkScalar sfx, SkScalar sdx, - SkScalar sfy, SkScalar sdy, - SkPMColor* SK_RESTRICT dstC, const SkPMColor* SK_RESTRICT cache, - int count, int toggle) { - // Floating point seems to be slower than fixed point, - // even when we have float hardware. - const uint8_t* SK_RESTRICT sqrt_table = gSqrt8Table; - SkFixed fx = SkScalarToFixed(sfx) >> 1; - SkFixed dx = SkScalarToFixed(sdx) >> 1; - SkFixed fy = SkScalarToFixed(sfy) >> 1; - SkFixed dy = SkScalarToFixed(sdy) >> 1; - if ((count > 4) && radial_completely_pinned(fx, dx, fy, dy)) { - unsigned fi = SkGradientShaderBase::kCache32Count - 1; - sk_memset32_dither(dstC, - cache[toggle + fi], - cache[next_dither_toggle(toggle) + fi], - count); - } else if ((count > 4) && - no_need_for_radial_pin(fx, dx, fy, dy, count)) { - unsigned fi; - // 4x unroll appears to be no faster than 2x unroll on Linux - while (count > 1) { - UNPINNED_RADIAL_STEP; - UNPINNED_RADIAL_STEP; - count -= 2; - } - if (count) { - UNPINNED_RADIAL_STEP; - } - } else { - // Specializing for dy == 0 gains us 25% on Skia benchmarks - if (dy == 0) { - unsigned yy = SkPin32(fy, -0xFFFF >> 1, 0xFFFF >> 1); - yy *= yy; - do { - unsigned xx = SkPin32(fx, -0xFFFF >> 1, 0xFFFF >> 1); - unsigned fi = (xx * xx + yy) >> (14 + 16 - kSQRT_TABLE_BITS); - fi = SkFastMin32(fi, 0xFFFF >> (16 - kSQRT_TABLE_BITS)); - *dstC++ = cache[toggle + (sqrt_table[fi] >> - SkGradientShaderBase::kSqrt32Shift)]; - toggle = next_dither_toggle(toggle); - fx += dx; - } while (--count != 0); - } else { - do { - unsigned xx = SkPin32(fx, -0xFFFF >> 1, 0xFFFF >> 1); - unsigned fi = SkPin32(fy, -0xFFFF >> 1, 0xFFFF >> 1); - fi = (xx * xx + fi * fi) >> (14 + 16 - kSQRT_TABLE_BITS); - fi = SkFastMin32(fi, 0xFFFF >> (16 - kSQRT_TABLE_BITS)); - *dstC++ = cache[toggle + (sqrt_table[fi] >> - SkGradientShaderBase::kSqrt32Shift)]; - toggle = next_dither_toggle(toggle); - fx += dx; - fy += dy; - } while (--count != 0); - } - } -} - static inline Sk4f fast_sqrt(const Sk4f& R) { // R * R.rsqrt0() is much faster, but it's non-monotonic, which isn't so pretty for gradients. return R * R.rsqrt1(); @@ -474,11 +379,6 @@ void shadeSpan_radial_repeat(SkScalar fx, SkScalar dx, SkScalar fy, SkScalar dy, 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(fShader); @@ -507,7 +407,7 @@ void SkRadialGradient::RadialGradientContext::shadeSpan(int x, int y, RadialShadeProc shadeProc = shadeSpan_radial_repeat; if (SkShader::kClamp_TileMode == radialGradient.fTileMode) { - shadeProc = use_new_proc ? shadeSpan_radial_clamp2 : shadeSpan_radial_clamp; + shadeProc = shadeSpan_radial_clamp2; } else if (SkShader::kMirror_TileMode == radialGradient.fTileMode) { shadeProc = shadeSpan_radial_mirror; } else { -- cgit v1.2.3