[PATCH 4/5] d3dx9: Build with nameless unions.

Matteo Bruni mbruni at codeweavers.com
Fri Feb 18 04:14:28 CST 2022


Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
 dlls/d3dx9_36/d3dx9_private.h |   1 -
 dlls/d3dx9_36/effect.c        |  10 +-
 dlls/d3dx9_36/math.c          | 772 +++++++++++++++++-----------------
 dlls/d3dx9_36/mesh.c          |  38 +-
 4 files changed, 412 insertions(+), 409 deletions(-)

diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
index 2d286b04694..6972c1d0ce0 100644
--- a/dlls/d3dx9_36/d3dx9_private.h
+++ b/dlls/d3dx9_36/d3dx9_private.h
@@ -23,7 +23,6 @@
 #define __WINE_D3DX9_PRIVATE_H
 
 #include <stdint.h>
-#define NONAMELESSUNION
 #include "wine/debug.h"
 #include "wine/heap.h"
 #include "wine/rbtree.h"
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index bbfb73d64c3..db95e6b592b 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -826,7 +826,7 @@ static void get_matrix(struct d3dx_parameter *param, D3DXMATRIX *matrix, BOOL tr
     {
         for (k = 0; k < 4; ++k)
         {
-            FLOAT *tmp = transpose ? (FLOAT *)&matrix->u.m[k][i] : (FLOAT *)&matrix->u.m[i][k];
+            FLOAT *tmp = transpose ? (FLOAT *)&matrix->m[k][i] : (FLOAT *)&matrix->m[i][k];
 
             if ((i < param->rows) && (k < param->columns))
                 set_number(tmp, D3DXPT_FLOAT, (DWORD *)param->data + i * param->columns + k, param->type);
@@ -844,12 +844,12 @@ static void set_matrix(struct d3dx_parameter *param, const D3DXMATRIX *matrix, v
     {
         if (param->columns == 4)
         {
-            memcpy(dst_data, matrix->u.m, param->rows * 4 * sizeof(float));
+            memcpy(dst_data, matrix->m, param->rows * 4 * sizeof(float));
         }
         else
         {
             for (i = 0; i < param->rows; ++i)
-                memcpy((float *)dst_data + i * param->columns, matrix->u.m + i, param->columns * sizeof(float));
+                memcpy((float *)dst_data + i * param->columns, matrix->m + i, param->columns * sizeof(float));
         }
         return;
     }
@@ -858,7 +858,7 @@ static void set_matrix(struct d3dx_parameter *param, const D3DXMATRIX *matrix, v
     {
         for (k = 0; k < param->columns; ++k)
             set_number((FLOAT *)dst_data + i * param->columns + k, param->type,
-                    &matrix->u.m[i][k], D3DXPT_FLOAT);
+                    &matrix->m[i][k], D3DXPT_FLOAT);
     }
 }
 
@@ -871,7 +871,7 @@ static void set_matrix_transpose(struct d3dx_parameter *param, const D3DXMATRIX
         for (k = 0; k < param->columns; ++k)
         {
             set_number((FLOAT *)dst_data + i * param->columns + k, param->type,
-                    &matrix->u.m[k][i], D3DXPT_FLOAT);
+                    &matrix->m[k][i], D3DXPT_FLOAT);
         }
     }
 }
diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
index 80f357e00e9..b6f0bed38ad 100644
--- a/dlls/d3dx9_36/math.c
+++ b/dlls/d3dx9_36/math.c
@@ -109,38 +109,38 @@ D3DXMATRIX * WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *out, FLOAT scalin
         temp21 = 2.0f * (rotation->y * rotation->z - rotation->x * rotation->w);
         temp22 = 1.0f - 2.0f * (rotation->x * rotation->x + rotation->y * rotation->y);
 
-        out->u.m[0][0] = scaling * temp00;
-        out->u.m[0][1] = scaling * temp01;
-        out->u.m[0][2] = scaling * temp02;
-        out->u.m[1][0] = scaling * temp10;
-        out->u.m[1][1] = scaling * temp11;
-        out->u.m[1][2] = scaling * temp12;
-        out->u.m[2][0] = scaling * temp20;
-        out->u.m[2][1] = scaling * temp21;
-        out->u.m[2][2] = scaling * temp22;
+        out->m[0][0] = scaling * temp00;
+        out->m[0][1] = scaling * temp01;
+        out->m[0][2] = scaling * temp02;
+        out->m[1][0] = scaling * temp10;
+        out->m[1][1] = scaling * temp11;
+        out->m[1][2] = scaling * temp12;
+        out->m[2][0] = scaling * temp20;
+        out->m[2][1] = scaling * temp21;
+        out->m[2][2] = scaling * temp22;
 
         if (rotationcenter)
         {
-            out->u.m[3][0] = rotationcenter->x * (1.0f - temp00) - rotationcenter->y * temp10
+            out->m[3][0] = rotationcenter->x * (1.0f - temp00) - rotationcenter->y * temp10
                     - rotationcenter->z * temp20;
-            out->u.m[3][1] = rotationcenter->y * (1.0f - temp11) - rotationcenter->x * temp01
+            out->m[3][1] = rotationcenter->y * (1.0f - temp11) - rotationcenter->x * temp01
                     - rotationcenter->z * temp21;
-            out->u.m[3][2] = rotationcenter->z * (1.0f - temp22) - rotationcenter->x * temp02
+            out->m[3][2] = rotationcenter->z * (1.0f - temp22) - rotationcenter->x * temp02
                     - rotationcenter->y * temp12;
         }
     }
     else
     {
-        out->u.m[0][0] = scaling;
-        out->u.m[1][1] = scaling;
-        out->u.m[2][2] = scaling;
+        out->m[0][0] = scaling;
+        out->m[1][1] = scaling;
+        out->m[2][2] = scaling;
     }
 
     if (translation)
     {
-        out->u.m[3][0] += translation->x;
-        out->u.m[3][1] += translation->y;
-        out->u.m[3][2] += translation->z;
+        out->m[3][0] += translation->x;
+        out->m[3][1] += translation->y;
+        out->m[3][2] += translation->z;
     }
 
     return out;
@@ -159,10 +159,10 @@ D3DXMATRIX * WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *out, FLOAT scal
     tmp2 = 2.0f * s * cosf(rotation / 2.0f);
 
     D3DXMatrixIdentity(out);
-    out->u.m[0][0] = scaling * tmp1;
-    out->u.m[0][1] = scaling * tmp2;
-    out->u.m[1][0] = -scaling * tmp2;
-    out->u.m[1][1] = scaling * tmp1;
+    out->m[0][0] = scaling * tmp1;
+    out->m[0][1] = scaling * tmp2;
+    out->m[1][0] = -scaling * tmp2;
+    out->m[1][1] = scaling * tmp1;
 
     if (rotationcenter)
     {
@@ -171,14 +171,14 @@ D3DXMATRIX * WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *out, FLOAT scal
         x = rotationcenter->x;
         y = rotationcenter->y;
 
-        out->u.m[3][0] = y * tmp2 - x * tmp1 + x;
-        out->u.m[3][1] = -x * tmp2 - y * tmp1 + y;
+        out->m[3][0] = y * tmp2 - x * tmp1 + x;
+        out->m[3][1] = -x * tmp2 - y * tmp1 + y;
     }
 
     if (translation)
     {
-        out->u.m[3][0] += translation->x;
-        out->u.m[3][1] += translation->y;
+        out->m[3][0] += translation->x;
+        out->m[3][1] += translation->y;
     }
 
     return out;
@@ -192,38 +192,38 @@ HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutr
     TRACE("poutscale %p, poutrotation %p, pouttranslation %p, pm %p\n", poutscale, poutrotation, pouttranslation, pm);
 
     /*Compute the scaling part.*/
-    vec.x=pm->u.m[0][0];
-    vec.y=pm->u.m[0][1];
-    vec.z=pm->u.m[0][2];
-    poutscale->x=D3DXVec3Length(&vec);
+    vec.x = pm->m[0][0];
+    vec.y = pm->m[0][1];
+    vec.z = pm->m[0][2];
+    poutscale->x = D3DXVec3Length(&vec);
 
-    vec.x=pm->u.m[1][0];
-    vec.y=pm->u.m[1][1];
-    vec.z=pm->u.m[1][2];
-    poutscale->y=D3DXVec3Length(&vec);
+    vec.x = pm->m[1][0];
+    vec.y = pm->m[1][1];
+    vec.z = pm->m[1][2];
+    poutscale->y = D3DXVec3Length(&vec);
 
-    vec.x=pm->u.m[2][0];
-    vec.y=pm->u.m[2][1];
-    vec.z=pm->u.m[2][2];
-    poutscale->z=D3DXVec3Length(&vec);
+    vec.x = pm->m[2][0];
+    vec.y = pm->m[2][1];
+    vec.z = pm->m[2][2];
+    poutscale->z = D3DXVec3Length(&vec);
 
     /*Compute the translation part.*/
-    pouttranslation->x=pm->u.m[3][0];
-    pouttranslation->y=pm->u.m[3][1];
-    pouttranslation->z=pm->u.m[3][2];
+    pouttranslation->x = pm->m[3][0];
+    pouttranslation->y = pm->m[3][1];
+    pouttranslation->z = pm->m[3][2];
 
     /*Let's calculate the rotation now*/
     if ( (poutscale->x == 0.0f) || (poutscale->y == 0.0f) || (poutscale->z == 0.0f) ) return D3DERR_INVALIDCALL;
 
