Commit 5907604e authored by Paul Gofman's avatar Paul Gofman Committed by Michael Stefaniuc

d3dx9: D3DXVec3Transform should support input and output parameter overlap.

Signed-off-by: 's avatarPaul Gofman <gofmanp@gmail.com> Signed-off-by: 's avatarMatteo Bruni <mbruni@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org> (cherry picked from commit 1ba9cfb5) Signed-off-by: 's avatarMichael Stefaniuc <mstefani@winehq.org>
parent 1354e84c
...@@ -1900,12 +1900,15 @@ D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3* out, UINT outstride, const ...@@ -1900,12 +1900,15 @@ D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3* out, UINT outstride, const
D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm) D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm)
{ {
D3DXVECTOR4 out;
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm); 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[2][0] * pv->z + pm->u.m[3][0]; 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];
pout->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.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];
pout->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.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];
pout->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.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];
*pout = out;
return pout; return pout;
} }
......
...@@ -1356,8 +1356,12 @@ static void D3DXVector3Test(void) ...@@ -1356,8 +1356,12 @@ static void D3DXVector3Test(void)
/*_______________D3DXVec3Transform_______________________*/ /*_______________D3DXVec3Transform_______________________*/
expectedtrans.x = 70.0f; expectedtrans.y = 88.0f; expectedtrans.z = 106.0f; expectedtrans.w = 124.0f; expectedtrans.x = 70.0f; expectedtrans.y = 88.0f; expectedtrans.z = 106.0f; expectedtrans.w = 124.0f;
D3DXVec3Transform(&gottrans,&u,&mat); D3DXVec3Transform(&gottrans, &u, &mat);
expect_vec4(expectedtrans,gottrans); expect_vec4(expectedtrans, gottrans);
gottrans.x = u.x; gottrans.y = u.y; gottrans.z = u.z;
D3DXVec3Transform(&gottrans, (D3DXVECTOR3 *)&gottrans, &mat);
expect_vec4(expectedtrans, gottrans);
/*_______________D3DXVec3TransformCoord_______________________*/ /*_______________D3DXVec3TransformCoord_______________________*/
expectedvec.x = 70.0f/124.0f; expectedvec.y = 88.0f/124.0f; expectedvec.z = 106.0f/124.0f; expectedvec.x = 70.0f/124.0f; expectedvec.y = 88.0f/124.0f; expectedvec.z = 106.0f/124.0f;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment