Paul Gofman : d3dx9: Add 'log' preshader opcode.

Alexandre Julliard julliard at winehq.org
Thu May 11 15:07:29 CDT 2017


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

Author: Paul Gofman <gofmanp at gmail.com>
Date:   Mon May  8 18:39:36 2017 +0300

d3dx9: Add 'log' preshader opcode.

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

---

 dlls/d3dx9_36/preshader.c    | 12 ++++++++++++
 dlls/d3dx9_36/tests/effect.c |  2 ++
 2 files changed, 14 insertions(+)

diff --git a/dlls/d3dx9_36/preshader.c b/dlls/d3dx9_36/preshader.c
index a4e5e3a..fbd99ac 100644
--- a/dlls/d3dx9_36/preshader.c
+++ b/dlls/d3dx9_36/preshader.c
@@ -33,6 +33,7 @@ enum pres_ops
     PRESHADER_OP_RCP,
     PRESHADER_OP_FRC,
     PRESHADER_OP_EXP,
+    PRESHADER_OP_LOG,
     PRESHADER_OP_RSQ,
     PRESHADER_OP_SIN,
     PRESHADER_OP_COS,
@@ -95,6 +96,16 @@ static double pres_rsq(double *args, int n)
         return 1.0 / sqrt(v);
 }
 static double pres_exp(double *args, int n) {return pow(2.0, args[0]);}
+static double pres_log(double *args, int n)
+{
+    double v;
+
+    v = fabs(args[0]);
+    if (v == 0.0)
+        return 0.0;
+    else
+        return log2(v);
+}
 
 #define PRES_OPCODE_MASK 0x7ff00000
 #define PRES_OPCODE_SHIFT 20
@@ -124,6 +135,7 @@ static const struct op_info pres_op_info[] =
     {0x103, "rcp", 1, 0, pres_rcp}, /* PRESHADER_OP_RCP */
     {0x104, "frc", 1, 0, pres_frc}, /* PRESHADER_OP_FRC */
     {0x105, "exp", 1, 0, pres_exp}, /* PRESHADER_OP_EXP */
+    {0x106, "log", 1, 0, pres_log}, /* PRESHADER_OP_LOG */
     {0x107, "rsq", 1, 0, pres_rsq}, /* PRESHADER_OP_RSQ */
     {0x108, "sin", 1, 0, pres_sin}, /* PRESHADER_OP_SIN */
     {0x109, "cos", 1, 0, pres_cos}, /* PRESHADER_OP_COS */
diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c
index 7b39e31..a1cdfc2 100644
--- a/dlls/d3dx9_36/tests/effect.c
+++ b/dlls/d3dx9_36/tests/effect.c
@@ -4554,6 +4554,8 @@ static void test_effect_preshader_ops(IDirect3DDevice9 *device)
     {
         {"exp", 0x10500001, 1, {0x3f800000, 0x3f800000, 0x3e5edc66, 0x7f800000},
                 {0.0f, -0.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
+        {"log", 0x10600001, 1, {0, 0x40000000, 0x3f9199b7, 0x43000000},
+                {0.0f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
         {"0 * INF", 0x20500004, 2, {0xffc00000, 0xffc00000, 0xc0d33334, 0x7f800000},
                 {0.0f, -0.0f, -2.2f, 3.402823466e+38f}, {INFINITY, INFINITY, 3.0f, 4.0f}},
     };




More information about the wine-cvs mailing list