mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 00:30:11 +01:00
st/nine: Fix ff computation for inverse
Thanks to wine tests. Apparently 4x4 inverse is to be used, and if the inverse can't be calculated, the input matrix is to be used. Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
parent
36399f9a7f
commit
7afcbb49ba
2 changed files with 6 additions and 23 deletions
|
|
@ -1825,7 +1825,7 @@ nine_ff_load_vs_transforms(struct NineDevice9 *device)
|
|||
nine_d3d_matrix_matrix_mul(&M[0], &M[1], GET_D3DTS(PROJECTION));
|
||||
|
||||
/* normal matrix == transpose(inverse(WV)) */
|
||||
nine_d3d_matrix_inverse_3x3(&T, &M[1]);
|
||||
nine_d3d_matrix_inverse(&T, &M[1]);
|
||||
nine_d3d_matrix_transpose(&M[4], &T);
|
||||
|
||||
/* P matrix */
|
||||
|
|
@ -2445,6 +2445,11 @@ nine_d3d_matrix_inverse(D3DMATRIX *D, const D3DMATRIX *M)
|
|||
M->m[2][0] * D->m[0][2] +
|
||||
M->m[3][0] * D->m[0][3];
|
||||
|
||||
if (det < 1e-30) {/* non inversible */
|
||||
*D = *M; /* wine tests */
|
||||
return;
|
||||
}
|
||||
|
||||
det = 1.0 / det;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
|
|
@ -2464,22 +2469,3 @@ nine_d3d_matrix_inverse(D3DMATRIX *D, const D3DMATRIX *M)
|
|||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* TODO: don't use 4x4 inverse, unless this gets all nicely inlined ? */
|
||||
void
|
||||
nine_d3d_matrix_inverse_3x3(D3DMATRIX *D, const D3DMATRIX *M)
|
||||
{
|
||||
D3DMATRIX T;
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < 3; ++i)
|
||||
for (j = 0; j < 3; ++j)
|
||||
T.m[i][j] = M->m[i][j];
|
||||
for (i = 0; i < 3; ++i) {
|
||||
T.m[i][3] = 0.0f;
|
||||
T.m[3][i] = 0.0f;
|
||||
}
|
||||
T.m[3][3] = 1.0f;
|
||||
|
||||
nine_d3d_matrix_inverse(D, &T);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ nine_d3d_matrix_det(const D3DMATRIX *);
|
|||
void
|
||||
nine_d3d_matrix_inverse(D3DMATRIX *, const D3DMATRIX *);
|
||||
|
||||
void
|
||||
nine_d3d_matrix_inverse_3x3(D3DMATRIX *, const D3DMATRIX *);
|
||||
|
||||
void
|
||||
nine_d3d_matrix_transpose(D3DMATRIX *, const D3DMATRIX *);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue