diff --git a/src/gallium/drivers/lima/ir/lima_nir_duplicate.c b/src/gallium/drivers/lima/ir/lima_nir_duplicate.c index 9108152515a..dfc57ea871d 100644 --- a/src/gallium/drivers/lima/ir/lima_nir_duplicate.c +++ b/src/gallium/drivers/lima/ir/lima_nir_duplicate.c @@ -49,7 +49,7 @@ duplicate_def_at_use(nir_builder *b, nir_def *def, bool duplicate_for_ffma) if (duplicate_for_ffma && last_parent_instr->type == nir_instr_type_alu && - nir_instr_as_alu(last_parent_instr)->op == nir_op_ffma_old) { + nir_alu_instr_is_mul_add(nir_instr_as_alu(last_parent_instr))) { last_parent_instr = NULL; } } diff --git a/src/gallium/drivers/lima/ir/pp/nir.c b/src/gallium/drivers/lima/ir/pp/nir.c index 762314e2959..9281fc9b3f0 100644 --- a/src/gallium/drivers/lima/ir/pp/nir.c +++ b/src/gallium/drivers/lima/ir/pp/nir.c @@ -203,6 +203,7 @@ static int nir_to_ppir_opcodes[nir_num_opcodes] = { [nir_op_ftrunc] = ppir_op_trunc, [nir_op_fsat] = ppir_op_sat, [nir_op_fclamp_pos] = ppir_op_clamp_pos, + [nir_op_fmad] = ppir_op_fmad, [nir_op_ffma_old] = ppir_op_fmad, }; diff --git a/src/gallium/drivers/lima/lima_program.c b/src/gallium/drivers/lima/lima_program.c index 51eeff1d06e..946e67b46f0 100644 --- a/src/gallium/drivers/lima/lima_program.c +++ b/src/gallium/drivers/lima/lima_program.c @@ -71,6 +71,9 @@ static const nir_shader_compiler_options fs_nir_options = { .fuse_ffma16 = true, .fuse_ffma32 = true, .fuse_ffma64 = true, + .float_mul_add16 = nir_float_muladd_support_has_fmad | nir_float_muladd_support_fuse, + .float_mul_add32 = nir_float_muladd_support_has_fmad | nir_float_muladd_support_fuse, + .float_mul_add64 = nir_float_muladd_support_has_fmad | nir_float_muladd_support_fuse, .lower_fpow = true, .lower_fdiv = true, .lower_fmod = true,