OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "SkBitmapProcState.h" | 8 #include "SkBitmapProcState.h" |
9 #include "SkBitmapProcState_filter.h" | 9 #include "SkBitmapProcState_filter.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
11 #include "SkFilterProc.h" | 11 #include "SkFilterProc.h" |
12 #include "SkPaint.h" | 12 #include "SkPaint.h" |
13 #include "SkShader.h" // for tilemodes | 13 #include "SkShader.h" // for tilemodes |
14 #include "SkUtilsArm.h" | 14 #include "SkUtilsArm.h" |
15 | 15 |
16 // Required to ensure the table is part of the final binary. | 16 // Required to ensure the table is part of the final binary. |
17 extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[]; | 17 extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[]; |
18 extern const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[]; | |
19 | 18 |
20 #define NAME_WRAP(x) x ## _neon | 19 #define NAME_WRAP(x) x ## _neon |
21 #include "SkBitmapProcState_filter_neon.h" | 20 #include "SkBitmapProcState_filter_neon.h" |
22 #include "SkBitmapProcState_procs.h" | 21 #include "SkBitmapProcState_procs.h" |
23 | 22 |
24 const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[] = { | 23 const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[] = { |
25 S32_opaque_D32_nofilter_DXDY_neon, | 24 S32_opaque_D32_nofilter_DXDY_neon, |
26 S32_alpha_D32_nofilter_DXDY_neon, | 25 S32_alpha_D32_nofilter_DXDY_neon, |
27 S32_opaque_D32_nofilter_DX_neon, | 26 S32_opaque_D32_nofilter_DX_neon, |
28 S32_alpha_D32_nofilter_DX_neon, | 27 S32_alpha_D32_nofilter_DX_neon, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 SG8_alpha_D32_nofilter_DXDY_neon, | 71 SG8_alpha_D32_nofilter_DXDY_neon, |
73 SG8_alpha_D32_nofilter_DXDY_neon, | 72 SG8_alpha_D32_nofilter_DXDY_neon, |
74 SG8_alpha_D32_nofilter_DX_neon, | 73 SG8_alpha_D32_nofilter_DX_neon, |
75 SG8_alpha_D32_nofilter_DX_neon, | 74 SG8_alpha_D32_nofilter_DX_neon, |
76 SG8_alpha_D32_filter_DXDY_neon, | 75 SG8_alpha_D32_filter_DXDY_neon, |
77 SG8_alpha_D32_filter_DXDY_neon, | 76 SG8_alpha_D32_filter_DXDY_neon, |
78 SG8_alpha_D32_filter_DX_neon, | 77 SG8_alpha_D32_filter_DX_neon, |
79 SG8_alpha_D32_filter_DX_neon, | 78 SG8_alpha_D32_filter_DX_neon, |
80 }; | 79 }; |
81 | 80 |
82 const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[] = { | |
83 S32_D16_nofilter_DXDY_neon, | |
84 S32_D16_nofilter_DX_neon, | |
85 S32_D16_filter_DXDY_neon, | |
86 S32_D16_filter_DX_neon, | |
87 | |
88 S16_D16_nofilter_DXDY_neon, | |
89 S16_D16_nofilter_DX_neon, | |
90 S16_D16_filter_DXDY_neon, | |
91 S16_D16_filter_DX_neon, | |
92 | |
93 SI8_D16_nofilter_DXDY_neon, | |
94 SI8_D16_nofilter_DX_neon, | |
95 SI8_D16_filter_DXDY_neon, | |
96 SI8_D16_filter_DX_neon, | |
97 | |
98 // Don't support 4444 -> 565 | |
99 nullptr, nullptr, nullptr, nullptr, | |
100 // Don't support A8 -> 565 | |
101 nullptr, nullptr, nullptr, nullptr, | |
102 // Don't support G8 -> 565 (but we could) | |
103 nullptr, nullptr, nullptr, nullptr, | |
104 }; | |
105 | |
106 /////////////////////////////////////////////////////////////////////////////// | 81 /////////////////////////////////////////////////////////////////////////////// |
107 | 82 |
108 #include <arm_neon.h> | 83 #include <arm_neon.h> |
109 #include "SkConvolver.h" | 84 #include "SkConvolver.h" |
110 | 85 |
111 // Convolves horizontally along a single row. The row data is given in | 86 // Convolves horizontally along a single row. The row data is given in |
112 // |srcData| and continues for the numValues() of the filter. | 87 // |srcData| and continues for the numValues() of the filter. |
113 void convolveHorizontally_neon(const unsigned char* srcData, | 88 void convolveHorizontally_neon(const unsigned char* srcData, |
114 const SkConvolutionFilter1D& filter, | 89 const SkConvolutionFilter1D& filter, |
115 unsigned char* outRow, | 90 unsigned char* outRow, |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 } | 490 } |
516 } | 491 } |
517 | 492 |
518 void platformConvolutionProcs_arm_neon(SkConvolutionProcs* procs) { | 493 void platformConvolutionProcs_arm_neon(SkConvolutionProcs* procs) { |
519 procs->fExtraHorizontalReads = 3; | 494 procs->fExtraHorizontalReads = 3; |
520 procs->fConvolveVertically = &convolveVertically_neon; | 495 procs->fConvolveVertically = &convolveVertically_neon; |
521 procs->fConvolve4RowsHorizontally = &convolve4RowsHorizontally_neon; | 496 procs->fConvolve4RowsHorizontally = &convolve4RowsHorizontally_neon; |
522 procs->fConvolveHorizontally = &convolveHorizontally_neon; | 497 procs->fConvolveHorizontally = &convolveHorizontally_neon; |
523 procs->fApplySIMDPadding = &applySIMDPadding_neon; | 498 procs->fApplySIMDPadding = &applySIMDPadding_neon; |
524 } | 499 } |
OLD | NEW |