-    normalized.u.m[0][0]=pm->u.m[0][0]/poutscale->x;
-    normalized.u.m[0][1]=pm->u.m[0][1]/poutscale->x;
-    normalized.u.m[0][2]=pm->u.m[0][2]/poutscale->x;
-    normalized.u.m[1][0]=pm->u.m[1][0]/poutscale->y;
-    normalized.u.m[1][1]=pm->u.m[1][1]/poutscale->y;
-    normalized.u.m[1][2]=pm->u.m[1][2]/poutscale->y;
-    normalized.u.m[2][0]=pm->u.m[2][0]/poutscale->z;
-    normalized.u.m[2][1]=pm->u.m[2][1]/poutscale->z;
-    normalized.u.m[2][2]=pm->u.m[2][2]/poutscale->z;
+    normalized.m[0][0] = pm->m[0][0]/poutscale->x;
+    normalized.m[0][1] = pm->m[0][1]/poutscale->x;
+    normalized.m[0][2] = pm->m[0][2]/poutscale->x;
+    normalized.m[1][0] = pm->m[1][0]/poutscale->y;
+    normalized.m[1][1] = pm->m[1][1]/poutscale->y;
+    normalized.m[1][2] = pm->m[1][2]/poutscale->y;
+    normalized.m[2][0] = pm->m[2][0]/poutscale->z;
+    normalized.m[2][1] = pm->m[2][1]/poutscale->z;
+    normalized.m[2][2] = pm->m[2][2]/poutscale->z;
 
     D3DXQuaternionRotationMatrix(poutrotation,&normalized);
     return S_OK;
@@ -235,20 +235,20 @@ FLOAT WINAPI D3DXMatrixDeterminant(const D3DXMATRIX *pm)
 
     TRACE("pm %p\n", pm);
 
-    t[0] = pm->u.m[2][2] * pm->u.m[3][3] - pm->u.m[2][3] * pm->u.m[3][2];
-    t[1] = pm->u.m[1][2] * pm->u.m[3][3] - pm->u.m[1][3] * pm->u.m[3][2];
-    t[2] = pm->u.m[1][2] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][2];
-    v[0] = pm->u.m[1][1] * t[0] - pm->u.m[2][1] * t[1] + pm->u.m[3][1] * t[2];
-    v[1] = -pm->u.m[1][0] * t[0] + pm->u.m[2][0] * t[1] - pm->u.m[3][0] * t[2];
+    t[0] = pm->m[2][2] * pm->m[3][3] - pm->m[2][3] * pm->m[3][2];
+    t[1] = pm->m[1][2] * pm->m[3][3] - pm->m[1][3] * pm->m[3][2];
+    t[2] = pm->m[1][2] * pm->m[2][3] - pm->m[1][3] * pm->m[2][2];
+    v[0] = pm->m[1][1] * t[0] - pm->m[2][1] * t[1] + pm->m[3][1] * t[2];
+    v[1] = -pm->m[1][0] * t[0] + pm->m[2][0] * t[1] - pm->m[3][0] * t[2];
 
-    t[0] = pm->u.m[1][0] * pm->u.m[2][1] - pm->u.m[2][0] * pm->u.m[1][1];
-    t[1] = pm->u.m[1][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[1][1];
-    t[2] = pm->u.m[2][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[2][1];
-    v[2] = pm->u.m[3][3] * t[0] - pm->u.m[2][3] * t[1] + pm->u.m[1][3] * t[2];
-    v[3] = -pm->u.m[3][2] * t[0] + pm->u.m[2][2] * t[1] - pm->u.m[1][2] * t[2];
+    t[0] = pm->m[1][0] * pm->m[2][1] - pm->m[2][0] * pm->m[1][1];
+    t[1] = pm->m[1][0] * pm->m[3][1] - pm->m[3][0] * pm->m[1][1];
+    t[2] = pm->m[2][0] * pm->m[3][1] - pm->m[3][0] * pm->m[2][1];
+    v[2] = pm->m[3][3] * t[0] - pm->m[2][3] * t[1] + pm->m[1][3] * t[2];
+    v[3] = -pm->m[3][2] * t[0] + pm->m[2][2] * t[1] - pm->m[1][2] * t[2];
 
-    return pm->u.m[0][0] * v[0] + pm->u.m[0][1] * v[1] +
-        pm->u.m[0][2] * v[2] + pm->u.m[0][3] * v[3];
+    return pm->m[0][0] * v[0] + pm->m[0][1] * v[1] +
+        pm->m[0][2] * v[2] + pm->m[0][3] * v[3];
 }
 
 D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm)
@@ -258,68 +258,68 @@ D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, cons
 
     TRACE("pout %p, pdeterminant %p, pm %p\n", pout, pdeterminant, pm);
 
-    t[0] = pm->u.m[2][2] * pm->u.m[3][3] - pm->u.m[2][3] * pm->u.m[3][2];
-    t[1] = pm->u.m[1][2] * pm->u.m[3][3] - pm->u.m[1][3] * pm->u.m[3][2];
-    t[2] = pm->u.m[1][2] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][2];
-    v[0] = pm->u.m[1][1] * t[0] - pm->u.m[2][1] * t[1] + pm->u.m[3][1] * t[2];
-    v[4] = -pm->u.m[1][0] * t[0] + pm->u.m[2][0] * t[1] - pm->u.m[3][0] * t[2];
+    t[0] = pm->m[2][2] * pm->m[3][3] - pm->m[2][3] * pm->m[3][2];
+    t[1] = pm->m[1][2] * pm->m[3][3] - pm->m[1][3] * pm->m[3][2];
+    t[2] = pm->m[1][2] * pm->m[2][3] - pm->m[1][3] * pm->m[2][2];
+    v[0] = pm->m[1][1] * t[0] - pm->m[2][1] * t[1] + pm->m[3][1] * t[2];
+    v[4] = -pm->m[1][0] * t[0] + pm->m[2][0] * t[1] - pm->m[3][0] * t[2];
 
