mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-19 01:30:36 +02:00
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:
parent
daa97bb41a
commit
2282abecec
3 changed files with 19 additions and 14 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue