Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkBitmapCache.h" | 8 #include "SkBitmapCache.h" |
| 9 #include "SkBitmapProcState.h" | 9 #include "SkBitmapProcState.h" |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 // These are defined in src/opts/SkBitmapProcState_arm_neon.cpp | 22 // These are defined in src/opts/SkBitmapProcState_arm_neon.cpp |
| 23 extern const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[]; | 23 extern const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[]; |
| 24 extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[]; | 24 extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[]; |
| 25 extern void S16_D16_filter_DX_neon(const SkBitmapProcState&, const uint32_t*, i nt, uint16_t*); | 25 extern void S16_D16_filter_DX_neon(const SkBitmapProcState&, const uint32_t*, i nt, uint16_t*); |
| 26 extern void Clamp_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, i nt, int, uint16_t*, int); | 26 extern void Clamp_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, i nt, int, uint16_t*, int); |
| 27 extern void Repeat_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint16_t*, int); | 27 extern void Repeat_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint16_t*, int); |
| 28 extern void SI8_opaque_D32_filter_DX_neon(const SkBitmapProcState&, const uint3 2_t*, int, SkPMColor*); | 28 extern void SI8_opaque_D32_filter_DX_neon(const SkBitmapProcState&, const uint3 2_t*, int, SkPMColor*); |
| 29 extern void SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint32_t*, int); | 29 extern void SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint32_t*, int); |
| 30 extern void Clamp_SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcSt ate&, int, int, uint32_t*, int); | 30 extern void Clamp_SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcSt ate&, int, int, uint32_t*, int); |
| 31 #endif | 31 #endif |
| 32 extern void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState &, int, int, uint32_t*, int); | |
| 32 | 33 |
| 33 #define NAME_WRAP(x) x | 34 #define NAME_WRAP(x) x |
| 34 #include "SkBitmapProcState_filter.h" | 35 #include "SkBitmapProcState_filter.h" |
| 35 #include "SkBitmapProcState_procs.h" | 36 #include "SkBitmapProcState_procs.h" |
| 36 | 37 |
| 37 /////////////////////////////////////////////////////////////////////////////// | 38 /////////////////////////////////////////////////////////////////////////////// |
| 38 | 39 |
| 39 // true iff the matrix contains, at most, scale and translate elements | 40 // true iff the matrix contains, at most, scale and translate elements |
| 40 static bool matrix_only_scale_translate(const SkMatrix& m) { | 41 static bool matrix_only_scale_translate(const SkMatrix& m) { |
| 41 return m.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask); | 42 return m.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask); |
| (...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 582 // our special-case shaderprocs | 583 // our special-case shaderprocs |
| 583 if (SK_ARM_NEON_WRAP(S16_D16_filter_DX) == fSampleProc16) { | 584 if (SK_ARM_NEON_WRAP(S16_D16_filter_DX) == fSampleProc16) { |
| 584 if (clampClamp) { | 585 if (clampClamp) { |
| 585 fShaderProc16 = SK_ARM_NEON_WRAP(Clamp_S16_D16_filter_DX_shaderp roc); | 586 fShaderProc16 = SK_ARM_NEON_WRAP(Clamp_S16_D16_filter_DX_shaderp roc); |
| 586 } else if (SkShader::kRepeat_TileMode == fTileModeX && | 587 } else if (SkShader::kRepeat_TileMode == fTileModeX && |
| 587 SkShader::kRepeat_TileMode == fTileModeY) { | 588 SkShader::kRepeat_TileMode == fTileModeY) { |
| 588 fShaderProc16 = SK_ARM_NEON_WRAP(Repeat_S16_D16_filter_DX_shader proc); | 589 fShaderProc16 = SK_ARM_NEON_WRAP(Repeat_S16_D16_filter_DX_shader proc); |
| 589 } | 590 } |
| 590 } else if (SK_ARM_NEON_WRAP(SI8_opaque_D32_filter_DX) == fSampleProc32 & & clampClamp) { | 591 } else if (SK_ARM_NEON_WRAP(SI8_opaque_D32_filter_DX) == fSampleProc32 & & clampClamp) { |
| 591 fShaderProc32 = SK_ARM_NEON_WRAP(Clamp_SI8_opaque_D32_filter_DX_shad erproc); | 592 fShaderProc32 = SK_ARM_NEON_WRAP(Clamp_SI8_opaque_D32_filter_DX_shad erproc); |
| 593 } else if (SK_ARM_NEON_WRAP(S32_opaque_D32_nofilter_DX) == fSampleProc32 && clampClamp) { | |
|
djsollen
2014/10/23 19:00:33
compile fails because S32_opaque_D32_nofilter_DX_n
reed1
2014/10/23 19:13:56
Done.
| |
| 594 fShaderProc32 = Clamp_S32_opaque_D32_nofilter_DX_shaderproc; | |
| 592 } | 595 } |
| 593 | 596 |
| 594 if (NULL == fShaderProc32) { | 597 if (NULL == fShaderProc32) { |
| 595 fShaderProc32 = this->chooseShaderProc32(); | 598 fShaderProc32 = this->chooseShaderProc32(); |
| 596 } | 599 } |
| 597 } | 600 } |
| 598 | 601 |
| 599 // see if our platform has any accelerated overrides | 602 // see if our platform has any accelerated overrides |
| 600 this->platformProcs(); | 603 this->platformProcs(); |
| 601 | 604 |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1012 } else { | 1015 } else { |
| 1013 size >>= 2; | 1016 size >>= 2; |
| 1014 } | 1017 } |
| 1015 | 1018 |
| 1016 if (fFilterLevel != SkPaint::kNone_FilterLevel) { | 1019 if (fFilterLevel != SkPaint::kNone_FilterLevel) { |
| 1017 size >>= 1; | 1020 size >>= 1; |
| 1018 } | 1021 } |
| 1019 | 1022 |
| 1020 return size; | 1023 return size; |
| 1021 } | 1024 } |
| 1025 | |
| 1026 /////////////////////// | |
| 1027 | |
| 1028 void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in t x, int y, | |
| 1029 SkPMColor* SK_RESTRICT dst, in t count) { | |
| 1030 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | | |
| 1031 SkMatrix::kScale_Mask)) == 0); | |
| 1032 | |
| 1033 const unsigned maxX = s.fBitmap->width() - 1; | |
| 1034 SkFractionalInt fx; | |
| 1035 int dstY; | |
| 1036 { | |
| 1037 SkPoint pt; | |
| 1038 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, SkIntToScalar (y) + SK_ScalarHalf, | |
| 1039 &pt); | |
| 1040 fx = SkScalarToFractionalInt(pt.fY); | |
| 1041 const unsigned maxY = s.fBitmap->height() - 1; | |
| 1042 dstY = SkClampMax(SkFractionalIntToInt(fx), maxY); | |
| 1043 fx = SkScalarToFractionalInt(pt.fX); | |
| 1044 } | |
| 1045 | |
| 1046 const SkPMColor* SK_RESTRICT src = s.fBitmap->getAddr32(0, dstY); | |
| 1047 const SkFractionalInt dx = s.fInvSxFractionalInt; | |
| 1048 | |
| 1049 if ((unsigned)(fx >> 48) <= maxX && (unsigned)((fx + dx * (count - 1)) >> 48 ) <= maxX) { | |
|
mtklein
2014/10/23 19:05:45
Can't hurt to make this a little more readable?
i
reed1
2014/10/23 19:13:56
Done.
| |
| 1050 int count4 = count >> 2; | |
| 1051 for (int i = 0; i < count4; ++i) { | |
| 1052 SkPMColor src0 = src[SkFractionalIntToInt(fx)]; fx += dx; | |
| 1053 SkPMColor src1 = src[SkFractionalIntToInt(fx)]; fx += dx; | |
| 1054 SkPMColor src2 = src[SkFractionalIntToInt(fx)]; fx += dx; | |
| 1055 SkPMColor src3 = src[SkFractionalIntToInt(fx)]; fx += dx; | |
| 1056 dst[0] = src0; | |
| 1057 dst[1] = src1; | |
| 1058 dst[2] = src2; | |
| 1059 dst[3] = src3; | |
| 1060 dst += 4; | |
| 1061 } | |
| 1062 for (int i = (count4 << 2); i < count; ++i) { | |
| 1063 unsigned index = SkFractionalIntToInt(fx); | |
| 1064 SkASSERT(index <= maxX); | |
| 1065 *dst++ = src[index]; | |
| 1066 fx += dx; | |
| 1067 } | |
| 1068 } else { | |
| 1069 for (int i = 0; i < count; ++i) { | |
| 1070 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)]; | |
| 1071 fx += dx; | |
| 1072 } | |
| 1073 } | |
| 1074 } | |
| 1075 | |
| OLD | NEW |