-    t[0] = pm->u.m[1][0] * pm->u.m[2][1] - pm->u.m[2][0] * pm->u.m[1][1];
-    t[1] = pm->u.m[1][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[1][1];
-    t[2] = pm->u.m[2][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[2][1];
-    v[8] = pm->u.m[3][3] * t[0] - pm->u.m[2][3] * t[1] + pm->u.m[1][3] * t[2];
-    v[12] = -pm->u.m[3][2] * t[0] + pm->u.m[2][2] * t[1] - pm->u.m[1][2] * t[2];
+    t[0] = pm->m[1][0] * pm->m[2][1] - pm->m[2][0] * pm->m[1][1];
+    t[1] = pm->m[1][0] * pm->m[3][1] - pm->m[3][0] * pm->m[1][1];
+    t[2] = pm->m[2][0] * pm->m[3][1] - pm->m[3][0] * pm->m[2][1];
+    v[8] = pm->m[3][3] * t[0] - pm->m[2][3] * t[1] + pm->m[1][3] * t[2];
+    v[12] = -pm->m[3][2] * t[0] + pm->m[2][2] * t[1] - pm->m[1][2] * t[2];
 
-    det = pm->u.m[0][0] * v[0] + pm->u.m[0][1] * v[4] +
-        pm->u.m[0][2] * v[8] + pm->u.m[0][3] * v[12];
+    det = pm->m[0][0] * v[0] + pm->m[0][1] * v[4] +
+        pm->m[0][2] * v[8] + pm->m[0][3] * v[12];
     if (det == 0.0f)
         return NULL;
     if (pdeterminant)
         *pdeterminant = det;
 
-    t[0] = pm->u.m[2][2] * pm->u.m[3][3] - pm->u.m[2][3] * pm->u.m[3][2];
-    t[1] = pm->u.m[0][2] * pm->u.m[3][3] - pm->u.m[0][3] * pm->u.m[3][2];
-    t[2] = pm->u.m[0][2] * pm->u.m[2][3] - pm->u.m[0][3] * pm->u.m[2][2];
-    v[1] = -pm->u.m[0][1] * t[0] + pm->u.m[2][1] * t[1] - pm->u.m[3][1] * t[2];
-    v[5] = pm->u.m[0][0] * t[0] - pm->u.m[2][0] * t[1] + pm->u.m[3][0] * t[2];
-
-    t[0] = pm->u.m[0][0] * pm->u.m[2][1] - pm->u.m[2][0] * pm->u.m[0][1];
-    t[1] = pm->u.m[3][0] * pm->u.m[0][1] - pm->u.m[0][0] * pm->u.m[3][1];
-    t[2] = pm->u.m[2][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[2][1];
-    v[9] = -pm->u.m[3][3] * t[0] - pm->u.m[2][3] * t[1]- pm->u.m[0][3] * t[2];
-    v[13] = pm->u.m[3][2] * t[0] + pm->u.m[2][2] * t[1] + pm->u.m[0][2] * t[2];
-
-    t[0] = pm->u.m[1][2] * pm->u.m[3][3] - pm->u.m[1][3] * pm->u.m[3][2];
-    t[1] = pm->u.m[0][2] * pm->u.m[3][3] - pm->u.m[0][3] * pm->u.m[3][2];
-    t[2] = pm->u.m[0][2] * pm->u.m[1][3] - pm->u.m[0][3] * pm->u.m[1][2];
-    v[2] = pm->u.m[0][1] * t[0] - pm->u.m[1][1] * t[1] + pm->u.m[3][1] * t[2];
-    v[6] = -pm->u.m[0][0] * t[0] + pm->u.m[1][0] * t[1] - pm->u.m[3][0] * t[2];
-
-    t[0] = pm->u.m[0][0] * pm->u.m[1][1] - pm->u.m[1][0] * pm->u.m[0][1];
-    t[1] = pm->u.m[3][0] * pm->u.m[0][1] - pm->u.m[0][0] * pm->u.m[3][1];
-    t[2] = pm->u.m[1][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[1][1];
-    v[10] = pm->u.m[3][3] * t[0] + pm->u.m[1][3] * t[1] + pm->u.m[0][3] * t[2];
-    v[14] = -pm->u.m[3][2] * t[0] - pm->u.m[1][2] * t[1] - pm->u.m[0][2] * t[2];
-
-    t[0] = pm->u.m[1][2] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][2];
-    t[1] = pm->u.m[0][2] * pm->u.m[2][3] - pm->u.m[0][3] * pm->u.m[2][2];
-    t[2] = pm->u.m[0][2] * pm->u.m[1][3] - pm->u.m[0][3] * pm->u.m[1][2];
-    v[3] = -pm->u.m[0][1] * t[0] + pm->u.m[1][1] * t[1] - pm->u.m[2][1] * t[2];
-    v[7] = pm->u.m[0][0] * t[0] - pm->u.m[1][0] * t[1] + pm->u.m[2][0] * t[2];
-
-    v[11] = -pm->u.m[0][0] * (pm->u.m[1][1] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][1]) +
-        pm->u.m[1][0] * (pm->u.m[0][1] * pm->u.m[2][3] - pm->u.m[0][3] * pm->u.m[2][1]) -
-        pm->u.m[2][0] * (pm->u.m[0][1] * pm->u.m[1][3] - pm->u.m[0][3] * pm->u.m[1][1]);
-
-    v[15] = pm->u.m[0][0] * (pm->u.m[1][1] * pm->u.m[2][2] - pm->u.m[1][2] * pm->u.m[2][1]) -
-        pm->u.m[1][0] * (pm->u.m[0][1] * pm->u.m[2][2] - pm->u.m[0][2] * pm->u.m[2][1]) +
-        pm->u.m[2][0] * (pm->u.m[0][1] * pm->u.m[1][2] - pm->u.m[0][2] * pm->u.m[1][1]);
+    t[0] = pm->m[2][2] * pm->m[3][3] - pm->m[2][3] * pm->m[3][2];
+    t[1] = pm->m[0][2] * pm->m[3][3] - pm->m[0][3] * pm->m[3][2];
+    t[2] = pm->m[0][2] * pm->m[2][3] - pm->m[0][3] * pm->m[2][2];
+    v[1] = -pm->m[0][1] * t[0] + pm->m[2][1] * t[1] - pm->m[3][1] * t[2];
+    v[5] = pm->m[0][0] * t[0] - pm->m[2][0] * t[1] + pm->m[3][0] * t[2];
+
+    t[0] = pm->m[0][0] * pm->m[2][1] - pm->m[2][0] * pm->m[0][1];
+    t[1] = pm->m[3][0] * pm->m[0][1] - pm->m[0][0] * pm->m[3][1];
+    t[2] = pm->m[2][0] * pm->m[3][1] - pm->m[3][0] * pm->m[2][1];
+    v[9] = -pm->m[3][3] * t[0] - pm->m[2][3] * t[1]- pm->m[0][3] * t[2];
+    v[13] = pm->m[3][2] * t[0] + pm->m[2][2] * t[1] + pm->m[0][2] * t[2];
+
+    t[0] = pm->m[1][2] * pm->m[3][3] - pm->m[1][3] * pm->m[3][2];
+    t[1] = pm->m[0][2] * pm->m[3][3] - pm->m[0][3] * pm->m[3][2];
+    t[2] = pm->m[0][2] * pm->m[1][3] - pm->m[0][3] * pm->m[1][2];
+    v[2] = pm->m[0][1] * t[0] - pm->m[1][1] * t[1] + pm->m[3][1] * t[2];
+    v[6] = -pm->m[0][0] * t[0] + pm->m[1][0] * t[1] - pm->m[3][0] * t[2];
+
+    t[0] = pm->m[0][0] * pm->m[1][1] - pm->m[1][0] * pm->m[0][1];
+    t[1] = pm->m[3][0] * pm->m[0][1] - pm->m[0][0] * pm->m[3][1];
+    t[2] = pm->m[1][0] * pm->m[3][1] - pm->m[3][0] * pm->m[1][1];
+    v[10] = pm->m[3][3] * t[0] + pm->m[1][3] * t[1] + pm->m[0][3] * t[2];
+    v[14] = -pm->m[3][2] * t[0] - pm->m[1][2] * t[1] - pm->m[0][2] * t[2];
+
+    t[0] = pm->m[1][2] * pm->m[2][3] - pm->m[1][3] * pm->m[2][2];
+    t[1] = pm->m[0][2] * pm->m[2][3] - pm->m[0][3] * pm->m[2][2];
+    t[2] = pm->m[0][2] * pm->m[1][3] - pm->m[0][3] * pm->m[1][2];
+    v[3] = -pm->m[0][1] * t[0] + pm->m[1][1] * t[1] - pm->m[2][1] * t[2];
+    v[7] = pm->m[0][0] * t[0] - pm->m[1][0] * t[1] + pm->m[2][0] * t[2];
+
+    v[11] = -pm->m[0][0] * (pm->m[1][1] * pm->m[2][3] - pm->m[1][3] * pm->m[2][1]) +
+        pm->m[1][0] * (pm->m[0][1] * pm->m[2][3] - pm->m[0][3] * pm->m[2][1]) -
+        pm->m[2][0] * (pm->m[0][1] * pm->m[1][3] - pm->m[0][3] * pm->m[1][1]);
+
+    v[15] = pm->m[0][0] * (pm->m[1][1] * pm->m[2][2] - pm->m[1][2] * pm->m[2][1]) -
+        pm->m[1][0] * (pm->m[0][1] * pm->m[2][2] - pm->m[0][2] * pm->m[2][1]) +
+        pm->m[2][0] * (pm->m[0][1] * pm->m[1][2] - pm->m[0][2] * pm->m[1][1]);
 
     det = 1.0f / det;
 
     for (i = 0; i < 4; i++)
         for (j = 0; j < 4; j++)
-            pout->u.m[i][j] = v[4 * i + j] * det;
+            pout->m[i][j] = v[4 * i + j] * det;
 
     return pout;
 }
@@ -337,22 +337,22 @@ D3DXMATRIX * WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *out, const D3DXVECTOR3 *eye,
     D3DXVec3Cross(&upn, &vec, &right);
     D3DXVec3Normalize(&right, &right);
     D3DXVec3Normalize(&upn, &upn);
-    out->u.m[0][0] = right.x;
-    out->u.m[1][0] = right.y;
-    out->u.m[2][0] = right.z;
-    out->u.m[3][0] = -D3DXVec3Dot(&right, eye);
-    out->u.m[0][1] = upn.x;
-    out->u.m[1][1] = upn.y;
-    out->u.m[2][1] = upn.z;
-    out->u.m[3][1] = -D3DXVec3Dot(&upn, eye);
-    out->u.m[0][2] = vec.x;
-    out->u.m[1][2] = vec.y;
-    out->u.m[2][2] = vec.z;
-    out->u.m[3][2] = -D3DXVec3Dot(&vec, eye);
-    out->u.m[0][3] = 0.0f;
-    out->u.m[1][3] = 0.0f;
-    out->u.m[2][3] = 0.0f;
-    out->u.m[3][3] = 1.0f;
+    out->m[0][0] = right.x;
+    out->m[1][0] = right.y;
+    out->m[2][0] = right.z;
+    out->m[3][0] = -D3DXVec3Dot(&right, eye);
+    out->m[0][1] = upn.x;
+    out->m[1][1] = upn.y;
+    out->m[2][1] = upn.z;
+    out->m[3][1] = -D3DXVec3Dot(&upn, eye);
+    out->m[0][2] = vec.x;
+    out->m[1][2] = vec.y;
+    out->m[2][2] = vec.z;
+    out->m[3][2] = -D3DXVec3Dot(&vec, eye);
+    out->m[0][3] = 0.0f;
+    out->m[1][3] = 0.0f;
+    out->m[2][3] = 0.0f;
+    out->m[3][3] = 1.0f;
 
     return out;
 }
@@ -370,22 +370,22 @@ D3DXMATRIX * WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *out, const D3DXVECTOR3 *eye,
     D3DXVec3Cross(&upn, &vec, &right);
     D3DXVec3Normalize(&right, &right);
     D3DXVec3Normalize(&upn, &upn);
