From 2282abececd67d0f8af1fd1561a34cf91641d5c2 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 23 Jul 2024 12:27:16 -0400 Subject: [PATCH] agx: convert to ddx intrinsics Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_compile.c | 18 ++++++++++-------- src/asahi/compiler/agx_compile.h | 2 ++ src/asahi/compiler/agx_nir_opt_preamble.c | 13 +++++++------ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/asahi/compiler/agx_compile.c b/src/asahi/compiler/agx_compile.c index 5350aae7cb2..66d8dfc8831 100644 --- a/src/asahi/compiler/agx_compile.c +++ b/src/asahi/compiler/agx_compile.c @@ -1469,6 +1469,16 @@ agx_emit_intrinsic(agx_builder *b, nir_intrinsic_instr *instr) return NULL; } + case nir_intrinsic_ddx: + case nir_intrinsic_ddx_coarse: + case nir_intrinsic_ddx_fine: + return agx_dfdx_to(b, dst, agx_src_index(&instr->src[0])); + + case nir_intrinsic_ddy: + case nir_intrinsic_ddy_coarse: + case nir_intrinsic_ddy_fine: + return agx_dfdy_to(b, dst, agx_src_index(&instr->src[0])); + case nir_intrinsic_load_subgroup_invocation: return agx_get_sr_to(b, dst, AGX_SR_THREAD_INDEX_IN_SUBGROUP); @@ -1741,14 +1751,6 @@ agx_emit_alu(agx_builder *b, nir_alu_instr *instr) UNOP(flog2, log2); UNOP(fexp2, exp2); - UNOP(fddx, dfdx); - UNOP(fddx_coarse, dfdx); - UNOP(fddx_fine, dfdx); - - UNOP(fddy, dfdy); - UNOP(fddy_coarse, dfdy); - UNOP(fddy_fine, dfdy); - UNOP(mov, mov); UNOP(u2u32, mov); UNOP(bitfield_reverse, bitrev); diff --git a/src/asahi/compiler/agx_compile.h b/src/asahi/compiler/agx_compile.h index cba23f505fd..fc33e891d41 100644 --- a/src/asahi/compiler/agx_compile.h +++ b/src/asahi/compiler/agx_compile.h @@ -303,4 +303,6 @@ static const nir_shader_compiler_options agx_nir_options = { .lower_fquantize2f16 = true, .compact_arrays = true, .discard_is_demote = true, + .has_ddx_intrinsics = true, + .scalarize_ddx = true, }; diff --git a/src/asahi/compiler/agx_nir_opt_preamble.c b/src/asahi/compiler/agx_nir_opt_preamble.c index 7936b8a10f8..c30f7809804 100644 --- a/src/asahi/compiler/agx_nir_opt_preamble.c +++ b/src/asahi/compiler/agx_nir_opt_preamble.c @@ -69,12 +69,6 @@ alu_cost(nir_alu_instr *alu) case nir_op_fadd: case nir_op_fmul: case nir_op_ffma: - case nir_op_fddx: - case nir_op_fddx_fine: - case nir_op_fddx_coarse: - case nir_op_fddy: - case nir_op_fddy_fine: - case nir_op_fddy_coarse: case nir_op_iadd: case nir_op_inot: case nir_op_iand: @@ -221,6 +215,13 @@ instr_cost(nir_instr *instr, const void *data) case nir_intrinsic_load_constant_agx: case nir_intrinsic_load_ubo: return 10.0; + case nir_intrinsic_ddx: + case nir_intrinsic_ddx_fine: + case nir_intrinsic_ddx_coarse: + case nir_intrinsic_ddy: + case nir_intrinsic_ddy_fine: + case nir_intrinsic_ddy_coarse: + return 1.0; default: /* Assume it's a sysval or something */ return 0.0;