32 #include "NE10_types.h"
34 #include "NE10_detmat.c.h"
40 #define IS_FLOAT_NEAR_ZERO(x) ( ((fabs(x))<(1e-12)) ? 1 : 0 )
42 ne10_result_t ne10_invmat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count)
44 ne10_float32_t det = 0.0f;
46 NE10_DETMAT_OPERATION_X_C
48 det = DET2x2 (&src[ itr ]);
50 if (1 == IS_FLOAT_NEAR_ZERO (det))
56 dst[ itr ].c1.r1 = det * src[ itr ].c2.r2;
57 dst[ itr ].c1.r2 = -1 * det * src[ itr ].c1.r2;
58 dst[ itr ].c2.r1 = -1 * det * src[ itr ].c2.r1;
59 dst[ itr ].c2.r2 = det * src[ itr ].c1.r1;
63 ne10_result_t ne10_invmat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count)
65 #define aa (src[ itr ].c1.r1)
66 #define bb (src[ itr ].c1.r2)
67 #define cc (src[ itr ].c1.r3)
68 #define dd (src[ itr ].c2.r1)
69 #define ee (src[ itr ].c2.r2)
70 #define ff (src[ itr ].c2.r3)
71 #define gg (src[ itr ].c3.r1)
72 #define hh (src[ itr ].c3.r2)
73 #define ii (src[ itr ].c3.r3)
75 ne10_float32_t det = 0.0f;
76 ne10_mat2x2f_t A, B, C, D, E, F, G, H, I;
78 NE10_DETMAT_OPERATION_X_C
80 det = DET3x3 (&src[ itr ]);
82 if (1 == IS_FLOAT_NEAR_ZERO (det))
89 createColumnMajorMatrix2x2 (&A, ee, ff, hh, ii);
90 createColumnMajorMatrix2x2 (&B, dd, ff, gg, ii);
91 createColumnMajorMatrix2x2 (&C, dd, ee, gg, hh);
92 createColumnMajorMatrix2x2 (&D, bb, cc, hh, ii);
93 createColumnMajorMatrix2x2 (&E, aa, cc, gg, ii);
94 createColumnMajorMatrix2x2 (&F, aa, bb, gg, hh);
95 createColumnMajorMatrix2x2 (&G, bb, cc, ee, ff);
96 createColumnMajorMatrix2x2 (&H, aa, cc, dd, ff);
97 createColumnMajorMatrix2x2 (&I, aa, bb, dd, ee);
99 dst[ itr ].c1.r1 = det * DET2x2 (&A);
100 dst[ itr ].c1.r2 = -1.0f * det * DET2x2 (&D);
101 dst[ itr ].c1.r3 = det * DET2x2 (&G);
103 dst[ itr ].c2.r1 = -1.0f * det * DET2x2 (&B);
104 dst[ itr ].c2.r2 = det * DET2x2 (&E);
105 dst[ itr ].c2.r3 = -1.0f * det * DET2x2 (&H);
107 dst[ itr ].c3.r1 = det * DET2x2 (&C);
108 dst[ itr ].c3.r2 = -1.0f * det * DET2x2 (&F);
109 dst[ itr ].c3.r3 = det * DET2x2 (&I);
123 ne10_result_t ne10_invmat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count)
125 #define aa (src[ itr ].c1.r1)
126 #define bb (src[ itr ].c1.r2)
127 #define cc (src[ itr ].c1.r3)
128 #define dd (src[ itr ].c1.r4)
130 #define ee (src[ itr ].c2.r1)
131 #define ff (src[ itr ].c2.r2)
132 #define gg (src[ itr ].c2.r3)
133 #define hh (src[ itr ].c2.r4)
135 #define ii (src[ itr ].c3.r1)
136 #define jj (src[ itr ].c3.r2)
137 #define kk (src[ itr ].c3.r3)
138 #define ll (src[ itr ].c3.r4)
140 #define mm (src[ itr ].c4.r1)
141 #define nn (src[ itr ].c4.r2)
142 #define oo (src[ itr ].c4.r3)
143 #define pp (src[ itr ].c4.r4)
145 ne10_float32_t det = 0.0f;
146 ne10_mat3x3f_t A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P;
148 NE10_DETMAT_OPERATION_X_C
150 det = DET4x4 (&src[ itr ]);
152 if (1 == IS_FLOAT_NEAR_ZERO (det))
159 createColumnMajorMatrix3x3 (&A, ff, gg, hh, jj, kk, ll, nn, oo, pp);
160 createColumnMajorMatrix3x3 (&B, ee, gg, hh, ii, kk, ll, mm, oo, pp);
161 createColumnMajorMatrix3x3 (&C, ee, ff, hh, ii, jj, ll, mm, nn, pp);
162 createColumnMajorMatrix3x3 (&D, ee, ff, gg, ii, jj, kk, mm, nn, oo);
163 createColumnMajorMatrix3x3 (&E, bb, cc, dd, jj, kk, ll, nn, oo, pp);
164 createColumnMajorMatrix3x3 (&F, aa, cc, dd, ii, kk, ll, mm, oo, pp);
165 createColumnMajorMatrix3x3 (&G, aa, bb, dd, ii, jj, ll, mm, nn, pp);
166 createColumnMajorMatrix3x3 (&H, aa, bb, cc, ii, jj, kk, mm, nn, oo);
167 createColumnMajorMatrix3x3 (&I, bb, cc, dd, ff, gg, hh, nn, oo, pp);
168 createColumnMajorMatrix3x3 (&J, aa, cc, dd, ee, gg, hh, mm, oo, pp);
169 createColumnMajorMatrix3x3 (&K, aa, bb, dd, ee, ff, hh, mm, nn, pp);
170 createColumnMajorMatrix3x3 (&L, aa, bb, cc, ee, ff, gg, mm, nn, oo);
171 createColumnMajorMatrix3x3 (&M, bb, cc, dd, ff, gg, hh, jj, kk, ll);
172 createColumnMajorMatrix3x3 (&N, aa, cc, dd, ee, gg, hh, ii, kk, ll);
173 createColumnMajorMatrix3x3 (&O, aa, bb, dd, ee, ff, hh, ii, jj, ll);
174 createColumnMajorMatrix3x3 (&P, aa, bb, cc, ee, ff, gg, ii, jj, kk);
177 dst[ itr ].c1.r1 = det * DET3x3 (&A);
178 dst[ itr ].c1.r2 = -1.0f * det * DET3x3 (&E);
179 dst[ itr ].c1.r3 = det * DET3x3 (&I);
180 dst[ itr ].c1.r4 = -1.0f * det * DET3x3 (&M);
182 dst[ itr ].c2.r1 = -1.0f * det * DET3x3 (&B);
183 dst[ itr ].c2.r2 = det * DET3x3 (&F);
184 dst[ itr ].c2.r3 = -1.0f * det * DET3x3 (&J);
185 dst[ itr ].c2.r4 = det * DET3x3 (&N);
187 dst[ itr ].c3.r1 = det * DET3x3 (&C);
188 dst[ itr ].c3.r2 = -1.0f * det * DET3x3 (&G);
189 dst[ itr ].c3.r3 = det * DET3x3 (&K);
190 dst[ itr ].c3.r4 = -1.0f * det * DET3x3 (&O);
192 dst[ itr ].c4.r1 = -1.0f * det * DET3x3 (&D);
193 dst[ itr ].c4.r2 = det * DET3x3 (&H);
194 dst[ itr ].c4.r3 = -1.0f * det * DET3x3 (&L);
195 dst[ itr ].c4.r4 = det * DET3x3 (&P);