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.