-    out->u.m[0][0] = -right.x;
-    out->u.m[1][0] = -right.y;
-    out->u.m[2][0] = -right.z;
-    out->u.m[3][0] = D3DXVec3Dot(&right, eye);
-    out->u.m[0][1] = upn.x;
-    out->u.m[1][1] = upn.y;
-    out->u.m[2][1] = upn.z;
-    out->u.m[3][1] = -D3DXVec3Dot(&upn, eye);
-    out->u.m[0][2] = -vec.x;
-    out->u.m[1][2] = -vec.y;
-    out->u.m[2][2] = -vec.z;
-    out->u.m[3][2] = D3DXVec3Dot(&vec, eye);
-    out->u.m[0][3] = 0.0f;
-    out->u.m[1][3] = 0.0f;
-    out->u.m[2][3] = 0.0f;
-    out->u.m[3][3] = 1.0f;
+    out->m[0][0] = -right.x;
+    out->m[1][0] = -right.y;
+    out->m[2][0] = -right.z;
+    out->m[3][0] = D3DXVec3Dot(&right, eye);
+    out->m[0][1] = upn.x;
+    out->m[1][1] = upn.y;
+    out->m[2][1] = upn.z;
+    out->m[3][1] = -D3DXVec3Dot(&upn, eye);
+    out->m[0][2] = -vec.x;
+    out->m[1][2] = -vec.y;
+    out->m[2][2] = -vec.z;
+    out->m[3][2] = D3DXVec3Dot(&vec, eye);
+    out->m[0][3] = 0.0f;
+    out->m[1][3] = 0.0f;
+    out->m[2][3] = 0.0f;
+    out->m[3][3] = 1.0f;
 
     return out;
 }
@@ -401,7 +401,7 @@ D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, const D3DXMATRIX *pm1, c
     {
         for (j=0; j<4; j++)
         {
-            out.u.m[i][j] = pm1->u.m[i][0] * pm2->u.m[0][j] + pm1->u.m[i][1] * pm2->u.m[1][j] + pm1->u.m[i][2] * pm2->u.m[2][j] + pm1->u.m[i][3] * pm2->u.m[3][j];
+            out.m[i][j] = pm1->m[i][0] * pm2->m[0][j] + pm1->m[i][1] * pm2->m[1][j] + pm1->m[i][2] * pm2->m[2][j] + pm1->m[i][3] * pm2->m[3][j];
         }
     }
 
@@ -418,7 +418,7 @@ D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, const D3DXMATRI
 
     for (i = 0; i < 4; i++)
         for (j = 0; j < 4; j++)
-            temp.u.m[j][i] = pm1->u.m[i][0] * pm2->u.m[0][j] + pm1->u.m[i][1] * pm2->u.m[1][j] + pm1->u.m[i][2] * pm2->u.m[2][j] + pm1->u.m[i][3] * pm2->u.m[3][j];
+            temp.m[j][i] = pm1->m[i][0] * pm2->m[0][j] + pm1->m[i][1] * pm2->m[1][j] + pm1->m[i][2] * pm2->m[2][j] + pm1->m[i][3] * pm2->m[3][j];
 
     *pout = temp;
     return pout;
@@ -429,10 +429,10 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT z
     TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f / w;
-    pout->u.m[1][1] = 2.0f / h;
-    pout->u.m[2][2] = 1.0f / (zf - zn);
-    pout->u.m[3][2] = zn / (zn - zf);
+    pout->m[0][0] = 2.0f / w;
+    pout->m[1][1] = 2.0f / h;
+    pout->m[2][2] = 1.0f / (zf - zn);
+    pout->m[3][2] = zn / (zn - zf);
     return pout;
 }
 
@@ -441,12 +441,12 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r
     TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f / (r - l);
-    pout->u.m[1][1] = 2.0f / (t - b);
-    pout->u.m[2][2] = 1.0f / (zf -zn);
-    pout->u.m[3][0] = -1.0f -2.0f *l / (r - l);
-    pout->u.m[3][1] = 1.0f + 2.0f * t / (b - t);
-    pout->u.m[3][2] = zn / (zn -zf);
+    pout->m[0][0] = 2.0f / (r - l);
+    pout->m[1][1] = 2.0f / (t - b);
+    pout->m[2][2] = 1.0f / (zf -zn);
+    pout->m[3][0] = -1.0f -2.0f *l / (r - l);
+    pout->m[3][1] = 1.0f + 2.0f * t / (b - t);
+    pout->m[3][2] = zn / (zn -zf);
     return pout;
 }
 
@@ -455,12 +455,12 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r
     TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f / (r - l);
-    pout->u.m[1][1] = 2.0f / (t - b);
-    pout->u.m[2][2] = 1.0f / (zn -zf);
-    pout->u.m[3][0] = -1.0f -2.0f *l / (r - l);
-    pout->u.m[3][1] = 1.0f + 2.0f * t / (b - t);
-    pout->u.m[3][2] = zn / (zn -zf);
+    pout->m[0][0] = 2.0f / (r - l);
+    pout->m[1][1] = 2.0f / (t - b);
+    pout->m[2][2] = 1.0f / (zn -zf);
+    pout->m[3][0] = -1.0f -2.0f *l / (r - l);
+    pout->m[3][1] = 1.0f + 2.0f * t / (b - t);
+    pout->m[3][2] = zn / (zn -zf);
     return pout;
 }
 
@@ -469,10 +469,10 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT z
     TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f / w;
-    pout->u.m[1][1] = 2.0f / h;
-    pout->u.m[2][2] = 1.0f / (zn - zf);
-    pout->u.m[3][2] = zn / (zn - zf);
+    pout->m[0][0] = 2.0f / w;
+    pout->m[1][1] = 2.0f / h;
+    pout->m[2][2] = 1.0f / (zn - zf);
+    pout->m[3][2] = zn / (zn - zf);
     return pout;
 }
 
@@ -481,12 +481,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOA
     TRACE("pout %p, fovy %f, aspect %f, zn %f, zf %f\n", pout, fovy, aspect, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f));
-    pout->u.m[1][1] = 1.0f / tanf(fovy/2.0f);
-    pout->u.m[2][2] = zf / (zf - zn);
-    pout->u.m[2][3] = 1.0f;
-    pout->u.m[3][2] = (zf * zn) / (zn - zf);
-    pout->u.m[3][3] = 0.0f;
+    pout->m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f));
+    pout->m[1][1] = 1.0f / tanf(fovy/2.0f);
+    pout->m[2][2] = zf / (zf - zn);
+    pout->m[2][3] = 1.0f;
+    pout->m[3][2] = (zf * zn) / (zn - zf);
+    pout->m[3][3] = 0.0f;
     return pout;
 }
 
@@ -495,12 +495,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOA
     TRACE("pout %p, fovy %f, aspect %f, zn %f, zf %f\n", pout, fovy, aspect, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f));
-    pout->u.m[1][1] = 1.0f / tanf(fovy/2.0f);
-    pout->u.m[2][2] = zf / (zn - zf);
-    pout->u.m[2][3] = -1.0f;
-    pout->u.m[3][2] = (zf * zn) / (zn - zf);
-    pout->u.m[3][3] = 0.0f;
+    pout->m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f));
+    pout->m[1][1] = 1.0f / tanf(fovy/2.0f);
+    pout->m[2][2] = zf / (zn - zf);
+    pout->m[2][3] = -1.0f;
+    pout->m[3][2] = (zf * zn) / (zn - zf);
+    pout->m[3][3] = 0.0f;
     return pout;
 }
 
@@ -509,12 +509,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, F
     TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f * zn / w;
-    pout->u.m[1][1] = 2.0f * zn / h;
-    pout->u.m[2][2] = zf / (zf - zn);
-    pout->u.m[3][2] = (zn * zf) / (zn - zf);
-    pout->u.m[2][3] = 1.0f;
-    pout->u.m[3][3] = 0.0f;
+    pout->m[0][0] = 2.0f * zn / w;
+    pout->m[1][1] = 2.0f * zn / h;
+    pout->m[2][2] = zf / (zf - zn);
+    pout->m[3][2] = (zn * zf) / (zn - zf);
+    pout->m[2][3] = 1.0f;
+    pout->m[3][3] = 0.0f;
     return pout;
 }
 
@@ -523,14 +523,14 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, F
     TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f * zn / (r - l);
-    pout->u.m[1][1] = -2.0f * zn / (b - t);
-    pout->u.m[2][0] = -1.0f - 2.0f * l / (r - l);
-    pout->u.m[2][1] = 1.0f + 2.0f * t / (b - t);
-    pout->u.m[2][2] = - zf / (zn - zf);
-    pout->u.m[3][2] = (zn * zf) / (zn -zf);
-    pout->u.m[2][3] = 1.0f;
-    pout->u.m[3][3] = 0.0f;
+    pout->m[0][0] = 2.0f * zn / (r - l);
+    pout->m[1][1] = -2.0f * zn / (b - t);
+    pout->m[2][0] = -1.0f - 2.0f * l / (r - l);
+    pout->m[2][1] = 1.0f + 2.0f * t / (b - t);
+    pout->m[2][2] = - zf / (zn - zf);
+    pout->m[3][2] = (zn * zf) / (zn -zf);
+    pout->m[2][3] = 1.0f;
+    pout->m[3][3] = 0.0f;
     return pout;
 }
 
@@ -539,14 +539,14 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, F
     TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f * zn / (r - l);
-    pout->u.m[1][1] = -2.0f * zn / (b - t);
-    pout->u.m[2][0] = 1.0f + 2.0f * l / (r - l);
-    pout->u.m[2][1] = -1.0f -2.0f * t / (b - t);
-    pout->u.m[2][2] = zf / (zn - zf);
-    pout->u.m[3][2] = (zn * zf) / (zn -zf);
-    pout->u.m[2][3] = -1.0f;
-    pout->u.m[3][3] = 0.0f;
+    pout->m[0][0] = 2.0f * zn / (r - l);
+    pout->m[1][1] = -2.0f * zn / (b - t);
+    pout->m[2][0] = 1.0f + 2.0f * l / (r - l);
+    pout->m[2][1] = -1.0f -2.0f * t / (b - t);
+    pout->m[2][2] = zf / (zn - zf);
+    pout->m[3][2] = (zn * zf) / (zn -zf);
+    pout->m[2][3] = -1.0f;
+    pout->m[3][3] = 0.0f;
     return pout;
 }
 
