diff options
-rw-r--r-- | src/intel/compiler/brw_fs_nir.cpp | 22 | ||||
-rw-r--r-- | src/intel/compiler/brw_vec4_nir.cpp | 31 |
2 files changed, 44 insertions, 9 deletions
diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index a2c8f3f557f..794a38d3833 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -1112,6 +1112,28 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr) inst->saturate = instr->dest.saturate; break; + case nir_op_fsat: + inst = bld.MOV(result, op[0]); + inst->saturate = true; + break; + + case nir_op_fneg: + case nir_op_ineg: + op[0].negate = true; + inst = bld.MOV(result, op[0]); + if (instr->op == nir_op_fneg) + inst->saturate = instr->dest.saturate; + break; + + case nir_op_fabs: + case nir_op_iabs: + op[0].negate = false; + op[0].abs = true; + inst = bld.MOV(result, op[0]); + if (instr->op == nir_op_fabs) + inst->saturate = instr->dest.saturate; + break; + case nir_op_fsign: emit_fsign(bld, instr, result, op, 0); break; diff --git a/src/intel/compiler/brw_vec4_nir.cpp b/src/intel/compiler/brw_vec4_nir.cpp index 7a8ae8158a3..027d3d9bc75 100644 --- a/src/intel/compiler/brw_vec4_nir.cpp +++ b/src/intel/compiler/brw_vec4_nir.cpp @@ -1123,6 +1123,28 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr) emit_conversion_to_double(dst, op[0], instr->dest.saturate); break; + case nir_op_fsat: + inst = emit(MOV(dst, op[0])); + inst->saturate = true; + break; + + case nir_op_fneg: + case nir_op_ineg: + op[0].negate = true; + inst = emit(MOV(dst, op[0])); + if (instr->op == nir_op_fneg) + inst->saturate = instr->dest.saturate; + break; + + case nir_op_fabs: + case nir_op_iabs: + op[0].negate = false; + op[0].abs = true; + inst = emit(MOV(dst, op[0])); + if (instr->op == nir_op_fabs) + inst->saturate = instr->dest.saturate; + break; + case nir_op_iadd: assert(nir_dest_bit_size(instr->dest.dest) < 64); /* fall through */ @@ -1889,15 +1911,6 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr) inst->saturate = instr->dest.saturate; break; - case nir_op_iabs: - case nir_op_ineg: - assert(nir_dest_bit_size(instr->dest.dest) < 64); - /* fall through */ - case nir_op_fabs: - case nir_op_fneg: - case nir_op_fsat: - unreachable("not reached: should be lowered by lower_source mods"); - case nir_op_fdiv: unreachable("not reached: should be lowered by DIV_TO_MUL_RCP in the compiler"); |