From 4d2619a6b3d94a02b21fdc8fc49c1542e82bc7d8 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 26 Oct 2017 15:40:38 -0700 Subject: [PATCH] broadcom/vc5: Stop lowering negates to subs. In the case of fneg(0.0), we were getting back 0.0 instead of -0.0. We were also needing an immediate 0 value for ineg, when there's an opcode to do the job properly. Fixes fs-floatBitsToInt-neg.shader_test. --- src/broadcom/compiler/nir_to_vir.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 92ba6144bc5..43ee84d5bba 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -806,6 +806,14 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr) case nir_op_imov: result = vir_MOV(c, src[0]); break; + + case nir_op_fneg: + result = vir_XOR(c, src[0], vir_uniform_ui(c, 1 << 31)); + break; + case nir_op_ineg: + result = vir_NEG(c, src[0]); + break; + case nir_op_fmul: result = vir_FMUL(c, src[0], src[1]); break; @@ -1984,7 +1992,6 @@ const nir_shader_compiler_options v3d_nir_options = { .lower_fpow = true, .lower_fsat = true, .lower_fsqrt = true, - .lower_negate = true, .native_integers = true, }; -- 2.30.2