lima/ppir: Add fsat op
authorAndreas Baierl <ichgeh@imkreisrum.de>
Fri, 21 Jun 2019 14:13:44 +0000 (16:13 +0200)
committerAndreas Baierl <ichgeh@imkreisrum.de>
Mon, 24 Jun 2019 14:41:33 +0000 (16:41 +0200)
Signed-off-by: Andreas Baierl <ichgeh@imkreisrum.de>
Reviewed-by: Qiang Yu <yuq825@gmail.com>
src/gallium/drivers/lima/ir/pp/lower.c
src/gallium/drivers/lima/ir/pp/nir.c
src/gallium/drivers/lima/ir/pp/node.c
src/gallium/drivers/lima/ir/pp/ppir.h

index 2e87754d893ab8cc258d02a313104e35c5ae8265..11a0027c7688eeb4872f742fd096a99954c2323e 100644 (file)
@@ -427,6 +427,20 @@ static bool ppir_lower_neg(ppir_block *block, ppir_node *node)
    return true;
 }
 
+static bool ppir_lower_sat(ppir_block *block, ppir_node *node)
+{
+   /* Turn it into a mov with the saturate output modifier */
+   ppir_alu_node *alu = ppir_node_to_alu(node);
+
+   assert(alu->num_src == 1);
+
+   ppir_dest *move_dest = &alu->dest;
+   move_dest->modifier = ppir_outmod_clamp_fraction;
+   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);
@@ -480,6 +494,7 @@ static bool (*ppir_lower_funcs[ppir_op_num])(ppir_block *, ppir_node *) = {
    [ppir_op_load_texture] = ppir_lower_texture,
    [ppir_op_select] = ppir_lower_select,
    [ppir_op_trunc] = ppir_lower_trunc,
+   [ppir_op_sat] = ppir_lower_sat,
    [ppir_op_branch] = ppir_lower_branch,
 };
 
index 4ad856353991e4e0dad283e165ab1ebc8c415052..907cb1105d27405128231cea7984f7da113096a1 100644 (file)
@@ -152,6 +152,7 @@ static int nir_to_ppir_opcodes[nir_num_opcodes] = {
    [nir_op_fcsel] = ppir_op_select,
    [nir_op_inot] = ppir_op_not,
    [nir_op_ftrunc] = ppir_op_trunc,
+   [nir_op_fsat] = ppir_op_sat,
 };
 
 static ppir_node *ppir_emit_alu(ppir_block *block, nir_instr *ni)
index 425329bb71322a26850db5b1bd5ea637c77aada5..5522b875269561745992ee09229ee341b59b8302 100644 (file)
@@ -43,6 +43,9 @@ const ppir_op_info ppir_op_infos[] = {
    [ppir_op_neg] = {
       .name = "neg",
    },
+   [ppir_op_sat] = {
+      .name = "sat",
+   },
    [ppir_op_mul] = {
       .name = "mul",
       .slots = (int []) {
index bf4bb544261e8091515b86298f8f295b596e0c72..2da4ea35a1dc5cf0da28666392eec9faba7c15ab 100644 (file)
@@ -34,6 +34,7 @@ typedef enum {
    ppir_op_mov,
    ppir_op_abs,
    ppir_op_neg,
+   ppir_op_sat,
    ppir_op_add,
 
    ppir_op_ddx,