@@ -555,12 +555,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, F
     TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 2.0f * zn / w;
-    pout->u.m[1][1] = 2.0f * zn / h;
-    pout->u.m[2][2] = zf / (zn - zf);
-    pout->u.m[3][2] = (zn * zf) / (zn - zf);
-    pout->u.m[2][3] = -1.0f;
-    pout->u.m[3][3] = 0.0f;
+    pout->m[0][0] = 2.0f * zn / w;
+    pout->m[1][1] = 2.0f * zn / h;
+    pout->m[2][2] = zf / (zn - zf);
+    pout->m[3][2] = (zn * zf) / (zn - zf);
+    pout->m[2][3] = -1.0f;
+    pout->m[3][3] = 0.0f;
     return pout;
 }
 
@@ -572,18 +572,18 @@ D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, const D3DXPLANE *pplane)
 
     D3DXPlaneNormalize(&Nplane, pplane);
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 1.0f - 2.0f * Nplane.a * Nplane.a;
-    pout->u.m[0][1] = -2.0f * Nplane.a * Nplane.b;
-    pout->u.m[0][2] = -2.0f * Nplane.a * Nplane.c;
-    pout->u.m[1][0] = -2.0f * Nplane.a * Nplane.b;
-    pout->u.m[1][1] = 1.0f - 2.0f * Nplane.b * Nplane.b;
-    pout->u.m[1][2] = -2.0f * Nplane.b * Nplane.c;
-    pout->u.m[2][0] = -2.0f * Nplane.c * Nplane.a;
-    pout->u.m[2][1] = -2.0f * Nplane.c * Nplane.b;
-    pout->u.m[2][2] = 1.0f - 2.0f * Nplane.c * Nplane.c;
-    pout->u.m[3][0] = -2.0f * Nplane.d * Nplane.a;
-    pout->u.m[3][1] = -2.0f * Nplane.d * Nplane.b;
-    pout->u.m[3][2] = -2.0f * Nplane.d * Nplane.c;
+    pout->m[0][0] = 1.0f - 2.0f * Nplane.a * Nplane.a;
+    pout->m[0][1] = -2.0f * Nplane.a * Nplane.b;
+    pout->m[0][2] = -2.0f * Nplane.a * Nplane.c;
+    pout->m[1][0] = -2.0f * Nplane.a * Nplane.b;
+    pout->m[1][1] = 1.0f - 2.0f * Nplane.b * Nplane.b;
+    pout->m[1][2] = -2.0f * Nplane.b * Nplane.c;
+    pout->m[2][0] = -2.0f * Nplane.c * Nplane.a;
+    pout->m[2][1] = -2.0f * Nplane.c * Nplane.b;
+    pout->m[2][2] = 1.0f - 2.0f * Nplane.c * Nplane.c;
+    pout->m[3][0] = -2.0f * Nplane.d * Nplane.a;
+    pout->m[3][1] = -2.0f * Nplane.d * Nplane.b;
+    pout->m[3][2] = -2.0f * Nplane.d * Nplane.c;
     return pout;
 }
 
@@ -599,22 +599,22 @@ D3DXMATRIX * WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *out, const D3DXVECTOR3 *v
     cangle = cosf(angle);
     cdiff = 1.0f - cangle;
 
-    out->u.m[0][0] = cdiff * nv.x * nv.x + cangle;
-    out->u.m[1][0] = cdiff * nv.x * nv.y - sangle * nv.z;
-    out->u.m[2][0] = cdiff * nv.x * nv.z + sangle * nv.y;
-    out->u.m[3][0] = 0.0f;
-    out->u.m[0][1] = cdiff * nv.y * nv.x + sangle * nv.z;
-    out->u.m[1][1] = cdiff * nv.y * nv.y + cangle;
-    out->u.m[2][1] = cdiff * nv.y * nv.z - sangle * nv.x;
-    out->u.m[3][1] = 0.0f;
-    out->u.m[0][2] = cdiff * nv.z * nv.x - sangle * nv.y;
-    out->u.m[1][2] = cdiff * nv.z * nv.y + sangle * nv.x;
-    out->u.m[2][2] = cdiff * nv.z * nv.z + cangle;
-    out->u.m[3][2] = 0.0f;
-    out->u.m[0][3] = 0.0f;
-    out->u.m[1][3] = 0.0f;
-    out->u.m[2][3] = 0.0f;
-    out->u.m[3][3] = 1.0f;
+    out->m[0][0] = cdiff * nv.x * nv.x + cangle;
+    out->m[1][0] = cdiff * nv.x * nv.y - sangle * nv.z;
+    out->m[2][0] = cdiff * nv.x * nv.z + sangle * nv.y;
+    out->m[3][0] = 0.0f;
+    out->m[0][1] = cdiff * nv.y * nv.x + sangle * nv.z;
+    out->m[1][1] = cdiff * nv.y * nv.y + cangle;
+    out->m[2][1] = cdiff * nv.y * nv.z - sangle * nv.x;
+    out->m[3][1] = 0.0f;
+    out->m[0][2] = cdiff * nv.z * nv.x - sangle * nv.y;
+    out->m[1][2] = cdiff * nv.z * nv.y + sangle * nv.x;
+    out->m[2][2] = cdiff * nv.z * nv.z + cangle;
+    out->m[3][2] = 0.0f;
+    out->m[0][3] = 0.0f;
+    out->m[1][3] = 0.0f;
+    out->m[2][3] = 0.0f;
+    out->m[3][3] = 1.0f;
 
     return out;
 }
@@ -624,15 +624,15 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, const D3DXQUAT
     TRACE("pout %p, pq %p\n", pout, pq);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = 1.0f - 2.0f * (pq->y * pq->y + pq->z * pq->z);
-    pout->u.m[0][1] = 2.0f * (pq->x *pq->y + pq->z * pq->w);
-    pout->u.m[0][2] = 2.0f * (pq->x * pq->z - pq->y * pq->w);
-    pout->u.m[1][0] = 2.0f * (pq->x * pq->y - pq->z * pq->w);
-    pout->u.m[1][1] = 1.0f - 2.0f * (pq->x * pq->x + pq->z * pq->z);
-    pout->u.m[1][2] = 2.0f * (pq->y *pq->z + pq->x *pq->w);
-    pout->u.m[2][0] = 2.0f * (pq->x * pq->z + pq->y * pq->w);
-    pout->u.m[2][1] = 2.0f * (pq->y *pq->z - pq->x *pq->w);
-    pout->u.m[2][2] = 1.0f - 2.0f * (pq->x * pq->x + pq->y * pq->y);
+    pout->m[0][0] = 1.0f - 2.0f * (pq->y * pq->y + pq->z * pq->z);
+    pout->m[0][1] = 2.0f * (pq->x *pq->y + pq->z * pq->w);
+    pout->m[0][2] = 2.0f * (pq->x * pq->z - pq->y * pq->w);
+    pout->m[1][0] = 2.0f * (pq->x * pq->y - pq->z * pq->w);
+    pout->m[1][1] = 1.0f - 2.0f * (pq->x * pq->x + pq->z * pq->z);
+    pout->m[1][2] = 2.0f * (pq->y *pq->z + pq->x *pq->w);
+    pout->m[2][0] = 2.0f * (pq->x * pq->z + pq->y * pq->w);
+    pout->m[2][1] = 2.0f * (pq->y *pq->z - pq->x *pq->w);
+    pout->m[2][2] = 1.0f - 2.0f * (pq->x * pq->x + pq->y * pq->y);
     return pout;
 }
 
@@ -641,10 +641,10 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle)
     TRACE("pout %p, angle %f\n", pout, angle);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[1][1] = cosf(angle);
-    pout->u.m[2][2] = cosf(angle);
-    pout->u.m[1][2] = sinf(angle);
-    pout->u.m[2][1] = -sinf(angle);
+    pout->m[1][1] = cosf(angle);
+    pout->m[2][2] = cosf(angle);
+    pout->m[1][2] = sinf(angle);
+    pout->m[2][1] = -sinf(angle);
     return pout;
 }
 
@@ -653,10 +653,10 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle)
     TRACE("pout %p, angle %f\n", pout, angle);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = cosf(angle);
-    pout->u.m[2][2] = cosf(angle);
-    pout->u.m[0][2] = -sinf(angle);
-    pout->u.m[2][0] = sinf(angle);
+    pout->m[0][0] = cosf(angle);
+    pout->m[2][2] = cosf(angle);
+    pout->m[0][2] = -sinf(angle);
+    pout->m[2][0] = sinf(angle);
     return pout;
 }
 
@@ -673,22 +673,22 @@ D3DXMATRIX * WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *out, FLOAT yaw, F
     syaw = sinf(yaw);
     cyaw = cosf(yaw);
 
