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