From 2f4789895372977036af9046241514676925ccbe Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Fri, 19 May 2017 14:56:36 +0300 Subject: [PATCH] d3dx9: Add 'atan2' preshader opcode. Signed-off-by: Paul Gofman Signed-off-by: Matteo Bruni Signed-off-by: Alexandre Julliard --- dlls/d3dx9_36/preshader.c | 3 +++ dlls/d3dx9_36/tests/effect.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/dlls/d3dx9_36/preshader.c b/dlls/d3dx9_36/preshader.c index 72f6ff55fce..7940e2f12f9 100644 --- a/dlls/d3dx9_36/preshader.c +++ b/dlls/d3dx9_36/preshader.c @@ -46,6 +46,7 @@ enum pres_ops PRESHADER_OP_GE, PRESHADER_OP_ADD, PRESHADER_OP_MUL, + PRESHADER_OP_ATAN2, PRESHADER_OP_CMP, PRESHADER_OP_DOT, PRESHADER_OP_DOTSWIZ6, @@ -131,6 +132,7 @@ static double pres_log(double *args, int n) static double pres_asin(double *args, int n) {return to_signed_nan(asin(args[0]));} static double pres_acos(double *args, int n) {return to_signed_nan(acos(args[0]));} static double pres_atan(double *args, int n) {return atan(args[0]);} +static double pres_atan2(double *args, int n) {return atan2(args[0], args[1]);} #define PRES_OPCODE_MASK 0x7ff00000 #define PRES_OPCODE_SHIFT 20 @@ -173,6 +175,7 @@ static const struct op_info pres_op_info[] = {0x203, "ge", 2, 0, pres_ge }, /* PRESHADER_OP_GE */ {0x204, "add", 2, 0, pres_add}, /* PRESHADER_OP_ADD */ {0x205, "mul", 2, 0, pres_mul}, /* PRESHADER_OP_MUL */ + {0x206, "atan2", 2, 0, pres_atan2}, /* PRESHADER_OP_ATAN2 */ {0x300, "cmp", 3, 0, pres_cmp}, /* PRESHADER_OP_CMP */ {0x500, "dot", 2, 1, pres_dot}, /* PRESHADER_OP_DOT */ {0x70e, "d3ds_dotswiz", 6, 0, pres_dotswiz6}, /* PRESHADER_OP_DOTSWIZ6 */ diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c index ffdb1dded38..0fa88211d78 100644 --- a/dlls/d3dx9_36/tests/effect.c +++ b/dlls/d3dx9_36/tests/effect.c @@ -4562,6 +4562,10 @@ static void test_effect_preshader_ops(IDirect3DDevice9 *device) {-0.3f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}}, {"atan", 0x10c00001, 1, {0xbe9539d4, 0x3fa9b465, 0xbf927420, 0x3fc90fdb}, {-0.3f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}}, + {"atan2 test #1", 0x20600004, 2, {0xbfc90fdb, 0x40490fdb, 0x80000000, 0x7fc00000}, + {-0.3f, 0.0f, -0.0f, NAN}, {0.0f, -0.0f, 0.0f, 1.0f}}, + {"atan2 test #2", 0x20600004, 2, {0xbfc90fdb, 0, 0xc0490fdb, 0}, + {-0.3f, 0.0f, -0.0f, -0.0f}, {-0.0f, 0.0f, -0.0f, 1.0f}}, {"0 * INF", 0x20500004, 2, {0xffc00000, 0xffc00000, 0xc0d33334, 0x7f800000}, {0.0f, -0.0f, -2.2f, 3.402823466e+38f}, {INFINITY, INFINITY, 3.0f, 4.0f}}, };