diff --git a/src/opts/SkBitmapFilter_opts_SSE2.cpp b/src/opts/SkBitmapFilter_opts_SSE2.cpp index b040566921..b831e298d0 100644 --- a/src/opts/SkBitmapFilter_opts_SSE2.cpp +++ b/src/opts/SkBitmapFilter_opts_SSE2.cpp @@ -108,74 +108,6 @@ void highQualityFilter_SSE2(const SkBitmapProcState& s, int x, int y, } } -void highQualityFilter_ScaleOnly_SSE2(const SkBitmapProcState &s, int x, int y, - SkPMColor *SK_RESTRICT colors, int count) { - const int maxX = s.fBitmap->width() - 1; - const int maxY = s.fBitmap->height() - 1; - - SkPoint srcPt; - s.fInvProc(s.fInvMatrix, SkIntToScalar(x), - SkIntToScalar(y), &srcPt); - srcPt.fY -= SK_ScalarHalf; - int sy = SkScalarFloorToInt(srcPt.fY); - - int y0 = SkTMax(0, int(ceil(sy-s.getBitmapFilter()->width() + 0.5f))); - int y1 = SkTMin(maxY, int(floor(sy+s.getBitmapFilter()->width() + 0.5f))); - - while (count-- > 0) { - srcPt.fX -= SK_ScalarHalf; - srcPt.fY -= SK_ScalarHalf; - - int sx = SkScalarFloorToInt(srcPt.fX); - - float weight = 0; - __m128 accum = _mm_setzero_ps(); - - int x0 = SkTMax(0, int(ceil(sx-s.getBitmapFilter()->width() + 0.5f))); - int x1 = SkTMin(maxX, int(floor(sx+s.getBitmapFilter()->width() + 0.5f))); - - for (int src_y = y0; src_y <= y1; src_y++) { - float yweight = SkScalarToFloat(s.getBitmapFilter()->lookupScalar(srcPt.fY - src_y)); - - for (int src_x = x0; src_x <= x1 ; src_x++) { - float xweight = SkScalarToFloat(s.getBitmapFilter()->lookupScalar(srcPt.fX - src_x)); - - float combined_weight = xweight * yweight; - - SkPMColor color = *s.fBitmap->getAddr32(src_x, src_y); - - __m128 c = _mm_set_ps((float)SkGetPackedB32(color), - (float)SkGetPackedG32(color), - (float)SkGetPackedR32(color), - (float)SkGetPackedA32(color)); - - __m128 weightVector = _mm_set1_ps(combined_weight); - - accum = _mm_add_ps(accum, _mm_mul_ps(c, weightVector)); - weight += combined_weight; - } - } - - __m128 totalWeightVector = _mm_set1_ps(weight); - accum = _mm_div_ps(accum, totalWeightVector); - accum = _mm_add_ps(accum, _mm_set1_ps(0.5f)); - - float localResult[4]; - _mm_storeu_ps(localResult, accum); - int a = SkClampMax(int(localResult[0]), 255); - int r = SkClampMax(int(localResult[1]), a); - int g = SkClampMax(int(localResult[2]), a); - int b = SkClampMax(int(localResult[3]), a); - - *colors++ = SkPackARGB32(a, r, g, b); - - x++; - - s.fInvProc(s.fInvMatrix, SkIntToScalar(x), - SkIntToScalar(y), &srcPt); - } -} - // Convolves horizontally along a single row. The row data is given in // |src_data| and continues for the num_values() of the filter. void convolveHorizontally_SSE2(const unsigned char* src_data, diff --git a/src/opts/SkBitmapFilter_opts_SSE2.h b/src/opts/SkBitmapFilter_opts_SSE2.h index 661a824e22..f03450dd71 100644 --- a/src/opts/SkBitmapFilter_opts_SSE2.h +++ b/src/opts/SkBitmapFilter_opts_SSE2.h @@ -11,8 +11,6 @@ #include "SkBitmapProcState.h" #include "SkConvolver.h" -void highQualityFilter_ScaleOnly_SSE2(const SkBitmapProcState &s, int x, int y, - SkPMColor *SK_RESTRICT colors, int count); void highQualityFilter_SSE2(const SkBitmapProcState &s, int x, int y, SkPMColor *SK_RESTRICT colors, int count);