| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2009 The Android Open Source Project | 2 * Copyright 2009 The Android Open Source Project |
| 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 | 8 |
| 9 #include "SkBitmapProcState.h" | 9 #include "SkBitmapProcState.h" |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| 11 #include "SkPaint.h" | 11 #include "SkPaint.h" |
| 12 #include "SkTypes.h" | 12 #include "SkTypes.h" |
| 13 #include "SkUtils.h" | 13 #include "SkUtils.h" |
| 14 #include "SkUtilsArm.h" | 14 #include "SkUtilsArm.h" |
| 15 | 15 |
| 16 #include "SkConvolver.h" | 16 #include "SkConvolver.h" |
| 17 | 17 |
| 18 #if SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN) | 18 #if !defined(SK_CPU_ARM64) && SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN) |
| 19 void SI8_D16_nofilter_DX_arm( | 19 void SI8_D16_nofilter_DX_arm( |
| 20 const SkBitmapProcState& s, | 20 const SkBitmapProcState& s, |
| 21 const uint32_t* SK_RESTRICT xy, | 21 const uint32_t* SK_RESTRICT xy, |
| 22 int count, | 22 int count, |
| 23 uint16_t* SK_RESTRICT colors) SK_ATTRIBUTE_OPTIMIZE_O1; | 23 uint16_t* SK_RESTRICT colors) SK_ATTRIBUTE_OPTIMIZE_O1; |
| 24 | 24 |
| 25 void SI8_D16_nofilter_DX_arm(const SkBitmapProcState& s, | 25 void SI8_D16_nofilter_DX_arm(const SkBitmapProcState& s, |
| 26 const uint32_t* SK_RESTRICT xy, | 26 const uint32_t* SK_RESTRICT xy, |
| 27 int count, uint16_t* SK_RESTRICT colors) { | 27 int count, uint16_t* SK_RESTRICT colors) { |
| 28 SkASSERT(count > 0 && colors != NULL); | 28 SkASSERT(count > 0 && colors != NULL); |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 "bne 3b \n\t" // loop if counter
!= 0 | 179 "bne 3b \n\t" // loop if counter
!= 0 |
| 180 "4: \n\t" // exit | 180 "4: \n\t" // exit |
| 181 : [xx] "+r" (xx), [count] "+r" (count), [colors] "+r" (colors) | 181 : [xx] "+r" (xx), [count] "+r" (count), [colors] "+r" (colors) |
| 182 : [table] "r" (table), [srcAddr] "r" (srcAddr) | 182 : [table] "r" (table), [srcAddr] "r" (srcAddr) |
| 183 : "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11" | 183 : "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11" |
| 184 ); | 184 ); |
| 185 } | 185 } |
| 186 | 186 |
| 187 s.fBitmap->getColorTable()->unlockColors(); | 187 s.fBitmap->getColorTable()->unlockColors(); |
| 188 } | 188 } |
| 189 #endif // SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN) | 189 #endif // !defined(SK_CPU_ARM64) && SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN) |
| 190 | 190 |
| 191 /////////////////////////////////////////////////////////////////////////////// | 191 /////////////////////////////////////////////////////////////////////////////// |
| 192 | 192 |
| 193 /* If we replace a sampleproc, then we null-out the associated shaderproc, | 193 /* If we replace a sampleproc, then we null-out the associated shaderproc, |
| 194 otherwise the shader won't even look at the matrix/sampler | 194 otherwise the shader won't even look at the matrix/sampler |
| 195 */ | 195 */ |
| 196 void SkBitmapProcState::platformProcs() { | 196 void SkBitmapProcState::platformProcs() { |
| 197 #if !defined(SK_CPU_ARM64) && SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN) |
| 197 bool isOpaque = 256 == fAlphaScale; | 198 bool isOpaque = 256 == fAlphaScale; |
| 198 bool justDx = false; | 199 bool justDx = false; |
| 199 | 200 |
| 200 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { | 201 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { |
| 201 justDx = true; | 202 justDx = true; |
| 202 } | 203 } |
| 203 | 204 |
| 204 switch (fBitmap->config()) { | 205 switch (fBitmap->config()) { |
| 205 case SkBitmap::kIndex8_Config: | 206 case SkBitmap::kIndex8_Config: |
| 206 #if SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN) | |
| 207 if (justDx && SkPaint::kNone_FilterLevel == fFilterLevel) { | 207 if (justDx && SkPaint::kNone_FilterLevel == fFilterLevel) { |
| 208 #if 0 /* crashing on android device */ | 208 #if 0 /* crashing on android device */ |
| 209 fSampleProc16 = SI8_D16_nofilter_DX_arm; | 209 fSampleProc16 = SI8_D16_nofilter_DX_arm; |
| 210 fShaderProc16 = NULL; | 210 fShaderProc16 = NULL; |
| 211 #endif | 211 #endif |
| 212 if (isOpaque) { | 212 if (isOpaque) { |
| 213 // this one is only very slighty faster than the C version | 213 // this one is only very slighty faster than the C version |
| 214 fSampleProc32 = SI8_opaque_D32_nofilter_DX_arm; | 214 fSampleProc32 = SI8_opaque_D32_nofilter_DX_arm; |
| 215 fShaderProc32 = NULL; | 215 fShaderProc32 = NULL; |
| 216 } | 216 } |
| 217 } | 217 } |
| 218 #endif | |
| 219 break; | 218 break; |
| 220 default: | 219 default: |
| 221 break; | 220 break; |
| 222 } | 221 } |
| 222 #endif |
| 223 } | 223 } |
| 224 | 224 |
| 225 /////////////////////////////////////////////////////////////////////////////// | 225 /////////////////////////////////////////////////////////////////////////////// |
| 226 | 226 |
| 227 extern void platformConvolutionProcs_arm_neon(SkConvolutionProcs* procs); | 227 extern void platformConvolutionProcs_arm_neon(SkConvolutionProcs* procs); |
| 228 | 228 |
| 229 void platformConvolutionProcs_arm(SkConvolutionProcs* procs) { | 229 void platformConvolutionProcs_arm(SkConvolutionProcs* procs) { |
| 230 } | 230 } |
| 231 | 231 |
| 232 void SkBitmapProcState::platformConvolutionProcs(SkConvolutionProcs* procs) { | 232 void SkBitmapProcState::platformConvolutionProcs(SkConvolutionProcs* procs) { |
| 233 SK_ARM_NEON_WRAP(platformConvolutionProcs_arm)(procs); | 233 SK_ARM_NEON_WRAP(platformConvolutionProcs_arm)(procs); |
| 234 } | 234 } |
| OLD | NEW |