broadcom: switch to derivative intrinsics

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30570>
This commit is contained in:
Alyssa Rosenzweig 2024-07-24 11:08:58 -04:00 committed by Marge Bot
parent 1a579552af
commit c3d999dec9
3 changed files with 20 additions and 12 deletions

View file

@ -1716,18 +1716,6 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr)
result = vir_MAX(c, src[0], vir_NEG(c, src[0]));
break;
case nir_op_fddx:
case nir_op_fddx_coarse:
case nir_op_fddx_fine:
result = vir_FDX(c, src[0]);
break;
case nir_op_fddy:
case nir_op_fddy_coarse:
case nir_op_fddy_fine:
result = vir_FDY(c, src[0]);
break;
case nir_op_uadd_carry:
vir_set_pf(c, vir_ADD_dest(c, vir_nop_reg(), src[0], src[1]),
V3D_QPU_PF_PUSHC);
@ -3936,6 +3924,22 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
ntq_store_def(c, &instr->def, 0, vir_EIDX(c));
break;
case nir_intrinsic_ddx:
case nir_intrinsic_ddx_coarse:
case nir_intrinsic_ddx_fine: {
struct qreg value = ntq_get_src(c, instr->src[0], 0);
ntq_store_def(c, &instr->def, 0, vir_FDX(c, value));
break;
}
case nir_intrinsic_ddy:
case nir_intrinsic_ddy_coarse:
case nir_intrinsic_ddy_fine: {
struct qreg value = ntq_get_src(c, instr->src[0], 0);
ntq_store_def(c, &instr->def, 0, vir_FDY(c, value));
break;
}
case nir_intrinsic_elect: {
struct qreg first;
if (vir_in_nonuniform_control_flow(c)) {

View file

@ -228,6 +228,8 @@ v3dv_pipeline_get_nir_options(const struct v3d_device_info *devinfo)
.divergence_analysis_options =
nir_divergence_multiple_workgroup_per_compute_subgroup,
.discard_is_demote = true,
.has_ddx_intrinsics = true,
.scalarize_ddx = true,
};
if (!initialized) {

View file

@ -760,6 +760,8 @@ v3d_screen_get_compiler_options(struct pipe_screen *pscreen,
*/
.max_unroll_iterations = 16,
.force_indirect_unrolling_sampler = true,
.has_ddx_intrinsics = true,
.scalarize_ddx = true,
};
if (!initialized) {