Module default

Module default 

Source
Expand description

Recommended API with optimal implementations for each use case.

See module documentation for details. Recommended API for sRGB ↔ linear conversion.

This module provides the optimal implementation for each use case:

  • Single values: Scalar functions (SIMD overhead not worthwhile)
  • Slices: SIMD-accelerated with runtime CPU dispatch
  • x8 batches: SIMD with dispatch (_dispatch) or inlineable (_inline)

§Quick Start

use linear_srgb::default::{srgb_to_linear, linear_to_srgb};

// Single value conversion
let linear = srgb_to_linear(0.5);
let srgb = linear_to_srgb(linear);

§Batch Processing

use linear_srgb::default::{srgb_to_linear_slice, linear_to_srgb_slice};

let mut values = vec![0.5f32; 10000];
srgb_to_linear_slice(&mut values);  // SIMD-accelerated
linear_to_srgb_slice(&mut values);

§x8 SIMD Functions

For manual SIMD control, use the x8 functions:

  • *_x8 - Default with CPU dispatch (standalone use)
  • [inline] module - #[inline(always)] variants for use inside your own #[multiversed] code
use linear_srgb::default::{linear_to_srgb_x8, linear_to_srgb_u8_x8};
use wide::f32x8;

let linear = f32x8::splat(0.214);
let srgb = linear_to_srgb_x8(linear);  // CPU dispatch
let srgb_u8 = linear_to_srgb_u8_x8(linear);

For use inside #[multiversed] functions (no dispatch overhead):

use linear_srgb::default::inline::*;

Re-exports§

pub use crate::scalar::gamma_to_linear;
pub use crate::scalar::gamma_to_linear_f64;
pub use crate::scalar::linear_to_gamma;
pub use crate::scalar::linear_to_gamma_f64;
pub use crate::scalar::linear_to_srgb;
pub use crate::scalar::linear_to_srgb_extended;
pub use crate::scalar::linear_to_srgb_f64;
pub use crate::scalar::linear_to_srgb_u8;
pub use crate::scalar::srgb_to_linear;
pub use crate::scalar::srgb_to_linear_extended;
pub use crate::scalar::srgb_to_linear_f64;
pub use crate::simd::srgb_u8_to_linear;
pub use crate::simd::gamma_to_linear_slice;
pub use crate::simd::gamma_to_linear_x8_slice;
pub use crate::simd::linear_to_gamma_slice;
pub use crate::simd::linear_to_gamma_x8_slice;
pub use crate::simd::linear_to_srgb_slice;
pub use crate::simd::linear_to_srgb_u8_slice;
pub use crate::simd::linear_to_srgb_x8_slice;
pub use crate::simd::srgb_to_linear_slice;
pub use crate::simd::srgb_to_linear_x8_slice;
pub use crate::simd::srgb_u8_to_linear_slice;
pub use crate::simd::gamma_to_linear_x8_dispatch as gamma_to_linear_x8;
pub use crate::simd::linear_to_gamma_x8_dispatch as linear_to_gamma_x8;
pub use crate::simd::linear_to_srgb_u8_x8_dispatch as linear_to_srgb_u8_x8;
pub use crate::simd::linear_to_srgb_x8_dispatch as linear_to_srgb_x8;
pub use crate::simd::srgb_to_linear_x8_dispatch as srgb_to_linear_x8;
pub use crate::simd::srgb_u8_to_linear_x8;
pub use crate::lut::SrgbConverter;

Modules§

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