Nozomi Kodama : d3dx9_36: Implementation of D3DXSHDot.

Alexandre Julliard julliard at winehq.org
Thu Jun 28 13:55:15 CDT 2012


Module: wine
Branch: master
Commit: b56227cbf1e1686a8d3b7d57ca0d28b7a24fe699
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b56227cbf1e1686a8d3b7d57ca0d28b7a24fe699

Author: Nozomi Kodama <Nozomi.Kodama at yahoo.com>
Date:   Wed Jun 27 14:50:07 2012 +0800

d3dx9_36: Implementation of D3DXSHDot.

---

 dlls/d3dx9_36/d3dx9_36.spec |    2 +-
 dlls/d3dx9_36/math.c        |   14 ++++++++++++++
 dlls/d3dx9_36/tests/math.c  |   24 ++++++++++++++++++++++++
 include/d3dx9math.h         |    1 +
 4 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index 338585a..2ed971c5 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -273,7 +273,7 @@
 @ stub D3DXSaveVolumeToFileInMemory(ptr long ptr ptr ptr)
 @ stub D3DXSaveVolumeToFileW(ptr long ptr ptr ptr)
 @ stdcall D3DXSHAdd(ptr long ptr ptr)
-@ stub D3DXSHDot(long ptr ptr)
+@ stdcall D3DXSHDot(long ptr ptr)
 @ stub D3DXSHEvalConeLight(long ptr long long long long ptr ptr ptr)
 @ stub D3DXSHEvalDirection(ptr long ptr)
 @ stub D3DXSHEvalDirectionalLight(long ptr long long long long ptr ptr ptr)
diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
index 529665b..28958ae 100644
--- a/dlls/d3dx9_36/math.c
+++ b/dlls/d3dx9_36/math.c
@@ -1981,6 +1981,20 @@ FLOAT* WINAPI D3DXSHAdd(FLOAT *out, UINT order, const FLOAT *a, const FLOAT *b)
     return out;
 }
 
+FLOAT WINAPI D3DXSHDot(UINT order, CONST FLOAT *a, CONST FLOAT *b)
+{
+    FLOAT s;
+    UINT i;
+
+    TRACE("order %u, a %p, b %p\n", order, a, b);
+
+    s = a[0] * b[0];
+    for (i = 1; i < order * order; i++)
+        s += a[i] * b[i];
+
+    return s;
+}
+
 FLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, CONST FLOAT *a, CONST FLOAT *b)
 {
     FLOAT t, ta, tb;
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c
index 70290bf..cc6170f 100644
--- a/dlls/d3dx9_36/tests/math.c
+++ b/dlls/d3dx9_36/tests/math.c
@@ -2399,6 +2399,29 @@ static void test_D3DXSHAdd(void)
     }
 }
 
+static void test_D3DXSHDot(void)
+{
+    unsigned int i;
+    FLOAT a[64], b[64], got;
+    CONST FLOAT expected[] =
+    { 0.5f, 0.5f, 25.0f, 262.5f, 1428.0f, 5362.0f, 15873.0f, 39812.0f, 88400.0f, };
+
+    for (i = 0; i < 64; i++)
+    {
+        a[i] = (FLOAT)i + 1.0f;
+        b[i] = (FLOAT)i + 0.5f;
+    }
+
+    /* D3DXSHDot computes by using order * order elements */
+    for (i = 0; i < 9; i++)
+    {
+        got = D3DXSHDot(i, a, b);
+        ok(relative_error(got, expected[i]) < admitted_error, "order %d: expected %f, received %f\n", i, expected[i], got);
+    }
+
+    return;
+}
+
 static void test_D3DXSHMultiply3(void)
 {
     unsigned int i;
@@ -2438,5 +2461,6 @@ START_TEST(math)
     test_D3DXVec_Array();
     test_D3DXFloat_Array();
     test_D3DXSHAdd();
+    test_D3DXSHDot();
     test_D3DXSHMultiply3();
 }
diff --git a/include/d3dx9math.h b/include/d3dx9math.h
index b650b48..0cffad4 100644
--- a/include/d3dx9math.h
+++ b/include/d3dx9math.h
@@ -378,6 +378,7 @@ D3DXFLOAT16 *WINAPI D3DXFloat32To16Array(D3DXFLOAT16 *pout, CONST FLOAT *pin, UI
 FLOAT *WINAPI D3DXFloat16To32Array(FLOAT *pout, CONST D3DXFLOAT16 *pin, UINT n);
 
 FLOAT* WINAPI D3DXSHAdd(FLOAT *out, UINT order, CONST FLOAT *a, CONST FLOAT *b);
+FLOAT WINAPI D3DXSHDot(UINT order, CONST FLOAT *a, CONST FLOAT *b);
 FLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, CONST FLOAT *a, CONST FLOAT *b);
 
 #ifdef __cplusplus




More information about the wine-cvs mailing list