From 1e2e52eff73ac0703cf432b5c716c5d2c56024e3 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 26 Apr 2022 13:39:28 -0700 Subject: [PATCH] nouveau/nir: Implement mul_zero_wins behavior for use_legacy_math_rules. This is the same flag TGSI sets for LEGACY_MATH_RULES. Acked-by: Kenneth Graunke Reviewed-by: M Henning Tested-by: Mobin Aydinfar Part-of: --- src/nouveau/codegen/nv50_ir_from_nir.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/nouveau/codegen/nv50_ir_from_nir.cpp b/src/nouveau/codegen/nv50_ir_from_nir.cpp index d8ccdecf9c86c..9f2f791ace420 100644 --- a/src/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/nouveau/codegen/nv50_ir_from_nir.cpp @@ -997,6 +997,7 @@ bool Converter::assignSlots() { unsigned index; info->io.viewportId = -1; + info->io.mul_zero_wins = nir->info.use_legacy_math_rules; info_out->numInputs = 0; info_out->numOutputs = 0; info_out->numSysVals = 0; @@ -2585,6 +2586,17 @@ Converter::visit(nir_alu_instr *insn) Instruction *i = mkOp(getOperation(op), dType, newDefs[0]); for (unsigned s = 0u; s < info.num_inputs; ++s) { i->setSrc(s, getSrc(&insn->src[s])); + + if (this->info->io.mul_zero_wins) { + switch (op) { + case nir_op_fmul: + case nir_op_ffma: + i->dnz = true; + break; + default: + break; + } + } } i->subOp = getSubOp(op); }