-    out->u.m[0][0] = sroll * spitch * syaw + croll * cyaw;
-    out->u.m[0][1] = sroll * cpitch;
-    out->u.m[0][2] = sroll * spitch * cyaw - croll * syaw;
-    out->u.m[0][3] = 0.0f;
-    out->u.m[1][0] = croll * spitch * syaw - sroll * cyaw;
-    out->u.m[1][1] = croll * cpitch;
-    out->u.m[1][2] = croll * spitch * cyaw + sroll * syaw;
-    out->u.m[1][3] = 0.0f;
-    out->u.m[2][0] = cpitch * syaw;
-    out->u.m[2][1] = -spitch;
-    out->u.m[2][2] = cpitch * cyaw;
-    out->u.m[2][3] = 0.0f;
-    out->u.m[3][0] = 0.0f;
-    out->u.m[3][1] = 0.0f;
-    out->u.m[3][2] = 0.0f;
-    out->u.m[3][3] = 1.0f;
+    out->m[0][0] = sroll * spitch * syaw + croll * cyaw;
+    out->m[0][1] = sroll * cpitch;
+    out->m[0][2] = sroll * spitch * cyaw - croll * syaw;
+    out->m[0][3] = 0.0f;
+    out->m[1][0] = croll * spitch * syaw - sroll * cyaw;
+    out->m[1][1] = croll * cpitch;
+    out->m[1][2] = croll * spitch * cyaw + sroll * syaw;
+    out->m[1][3] = 0.0f;
+    out->m[2][0] = cpitch * syaw;
+    out->m[2][1] = -spitch;
+    out->m[2][2] = cpitch * cyaw;
+    out->m[2][3] = 0.0f;
+    out->m[3][0] = 0.0f;
+    out->m[3][1] = 0.0f;
+    out->m[3][2] = 0.0f;
+    out->m[3][3] = 1.0f;
 
     return out;
 }
@@ -698,10 +698,10 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle)
     TRACE("pout %p, angle %f\n", pout, angle);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = cosf(angle);
-    pout->u.m[1][1] = cosf(angle);
-    pout->u.m[0][1] = sinf(angle);
-    pout->u.m[1][0] = -sinf(angle);
+    pout->m[0][0] = cosf(angle);
+    pout->m[1][1] = cosf(angle);
+    pout->m[0][1] = sinf(angle);
+    pout->m[1][0] = -sinf(angle);
     return pout;
 }
 
@@ -710,9 +710,9 @@ D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT
     TRACE("pout %p, sx %f, sy %f, sz %f\n", pout, sx, sy, sz);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[0][0] = sx;
-    pout->u.m[1][1] = sy;
-    pout->u.m[2][2] = sz;
+    pout->m[0][0] = sx;
+    pout->m[1][1] = sy;
+    pout->m[2][2] = sz;
     return pout;
 }
 
@@ -725,22 +725,22 @@ D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, const D3DXVECTOR4 *plight,
 
     D3DXPlaneNormalize(&Nplane, pplane);
     dot = D3DXPlaneDot(&Nplane, plight);
-    pout->u.m[0][0] = dot - Nplane.a * plight->x;
-    pout->u.m[0][1] = -Nplane.a * plight->y;
-    pout->u.m[0][2] = -Nplane.a * plight->z;
-    pout->u.m[0][3] = -Nplane.a * plight->w;
-    pout->u.m[1][0] = -Nplane.b * plight->x;
-    pout->u.m[1][1] = dot - Nplane.b * plight->y;
-    pout->u.m[1][2] = -Nplane.b * plight->z;
-    pout->u.m[1][3] = -Nplane.b * plight->w;
-    pout->u.m[2][0] = -Nplane.c * plight->x;
-    pout->u.m[2][1] = -Nplane.c * plight->y;
-    pout->u.m[2][2] = dot - Nplane.c * plight->z;
-    pout->u.m[2][3] = -Nplane.c * plight->w;
-    pout->u.m[3][0] = -Nplane.d * plight->x;
-    pout->u.m[3][1] = -Nplane.d * plight->y;
-    pout->u.m[3][2] = -Nplane.d * plight->z;
-    pout->u.m[3][3] = dot - Nplane.d * plight->w;
+    pout->m[0][0] = dot - Nplane.a * plight->x;
+    pout->m[0][1] = -Nplane.a * plight->y;
+    pout->m[0][2] = -Nplane.a * plight->z;
+    pout->m[0][3] = -Nplane.a * plight->w;
+    pout->m[1][0] = -Nplane.b * plight->x;
+    pout->m[1][1] = dot - Nplane.b * plight->y;
+    pout->m[1][2] = -Nplane.b * plight->z;
+    pout->m[1][3] = -Nplane.b * plight->w;
+    pout->m[2][0] = -Nplane.c * plight->x;
+    pout->m[2][1] = -Nplane.c * plight->y;
+    pout->m[2][2] = dot - Nplane.c * plight->z;
+    pout->m[2][3] = -Nplane.c * plight->w;
+    pout->m[3][0] = -Nplane.d * plight->x;
+    pout->m[3][1] = -Nplane.d * plight->y;
+    pout->m[3][2] = -Nplane.d * plight->z;
+    pout->m[3][3] = dot - Nplane.d * plight->w;
     return pout;
 }
 
@@ -864,23 +864,25 @@ D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLO
     TRACE("pout %p, x %f, y %f, z %f\n", pout, x, y, z);
 
     D3DXMatrixIdentity(pout);
-    pout->u.m[3][0] = x;
-    pout->u.m[3][1] = y;
-    pout->u.m[3][2] = z;
+    pout->m[3][0] = x;
+    pout->m[3][1] = y;
+    pout->m[3][2] = z;
     return pout;
 }
 
-D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm)
+D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *out, const D3DXMATRIX *in)
 {
-    const D3DXMATRIX m = *pm;
-    int i,j;
+    unsigned int i, j;
+    D3DXMATRIX m;
 
-    TRACE("pout %p, pm %p\n", pout, pm);
+    TRACE("out %p, in %p.\n", out, in);
 
-    for (i=0; i<4; i++)
-        for (j=0; j<4; j++) pout->u.m[i][j] = m.u.m[j][i];
+    m = *in;
 
-    return pout;
+    for (i = 0; i < 4; ++i)
+        for (j = 0; j < 4; ++j) out->m[i][j] = m.m[j][i];
+
+    return out;
 }
 
 /*_________________D3DXMatrixStack____________________*/
@@ -1277,10 +1279,10 @@ D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, const D3DXPLANE *pplane, c
 
     TRACE("pout %p, pplane %p, pm %p\n", pout, pplane, pm);
 
-    pout->a = pm->u.m[0][0] * plane.a + pm->u.m[1][0] * plane.b + pm->u.m[2][0] * plane.c + pm->u.m[3][0] * plane.d;
-    pout->b = pm->u.m[0][1] * plane.a + pm->u.m[1][1] * plane.b + pm->u.m[2][1] * plane.c + pm->u.m[3][1] * plane.d;
-    pout->c = pm->u.m[0][2] * plane.a + pm->u.m[1][2] * plane.b + pm->u.m[2][2] * plane.c + pm->u.m[3][2] * plane.d;
-    pout->d = pm->u.m[0][3] * plane.a + pm->u.m[1][3] * plane.b + pm->u.m[2][3] * plane.c + pm->u.m[3][3] * plane.d;
+    pout->a = pm->m[0][0] * plane.a + pm->m[1][0] * plane.b + pm->m[2][0] * plane.c + pm->m[3][0] * plane.d;
+    pout->b = pm->m[0][1] * plane.a + pm->m[1][1] * plane.b + pm->m[2][1] * plane.c + pm->m[3][1] * plane.d;
+    pout->c = pm->m[0][2] * plane.a + pm->m[1][2] * plane.b + pm->m[2][2] * plane.c + pm->m[3][2] * plane.d;
+    pout->d = pm->m[0][3] * plane.a + pm->m[1][3] * plane.b + pm->m[2][3] * plane.c + pm->m[3][3] * plane.d;
     return pout;
 }
 
@@ -1422,13 +1424,13 @@ D3DXQUATERNION * WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *out, const
 
     TRACE("out %p, m %p\n", out, m);
 
-    trace = m->u.m[0][0] + m->u.m[1][1] + m->u.m[2][2] + 1.0f;
+    trace = m->m[0][0] + m->m[1][1] + m->m[2][2] + 1.0f;
     if (trace > 1.0f)
     {
         s = 2.0f * sqrtf(trace);
-        out->x = (m->u.m[1][2] - m->u.m[2][1]) / s;
-        out->y = (m->u.m[2][0] - m->u.m[0][2]) / s;
-        out->z = (m->u.m[0][1] - m->u.m[1][0]) / s;
+        out->x = (m->m[1][2] - m->m[2][1]) / s;
+        out->y = (m->m[2][0] - m->m[0][2]) / s;
+        out->z = (m->m[0][1] - m->m[1][0]) / s;
         out->w = 0.25f * s;
     }
     else
