• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![allow(clippy::all)]
2 
3 use core::hint::black_box;
4 use iai_callgrind::{library_benchmark, library_benchmark_group, main};
5 
6 use glam::{BVec3A, Mat2, Mat3A, Mat4, Quat, Vec2, Vec3A, Vec4};
7 
8 #[cfg(feature = "scalar-math")]
9 use glam::BVec4 as BVec4A;
10 
11 #[cfg(not(feature = "scalar-math"))]
12 use glam::BVec4A;
13 
14 #[inline]
mat2() -> Mat215 fn mat2() -> Mat2 {
16     black_box(Mat2::from_cols_array(&[1.0, 2.0, 3.0, 4.0]))
17 }
18 
19 #[inline]
mat3a() -> Mat3A20 fn mat3a() -> Mat3A {
21     black_box(Mat3A::from_cols_array(&[
22         1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0,
23     ]))
24 }
25 
26 #[inline]
mat4() -> Mat427 fn mat4() -> Mat4 {
28     black_box(Mat4::from_cols_array(&[
29         1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0,
30     ]))
31 }
32 
33 #[inline]
quat() -> Quat34 fn quat() -> Quat {
35     black_box(Quat::from_xyzw(0.0, 0.0, 0.0, 1.0))
36 }
37 
38 #[inline]
vec2() -> Vec239 fn vec2() -> Vec2 {
40     black_box(Vec2::new(1.0, 2.0))
41 }
42 
43 #[inline]
vec3a() -> Vec3A44 fn vec3a() -> Vec3A {
45     black_box(Vec3A::new(1.0, 2.0, 3.0))
46 }
47 
48 #[inline]
bvec3a() -> BVec3A49 fn bvec3a() -> BVec3A {
50     black_box(BVec3A::new(true, false, true))
51 }
52 
53 #[inline]
vec4() -> Vec454 fn vec4() -> Vec4 {
55     black_box(Vec4::new(1.0, 2.0, 3.0, 4.0))
56 }
57 
58 #[inline]
bvec4a() -> BVec4A59 fn bvec4a() -> BVec4A {
60     black_box(BVec4A::new(true, false, true, false))
61 }
62 
63 #[library_benchmark]
64 #[bench::args(mat2())]
mat2_determinant(m: Mat2) -> f3265 fn mat2_determinant(m: Mat2) -> f32 {
66     black_box(m.determinant())
67 }
68 
69 #[library_benchmark]
70 #[bench::args(mat2())]
mat2_inverse(m: Mat2) -> Mat271 fn mat2_inverse(m: Mat2) -> Mat2 {
72     black_box(m.inverse())
73 }
74 
75 #[library_benchmark]
76 #[bench::args(mat2())]
mat2_transpose(m: Mat2) -> Mat277 fn mat2_transpose(m: Mat2) -> Mat2 {
78     black_box(m.transpose())
79 }
80 
81 #[library_benchmark]
82 #[bench::args(mat2(), mat2())]
mat2_mul_mat2(m1: Mat2, m2: Mat2) -> Mat283 fn mat2_mul_mat2(m1: Mat2, m2: Mat2) -> Mat2 {
84     black_box(m1 * m2)
85 }
86 
87 #[library_benchmark]
88 #[bench::args(mat2(), vec2())]
mat2_mul_vec2(m: Mat2, v: Vec2) -> Vec289 fn mat2_mul_vec2(m: Mat2, v: Vec2) -> Vec2 {
90     black_box(m * v)
91 }
92 
93 #[library_benchmark]
94 #[bench::args(mat3a())]
mat3a_determinant(m: Mat3A) -> f3295 fn mat3a_determinant(m: Mat3A) -> f32 {
96     black_box(m.determinant())
97 }
98 
99 #[library_benchmark]
100 #[bench::args(mat3a())]
mat3a_inverse(m: Mat3A) -> Mat3A101 fn mat3a_inverse(m: Mat3A) -> Mat3A {
102     black_box(m.inverse())
103 }
104 
105 #[library_benchmark]
106 #[bench::args(mat3a())]
mat3a_transpose(m: Mat3A) -> Mat3A107 fn mat3a_transpose(m: Mat3A) -> Mat3A {
108     black_box(m.transpose())
109 }
110 
111 #[library_benchmark]
112 #[bench::args(mat3a(), mat3a())]
mat3a_mul_mat3a(m1: Mat3A, m2: Mat3A) -> Mat3A113 fn mat3a_mul_mat3a(m1: Mat3A, m2: Mat3A) -> Mat3A {
114     black_box(m1 * m2)
115 }
116 
117 #[library_benchmark]
118 #[bench::args(mat3a(), vec3a())]
mat3a_mul_vec3a(m: Mat3A, v: Vec3A) -> Vec3A119 fn mat3a_mul_vec3a(m: Mat3A, v: Vec3A) -> Vec3A {
120     black_box(m * v)
121 }
122 
123 #[library_benchmark]
124 #[bench::args(mat4())]
mat4_determinant(m: Mat4) -> f32125 fn mat4_determinant(m: Mat4) -> f32 {
126     black_box(m.determinant())
127 }
128 
129 #[library_benchmark]
130 #[bench::args(mat4())]
mat4_inverse(m: Mat4) -> Mat4131 fn mat4_inverse(m: Mat4) -> Mat4 {
132     black_box(m.inverse())
133 }
134 
135 #[library_benchmark]
136 #[bench::args(mat4())]
mat4_transpose(m: Mat4) -> Mat4137 fn mat4_transpose(m: Mat4) -> Mat4 {
138     black_box(m.transpose())
139 }
140 
141 #[library_benchmark]
142 #[bench::args(mat4(), mat4())]
mat4_mul_mat4(m1: Mat4, m2: Mat4) -> Mat4143 fn mat4_mul_mat4(m1: Mat4, m2: Mat4) -> Mat4 {
144     black_box(m1 * m2)
145 }
146 
147 #[library_benchmark]
148 #[bench::args(mat4(), vec4())]
mat4_mul_vec4(m: Mat4, v: Vec4) -> Vec4149 fn mat4_mul_vec4(m: Mat4, v: Vec4) -> Vec4 {
150     black_box(m * v)
151 }
152 
153 #[library_benchmark]
154 #[bench::args(quat(), quat())]
quat_mul_quat(q1: Quat, q2: Quat) -> Quat155 fn quat_mul_quat(q1: Quat, q2: Quat) -> Quat {
156     black_box(q1 * q2)
157 }
158 
159 #[library_benchmark]
160 #[bench::args(quat(), vec3a())]
quat_mul_vec3a(q: Quat, v: Vec3A) -> Vec3A161 fn quat_mul_vec3a(q: Quat, v: Vec3A) -> Vec3A {
162     black_box(q * v)
163 }
164 
165 #[library_benchmark]
166 #[bench::args(vec3a(), vec3a())]
vec3a_dot(v1: Vec3A, v2: Vec3A) -> f32167 fn vec3a_dot(v1: Vec3A, v2: Vec3A) -> f32 {
168     black_box(v1.dot(v2))
169 }
170 
171 #[library_benchmark]
172 #[bench::args(vec3a(), vec3a())]
vec3a_cross(v1: Vec3A, v2: Vec3A) -> Vec3A173 fn vec3a_cross(v1: Vec3A, v2: Vec3A) -> Vec3A {
174     black_box(v1.cross(v2))
175 }
176 
177 #[library_benchmark]
178 #[bench::args(vec3a())]
vec3a_length(v: Vec3A) -> f32179 fn vec3a_length(v: Vec3A) -> f32 {
180     black_box(v.length())
181 }
182 
183 #[library_benchmark]
184 #[bench::args(vec3a())]
vec3a_normalize(v: Vec3A) -> Vec3A185 fn vec3a_normalize(v: Vec3A) -> Vec3A {
186     black_box(v.normalize())
187 }
188 
189 #[library_benchmark]
190 #[bench::args(bvec3a(), vec3a(), vec3a())]
vec3a_select(b: BVec3A, v1: Vec3A, v2: Vec3A) -> Vec3A191 fn vec3a_select(b: BVec3A, v1: Vec3A, v2: Vec3A) -> Vec3A {
192     black_box(Vec3A::select(b, v1, v2))
193 }
194 
195 #[library_benchmark]
196 #[bench::args(vec4(), vec4())]
vec4_dot(v1: Vec4, v2: Vec4) -> f32197 fn vec4_dot(v1: Vec4, v2: Vec4) -> f32 {
198     black_box(v1.dot(v2))
199 }
200 
201 #[library_benchmark]
202 #[bench::args(vec4())]
vec4_length(v: Vec4) -> f32203 fn vec4_length(v: Vec4) -> f32 {
204     black_box(v.length())
205 }
206 
207 #[library_benchmark]
208 #[bench::args(vec4())]
vec4_normalize(v: Vec4) -> Vec4209 fn vec4_normalize(v: Vec4) -> Vec4 {
210     black_box(v.normalize())
211 }
212 
213 #[library_benchmark]
214 #[bench::args(bvec4a(), vec4(), vec4())]
vec4_select(b: BVec4A, v1: Vec4, v2: Vec4) -> Vec4215 fn vec4_select(b: BVec4A, v1: Vec4, v2: Vec4) -> Vec4 {
216     black_box(Vec4::select(b, v1, v2))
217 }
218 
219 library_benchmark_group!(
220     name = bench_mat2;
221     benchmarks =
222         mat2_determinant,
223         mat2_inverse,
224         mat2_mul_mat2,
225         mat2_mul_vec2,
226         mat2_transpose,
227 );
228 
229 library_benchmark_group!(
230     name = bench_mat3a;
231     benchmarks =
232         mat3a_determinant,
233         mat3a_inverse,
234         mat3a_mul_mat3a,
235         mat3a_mul_vec3a,
236         mat3a_transpose,
237 );
238 
239 library_benchmark_group!(
240     name = bench_mat4;
241     benchmarks =
242         mat4_determinant,
243         mat4_inverse,
244         mat4_mul_mat4,
245         mat4_mul_vec4,
246         mat4_transpose,
247 );
248 
249 library_benchmark_group!(
250     name = bench_quat;
251     benchmarks =
252         quat_mul_quat,
253         quat_mul_vec3a,
254 );
255 
256 library_benchmark_group!(
257     name = bench_vec3a;
258     benchmarks =
259         vec3a_dot,
260         vec3a_cross,
261         vec3a_length,
262         vec3a_normalize,
263         vec3a_select,
264 );
265 
266 library_benchmark_group!(
267     name = bench_vec4;
268     benchmarks =
269         vec4_dot,
270         vec4_length,
271         vec4_normalize,
272         vec4_select,
273 );
274 
275 main!(
276     library_benchmark_groups = bench_mat2,
277     bench_mat3a,
278     bench_mat4,
279     bench_quat,
280     bench_vec3a,
281     bench_vec4
282 );
283