| #[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_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_select!( |
| vec3_select, |
| "vec3 select", |
| ty => Vec3, |
| op => cmple, |
| from => random_vec3 |
| ); |
| |
| criterion_group!( |
| benches, |
| vec3_mul_vec3, |
| vec3_angle_between, |
| vec3_normalize_bench, |
| vec3_normalize_or_zero_bench, |
| vec3_any_orthogonal_vector_bench, |
| vec3_any_orthonormal_vector_bench, |
| vec3_any_orthonormal_pair_bench, |
| vec3_euler, |
| vec3_select, |
| vec3_to_array_fields, |
| vec3_to_array_into, |
| vec3_to_rgb, |
| vec3_to_tuple_into, |
| ); |
| |
| criterion_main!(benches); |