@@ -1437,34 +1439,34 @@ D3DXQUATERNION * WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *out, const
 
         for (i = 1; i < 3; i++)
         {
-            if (m->u.m[i][i] > m->u.m[maxi][maxi])
+            if (m->m[i][i] > m->m[maxi][maxi])
                 maxi = i;
         }
 
         switch (maxi)
         {
             case 0:
-                s = 2.0f * sqrtf(1.0f + m->u.m[0][0] - m->u.m[1][1] - m->u.m[2][2]);
+                s = 2.0f * sqrtf(1.0f + m->m[0][0] - m->m[1][1] - m->m[2][2]);
                 out->x = 0.25f * s;
-                out->y = (m->u.m[0][1] + m->u.m[1][0]) / s;
-                out->z = (m->u.m[0][2] + m->u.m[2][0]) / s;
-                out->w = (m->u.m[1][2] - m->u.m[2][1]) / s;
+                out->y = (m->m[0][1] + m->m[1][0]) / s;
+                out->z = (m->m[0][2] + m->m[2][0]) / s;
+                out->w = (m->m[1][2] - m->m[2][1]) / s;
                 break;
 
             case 1:
-                s = 2.0f * sqrtf(1.0f + m->u.m[1][1] - m->u.m[0][0] - m->u.m[2][2]);
-                out->x = (m->u.m[0][1] + m->u.m[1][0]) / s;
+                s = 2.0f * sqrtf(1.0f + m->m[1][1] - m->m[0][0] - m->m[2][2]);
+                out->x = (m->m[0][1] + m->m[1][0]) / s;
                 out->y = 0.25f * s;
-                out->z = (m->u.m[1][2] + m->u.m[2][1]) / s;
-                out->w = (m->u.m[2][0] - m->u.m[0][2]) / s;
+                out->z = (m->m[1][2] + m->m[2][1]) / s;
+                out->w = (m->m[2][0] - m->m[0][2]) / s;
                 break;
 
             case 2:
-                s = 2.0f * sqrtf(1.0f + m->u.m[2][2] - m->u.m[0][0] - m->u.m[1][1]);
-                out->x = (m->u.m[0][2] + m->u.m[2][0]) / s;
-                out->y = (m->u.m[1][2] + m->u.m[2][1]) / s;
+                s = 2.0f * sqrtf(1.0f + m->m[2][2] - m->m[0][0] - m->m[1][1]);
+                out->x = (m->m[0][2] + m->m[2][0]) / s;
+                out->y = (m->m[1][2] + m->m[2][1]) / s;
                 out->z = 0.25f * s;
-                out->w = (m->u.m[0][1] - m->u.m[1][0]) / s;
+                out->w = (m->m[0][1] - m->m[1][0]) / s;
                 break;
         }
     }
@@ -1679,10 +1681,10 @@ D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv,
 
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    out.x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y  + pm->u.m[3][0];
-    out.y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y  + pm->u.m[3][1];
-    out.z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y  + pm->u.m[3][2];
-    out.w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y  + pm->u.m[3][3];
+    out.x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y  + pm->m[3][0];
+    out.y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y  + pm->m[3][1];
+    out.z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y  + pm->m[3][2];
+    out.w = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y  + pm->m[3][3];
     *pout = out;
     return pout;
 }
@@ -1710,10 +1712,10 @@ D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, const D3DXVECTOR2
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
     v = *pv;
-    norm = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[3][3];
+    norm = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[3][3];
 
-    pout->x = (pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[3][0]) / norm;
-    pout->y = (pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[3][1]) / norm;
+    pout->x = (pm->m[0][0] * v.x + pm->m[1][0] * v.y + pm->m[3][0]) / norm;
+    pout->y = (pm->m[0][1] * v.x + pm->m[1][1] * v.y + pm->m[3][1]) / norm;
 
     return pout;
 }
@@ -1739,8 +1741,8 @@ D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, const D3DXVECTOR2
 
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    pout->x = pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y;
-    pout->y = pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y;
+    pout->x = pm->m[0][0] * v.x + pm->m[1][0] * v.y;
+    pout->y = pm->m[0][1] * v.x + pm->m[1][1] * v.y;
     return pout;
 }
 
@@ -1865,10 +1867,10 @@ D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv,
 
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    out.x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0];
-    out.y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1];
-    out.z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2];
-    out.w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] * pv->z + pm->u.m[3][3];
+    out.x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z + pm->m[3][0];
+    out.y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z + pm->m[3][1];
+    out.z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z + pm->m[3][2];
+    out.w = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[2][3] * pv->z + pm->m[3][3];
     *pout = out;
     return pout;
 }
@@ -1895,11 +1897,11 @@ D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3
 
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    norm = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] *pv->z + pm->u.m[3][3];
+    norm = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[2][3] *pv->z + pm->m[3][3];
 
-    out.x = (pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0]) / norm;
-    out.y = (pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1]) / norm;
-    out.z = (pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2]) / norm;
+    out.x = (pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z + pm->m[3][0]) / norm;
+    out.y = (pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z + pm->m[3][1]) / norm;
+    out.z = (pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z + pm->m[3][2]) / norm;
 
     *pout = out;
 
@@ -1927,9 +1929,9 @@ D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, const D3DXVECTOR3
 
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    pout->x = pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[2][0] * v.z;
-    pout->y = pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[2][1] * v.z;
-    pout->z = pm->u.m[0][2] * v.x + pm->u.m[1][2] * v.y + pm->u.m[2][2] * v.z;
+    pout->x = pm->m[0][0] * v.x + pm->m[1][0] * v.y + pm->m[2][0] * v.z;
+    pout->y = pm->m[0][1] * v.x + pm->m[1][1] * v.y + pm->m[2][1] * v.z;
+    pout->z = pm->m[0][2] * v.x + pm->m[1][2] * v.y + pm->m[2][2] * v.z;
     return pout;
 
 }
@@ -2072,10 +2074,10 @@ D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv,
 
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    out.x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0] * pv->w;
-    out.y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1] * pv->w;
-    out.z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2] * pv->w;
-    out.w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] * pv->z + pm->u.m[3][3] * pv->w;
+    out.x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z + pm->m[3][0] * pv->w;
+    out.y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z + pm->m[3][1] * pv->w;
+    out.z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z + pm->m[3][2] * pv->w;
+    out.w = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[2][3] * pv->z + pm->m[3][3] * pv->w;
     *pout = out;
     return pout;
 }
