Module inline

Module inline 

Source
Expand description

Dispatch-free inline variants for use inside #[multiversed] functions.

When building your own SIMD-accelerated functions with multiversed, use these _inline variants to avoid nested dispatch overhead. These functions are #[inline(always)] and contain no dispatch overhead.

§Example

use linear_srgb::default::inline::*;
use multiversed::multiversed;
use wide::f32x8;

#[multiversed]  // Your function handles dispatch
pub fn process_pixels(data: &mut [f32]) {
    for chunk in data.chunks_exact_mut(8) {
        let v = f32x8::from([
            chunk[0], chunk[1], chunk[2], chunk[3],
            chunk[4], chunk[5], chunk[6], chunk[7],
        ]);
        // Use inline variants - no dispatch, just raw SIMD
        let linear = srgb_to_linear_x8(v);
        let processed = linear * f32x8::splat(1.5);
        let result = linear_to_srgb_x8(processed);
        let arr: [f32; 8] = result.into();
        chunk.copy_from_slice(&arr);
    }
}

Re-exports§

pub use crate::simd::gamma_to_linear_x8_inline as gamma_to_linear_x8;
pub use crate::simd::linear_to_gamma_x8_inline as linear_to_gamma_x8;
pub use crate::simd::linear_to_srgb_u8_x8_inline as linear_to_srgb_u8_x8;
pub use crate::simd::linear_to_srgb_x8_inline as linear_to_srgb_x8;
pub use crate::simd::srgb_to_linear_x8_inline as srgb_to_linear_x8;
pub use crate::simd::gamma_to_linear_x8_slice_inline as gamma_to_linear_x8_slice;
pub use crate::simd::linear_to_gamma_x8_slice_inline as linear_to_gamma_x8_slice;
pub use crate::simd::linear_to_srgb_x8_slice_inline as linear_to_srgb_x8_slice;
pub use crate::simd::srgb_to_linear_x8_slice_inline as srgb_to_linear_x8_slice;