#[path = "support/macros.rs"] #[macro_use] mod macros; mod support; use criterion::{criterion_group, criterion_main, Criterion}; use glam::Vec3; use std::ops::Mul; use support::*; bench_binop!( vec3_mul_vec3, "vec3 mul vec3", op => mul, from1 => random_vec3, from2 => random_vec3 ); #[inline] fn vec3_to_rgb_op(v: Vec3) -> u32 { let (red, green, blue) = (v.min(Vec3::ONE).max(Vec3::ZERO) * 255.0).into(); (red as u32) << 16 | (green as u32) << 8 | (blue as u32) } #[inline] fn vec3_fields(v: Vec3) -> [f32; 3] { [v.x, v.y, v.z] } #[inline] fn vec3_into_array(v: Vec3) -> [f32; 3] { v.into() } #[inline] fn vec3_into_tuple(v: Vec3) -> (f32, f32, f32) { v.into() } bench_func!( vec3_to_rgb, "vec3 to rgb", op => vec3_to_rgb_op, from => random_vec3 ); bench_func!( vec3_to_array_fields, "vec3 into array fields", op => vec3_fields, from => random_vec3 ); bench_func!( vec3_to_array_into, "vec3 into array fast", op => vec3_into_array, from => random_vec3 ); bench_func!( vec3_to_tuple_into, "vec3 into tuple fast", op => vec3_into_tuple, from => random_vec3 ); // --- #[inline] fn vec3_normalize(v: Vec3) -> Vec3 { v.normalize() } bench_func!( vec3_normalize_bench, "vec3 normalize", op => vec3_normalize, from => random_vec3 ); #[inline] fn vec3_normalize_or(v: Vec3) -> Vec3 { v.normalize_or(Vec3::X) } bench_func!( vec3_normalize_or_bench, "vec3 normalize_or", op => vec3_normalize_or, from => random_vec3 ); #[inline] fn vec3_normalize_or_zero(v: Vec3) -> Vec3 { v.normalize_or_zero() } bench_func!( vec3_normalize_or_zero_bench, "vec3 normalize_or_zero", op => vec3_normalize_or_zero, from => random_vec3 ); // --- #[inline(always)] fn vec3_any_orthogonal_vector(v: Vec3) -> Vec3 { v.any_orthogonal_vector() } bench_func!( vec3_any_orthogonal_vector_bench, "vec3 any_orthogonal_vector", op => vec3_any_orthogonal_vector, from => random_vec3 ); #[inline(always)] fn vec3_any_orthonormal_vector(v: Vec3) -> Vec3 { v.any_orthonormal_vector() } bench_func!( vec3_any_orthonormal_vector_bench, "vec3 any_orthonormal_vector", op => vec3_any_orthonormal_vector, from => random_vec3 ); #[inline(always)] fn vec3_any_orthonormal_pair(v: Vec3) -> (Vec3, Vec3) { v.any_orthonormal_pair() } bench_func!( vec3_any_orthonormal_pair_bench, "vec3 any_orthonormal_pair", op => vec3_any_orthonormal_pair, from => random_vec3 ); // --- euler!(vec3_euler, "vec3 euler", ty => Vec3, storage => Vec3, zero => Vec3::ZERO, rand => random_vec3); bench_binop!( vec3_angle_between, "vec3 angle_between", op => angle_between, from1 => random_vec3, from2 => random_vec3 ); bench_binop!( vec3_cross, "vec3 cross", op => cross, from1 => random_vec3, from2 => random_vec3 ); bench_binop!( vec3_dot, "vec3 dot", op => dot, from1 => random_vec3, from2 => random_vec3 ); bench_unop!( vec3_length, "vec3 length", op => length, from => random_vec3 ); bench_select!( vec3_select, "vec3 select", ty => Vec3, op => cmple, from => random_vec3 ); criterion_group!( benches, vec3_angle_between, vec3_any_orthogonal_vector_bench, vec3_any_orthonormal_pair_bench, vec3_any_orthonormal_vector_bench, vec3_cross, vec3_dot, vec3_euler, vec3_length, vec3_mul_vec3, vec3_normalize_bench, vec3_normalize_or_bench, vec3_normalize_or_zero_bench, vec3_select, vec3_to_array_fields, vec3_to_array_into, vec3_to_rgb, vec3_to_tuple_into, ); criterion_main!(benches);