singe-npp 0.1.0-alpha.8

Safe Rust wrappers for NVIDIA Performance Primitives library (NPP).
Documentation
use super::*;

macro_rules! impl_absolute_difference_constant {
    ($name:ident, $ty:ty, $ffi:ident) => {
        pub fn $name(
            stream_context: &StreamContext,
            source: &ImageView<'_, $ty, C1>,
            constant: $ty,
            destination: &mut ImageViewMut<'_, $ty, C1>,
        ) -> Result<()> {
            validate_same_size(source.size(), destination.size())?;
            unsafe {
                try_ffi!(sys::$ffi(
                    source.as_ptr().cast(),
                    source.step(),
                    destination.as_mut_ptr().cast(),
                    destination.step(),
                    source.size().into(),
                    constant.into(),
                    stream_context.as_raw(),
                ))?;
            }
            Ok(())
        }
    };
}

macro_rules! impl_absolute_difference_device_constant {
    ($name:ident, $ty:ty, $ffi:ident) => {
        pub fn $name(
            stream_context: &StreamContext,
            source: &ImageView<'_, $ty, C1>,
            constant: &DeviceMemory<$ty>,
            destination: &mut ImageViewMut<'_, $ty, C1>,
        ) -> Result<()> {
            validate_same_size(source.size(), destination.size())?;
            let constant = device_constant_mut_ptr(constant, 1)?;
            unsafe {
                try_ffi!(sys::$ffi(
                    source.as_ptr().cast(),
                    source.step(),
                    destination.as_mut_ptr().cast(),
                    destination.step(),
                    source.size().into(),
                    constant.cast(),
                    stream_context.as_raw(),
                ))?;
            }
            Ok(())
        }
    };
}

impl_absolute_difference_constant!(
    absolute_difference_constant_u8_c1,
    u8,
    nppiAbsDiffC_8u_C1R_Ctx
);
impl_absolute_difference_constant!(
    absolute_difference_constant_u16_c1,
    u16,
    nppiAbsDiffC_16u_C1R_Ctx
);
impl_absolute_difference_constant!(
    absolute_difference_constant_f32_c1,
    f32,
    nppiAbsDiffC_32f_C1R_Ctx
);
impl_absolute_difference_device_constant!(
    absolute_difference_device_constant_u8_c1,
    u8,
    nppiAbsDiffDeviceC_8u_C1R_Ctx
);
impl_absolute_difference_device_constant!(
    absolute_difference_device_constant_u16_c1,
    u16,
    nppiAbsDiffDeviceC_16u_C1R_Ctx
);
impl_absolute_difference_device_constant!(
    absolute_difference_device_constant_f32_c1,
    f32,
    nppiAbsDiffDeviceC_32f_C1R_Ctx
);