fer/convolution/u16x3/
mod.rs1use crate::convolution::vertical_u16::vert_convolution_u16;
2use crate::pixels::U16x3;
3use crate::CpuExtensions;
4use crate::{ImageView, ImageViewMut};
5
6use super::{Coefficients, Convolution};
7
8#[cfg(target_arch = "x86_64")]
9mod avx2;
10mod native;
11#[cfg(target_arch = "aarch64")]
12mod neon;
13#[cfg(target_arch = "x86_64")]
14mod sse4;
15#[cfg(target_arch = "wasm32")]
16mod wasm32;
17
18impl Convolution for U16x3 {
19 fn horiz_convolution(
20 src_image: &ImageView<Self>,
21 dst_image: &mut ImageViewMut<Self>,
22 offset: u32,
23 coeffs: Coefficients,
24 cpu_extensions: CpuExtensions,
25 ) {
26 match cpu_extensions {
27 #[cfg(target_arch = "x86_64")]
28 CpuExtensions::Avx2 => avx2::horiz_convolution(src_image, dst_image, offset, coeffs),
29 #[cfg(target_arch = "x86_64")]
30 CpuExtensions::Sse4_1 => sse4::horiz_convolution(src_image, dst_image, offset, coeffs),
31 #[cfg(target_arch = "aarch64")]
32 CpuExtensions::Neon => neon::horiz_convolution(src_image, dst_image, offset, coeffs),
33 #[cfg(target_arch = "wasm32")]
34 CpuExtensions::Simd128 => {
35 wasm32::horiz_convolution(src_image, dst_image, offset, coeffs)
36 }
37 _ => native::horiz_convolution(src_image, dst_image, offset, coeffs),
38 }
39 }
40
41 fn vert_convolution(
42 src_image: &ImageView<Self>,
43 dst_image: &mut ImageViewMut<Self>,
44 offset: u32,
45 coeffs: Coefficients,
46 cpu_extensions: CpuExtensions,
47 ) {
48 vert_convolution_u16(src_image, dst_image, offset, coeffs, cpu_extensions);
49 }
50}