1 /* Public domain */
2 /*
3 * Microbenchmarks for comparing the performance of M_Vector3 operations
4 * on random vector sets, under different backends.
5 */
6
7 static __inline__ void
UseMatrix(const M_Matrix44 * M)8 UseMatrix(const M_Matrix44 *M)
9 {
10 if (M->m[0][0] > M->m[3][3]) { realJunk = M->m[1][1]+M->m[2][2]; }
11 }
12
13 static void
MatrixZero44(void * ti)14 MatrixZero44(void *ti)
15 {
16 M_Matrix44 M[10];
17 int i;
18 for (i = 0; i < 10; i++) { M[i] = M_MatZero44(); }
19 for (i = 0; i < 10; i++) { UseMatrix(&M[i]); }
20 }
21 static void
MatrixZero44v(void * ti)22 MatrixZero44v(void *ti)
23 {
24 M_Matrix44 M[10];
25 int i;
26 for (i = 0; i < 10; i++) { M_MatZero44v(&M[i]); }
27 for (i = 0; i < 10; i++) { UseMatrix(&M[i]); }
28 }
29
30 static void
MatrixIdentity44(void * ti)31 MatrixIdentity44(void *ti)
32 {
33 M_Matrix44 M[10];
34 int i;
35 for (i = 0; i < 10; i++) { M[i] = M_MatIdentity44(); }
36 for (i = 0; i < 10; i++) { UseMatrix(&M[i]); }
37 }
38 static void
MatrixIdentity44v(void * ti)39 MatrixIdentity44v(void *ti)
40 {
41 M_Matrix44 M[10];
42 int i;
43 for (i = 0; i < 10; i++) { M_MatIdentity44v(&M[i]); }
44 for (i = 0; i < 10; i++) { UseMatrix(&M[i]); }
45 }
46
47 static void
MatrixInvert44(void * ti)48 MatrixInvert44(void *ti)
49 {
50 M_Matrix44 M[2], Minv[2];
51 int i;
52 for (i = 0; i < 2; i++) { M[i] = RandomMatrix44(ti); }
53 for (i = 0; i < 2; i++) { Minv[i] = M_MatInvert44(M[i]); }
54 for (i = 0; i < 2; i++) { UseMatrix(&Minv[i]); }
55 }
56
57 static void
MatrixTranspose44(void * ti)58 MatrixTranspose44(void *ti)
59 {
60 M_Matrix44 M[6], Mt[6];
61 int i;
62 for (i = 0; i < 6; i++) { M[i] = RandomMatrix44(ti); }
63 for (i = 0; i < 6; i++) { Mt[i] = M_MatTranspose44(M[i]); }
64 for (i = 0; i < 6; i++) { UseMatrix(&Mt[i]); }
65 }
66 static void
MatrixTranspose44p(void * ti)67 MatrixTranspose44p(void *ti)
68 {
69 M_Matrix44 M[6], Mt[6];
70 int i;
71 for (i = 0; i < 6; i++) { M[i] = RandomMatrix44(ti); }
72 for (i = 0; i < 6; i++) { Mt[i] = M_MatTranspose44p(&M[i]); }
73 for (i = 0; i < 6; i++) { UseMatrix(&Mt[i]); }
74 }
75 static void
MatrixTranspose44v(void * ti)76 MatrixTranspose44v(void *ti)
77 {
78 M_Matrix44 M[6];
79 int i;
80 for (i = 0; i < 6; i++) { M[i] = RandomMatrix44(ti); }
81 for (i = 0; i < 6; i++) { M_MatTranspose44v(&M[i]); }
82 for (i = 0; i < 6; i++) { UseMatrix(&M[i]); }
83 }
84
85 static void
MatrixMult44(void * ti)86 MatrixMult44(void *ti)
87 {
88 M_Matrix44 A[3], B[3], AB[3];
89 int i;
90 for (i = 0; i < 3; i++) { A[i] = RandomMatrix44(ti); B[i] = RandomMatrix44(ti); }
91 for (i = 0; i < 3; i++) { AB[i] = M_MatMult44(A[i], B[i]); }
92 for (i = 0; i < 3; i++) { UseMatrix(&AB[i]); }
93 }
94 static void
MatrixMult44v(void * ti)95 MatrixMult44v(void *ti)
96 {
97 M_Matrix44 A[3], B[3];
98 int i;
99 for (i = 0; i < 3; i++) { A[i] = RandomMatrix44(ti); B[i] = RandomMatrix44(ti); }
100 for (i = 0; i < 3; i++) { M_MatMult44v(&A[i], &B[i]); }
101 for (i = 0; i < 3; i++) { UseMatrix(&A[i]); }
102 }
103
104 static void
MatrixCopy44(void * ti)105 MatrixCopy44(void *ti)
106 {
107 M_Matrix44 A[6], B[6];
108 int i;
109 for (i = 0; i < 6; i++) { A[i] = RandomMatrix44(ti); }
110 for (i = 0; i < 6; i++) { M_MatCopy44(&B[i], &A[i]); }
111 for (i = 0; i < 6; i++) { realJunk = B[i].m[0][0]; }
112 }
113
114 static void
MatrixRotateAxis44(void * ti)115 MatrixRotateAxis44(void *ti)
116 {
117 M_Matrix44 A[6];
118 M_Vector3 b[6];
119 M_Real theta[6];
120 int i;
121 for (i = 0; i < 6; i++) {
122 A[i] = RandomMatrix44(ti);
123 b[i] = RandomVector3(ti);
124 theta[i] = RandomReal(ti);
125 }
126 for (i = 0; i < 6; i++) { M_MatRotateAxis44(&A[i], theta[i], b[i]); }
127 for (i = 0; i < 6; i++) { realJunk = A[i].m[0][0]; }
128 }
129 static void
MatrixRotate44I(void * ti)130 MatrixRotate44I(void *ti)
131 {
132 M_Matrix44 A[6];
133 M_Real theta[6];
134 int i;
135 for (i = 0; i < 6; i++) {
136 A[i] = RandomMatrix44(ti);
137 theta[i] = RandomReal(ti);
138 }
139 for (i = 0; i < 6; i++) { M_MatRotate44I(&A[i], theta[i]); }
140 for (i = 0; i < 6; i++) { realJunk = A[i].m[0][0]; }
141 }
142 static void
MatrixTranslate44(void * ti)143 MatrixTranslate44(void *ti)
144 {
145 M_Matrix44 A[6];
146 M_Vector3 b[6];
147 int i;
148 for (i = 0; i < 6; i++) {
149 A[i] = RandomMatrix44(ti);
150 b[i] = RandomVector3(ti);
151 }
152 for (i = 0; i < 6; i++) { M_MatTranslate44v(&A[i], b[i]); }
153 for (i = 0; i < 6; i++) { realJunk = A[i].m[0][0]; }
154 }
155 static void
MatrixTranslateX44(void * ti)156 MatrixTranslateX44(void *ti)
157 {
158 M_Matrix44 A[6];
159 M_Real t[6];
160 int i;
161 for (i = 0; i < 6; i++) {
162 A[i] = RandomMatrix44(ti);
163 t[i] = RandomReal(ti);
164 }
165 for (i = 0; i < 6; i++) { M_MatTranslate44X(&A[i], t[i]); }
166 for (i = 0; i < 6; i++) { realJunk = A[i].m[0][0]; }
167 }
168 static void
MatrixScale44(void * ti)169 MatrixScale44(void *ti)
170 {
171 M_Matrix44 A[6];
172 M_Vector4 b[6];
173 int i;
174 for (i = 0; i < 6; i++) {
175 A[i] = RandomMatrix44(ti);
176 b[i] = RandomVector4(ti);
177 }
178 for (i = 0; i < 6; i++) { M_MatScale44(&A[i], b[i].x, b[i].y, b[i].z, b[i].w); }
179 for (i = 0; i < 6; i++) { realJunk = A[i].m[0][0]; }
180 }
181 static void
MatrixUniScale44(void * ti)182 MatrixUniScale44(void *ti)
183 {
184 M_Matrix44 A[6];
185 M_Real s[6];
186 int i;
187 for (i = 0; i < 6; i++) {
188 A[i] = RandomMatrix44(ti);
189 s[i] = RandomReal(ti);
190 }
191 for (i = 0; i < 6; i++) { M_MatUniScale44(&A[i], s[i]); }
192 for (i = 0; i < 6; i++) { realJunk = A[i].m[0][0]; }
193 }
194
195 static struct ag_benchmark_fn mathBenchMatrix44Fns[] = {
196 { "Zero44()", MatrixZero44 },
197 { "Zero44v()", MatrixZero44v },
198 { "Identity44()", MatrixIdentity44 },
199 { "Identity44v()", MatrixIdentity44v },
200 { "Transpose44()", MatrixTranspose44 },
201 { "Transpose44p()", MatrixTranspose44p },
202 { "Transpose44v()", MatrixTranspose44v },
203 { "Invert44()", MatrixInvert44 },
204 { "Mult44()", MatrixMult44 },
205 { "Mult44v()", MatrixMult44v },
206 { "Copy()", MatrixCopy44 },
207 { "RotateAxis44()", MatrixRotateAxis44 },
208 { "Rotate44I()", MatrixRotate44I },
209 { "Translate44()", MatrixTranslate44 },
210 { "TranslateX44()", MatrixTranslateX44 },
211 { "Scale44()", MatrixScale44 },
212 { "UniScale44()", MatrixUniScale44 },
213 };
214 struct ag_benchmark mathBenchMatrix44 = {
215 "M_Matrix44",
216 &mathBenchMatrix44Fns[0],
217 sizeof(mathBenchMatrix44Fns) / sizeof(mathBenchMatrix44Fns[0]),
218 10, 50000, 10000
219 };
220