From 4307f42b9ea31cbc4df694d4a612a5876b11cb4f Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Thu, 23 Apr 2026 03:17:42 +0200 Subject: [PATCH] nak: port over to nir_op_ffma Reviewed-by: Mel Henning Reviewed-by: Georg Lehmann Part-of: --- src/nouveau/compiler/nak/api.rs | 6 ++++++ src/nouveau/compiler/nak/from_nir.rs | 4 ++-- src/nouveau/compiler/nak_nir.c | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/nouveau/compiler/nak/api.rs b/src/nouveau/compiler/nak/api.rs index 527579c5ce5..a0f12639a7a 100644 --- a/src/nouveau/compiler/nak/api.rs +++ b/src/nouveau/compiler/nak/api.rs @@ -116,6 +116,12 @@ fn nir_options(dev: &nv_device_info) -> nir_shader_compiler_options { fuse_ffma16: true, fuse_ffma32: true, fuse_ffma64: true, + float_mul_add16: nir_float_muladd_support_has_ffma + | nir_float_muladd_support_fuse, + float_mul_add32: nir_float_muladd_support_has_ffma + | nir_float_muladd_support_fuse, + float_mul_add64: nir_float_muladd_support_has_ffma + | nir_float_muladd_support_fuse, lower_flrp16: true, lower_flrp32: true, lower_flrp64: true, diff --git a/src/nouveau/compiler/nak/from_nir.rs b/src/nouveau/compiler/nak/from_nir.rs index f441b1344de..559cf115067 100644 --- a/src/nouveau/compiler/nak/from_nir.rs +++ b/src/nouveau/compiler/nak/from_nir.rs @@ -1056,7 +1056,7 @@ impl<'a> ShaderFromNir<'a> { b.fexp2(srcs(0)).into() } } - nir_op_ffma_old => { + nir_op_ffma | nir_op_ffma_old => { let ftype = FloatType::from_bits(alu.def.bit_size().into()); let dst; if alu.def.bit_size() == 64 { @@ -1102,7 +1102,7 @@ impl<'a> ShaderFromNir<'a> { } dst } - nir_op_ffmaz_old => { + nir_op_ffmaz | nir_op_ffmaz_old => { assert!(alu.def.bit_size() == 32); // DNZ implies FTZ so we need FTZ set or this is invalid assert!(self.float_ctl.fp32.ftz); diff --git a/src/nouveau/compiler/nak_nir.c b/src/nouveau/compiler/nak_nir.c index 16ee1cb5ccb..875028e86ee 100644 --- a/src/nouveau/compiler/nak_nir.c +++ b/src/nouveau/compiler/nak_nir.c @@ -116,6 +116,7 @@ vectorize_filter_cb(const nir_instr *instr, const void *data) case nir_op_fneu: case nir_op_fmul: case nir_op_fmul_rtz: + case nir_op_ffma: case nir_op_ffma_old: case nir_op_fsign: case nir_op_fsat: @@ -268,6 +269,8 @@ lower_bit_size_cb(const nir_instr *instr, void *data) case nir_op_fneu: case nir_op_fmul: case nir_op_fmul_rtz: + case nir_op_ffma: + case nir_op_ffmaz: case nir_op_ffma_old: case nir_op_ffmaz_old: case nir_op_fsign: