agx: convert to ddx intrinsics

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30565>
This commit is contained in:
Alyssa Rosenzweig 2024-07-23 12:27:16 -04:00 committed by Marge Bot
parent daa97bb41a
commit 2282abecec
3 changed files with 19 additions and 14 deletions

View file

@ -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);

View file

@ -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,
};

View file

@ -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;