[PATCH 4/6] d3dx9: D3DXVec2Transform should support arguments aliasing.

Paul Gofman gofmanp at gmail.com
Thu Apr 14 07:10:14 CDT 2016


Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
 dlls/d3dx9_36/math.c       | 11 +++++++----
 dlls/d3dx9_36/tests/math.c |  7 +++++--
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
index fb8cad6..18f17ad 100644
--- a/dlls/d3dx9_36/math.c
+++ b/dlls/d3dx9_36/math.c
@@ -1715,12 +1715,15 @@ D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv)
 
 D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm)
 {
+    D3DXVECTOR4 out;
+
     TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
 
-    pout->x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y  + pm->u.m[3][0];
-    pout->y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y  + pm->u.m[3][1];
-    pout->z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y  + pm->u.m[3][2];
-    pout->w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y  + pm->u.m[3][3];
+    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];
+    *pout = out;
     return pout;
 }
 
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c
index fc2e4be..8300993 100644
--- a/dlls/d3dx9_36/tests/math.c
+++ b/dlls/d3dx9_36/tests/math.c
@@ -1193,8 +1193,11 @@ static void D3DXVector2Test(void)
 
 /*_______________D3DXVec2Transform_______________________*/
     expectedtrans.x = 36.0f; expectedtrans.y = 44.0f; expectedtrans.z = 52.0f; expectedtrans.w = 60.0f;
-    D3DXVec2Transform(&gottrans,&u,&mat);
-    expect_vec4(expectedtrans,gottrans);
+    D3DXVec2Transform(&gottrans, &u, &mat);
+    expect_vec4(expectedtrans, gottrans);
+    gottrans.x = u.x; gottrans.y = u.y;
+    D3DXVec2Transform(&gottrans, (D3DXVECTOR2 *)&gottrans, &mat);
+    expect_vec4(expectedtrans, gottrans);
 
 /*_______________D3DXVec2TransformCoord_______________________*/
     expectedvec.x = 0.6f; expectedvec.y = 11.0f/15.0f;
-- 
2.5.5




More information about the wine-patches mailing list