kahlo 0.0.3

Optimized software rendering library.
Documentation
use crate::{
    formats::{Abgr32, Rgba32},
    math::*,
    op::{avx::*, binary_map_pixel_data_with},
    prelude::*,
};

/// AVX entry point for RGBA-ABGR copying (or vice-versa).
pub fn avx_rgba32_abgr32(
    write_data: &mut dyn BitmapRawDataMut,
    read_data: &dyn BitmapRawData,
    params: &(PixelBox, PixelPoint),
) {
    binary_map_pixel_data_with::<8, Rgba32, Abgr32>(
        write_data,
        read_data,
        params.0.size(),
        params.1,
        params.0.min,
        |w, r| unsafe {
            (rgba32_abgr32_simple)(
                &mut *(w.as_mut_ptr() as *mut [u8; 32]),
                &*(r.as_ptr() as *const [u8; 32]),
            )
        },
    )
}

#[inline]
#[target_feature(enable = "avx2")]
fn rgba32_abgr32_simple(e: &mut [u8; 32], s: &[u8; 32]) {
    Ri8x32::load32(s).swap_endianness().store32(e)
}