| OLD | NEW |
| 1 /* NEON optimized code (C) COPYRIGHT 2009 Motorola | 1 /* NEON optimized code (C) COPYRIGHT 2009 Motorola |
| 2 * | 2 * |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /* | 7 /* |
| 8 * Modifications done in-house at Motorola | 8 * Modifications done in-house at Motorola |
| 9 * | 9 * |
| 10 * this is a clone of SkBitmapProcState_matrix.h | 10 * this is a clone of SkBitmapProcState_matrix.h |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 60 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
| 61 SkMatrix::kScale_Mask)) == 0); | 61 SkMatrix::kScale_Mask)) == 0); |
| 62 | 62 |
| 63 PREAMBLE(s); | 63 PREAMBLE(s); |
| 64 // we store y, x, x, x, x, x | 64 // we store y, x, x, x, x, x |
| 65 | 65 |
| 66 const unsigned maxX = s.fBitmap->width() - 1; | 66 const unsigned maxX = s.fBitmap->width() - 1; |
| 67 SkFixed fx; | 67 SkFixed fx; |
| 68 { | 68 { |
| 69 SkPoint pt; | 69 SkPoint pt; |
| 70 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | 70 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, |
| 71 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 71 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
| 72 fx = SkScalarToFixed(pt.fY); | 72 fx = SkScalarToFixed(pt.fY); |
| 73 const unsigned maxY = s.fBitmap->height() - 1; | 73 const unsigned maxY = s.fBitmap->height() - 1; |
| 74 *xy++ = TILEY_PROCF(fx, maxY); | 74 *xy++ = TILEY_PROCF(fx, maxY); |
| 75 fx = SkScalarToFixed(pt.fX); | 75 fx = SkScalarToFixed(pt.fX); |
| 76 } | 76 } |
| 77 | 77 |
| 78 if (0 == maxX) { | 78 if (0 == maxX) { |
| 79 // all of the following X values must be 0 | 79 // all of the following X values must be 0 |
| 80 memset(xy, 0, count * sizeof(uint16_t)); | 80 memset(xy, 0, count * sizeof(uint16_t)); |
| 81 return; | 81 return; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 | 162 |
| 163 static void AFFINE_NOFILTER_NAME(const SkBitmapProcState& s, | 163 static void AFFINE_NOFILTER_NAME(const SkBitmapProcState& s, |
| 164 uint32_t xy[], int count, int x, int y) { | 164 uint32_t xy[], int count, int x, int y) { |
| 165 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); | 165 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); |
| 166 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 166 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
| 167 SkMatrix::kScale_Mask | | 167 SkMatrix::kScale_Mask | |
| 168 SkMatrix::kAffine_Mask)) == 0); | 168 SkMatrix::kAffine_Mask)) == 0); |
| 169 | 169 |
| 170 PREAMBLE(s); | 170 PREAMBLE(s); |
| 171 SkPoint srcPt; | 171 SkPoint srcPt; |
| 172 s.fInvProc(*s.fInvMatrix, | 172 s.fInvProc(s.fInvMatrix, |
| 173 SkIntToScalar(x) + SK_ScalarHalf, | 173 SkIntToScalar(x) + SK_ScalarHalf, |
| 174 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 174 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
| 175 | 175 |
| 176 SkFixed fx = SkScalarToFixed(srcPt.fX); | 176 SkFixed fx = SkScalarToFixed(srcPt.fX); |
| 177 SkFixed fy = SkScalarToFixed(srcPt.fY); | 177 SkFixed fy = SkScalarToFixed(srcPt.fY); |
| 178 SkFixed dx = s.fInvSx; | 178 SkFixed dx = s.fInvSx; |
| 179 SkFixed dy = s.fInvKy; | 179 SkFixed dy = s.fInvKy; |
| 180 int maxX = s.fBitmap->width() - 1; | 180 int maxX = s.fBitmap->width() - 1; |
| 181 int maxY = s.fBitmap->height() - 1; | 181 int maxY = s.fBitmap->height() - 1; |
| 182 | 182 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 static void PERSP_NOFILTER_NAME(const SkBitmapProcState& s, | 275 static void PERSP_NOFILTER_NAME(const SkBitmapProcState& s, |
| 276 uint32_t* SK_RESTRICT xy, | 276 uint32_t* SK_RESTRICT xy, |
| 277 int count, int x, int y) { | 277 int count, int x, int y) { |
| 278 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); | 278 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); |
| 279 | 279 |
| 280 PREAMBLE(s); | 280 PREAMBLE(s); |
| 281 /* max{X,Y} are int here, but later shown/assumed to fit in 16 bits */ | 281 /* max{X,Y} are int here, but later shown/assumed to fit in 16 bits */ |
| 282 int maxX = s.fBitmap->width() - 1; | 282 int maxX = s.fBitmap->width() - 1; |
| 283 int maxY = s.fBitmap->height() - 1; | 283 int maxY = s.fBitmap->height() - 1; |
| 284 | 284 |
| 285 SkPerspIter iter(*s.fInvMatrix, | 285 SkPerspIter iter(s.fInvMatrix, |
| 286 SkIntToScalar(x) + SK_ScalarHalf, | 286 SkIntToScalar(x) + SK_ScalarHalf, |
| 287 SkIntToScalar(y) + SK_ScalarHalf, count); | 287 SkIntToScalar(y) + SK_ScalarHalf, count); |
| 288 | 288 |
| 289 while ((count = iter.next()) != 0) { | 289 while ((count = iter.next()) != 0) { |
| 290 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); | 290 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); |
| 291 | 291 |
| 292 #if defined(DEBUG_PERSP_NOFILTER) | 292 #if defined(DEBUG_PERSP_NOFILTER) |
| 293 /* debugging stuff */ | 293 /* debugging stuff */ |
| 294 const SkFixed *end_srcXY = srcXY + (count*2); | 294 const SkFixed *end_srcXY = srcXY + (count*2); |
| 295 uint32_t *end_xy = xy + (count); | 295 uint32_t *end_xy = xy + (count); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 485 | 485 |
| 486 PREAMBLE(s); | 486 PREAMBLE(s); |
| 487 | 487 |
| 488 const unsigned maxX = s.fBitmap->width() - 1; | 488 const unsigned maxX = s.fBitmap->width() - 1; |
| 489 const SkFixed one = s.fFilterOneX; | 489 const SkFixed one = s.fFilterOneX; |
| 490 const SkFixed dx = s.fInvSx; | 490 const SkFixed dx = s.fInvSx; |
| 491 SkFixed fx; | 491 SkFixed fx; |
| 492 | 492 |
| 493 { | 493 { |
| 494 SkPoint pt; | 494 SkPoint pt; |
| 495 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | 495 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, |
| 496 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 496 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
| 497 const SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); | 497 const SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); |
| 498 const unsigned maxY = s.fBitmap->height() - 1; | 498 const unsigned maxY = s.fBitmap->height() - 1; |
| 499 // compute our two Y values up front | 499 // compute our two Y values up front |
| 500 *xy++ = PACK_FILTER_Y_NAME(fy, maxY, s.fFilterOneY PREAMBLE_ARG_Y); | 500 *xy++ = PACK_FILTER_Y_NAME(fy, maxY, s.fFilterOneY PREAMBLE_ARG_Y); |
| 501 // now initialize fx | 501 // now initialize fx |
| 502 fx = SkScalarToFixed(pt.fX) - (one >> 1); | 502 fx = SkScalarToFixed(pt.fX) - (one >> 1); |
| 503 } | 503 } |
| 504 | 504 |
| 505 #ifdef CHECK_FOR_DECAL | 505 #ifdef CHECK_FOR_DECAL |
| 506 // test if we don't need to apply the tile proc | 506 // test if we don't need to apply the tile proc |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 589 | 589 |
| 590 static void AFFINE_FILTER_NAME(const SkBitmapProcState& s, | 590 static void AFFINE_FILTER_NAME(const SkBitmapProcState& s, |
| 591 uint32_t xy[], int count, int x, int y) { | 591 uint32_t xy[], int count, int x, int y) { |
| 592 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); | 592 SkASSERT(s.fInvType & SkMatrix::kAffine_Mask); |
| 593 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | 593 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | |
| 594 SkMatrix::kScale_Mask | | 594 SkMatrix::kScale_Mask | |
| 595 SkMatrix::kAffine_Mask)) == 0); | 595 SkMatrix::kAffine_Mask)) == 0); |
| 596 | 596 |
| 597 PREAMBLE(s); | 597 PREAMBLE(s); |
| 598 SkPoint srcPt; | 598 SkPoint srcPt; |
| 599 s.fInvProc(*s.fInvMatrix, | 599 s.fInvProc(s.fInvMatrix, |
| 600 SkIntToScalar(x) + SK_ScalarHalf, | 600 SkIntToScalar(x) + SK_ScalarHalf, |
| 601 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 601 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
| 602 | 602 |
| 603 SkFixed oneX = s.fFilterOneX; | 603 SkFixed oneX = s.fFilterOneX; |
| 604 SkFixed oneY = s.fFilterOneY; | 604 SkFixed oneY = s.fFilterOneY; |
| 605 SkFixed fx = SkScalarToFixed(srcPt.fX) - (oneX >> 1); | 605 SkFixed fx = SkScalarToFixed(srcPt.fX) - (oneX >> 1); |
| 606 SkFixed fy = SkScalarToFixed(srcPt.fY) - (oneY >> 1); | 606 SkFixed fy = SkScalarToFixed(srcPt.fY) - (oneY >> 1); |
| 607 SkFixed dx = s.fInvSx; | 607 SkFixed dx = s.fInvSx; |
| 608 SkFixed dy = s.fInvKy; | 608 SkFixed dy = s.fInvKy; |
| 609 unsigned maxX = s.fBitmap->width() - 1; | 609 unsigned maxX = s.fBitmap->width() - 1; |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 uint32_t* SK_RESTRICT xy, int count, | 750 uint32_t* SK_RESTRICT xy, int count, |
| 751 int x, int y) { | 751 int x, int y) { |
| 752 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); | 752 SkASSERT(s.fInvType & SkMatrix::kPerspective_Mask); |
| 753 | 753 |
| 754 PREAMBLE(s); | 754 PREAMBLE(s); |
| 755 unsigned maxX = s.fBitmap->width() - 1; | 755 unsigned maxX = s.fBitmap->width() - 1; |
| 756 unsigned maxY = s.fBitmap->height() - 1; | 756 unsigned maxY = s.fBitmap->height() - 1; |
| 757 SkFixed oneX = s.fFilterOneX; | 757 SkFixed oneX = s.fFilterOneX; |
| 758 SkFixed oneY = s.fFilterOneY; | 758 SkFixed oneY = s.fFilterOneY; |
| 759 | 759 |
| 760 SkPerspIter iter(*s.fInvMatrix, | 760 SkPerspIter iter(s.fInvMatrix, |
| 761 SkIntToScalar(x) + SK_ScalarHalf, | 761 SkIntToScalar(x) + SK_ScalarHalf, |
| 762 SkIntToScalar(y) + SK_ScalarHalf, count); | 762 SkIntToScalar(y) + SK_ScalarHalf, count); |
| 763 | 763 |
| 764 while ((count = iter.next()) != 0) { | 764 while ((count = iter.next()) != 0) { |
| 765 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); | 765 const SkFixed* SK_RESTRICT srcXY = iter.getXY(); |
| 766 | 766 |
| 767 if (count >= 4) { | 767 if (count >= 4) { |
| 768 int32x4_t wide_i, wide_lo; | 768 int32x4_t wide_i, wide_lo; |
| 769 int32x4_t wide_fx1; | 769 int32x4_t wide_fx1; |
| 770 int32x4_t wide_fy1; | 770 int32x4_t wide_fy1; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 902 #undef PERSP_FILTER_NAME | 902 #undef PERSP_FILTER_NAME |
| 903 | 903 |
| 904 #undef PREAMBLE | 904 #undef PREAMBLE |
| 905 #undef PREAMBLE_PARAM_X | 905 #undef PREAMBLE_PARAM_X |
| 906 #undef PREAMBLE_PARAM_Y | 906 #undef PREAMBLE_PARAM_Y |
| 907 #undef PREAMBLE_ARG_X | 907 #undef PREAMBLE_ARG_X |
| 908 #undef PREAMBLE_ARG_Y | 908 #undef PREAMBLE_ARG_Y |
| 909 | 909 |
| 910 #undef TILEX_LOW_BITS | 910 #undef TILEX_LOW_BITS |
| 911 #undef TILEY_LOW_BITS | 911 #undef TILEY_LOW_BITS |
| OLD | NEW |