@@ -3129,44 +3131,46 @@ FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, con
 
     if (order <= 3)
     {
-        out[1] = matrix->u.m[1][1] * in[1] - matrix->u.m[2][1] * in[2] + matrix->u.m[0][1] * in[3];
-        out[2] = -matrix->u.m[1][2] * in[1] + matrix->u.m[2][2] * in[2] - matrix->u.m[0][2] * in[3];
-        out[3] = matrix->u.m[1][0] * in[1] - matrix->u.m[2][0] * in[2] + matrix->u.m[0][0] * in[3];
+        out[1] = matrix->m[1][1] * in[1] - matrix->m[2][1] * in[2] + matrix->m[0][1] * in[3];
+        out[2] = -matrix->m[1][2] * in[1] + matrix->m[2][2] * in[2] - matrix->m[0][2] * in[3];
+        out[3] = matrix->m[1][0] * in[1] - matrix->m[2][0] * in[2] + matrix->m[0][0] * in[3];
 
         if (order == 3)
         {
-            FLOAT coeff[]={
-                matrix->u.m[1][0] * matrix->u.m[0][0], matrix->u.m[1][1] * matrix->u.m[0][1],
-                matrix->u.m[1][1] * matrix->u.m[2][1], matrix->u.m[1][0] * matrix->u.m[2][0],
-                matrix->u.m[2][0] * matrix->u.m[2][0], matrix->u.m[2][1] * matrix->u.m[2][1],
-                matrix->u.m[0][0] * matrix->u.m[2][0], matrix->u.m[0][1] * matrix->u.m[2][1],
-                matrix->u.m[0][1] * matrix->u.m[0][1], matrix->u.m[1][0] * matrix->u.m[1][0],
-                matrix->u.m[1][1] * matrix->u.m[1][1], matrix->u.m[0][0] * matrix->u.m[0][0], };
-
-            out[4] = (matrix->u.m[1][1] * matrix->u.m[0][0] + matrix->u.m[0][1] * matrix->u.m[1][0]) * in[4];
-            out[4] -= (matrix->u.m[1][0] * matrix->u.m[2][1] + matrix->u.m[1][1] * matrix->u.m[2][0]) * in[5];
-            out[4] += 1.7320508076f * matrix->u.m[2][0] * matrix->u.m[2][1] * in[6];
-            out[4] -= (matrix->u.m[0][1] * matrix->u.m[2][0] + matrix->u.m[0][0] * matrix->u.m[2][1]) * in[7];
-            out[4] += (matrix->u.m[0][0] * matrix->u.m[0][1] - matrix->u.m[1][0] * matrix->u.m[1][1]) * in[8];
-
-            out[5] = (matrix->u.m[1][1] * matrix->u.m[2][2] + matrix->u.m[1][2] * matrix->u.m[2][1]) * in[5];
-            out[5] -= (matrix->u.m[1][1] * matrix->u.m[0][2] + matrix->u.m[1][2] * matrix->u.m[0][1]) * in[4];
-            out[5] -= 1.7320508076f * matrix->u.m[2][2] * matrix->u.m[2][1] * in[6];
-            out[5] += (matrix->u.m[0][2] * matrix->u.m[2][1] + matrix->u.m[0][1] * matrix->u.m[2][2]) * in[7];
-            out[5] -= (matrix->u.m[0][1] * matrix->u.m[0][2] - matrix->u.m[1][1] * matrix->u.m[1][2]) * in[8];
-
-            out[6] = (matrix->u.m[2][2] * matrix->u.m[2][2] - 0.5f * (coeff[4] + coeff[5])) * in[6];
-            out[6] -= (0.5773502692f * (coeff[0] + coeff[1]) - 1.1547005384f * matrix->u.m[1][2] * matrix->u.m[0][2]) * in[4];
-            out[6] += (0.5773502692f * (coeff[2] + coeff[3]) - 1.1547005384f * matrix->u.m[1][2] * matrix->u.m[2][2]) * in[5];
-            out[6] += (0.5773502692f * (coeff[6] + coeff[7]) - 1.1547005384f * matrix->u.m[0][2] * matrix->u.m[2][2]) * in[7];
+            float coeff[] =
+            {
+                matrix->m[1][0] * matrix->m[0][0], matrix->m[1][1] * matrix->m[0][1],
+                matrix->m[1][1] * matrix->m[2][1], matrix->m[1][0] * matrix->m[2][0],
+                matrix->m[2][0] * matrix->m[2][0], matrix->m[2][1] * matrix->m[2][1],
+                matrix->m[0][0] * matrix->m[2][0], matrix->m[0][1] * matrix->m[2][1],
+                matrix->m[0][1] * matrix->m[0][1], matrix->m[1][0] * matrix->m[1][0],
+                matrix->m[1][1] * matrix->m[1][1], matrix->m[0][0] * matrix->m[0][0],
+            };
+
+            out[4] = (matrix->m[1][1] * matrix->m[0][0] + matrix->m[0][1] * matrix->m[1][0]) * in[4];
+            out[4] -= (matrix->m[1][0] * matrix->m[2][1] + matrix->m[1][1] * matrix->m[2][0]) * in[5];
+            out[4] += 1.7320508076f * matrix->m[2][0] * matrix->m[2][1] * in[6];
+            out[4] -= (matrix->m[0][1] * matrix->m[2][0] + matrix->m[0][0] * matrix->m[2][1]) * in[7];
+            out[4] += (matrix->m[0][0] * matrix->m[0][1] - matrix->m[1][0] * matrix->m[1][1]) * in[8];
+
+            out[5] = (matrix->m[1][1] * matrix->m[2][2] + matrix->m[1][2] * matrix->m[2][1]) * in[5];
+            out[5] -= (matrix->m[1][1] * matrix->m[0][2] + matrix->m[1][2] * matrix->m[0][1]) * in[4];
+            out[5] -= 1.7320508076f * matrix->m[2][2] * matrix->m[2][1] * in[6];
+            out[5] += (matrix->m[0][2] * matrix->m[2][1] + matrix->m[0][1] * matrix->m[2][2]) * in[7];
+            out[5] -= (matrix->m[0][1] * matrix->m[0][2] - matrix->m[1][1] * matrix->m[1][2]) * in[8];
+
+            out[6] = (matrix->m[2][2] * matrix->m[2][2] - 0.5f * (coeff[4] + coeff[5])) * in[6];
+            out[6] -= (0.5773502692f * (coeff[0] + coeff[1]) - 1.1547005384f * matrix->m[1][2] * matrix->m[0][2]) * in[4];
+            out[6] += (0.5773502692f * (coeff[2] + coeff[3]) - 1.1547005384f * matrix->m[1][2] * matrix->m[2][2]) * in[5];
+            out[6] += (0.5773502692f * (coeff[6] + coeff[7]) - 1.1547005384f * matrix->m[0][2] * matrix->m[2][2]) * in[7];
             out[6] += (0.2886751347f * (coeff[9] - coeff[8] + coeff[10] - coeff[11]) - 0.5773502692f *
-                  (matrix->u.m[1][2] * matrix->u.m[1][2] - matrix->u.m[0][2] * matrix->u.m[0][2])) * in[8];
+                  (matrix->m[1][2] * matrix->m[1][2] - matrix->m[0][2] * matrix->m[0][2])) * in[8];
 
-            out[7] = (matrix->u.m[0][0] * matrix->u.m[2][2] + matrix->u.m[0][2] * matrix->u.m[2][0]) * in[7];
-            out[7] -= (matrix->u.m[1][0] * matrix->u.m[0][2] + matrix->u.m[1][2] * matrix->u.m[0][0]) * in[4];
-            out[7] += (matrix->u.m[1][0] * matrix->u.m[2][2] + matrix->u.m[1][2] * matrix->u.m[2][0]) * in[5];
-            out[7] -= 1.7320508076f * matrix->u.m[2][2] * matrix->u.m[2][0] * in[6];
-            out[7] -= (matrix->u.m[0][0] * matrix->u.m[0][2] - matrix->u.m[1][0] * matrix->u.m[1][2]) * in[8];
+            out[7] = (matrix->m[0][0] * matrix->m[2][2] + matrix->m[0][2] * matrix->m[2][0]) * in[7];
+            out[7] -= (matrix->m[1][0] * matrix->m[0][2] + matrix->m[1][2] * matrix->m[0][0]) * in[4];
+            out[7] += (matrix->m[1][0] * matrix->m[2][2] + matrix->m[1][2] * matrix->m[2][0]) * in[5];
+            out[7] -= 1.7320508076f * matrix->m[2][2] * matrix->m[2][0] * in[6];
+            out[7] -= (matrix->m[0][0] * matrix->m[0][2] - matrix->m[1][0] * matrix->m[1][2]) * in[8];
 
             out[8] = 0.5f * (coeff[11] - coeff[8] - coeff[9] + coeff[10]) * in[8];
             out[8] += (coeff[0] - coeff[1]) * in[4];
@@ -3178,16 +3182,16 @@ FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, con
         return out;
     }
 
-    if (fabsf(matrix->u.m[2][2]) != 1.0f)
+    if (fabsf(matrix->m[2][2]) != 1.0f)
     {
-        sinb = sqrtf(1.0f - matrix->u.m[2][2] * matrix->u.m[2][2]);
-        alpha = atan2f(matrix->u.m[2][1] / sinb, matrix->u.m[2][0] / sinb);
-        beta = atan2f(sinb, matrix->u.m[2][2]);
-        gamma = atan2f(matrix->u.m[1][2] / sinb, -matrix->u.m[0][2] / sinb);
+        sinb = sqrtf(1.0f - matrix->m[2][2] * matrix->m[2][2]);
+        alpha = atan2f(matrix->m[2][1] / sinb, matrix->m[2][0] / sinb);
+        beta = atan2f(sinb, matrix->m[2][2]);
+        gamma = atan2f(matrix->m[1][2] / sinb, -matrix->m[0][2] / sinb);
     }
     else
     {
-        alpha = atan2f(matrix->u.m[0][1], matrix->u.m[0][0]);
+        alpha = atan2f(matrix->m[0][1], matrix->m[0][0]);
         beta = 0.0f;
         gamma = 0.0f;
     }
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
index 48abb7ede41..6cfe97492f3 100644
--- a/dlls/d3dx9_36/mesh.c
+++ b/dlls/d3dx9_36/mesh.c
@@ -2368,22 +2368,22 @@ BOOL WINAPI D3DXIntersectTri(const D3DXVECTOR3 *p0, const D3DXVECTOR3 *p1, const
     TRACE("p0 %p, p1 %p, p2 %p, praypos %p, praydir %p, pu %p, pv %p, pdist %p.\n",
             p0, p1, p2, praypos, praydir, pu, pv, pdist);
 
-    m.u.m[0][0] = p1->x - p0->x;
-    m.u.m[1][0] = p2->x - p0->x;
-    m.u.m[2][0] = -praydir->x;
-    m.u.m[3][0] = 0.0f;
-    m.u.m[0][1] = p1->y - p0->y;
-    m.u.m[1][1] = p2->y - p0->y;
-    m.u.m[2][1] = -praydir->y;
-    m.u.m[3][1] = 0.0f;
-    m.u.m[0][2] = p1->z - p0->z;
-    m.u.m[1][2] = p2->z - p0->z;
-    m.u.m[2][2] = -praydir->z;
-    m.u.m[3][2] = 0.0f;
-    m.u.m[0][3] = 0.0f;
-    m.u.m[1][3] = 0.0f;
-    m.u.m[2][3] = 0.0f;
-    m.u.m[3][3] = 1.0f;
+    m.m[0][0] = p1->x - p0->x;
+    m.m[1][0] = p2->x - p0->x;
+    m.m[2][0] = -praydir->x;
+    m.m[3][0] = 0.0f;
+    m.m[0][1] = p1->y - p0->y;
+    m.m[1][1] = p2->y - p0->y;
+    m.m[2][1] = -praydir->y;
+    m.m[3][1] = 0.0f;
+    m.m[0][2] = p1->z - p0->z;
+    m.m[1][2] = p2->z - p0->z;
+    m.m[2][2] = -praydir->z;
+    m.m[3][2] = 0.0f;
+    m.m[0][3] = 0.0f;
+    m.m[1][3] = 0.0f;
+    m.m[2][3] = 0.0f;
+    m.m[3][3] = 1.0f;
 
     vec.x = praypos->x - p0->x;
     vec.y = praypos->y - p0->y;
@@ -3772,11 +3772,11 @@ static HRESULT load_mesh_container(struct ID3DXFileData *filedata, DWORD options
     char *name = NULL;
 
     mesh_data.Type = D3DXMESHTYPE_MESH;
-    mesh_data.u.pMesh = NULL;
+    mesh_data.pMesh = NULL;
 
     hr = D3DXLoadSkinMeshFromXof(filedata, options, device,
             &adjacency, &materials, &effects, &num_materials,
-            &skin_info, &mesh_data.u.pMesh);
+            &skin_info, &mesh_data.pMesh);
     if (FAILED(hr)) return hr;
 
     hr = filedata_get_name(filedata, &name);
@@ -3794,7 +3794,7 @@ cleanup:
     if (effects) ID3DXBuffer_Release(effects);
     if (adjacency) ID3DXBuffer_Release(adjacency);
     if (skin_info) IUnknown_Release(skin_info);
-    if (mesh_data.u.pMesh) IUnknown_Release(mesh_data.u.pMesh);
+    if (mesh_data.pMesh) IUnknown_Release(mesh_data.pMesh);
     HeapFree(GetProcessHeap(), 0, name);
     return hr;
 }
-- 
2.34.1




More information about the wine-devel mailing list