| 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 #include "SkBitmapProcState.h" | 7 #include "SkBitmapProcState.h" |
| 8 #include "SkPerspIter.h" | 8 #include "SkPerspIter.h" |
| 9 #include "SkShader.h" | 9 #include "SkShader.h" |
| 10 #include "SkUtils.h" | 10 #include "SkUtils.h" |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 #else | 304 #else |
| 305 for (int i = 0; i < count; i++) { | 305 for (int i = 0; i < count; i++) { |
| 306 *xptr++ = start++; | 306 *xptr++ = start++; |
| 307 } | 307 } |
| 308 #endif | 308 #endif |
| 309 } | 309 } |
| 310 | 310 |
| 311 static int nofilter_trans_preamble(const SkBitmapProcState& s, uint32_t** xy, | 311 static int nofilter_trans_preamble(const SkBitmapProcState& s, uint32_t** xy, |
| 312 int x, int y) { | 312 int x, int y) { |
| 313 SkPoint pt; | 313 SkPoint pt; |
| 314 s.fInvProc(*s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | 314 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, |
| 315 SkIntToScalar(y) + SK_ScalarHalf, &pt); | 315 SkIntToScalar(y) + SK_ScalarHalf, &pt); |
| 316 **xy = s.fIntTileProcY(SkScalarToFixed(pt.fY) >> 16, | 316 **xy = s.fIntTileProcY(SkScalarToFixed(pt.fY) >> 16, |
| 317 s.fBitmap->height()); | 317 s.fBitmap->height()); |
| 318 *xy += 1; // bump the ptr | 318 *xy += 1; // bump the ptr |
| 319 // return our starting X position | 319 // return our starting X position |
| 320 return SkScalarToFixed(pt.fX) >> 16; | 320 return SkScalarToFixed(pt.fX) >> 16; |
| 321 } | 321 } |
| 322 | 322 |
| 323 static void clampx_nofilter_trans(const SkBitmapProcState& s, | 323 static void clampx_nofilter_trans(const SkBitmapProcState& s, |
| 324 uint32_t xy[], int count, int x, int y) { | 324 uint32_t xy[], int count, int x, int y) { |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 } | 465 } |
| 466 } | 466 } |
| 467 | 467 |
| 468 /////////////////////////////////////////////////////////////////////////////// | 468 /////////////////////////////////////////////////////////////////////////////// |
| 469 | 469 |
| 470 SkBitmapProcState::MatrixProc | 470 SkBitmapProcState::MatrixProc |
| 471 SkBitmapProcState::chooseMatrixProc(bool trivial_matrix) { | 471 SkBitmapProcState::chooseMatrixProc(bool trivial_matrix) { |
| 472 // test_int_tileprocs(); | 472 // test_int_tileprocs(); |
| 473 // check for our special case when there is no scale/affine/perspective | 473 // check for our special case when there is no scale/affine/perspective |
| 474 if (trivial_matrix) { | 474 if (trivial_matrix) { |
| 475 SkASSERT(!fDoFilter); | 475 SkASSERT(kNone_BitmapFilter == fFilterQuality); |
| 476 fIntTileProcY = choose_int_tile_proc(fTileModeY); | 476 fIntTileProcY = choose_int_tile_proc(fTileModeY); |
| 477 switch (fTileModeX) { | 477 switch (fTileModeX) { |
| 478 case SkShader::kClamp_TileMode: | 478 case SkShader::kClamp_TileMode: |
| 479 return clampx_nofilter_trans; | 479 return clampx_nofilter_trans; |
| 480 case SkShader::kRepeat_TileMode: | 480 case SkShader::kRepeat_TileMode: |
| 481 return repeatx_nofilter_trans; | 481 return repeatx_nofilter_trans; |
| 482 case SkShader::kMirror_TileMode: | 482 case SkShader::kMirror_TileMode: |
| 483 return mirrorx_nofilter_trans; | 483 return mirrorx_nofilter_trans; |
| 484 } | 484 } |
| 485 } | 485 } |
| 486 | 486 |
| 487 int index = 0; | 487 int index = 0; |
| 488 if (fDoFilter) { | 488 if (fFilterQuality != kNone_BitmapFilter) { |
| 489 index = 1; | 489 index = 1; |
| 490 } | 490 } |
| 491 if (fInvType & SkMatrix::kPerspective_Mask) { | 491 if (fInvType & SkMatrix::kPerspective_Mask) { |
| 492 index += 4; | 492 index += 4; |
| 493 } else if (fInvType & SkMatrix::kAffine_Mask) { | 493 } else if (fInvType & SkMatrix::kAffine_Mask) { |
| 494 index += 2; | 494 index += 2; |
| 495 } | 495 } |
| 496 | 496 |
| 497 if (SkShader::kClamp_TileMode == fTileModeX && | 497 if (SkShader::kClamp_TileMode == fTileModeX && |
| 498 SkShader::kClamp_TileMode == fTileModeY) | 498 SkShader::kClamp_TileMode == fTileModeY) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 512 { | 512 { |
| 513 return SK_ARM_NEON_WRAP(RepeatX_RepeatY_Procs)[index]; | 513 return SK_ARM_NEON_WRAP(RepeatX_RepeatY_Procs)[index]; |
| 514 } | 514 } |
| 515 | 515 |
| 516 fTileProcX = choose_tile_proc(fTileModeX); | 516 fTileProcX = choose_tile_proc(fTileModeX); |
| 517 fTileProcY = choose_tile_proc(fTileModeY); | 517 fTileProcY = choose_tile_proc(fTileModeY); |
| 518 fTileLowBitsProcX = choose_tile_lowbits_proc(fTileModeX); | 518 fTileLowBitsProcX = choose_tile_lowbits_proc(fTileModeX); |
| 519 fTileLowBitsProcY = choose_tile_lowbits_proc(fTileModeY); | 519 fTileLowBitsProcY = choose_tile_lowbits_proc(fTileModeY); |
| 520 return GeneralXY_Procs[index]; | 520 return GeneralXY_Procs[index]; |
| 521 } | 521 } |
| OLD | NEW |