singe-npp 0.1.0-alpha.8

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

pub(crate) fn lookup_table_trilinear_u8_c4(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C4>,
    destination: &mut ImageViewMut<'_, u8, C4>,
    values: &DeviceMemory<u32>,
    levels: [&[u8]; 3],
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    let (mut level_pointers, mut level_counts) =
        lookup_table_trilinear_descriptors(values.len(), levels)?;

    unsafe {
        try_ffi!(sys::nppiLUT_Trilinear_8u_C4R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            source.size().into(),
            values.as_ptr().cast_mut(),
            level_pointers.as_mut_ptr().cast(),
            level_counts.as_mut_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn lookup_table_trilinear_u8_ac4(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, AC4>,
    destination: &mut ImageViewMut<'_, u8, AC4>,
    values: &DeviceMemory<u32>,
    levels: [&[u8]; 3],
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    let (mut level_pointers, mut level_counts) =
        lookup_table_trilinear_descriptors(values.len(), levels)?;

    unsafe {
        try_ffi!(sys::nppiLUT_Trilinear_8u_AC4R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            source.size().into(),
            values.as_ptr().cast_mut(),
            level_pointers.as_mut_ptr().cast(),
            level_counts.as_mut_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn lookup_table_trilinear_u8_ac4_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, u8, AC4>,
    values: &DeviceMemory<u32>,
    levels: [&[u8]; 3],
) -> Result<()> {
    let (mut level_pointers, mut level_counts) =
        lookup_table_trilinear_descriptors(values.len(), levels)?;

    unsafe {
        try_ffi!(sys::nppiLUT_Trilinear_8u_AC4IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            values.as_ptr().cast_mut(),
            level_pointers.as_mut_ptr().cast(),
            level_counts.as_mut_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}
impl_generic_lookup_table_trilinear!(
    LookupTableTrilinearC4,
    lookup_table_trilinear,
    lookup_table_trilinear_c4,
    C4,
    [u8 => lookup_table_trilinear_u8_c4]
);
impl_generic_lookup_table_trilinear!(
    LookupTableTrilinearAC4,
    lookup_table_trilinear,
    lookup_table_trilinear_ac4,
    AC4,
    [u8 => lookup_table_trilinear_u8_ac4]
);
impl_generic_lookup_table_trilinear_in_place!(
    LookupTableTrilinearAC4InPlace,
    lookup_table_trilinear_in_place,
    lookup_table_trilinear_ac4_in_place,
    AC4,
    [u8 => lookup_table_trilinear_u8_ac4_in_place]
);