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