From 089414c108695aa31547d58c9c6039fdf9179dd7 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Mon, 5 May 2008 11:30:22 -0700 Subject: [PATCH] d3dx9: Load the dll dynamically --- dlls/d3dx9_36/tests/Makefile.in | 2 +- dlls/d3dx9_36/tests/math.c | 55 +++++++++++++++++++++++++++++++------- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/dlls/d3dx9_36/tests/Makefile.in b/dlls/d3dx9_36/tests/Makefile.in index 5d72504..64bc55c 100644 --- a/dlls/d3dx9_36/tests/Makefile.in +++ b/dlls/d3dx9_36/tests/Makefile.in @@ -3,7 +3,7 @@ TOPOBJDIR = ../../.. SRCDIR = @srcdir@ VPATH = @srcdir@ TESTDLL = d3dx9_36.dll -IMPORTS = d3dx9 kernel32 +IMPORTS = kernel32 CTESTS = \ math.c diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 8c760ed..e228226 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -19,6 +19,31 @@ #include "wine/test.h" #include "d3dx9math.h" +D3DXMATRIX* (WINAPI *pD3DXMatrixPerspectiveFovLH)(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf); +D3DXVECTOR4* (WINAPI *pD3DXVec2TransformArray)(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); +D3DXVECTOR2* (WINAPI *pD3DXVec2TransformCoordArray)(D3DXVECTOR2 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); +D3DXVECTOR2* (WINAPI *pD3DXVec2TransformNormalArray)(D3DXVECTOR2 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); +D3DXVECTOR3* (WINAPI *pD3DXVec3ProjectArray)(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld, UINT n); +D3DXVECTOR4* (WINAPI *pD3DXVec3TransformArray)(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); +D3DXVECTOR3* (WINAPI *pD3DXVec3TransformCoordArray)(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); +D3DXVECTOR3* (WINAPI *pD3DXVec3TransformNormalArray)(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); +D3DXVECTOR3* (WINAPI *pD3DXVec3UnprojectArray)(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld, UINT n); +D3DXVECTOR4* (WINAPI *pD3DXVec4TransformArray)(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR4 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n); + +static void D3DX9_Imports(HMODULE hD3DX9) +{ + pD3DXMatrixPerspectiveFovLH = (void *)GetProcAddress(hD3DX9, "D3DXMatrixPerspectiveFovLH"); + pD3DXVec2TransformArray = (void *)GetProcAddress(hD3DX9, "D3DXVec2TransformArray"); + pD3DXVec2TransformCoordArray = (void *)GetProcAddress(hD3DX9, "D3DXVec2TransformCoordArray"); + pD3DXVec2TransformNormalArray = (void *)GetProcAddress(hD3DX9, "D3DXVec2TransformNormalArray"); + pD3DXVec3ProjectArray = (void *)GetProcAddress(hD3DX9, "D3DXVec3ProjectArray"); + pD3DXVec3TransformArray = (void *)GetProcAddress(hD3DX9, "D3DXVec3TransformArray"); + pD3DXVec3TransformCoordArray = (void *)GetProcAddress(hD3DX9, "D3DXVec3TransformCoordArray"); + pD3DXVec3TransformNormalArray = (void *)GetProcAddress(hD3DX9, "D3DXVec3TransformNormalArray"); + pD3DXVec3UnprojectArray = (void *)GetProcAddress(hD3DX9, "D3DXVec3UnprojectArray"); + pD3DXVec4TransformArray = (void *)GetProcAddress(hD3DX9, "D3DXVec4TransformArray"); +} + #define ARRAY_SIZE 5 #define admitted_error 0.01f @@ -75,7 +100,7 @@ static void test_D3DXVec_Array(void) U(mat).m[2][0] = 9.0f; U(mat).m[2][1] = 10.0f; U(mat).m[2][2] = 11.0f; U(mat).m[2][3] = 12.0f; U(mat).m[3][0] = 13.0f; U(mat).m[3][1] = 14.0f; U(mat).m[3][2] = 15.0f; U(mat).m[3][3] = 16.0f; - D3DXMatrixPerspectiveFovLH(&projection,D3DX_PI/4.0f,20.0f/17.0f,1.0f,1000.0f); + pD3DXMatrixPerspectiveFovLH(&projection,D3DX_PI/4.0f,20.0f/17.0f,1.0f,1000.0f); U(view).m[0][1] = 5.0f; U(view).m[0][2] = 7.0f; U(view).m[0][3] = 8.0f; U(view).m[1][0] = 11.0f; U(view).m[1][2] = 16.0f; U(view).m[1][3] = 33.0f; @@ -95,7 +120,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 0.625f; exp_vec[3].y = 0.75f; exp_vec[4].x = 0.590909f; exp_vec[4].y = 8.0f/11.0f; exp_vec[5].x = 0.55f; exp_vec[5].y = 0.7f; - D3DXVec2TransformCoordArray((D3DXVECTOR2*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR2*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec2TransformCoordArray((D3DXVECTOR2*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR2*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec2TransformNormalArray */ @@ -104,7 +129,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 17.0f; exp_vec[3].y = 22.0f; exp_vec[4].x = 13.0f; exp_vec[4].y = 18.0f; exp_vec[5].x = 9.0f; exp_vec[5].y = 14.0f; - D3DXVec2TransformNormalArray((D3DXVECTOR2*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR2*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec2TransformNormalArray((D3DXVECTOR2*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR2*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec3TransformCoordArray */ @@ -113,7 +138,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 6.0f/9.0f; exp_vec[3].y = 7.0f/9.0f; exp_vec[3].z = 8.0f/9.0f; exp_vec[4].x = 0.6625f; exp_vec[4].y = 0.775f; exp_vec[4].z = 0.8875f; exp_vec[5].x = 0.659091f; exp_vec[5].y = 0.772727f; exp_vec[5].z = 0.886364f; - D3DXVec3TransformCoordArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec3TransformCoordArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec3TransformNormalArray */ @@ -122,7 +147,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 35.0f; exp_vec[3].y = 42.0f; exp_vec[3].z = 49.0f; exp_vec[4].x = 40.0f; exp_vec[4].y = 48.0f; exp_vec[4].z = 56.0f; exp_vec[5].x = 45.0f; exp_vec[5].y = 54.0f; exp_vec[5].z = 63.0f; - D3DXVec3TransformNormalArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec3TransformNormalArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec3ProjectArray */ @@ -131,7 +156,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 1051.778931f; exp_vec[3].y = 376.462250f; exp_vec[3].z = 0.156329f; exp_vec[4].x = 1037.348877f; exp_vec[4].y = 606.827393f; exp_vec[4].z = 0.133813f; exp_vec[5].x = 1025.023560f; exp_vec[5].y = 803.591248f; exp_vec[5].z = 0.114581f; - D3DXVec3ProjectArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (CONST D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &viewport, &projection, &view, &world, ARRAY_SIZE); + pD3DXVec3ProjectArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (CONST D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &viewport, &projection, &view, &world, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec3UnprojectArray */ @@ -140,7 +165,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = -2.922839f; exp_vec[3].y = 1.596689f; exp_vec[3].z = 0.380609f; exp_vec[4].x = -2.456225f; exp_vec[4].y = 1.359290f; exp_vec[4].z = 0.345632f; exp_vec[5].x = -2.167897f; exp_vec[5].y = 1.212597f; exp_vec[5].z = 0.324019f; - D3DXVec3UnprojectArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (CONST D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &viewport, &projection, &view, &world, ARRAY_SIZE); + pD3DXVec3UnprojectArray((D3DXVECTOR3*)(out_vec + 1), sizeof(D3DXVECTOR4), (CONST D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &viewport, &projection, &view, &world, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec2TransformArray */ @@ -149,7 +174,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 30.0f; exp_vec[3].y = 36.0f; exp_vec[3].z = 42.0f; exp_vec[3].w = 48.0f; exp_vec[4].x = 26.0f; exp_vec[4].y = 32.0f; exp_vec[4].z = 38.0f; exp_vec[4].w = 44.0f; exp_vec[5].x = 22.0f; exp_vec[5].y = 28.0f; exp_vec[5].z = 34.0f; exp_vec[5].w = 40.0f; - D3DXVec2TransformArray(out_vec + 1, sizeof(D3DXVECTOR4), (D3DXVECTOR2*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec2TransformArray(out_vec + 1, sizeof(D3DXVECTOR4), (D3DXVECTOR2*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec3TransformArray */ @@ -158,7 +183,7 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 48.0f; exp_vec[3].y = 56.0f; exp_vec[3].z = 64.0f; exp_vec[3].w = 72.0f; exp_vec[4].x = 53.0f; exp_vec[4].y = 62.0f; exp_vec[4].z = 71.0f; exp_vec[4].w = 80.0f; exp_vec[5].x = 58.0f; exp_vec[5].y = 68.0f; exp_vec[5].z = 78.0f; exp_vec[5].w = 88.0f; - D3DXVec3TransformArray(out_vec + 1, sizeof(D3DXVECTOR4), (D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec3TransformArray(out_vec + 1, sizeof(D3DXVECTOR4), (D3DXVECTOR3*)inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); /* D3DXVec4TransformArray */ @@ -167,11 +192,21 @@ static void test_D3DXVec_Array(void) exp_vec[3].x = 74.0f; exp_vec[3].y = 84.0f; exp_vec[3].z = 94.0f; exp_vec[3].w = 104.0f; exp_vec[4].x = 66.0f; exp_vec[4].y = 76.0f; exp_vec[4].z = 86.0f; exp_vec[4].w = 96.0f; exp_vec[5].x = 58.0f; exp_vec[5].y = 68.0f; exp_vec[5].z = 78.0f; exp_vec[5].w = 88.0f; - D3DXVec4TransformArray(out_vec + 1, sizeof(D3DXVECTOR4), inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); + pD3DXVec4TransformArray(out_vec + 1, sizeof(D3DXVECTOR4), inp_vec, sizeof(D3DXVECTOR4), &mat, ARRAY_SIZE); compare_vectors(exp_vec, out_vec); } START_TEST(math) { + HMODULE hD3DX9; + hD3DX9 = LoadLibrary("d3dx9_36.dll"); + if (!hD3DX9) + { + skip("d3dx9_36.dll not found\n"); + return; + } + D3DX9_Imports(hD3DX9); + test_D3DXVec_Array(); + FreeLibrary(hD3DX9); } -- 1.5.4.1