summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/lima
diff options
context:
space:
mode:
authorAndreas Baierl <[email protected]>2019-06-21 10:50:39 +0200
committerAndreas Baierl <[email protected]>2019-06-24 16:41:33 +0200
commit512397058d923704b4bcc16b8748be84dbbe0daa (patch)
tree75524ed3fdb98df133d686b0eae28b8ede95ba3e /src/gallium/drivers/lima
parent2d2e824fae4b78959513a40768bc247accb67175 (diff)
lima/ppir: Add fabs op
Signed-off-by: Andreas Baierl <[email protected]> Reviewed-by: Qiang Yu <[email protected]>
Diffstat (limited to 'src/gallium/drivers/lima')
-rw-r--r--src/gallium/drivers/lima/ir/pp/lower.c15
-rw-r--r--src/gallium/drivers/lima/ir/pp/nir.c1
-rw-r--r--src/gallium/drivers/lima/ir/pp/node.c3
-rw-r--r--src/gallium/drivers/lima/ir/pp/ppir.h1
4 files changed, 20 insertions, 0 deletions
diff --git a/src/gallium/drivers/lima/ir/pp/lower.c b/src/gallium/drivers/lima/ir/pp/lower.c
index 192392f6224..db62988078d 100644
--- a/src/gallium/drivers/lima/ir/pp/lower.c
+++ b/src/gallium/drivers/lima/ir/pp/lower.c
@@ -400,6 +400,20 @@ static bool ppir_lower_trunc(ppir_block *block, ppir_node *node)
return true;
}
+static bool ppir_lower_abs(ppir_block *block, ppir_node *node)
+{
+ /* Turn it into a mov and set the absolute modifier */
+ ppir_alu_node *alu = ppir_node_to_alu(node);
+
+ assert(alu->num_src == 1);
+
+ alu->src[0].absolute = true;
+ alu->src[0].negate = false;
+ node->op = ppir_op_mov;
+
+ return true;
+}
+
static bool ppir_lower_branch(ppir_block *block, ppir_node *node)
{
ppir_branch_node *branch = ppir_node_to_branch(node);
@@ -435,6 +449,7 @@ static bool ppir_lower_branch(ppir_block *block, ppir_node *node)
}
static bool (*ppir_lower_funcs[ppir_op_num])(ppir_block *, ppir_node *) = {
+ [ppir_op_abs] = ppir_lower_abs,
[ppir_op_const] = ppir_lower_const,
[ppir_op_dot2] = ppir_lower_dot,
[ppir_op_dot3] = ppir_lower_dot,
diff --git a/src/gallium/drivers/lima/ir/pp/nir.c b/src/gallium/drivers/lima/ir/pp/nir.c
index 580d5c3aff1..18c6eb347f4 100644
--- a/src/gallium/drivers/lima/ir/pp/nir.c
+++ b/src/gallium/drivers/lima/ir/pp/nir.c
@@ -119,6 +119,7 @@ static int nir_to_ppir_opcodes[nir_num_opcodes] = {
[nir_op_mov] = ppir_op_mov,
[nir_op_fmul] = ppir_op_mul,
+ [nir_op_fabs] = ppir_op_abs,
[nir_op_fadd] = ppir_op_add,
[nir_op_fdot2] = ppir_op_dot2,
[nir_op_fdot3] = ppir_op_dot3,
diff --git a/src/gallium/drivers/lima/ir/pp/node.c b/src/gallium/drivers/lima/ir/pp/node.c
index 38d7e6284e4..a1a7f819f1b 100644
--- a/src/gallium/drivers/lima/ir/pp/node.c
+++ b/src/gallium/drivers/lima/ir/pp/node.c
@@ -37,6 +37,9 @@ const ppir_op_info ppir_op_infos[] = {
PPIR_INSTR_SLOT_END
},
},
+ [ppir_op_abs] = {
+ .name = "abs",
+ },
[ppir_op_mul] = {
.name = "mul",
.slots = (int []) {
diff --git a/src/gallium/drivers/lima/ir/pp/ppir.h b/src/gallium/drivers/lima/ir/pp/ppir.h
index 4b15804952f..cc3a37e8ade 100644
--- a/src/gallium/drivers/lima/ir/pp/ppir.h
+++ b/src/gallium/drivers/lima/ir/pp/ppir.h
@@ -32,6 +32,7 @@
typedef enum {
ppir_op_mov,
+ ppir_op_abs,
ppir_op_add,
ppir_op_ddx,