From c57be33d965b280690c7953b9055a6ea14923574 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Mon, 30 Sep 2024 12:58:21 +0200 Subject: [PATCH] broadcom/compiler: implement NIR mali opcodes for clamping These translate directly to new unpack modifiers on V3D 7.x. Reviewed-by: Jose Maria Casanova Crespo Part-of: --- src/broadcom/compiler/nir_to_vir.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 6ccc84a18c0..69102202d08 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1783,11 +1783,23 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr) break; case nir_op_fsat: - assert(c->devinfo->ver >= 71); + assert(v3d_device_has_unpack_sat(c->devinfo)); result = vir_FMOV(c, src[0]); vir_set_unpack(c->defs[result.index], 0, V3D71_QPU_UNPACK_SAT); break; + case nir_op_fsat_signed: + assert(v3d_device_has_unpack_sat(c->devinfo)); + result = vir_FMOV(c, src[0]); + vir_set_unpack(c->defs[result.index], 0, V3D71_QPU_UNPACK_NSAT); + break; + + case nir_op_fclamp_pos: + assert(v3d_device_has_unpack_max0(c->devinfo)); + result = vir_FMOV(c, src[0]); + vir_set_unpack(c->defs[result.index], 0, V3D71_QPU_UNPACK_MAX0); + break; + default: fprintf(stderr, "unknown NIR ALU inst: "); nir_print_instr(&instr->instr, stderr);