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::Mat4;
8 use std::ops::Mul;
9 use support::*;
10
11 bench_unop!(
12 mat4_transpose,
13 "mat4 transpose",
14 op => transpose,
15 from => random_srt_mat4
16 );
17
18 bench_unop!(
19 mat4_determinant,
20 "mat4 determinant",
21 op => determinant,
22 from => random_srt_mat4
23 );
24
25 bench_unop!(
26 mat4_inverse,
27 "mat4 inverse",
28 op => inverse,
29 from => random_srt_mat4
30 );
31
32 bench_binop!(
33 mat4_mul_vec4,
34 "mat4 mul vec4",
35 op => mul,
36 from1 => random_srt_mat4,
37 from2 => random_vec4
38 );
39
40 bench_binop!(
41 mat4_transform_point3,
42 "mat4 transform point3",
43 op => transform_point3,
44 from1 => random_srt_mat4,
45 from2 => random_vec3
46 );
47
48 bench_binop!(
49 mat4_transform_vector3,
50 "mat4 transform vector3",
51 op => transform_vector3,
52 from1 => random_srt_mat4,
53 from2 => random_vec3
54 );
55
56 bench_binop!(
57 mat4_transform_point3a,
58 "mat4 transform point3a",
59 op => transform_point3a,
60 from1 => random_srt_mat4,
61 from2 => random_vec3a
62 );
63
64 bench_binop!(
65 mat4_transform_vector3a,
66 "mat4 transform vector3a",
67 op => transform_vector3a,
68 from1 => random_srt_mat4,
69 from2 => random_vec3a
70 );
71
72 bench_binop!(
73 mat4_mul_mat4,
74 "mat4 mul mat4",
75 op => mul,
76 from => random_srt_mat4
77 );
78
79 bench_from_ypr!(
80 mat4_from_ypr,
81 "mat4 from ypr",
82 ty => Mat4
83 );
84
mat4_from_srt(c: &mut Criterion)85 pub fn mat4_from_srt(c: &mut Criterion) {
86 use glam::{Quat, Vec3};
87 const SIZE: usize = 1 << 13;
88 let mut rng = support::PCG32::default();
89 let inputs = criterion::black_box(
90 (0..SIZE)
91 .map(|_| {
92 (
93 random_nonzero_vec3(&mut rng),
94 random_quat(&mut rng),
95 random_vec3(&mut rng),
96 )
97 })
98 .collect::<Vec<(Vec3, Quat, Vec3)>>(),
99 );
100 let mut outputs = vec![Mat4::default(); SIZE];
101 let mut i = 0;
102 c.bench_function("mat4 from srt", |b| {
103 b.iter(|| {
104 i = (i + 1) & (SIZE - 1);
105 unsafe {
106 let data = inputs.get_unchecked(i);
107 *outputs.get_unchecked_mut(i) =
108 Mat4::from_scale_rotation_translation(data.0, data.1, data.2)
109 }
110 })
111 });
112 }
113
114 criterion_group!(
115 benches,
116 mat4_determinant,
117 mat4_from_srt,
118 mat4_from_ypr,
119 mat4_inverse,
120 mat4_mul_mat4,
121 mat4_mul_vec4,
122 mat4_transform_point3,
123 mat4_transform_point3a,
124 mat4_transform_vector3,
125 mat4_transform_vector3a,
126 mat4_transpose,
127 );
128
129 criterion_main!(benches);
130