@@ -16,7 +16,7 @@ use std::arch::aarch64::*;
1616#[ inline( always) ]
1717pub ( crate ) unsafe fn neon_xyza_lab_vld < const CHANNELS_CONFIGURATION : u8 , const TARGET : u8 > (
1818 src : * const f32 ,
19- transfer_function : TransferFunction ,
19+ transfer : & unsafe fn ( float32x4_t ) -> float32x4_t ,
2020 c1 : float32x4_t ,
2121 c2 : float32x4_t ,
2222 c3 : float32x4_t ,
@@ -28,7 +28,6 @@ pub(crate) unsafe fn neon_xyza_lab_vld<const CHANNELS_CONFIGURATION: u8, const T
2828 c9 : float32x4_t ,
2929) -> ( uint32x4_t , uint32x4_t , uint32x4_t , uint32x4_t ) {
3030 let target: XyzTarget = TARGET . into ( ) ;
31- let transfer = get_neon_gamma_transfer ( transfer_function) ;
3231 let v_scale_color = vdupq_n_f32 ( 255f32 ) ;
3332 let lab_pixel = vld4q_f32 ( src) ;
3433 let ( mut r_f32, mut g_f32, mut b_f32) = ( lab_pixel. 0 , lab_pixel. 1 , lab_pixel. 2 ) ;
@@ -92,6 +91,7 @@ pub unsafe fn neon_xyza_to_image<const CHANNELS_CONFIGURATION: u8, const TARGET:
9291 matrix : & [ [ f32 ; 3 ] ; 3 ] ,
9392 transfer_function : TransferFunction ,
9493) -> usize {
94+ let transfer = get_neon_gamma_transfer ( transfer_function) ;
9595 let image_configuration: ImageConfiguration = CHANNELS_CONFIGURATION . into ( ) ;
9696 if !image_configuration. has_alpha ( ) {
9797 panic ! ( "Alpha may be set only on images with alpha" ) ;
@@ -120,68 +120,28 @@ pub unsafe fn neon_xyza_to_image<const CHANNELS_CONFIGURATION: u8, const TARGET:
120120
121121 let ( r_row0_, g_row0_, b_row0_, a_row0_) =
122122 neon_xyza_lab_vld :: < CHANNELS_CONFIGURATION , TARGET > (
123- src_ptr_0,
124- transfer_function,
125- c1,
126- c2,
127- c3,
128- c4,
129- c5,
130- c6,
131- c7,
132- c8,
133- c9,
123+ src_ptr_0, & transfer, c1, c2, c3, c4, c5, c6, c7, c8, c9,
134124 ) ;
135125
136126 let src_ptr_1 = offset_src_ptr. add ( 4 * CHANNELS ) ;
137127
138128 let ( r_row1_, g_row1_, b_row1_, a_row1_) =
139129 neon_xyza_lab_vld :: < CHANNELS_CONFIGURATION , TARGET > (
140- src_ptr_1,
141- transfer_function,
142- c1,
143- c2,
144- c3,
145- c4,
146- c5,
147- c6,
148- c7,
149- c8,
150- c9,
130+ src_ptr_1, & transfer, c1, c2, c3, c4, c5, c6, c7, c8, c9,
151131 ) ;
152132
153133 let src_ptr_2 = offset_src_ptr. add ( 4 * 2 * CHANNELS ) ;
154134
155135 let ( r_row2_, g_row2_, b_row2_, a_row2_) =
156136 neon_xyza_lab_vld :: < CHANNELS_CONFIGURATION , TARGET > (
157- src_ptr_2,
158- transfer_function,
159- c1,
160- c2,
161- c3,
162- c4,
163- c5,
164- c6,
165- c7,
166- c8,
167- c9,
137+ src_ptr_2, & transfer, c1, c2, c3, c4, c5, c6, c7, c8, c9,
168138 ) ;
169139
170140 let src_ptr_3 = offset_src_ptr. add ( 4 * 3 * CHANNELS ) ;
171141
172142 let ( r_row3_, g_row3_, b_row3_, a_row3_) =
173143 neon_xyza_lab_vld :: < CHANNELS_CONFIGURATION , TARGET > (
174- src_ptr_3,
175- transfer_function,
176- c1,
177- c2,
178- c3,
179- c4,
180- c5,
181- c6,
182- c7,
183- c8,
184- c9,
144+ src_ptr_3, & transfer, c1, c2, c3, c4, c5, c6, c7, c8, c9,
185145 ) ;
186146
187147 let r_row01 = vcombine_u16 ( vqmovn_u32 ( r_row0_) , vqmovn_u32 ( r_row1_) ) ;
@@ -221,34 +181,14 @@ pub unsafe fn neon_xyza_to_image<const CHANNELS_CONFIGURATION: u8, const TARGET:
221181
222182 let ( r_row0_, g_row0_, b_row0_, a_row0_) =
223183 neon_xyza_lab_vld :: < CHANNELS_CONFIGURATION , TARGET > (
224- src_ptr_0,
225- transfer_function,
226- c1,
227- c2,
228- c3,
229- c4,
230- c5,
231- c6,
232- c7,
233- c8,
234- c9,
184+ src_ptr_0, & transfer, c1, c2, c3, c4, c5, c6, c7, c8, c9,
235185 ) ;
236186
237187 let src_ptr_1 = offset_src_ptr. add ( 4 * CHANNELS ) ;
238188
239189 let ( r_row1_, g_row1_, b_row1_, a_row1_) =
240190 neon_xyza_lab_vld :: < CHANNELS_CONFIGURATION , TARGET > (
241- src_ptr_1,
242- transfer_function,
243- c1,
244- c2,
245- c3,
246- c4,
247- c5,
248- c6,
249- c7,
250- c8,
251- c9,
191+ src_ptr_1, & transfer, c1, c2, c3, c4, c5, c6, c7, c8, c9,
252192 ) ;
253193
254194 let r_row01 = vcombine_u16 ( vqmovn_u32 ( r_row0_) , vqmovn_u32 ( r_row1_) ) ;
0 commit comments