Matteo Bruni : d3dx9/tests: Clean up GetMatrixPointerArray() tests.

Alexandre Julliard julliard at winehq.org
Wed Oct 6 15:51:40 CDT 2021


Module: wine
Branch: master
Commit: 3660176e09bc02e71586b4cf42f58c9498481af6
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3660176e09bc02e71586b4cf42f58c9498481af6

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Sat Oct  2 18:39:42 2021 +0200

d3dx9/tests: Clean up GetMatrixPointerArray() tests.

Inspired by a patch from Eric Pouech.

Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3dx9_36/tests/effect.c | 36 +++++++++++++++++++++++++++---------
 1 file changed, 27 insertions(+), 9 deletions(-)

diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c
index d6998284271..a13dc708726 100644
--- a/dlls/d3dx9_36/tests/effect.c
+++ b/dlls/d3dx9_36/tests/effect.c
@@ -1470,20 +1470,28 @@ static void test_effect_parameter_value_GetMatrixArray(const struct test_effect_
 static void test_effect_parameter_value_GetMatrixPointerArray(const struct test_effect_parameter_value_result *res,
         ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
 {
+    union
+    {
+        float f[sizeof(D3DXMATRIX) / sizeof(float)];
+        D3DXMATRIX m;
+    } fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE * sizeof(float) / sizeof(D3DXMATRIX)];
     const D3DXPARAMETER_DESC *res_desc = &res->desc;
     const char *res_full_name = res->full_name;
     HRESULT hr;
-    DWORD cmp = 0xabababab;
-    FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
-    D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
+    D3DXMATRIX *matrix_pointer_array[ARRAY_SIZE(fvalue)];
     UINT l, k, m, element, err = 0;
+    union
+    {
+        DWORD d;
+        float f;
+    } cmp = {0xabababab};
 
     for (element = 0; element <= res_desc->Elements + 1; ++element)
     {
         memset(fvalue, 0xab, sizeof(fvalue));
         for (l = 0; l < element; ++l)
         {
-            matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
+            matrix_pointer_array[l] = &fvalue[l].m;
         }
         hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
         if (!element)
@@ -1491,7 +1499,10 @@ static void test_effect_parameter_value_GetMatrixPointerArray(const struct test_
             ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
                     i, res_full_name, element, hr, D3D_OK);
 
-            for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
+            for (m = 0; m < ARRAY_SIZE(fvalue); ++m)
+                for (l = 0; l < ARRAY_SIZE(fvalue[l].f); ++l)
+                    if (fvalue[m].f[l] != cmp.f)
+                        ++err;
         }
         else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
         {
@@ -1506,20 +1517,27 @@ static void test_effect_parameter_value_GetMatrixPointerArray(const struct test_
                     {
                         if (k < res_desc->Columns && l < res_desc->Rows)
                         {
-                            if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
+                            if (!compare_float(fvalue[m].m.m[l][k], get_float(res_desc->Type,
                                     &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
                                 ++err;
                         }
-                        else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
+                        else if (fvalue[m].m.m[l][k] != 0.0f)
+                            ++err;
                     }
                 }
             }
 
-            for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
+            for (m = element; m < ARRAY_SIZE(fvalue); ++m)
+                for (l = 0; l < ARRAY_SIZE(fvalue[m].f); ++l)
+                    if (fvalue[m].f[l] != cmp.f)
+                        ++err;
         }
         else
         {
-            for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
+            for (m = 0; m < ARRAY_SIZE(fvalue); ++m)
+                for (l = 0; l < ARRAY_SIZE(fvalue[m].f); ++l)
+                    if (fvalue[m].f[l] != cmp.f)
+                        ++err;
 
             ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
                     i, res_full_name, element, hr, D3DERR_INVALIDCALL);




More information about the wine-cvs mailing list