1 #[path = "support/macros.rs"]
2 #[macro_use]
3 mod macros;
4 mod support;
5 
6 use criterion::{criterion_group, criterion_main, Criterion};
7 use glam::Vec3;
8 use std::ops::Mul;
9 use support::*;
10 
11 bench_binop!(
12     vec3_mul_vec3,
13     "vec3 mul vec3",
14     op => mul,
15     from1 => random_vec3,
16     from2 => random_vec3
17 );
18 
19 #[inline]
vec3_to_rgb_op(v: Vec3) -> u3220 fn vec3_to_rgb_op(v: Vec3) -> u32 {
21     let (red, green, blue) = (v.min(Vec3::ONE).max(Vec3::ZERO) * 255.0).into();
22     (red as u32) << 16 | (green as u32) << 8 | (blue as u32)
23 }
24 
25 #[inline]
vec3_fields(v: Vec3) -> [f32; 3]26 fn vec3_fields(v: Vec3) -> [f32; 3] {
27     [v.x, v.y, v.z]
28 }
29 
30 #[inline]
vec3_into_array(v: Vec3) -> [f32; 3]31 fn vec3_into_array(v: Vec3) -> [f32; 3] {
32     v.into()
33 }
34 
35 #[inline]
vec3_into_tuple(v: Vec3) -> (f32, f32, f32)36 fn vec3_into_tuple(v: Vec3) -> (f32, f32, f32) {
37     v.into()
38 }
39 
40 bench_func!(
41 vec3_to_rgb,
42 "vec3 to rgb",
43 op => vec3_to_rgb_op,
44 from => random_vec3
45 );
46 
47 bench_func!(
48 vec3_to_array_fields,
49 "vec3 into array fields",
50 op => vec3_fields,
51 from => random_vec3
52 );
53 
54 bench_func!(
55 vec3_to_array_into,
56 "vec3 into array fast",
57 op => vec3_into_array,
58 from => random_vec3
59 );
60 
61 bench_func!(
62 vec3_to_tuple_into,
63 "vec3 into tuple fast",
64 op => vec3_into_tuple,
65 from => random_vec3
66 );
67 
68 // ---
69 
70 #[inline]
vec3_normalize(v: Vec3) -> Vec371 fn vec3_normalize(v: Vec3) -> Vec3 {
72     v.normalize()
73 }
74 
75 bench_func!(
76     vec3_normalize_bench,
77     "vec3 normalize",
78     op => vec3_normalize,
79     from => random_vec3
80 );
81 
82 #[inline]
vec3_normalize_or_zero(v: Vec3) -> Vec383 fn vec3_normalize_or_zero(v: Vec3) -> Vec3 {
84     v.normalize_or_zero()
85 }
86 
87 bench_func!(
88     vec3_normalize_or_zero_bench,
89     "vec3 normalize_or_zero",
90     op => vec3_normalize_or_zero,
91     from => random_vec3
92 );
93 
94 // ---
95 
96 #[inline(always)]
vec3_any_orthogonal_vector(v: Vec3) -> Vec397 fn vec3_any_orthogonal_vector(v: Vec3) -> Vec3 {
98     v.any_orthogonal_vector()
99 }
100 
101 bench_func!(
102     vec3_any_orthogonal_vector_bench,
103     "vec3 any_orthogonal_vector",
104     op => vec3_any_orthogonal_vector,
105     from => random_vec3
106 );
107 
108 #[inline(always)]
vec3_any_orthonormal_vector(v: Vec3) -> Vec3109 fn vec3_any_orthonormal_vector(v: Vec3) -> Vec3 {
110     v.any_orthonormal_vector()
111 }
112 
113 bench_func!(
114     vec3_any_orthonormal_vector_bench,
115     "vec3 any_orthonormal_vector",
116     op => vec3_any_orthonormal_vector,
117     from => random_vec3
118 );
119 
120 #[inline(always)]
vec3_any_orthonormal_pair(v: Vec3) -> (Vec3, Vec3)121 fn vec3_any_orthonormal_pair(v: Vec3) -> (Vec3, Vec3) {
122     v.any_orthonormal_pair()
123 }
124 
125 bench_func!(
126     vec3_any_orthonormal_pair_bench,
127     "vec3 any_orthonormal_pair",
128     op => vec3_any_orthonormal_pair,
129     from => random_vec3
130 );
131 
132 // ---
133 
134 euler!(vec3_euler, "vec3 euler", ty => Vec3, storage => Vec3, zero => Vec3::ZERO, rand => random_vec3);
135 
136 bench_binop!(
137     vec3_angle_between,
138     "vec3 angle_between",
139     op => angle_between,
140     from1 => random_vec3,
141     from2 => random_vec3
142 );
143 
144 bench_select!(
145     vec3_select,
146     "vec3 select",
147     ty => Vec3,
148     op => cmple,
149     from => random_vec3
150 );
151 
152 criterion_group!(
153     benches,
154     vec3_mul_vec3,
155     vec3_angle_between,
156     vec3_normalize_bench,
157     vec3_normalize_or_zero_bench,
158     vec3_any_orthogonal_vector_bench,
159     vec3_any_orthonormal_vector_bench,
160     vec3_any_orthonormal_pair_bench,
161     vec3_euler,
162     vec3_select,
163     vec3_to_array_fields,
164     vec3_to_array_into,
165     vec3_to_rgb,
166     vec3_to_tuple_into,
167 );
168 
169 criterion_main!(benches);
170