fer/convolution/u16x3/
mod.rs

1use 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}