#[path = "support/macros.rs"] #[macro_use] mod macros; mod support; use criterion::{criterion_group, criterion_main, Criterion}; use glam::{Vec3, Vec3A}; use std::ops::Mul; use support::*; bench_binop!( vec3a_mul_vec3a, "vec3a mul vec3a", op => mul, from1 => random_vec3a, from2 => random_vec3a ); #[inline] fn vec3a_to_rgb_op(v: Vec3A) -> u32 { let (red, green, blue) = (v.min(Vec3A::ONE).max(Vec3A::ZERO) * 255.0).into(); (red as u32) << 16 | (green as u32) << 8 | (blue as u32) } #[inline] fn vec3a_deref(v: Vec3A) -> [f32; 3] { [v.x, v.y, v.z] } #[inline] fn vec3a_into_array(v: Vec3A) -> [f32; 3] { v.into() } #[inline] fn vec3a_into_tuple(v: Vec3A) -> (f32, f32, f32) { v.into() } #[inline] fn vec3a_into_vec3(v: Vec3A) -> Vec3 { v.into() } bench_func!( vec3a_to_vec3, "vec3a into vec3", op => vec3a_into_vec3, from => random_vec3a ); bench_func!( vec3a_to_rgb, "vec3a to rgb", op => vec3a_to_rgb_op, from => random_vec3a ); bench_func!( vec3a_to_array_deref, "vec3a into array deref", op => vec3a_deref, from => random_vec3a ); bench_func!( vec3a_to_array_into, "vec3a into array fast", op => vec3a_into_array, from => random_vec3a ); bench_func!( vec3a_to_tuple_into, "vec3a into tuple fast", op => vec3a_into_tuple, from => random_vec3a ); euler!(vec3a_euler, "vec3a euler", ty => Vec3A, storage => Vec3A, zero => Vec3A::ZERO, rand => random_vec3a); #[inline] fn vec3a_normalize(v: Vec3A) -> Vec3A { v.normalize() } bench_func!( vec3a_normalize_bench, "vec3a normalize", op => vec3a_normalize, from => random_vec3a ); #[inline] fn vec3a_normalize_or(v: Vec3A) -> Vec3A { v.normalize_or(Vec3A::X) } bench_func!( vec3a_normalize_or_bench, "vec3a normalize_or", op => vec3a_normalize_or, from => random_vec3a ); #[inline] fn vec3a_normalize_or_zero(v: Vec3A) -> Vec3A { v.normalize_or_zero() } bench_func!( vec3a_normalize_or_zero_bench, "vec3a normalize_or_zero", op => vec3a_normalize_or_zero, from => random_vec3a ); bench_binop!( vec3a_angle_between, "vec3a angle_between", op => angle_between, from1 => random_vec3a, from2 => random_vec3a ); bench_binop!( vec3a_cross, "vec3a cross", op => cross, from1 => random_vec3a, from2 => random_vec3a ); bench_binop!( vec3a_dot, "vec3a dot", op => dot, from1 => random_vec3a, from2 => random_vec3a ); bench_unop!( vec3a_length, "vec3a length", op => length, from => random_vec3a ); bench_select!( vec3a_select, "vec3a select", ty => Vec3A, op => cmple, from => random_vec3a ); criterion_group!( benches, vec3a_normalize_bench, vec3a_normalize_or_bench, vec3a_normalize_or_zero_bench, vec3a_angle_between, vec3a_cross, vec3a_dot, vec3a_length, vec3a_euler, vec3a_mul_vec3a, vec3a_select, vec3a_to_array_deref, vec3a_to_array_into, vec3a_to_rgb, vec3a_to_tuple_into, vec3a_to_vec3, ); criterion_main!(benches);