[v2 1/5] d3dx9/tests: Factor out test_effect_preshader_compare_shader_bytecode() function.

Paul Gofman gofmanp at gmail.com
Wed May 3 17:33:45 CDT 2017


Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
 dlls/d3dx9_36/tests/effect.c | 42 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 6 deletions(-)

diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c
index 3e9d255..4dc62ec 100644
--- a/dlls/d3dx9_36/tests/effect.c
+++ b/dlls/d3dx9_36/tests/effect.c
@@ -3987,8 +3987,39 @@ static const DWORD test_effect_preshader_effect_blob[] =
 #define TEST_EFFECT_PRESHADER_VSHADER_POS 2710
 #define TEST_EFFECT_PRESHADER_VSHADER_LEN 13
 
-#define test_effect_preshader_compare_shader(a, b, c) \
-        test_effect_preshader_compare_shader_(__LINE__, a, b, c)
+#define test_effect_preshader_compare_shader_bytecode(args...) \
+        test_effect_preshader_compare_shader_bytecode_(__LINE__, args)
+static void test_effect_preshader_compare_shader_bytecode_(unsigned int line,
+        const void *byte_code, unsigned int byte_code_size, int expected_shader_index, BOOL todo)
+{
+    unsigned int i;
+
+    todo_wine_if(todo)
+    ok_(__FILE__, line)(!!byte_code, "Null shader byte code.\n");
+
+    if (!byte_code)
+        return;
+
+    for (i = 0; ((DWORD *)byte_code)[i] != 0x0000ffff; ++i)
+        ;
+
+    if (!byte_code_size)
+    {
+        byte_code_size = (i + 1) * sizeof (DWORD);
+    }
+    else
+    {
+        ok((i + 1) * sizeof(DWORD) == byte_code_size, "Unexpected byte code size %u.\n", byte_code_size);
+    }
+
+    todo_wine_if(todo)
+    ok_(__FILE__, line)(!memcmp(byte_code, &test_effect_preshader_effect_blob[TEST_EFFECT_PRESHADER_VSHADER_POS
+            + expected_shader_index * TEST_EFFECT_PRESHADER_VSHADER_LEN], byte_code_size),
+            "Incorrect shader selected.\n");
+}
+
+#define test_effect_preshader_compare_shader(args...) \
+        test_effect_preshader_compare_shader_(__LINE__, args)
 static void test_effect_preshader_compare_shader_(unsigned int line, IDirect3DDevice9 *device,
         int expected_shader_index, BOOL todo)
 {
@@ -4013,10 +4044,9 @@ static void test_effect_preshader_compare_shader_(unsigned int line, IDirect3DDe
     hr = IDirect3DVertexShader9_GetFunction(vshader, byte_code, &byte_code_size);
     ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
 
-    todo_wine_if(todo)
-    ok_(__FILE__, line)(!memcmp(byte_code, &test_effect_preshader_effect_blob[TEST_EFFECT_PRESHADER_VSHADER_POS
-            + expected_shader_index * TEST_EFFECT_PRESHADER_VSHADER_LEN], byte_code_size),
-            "Incorrect shader selected.\n");
+    test_effect_preshader_compare_shader_bytecode_(line, byte_code,
+            byte_code_size, expected_shader_index, todo);
+
     HeapFree(GetProcessHeap(), 0, byte_code);
     IDirect3DVertexShader9_Release(vshader);
  }
-- 
2.9.3




More information about the wine-patches mailing list