From eec02246f8100eea42532f77f27c7d8e6394848d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 24 Jul 2024 13:33:23 -0400 Subject: [PATCH] brw: switch to derivative intrinsics Signed-off-by: Alyssa Rosenzweig Reviewed-by: Kenneth Graunke Part-of: --- src/intel/compiler/brw_compiler.c | 2 ++ src/intel/compiler/brw_fs_nir.cpp | 34 +++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/intel/compiler/brw_compiler.c b/src/intel/compiler/brw_compiler.c index 9bb19f08f01..fdb3d9e38eb 100644 --- a/src/intel/compiler/brw_compiler.c +++ b/src/intel/compiler/brw_compiler.c @@ -79,6 +79,8 @@ const struct nir_shader_compiler_options brw_scalar_nir_options = { .vectorize_io = true, .vectorize_tess_levels = true, .vertex_id_zero_based = true, + .has_ddx_intrinsics = true, + .scalarize_ddx = true, }; struct brw_compiler * diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index abbdc193a8d..093f01b5a50 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -1131,21 +1131,6 @@ fs_nir_emit_alu(nir_to_brw_state &ntb, nir_alu_instr *instr, bld.COS(result, op[0]); break; - case nir_op_fddx_fine: - bld.emit(FS_OPCODE_DDX_FINE, result, op[0]); - break; - case nir_op_fddx: - case nir_op_fddx_coarse: - bld.emit(FS_OPCODE_DDX_COARSE, result, op[0]); - break; - case nir_op_fddy_fine: - bld.emit(FS_OPCODE_DDY_FINE, result, op[0]); - break; - case nir_op_fddy: - case nir_op_fddy_coarse: - bld.emit(FS_OPCODE_DDY_COARSE, result, op[0]); - break; - case nir_op_fadd: if (nir_has_any_rounding_mode_enabled(execution_mode)) { brw_rnd_mode rnd = @@ -7324,6 +7309,25 @@ fs_nir_emit_intrinsic(nir_to_brw_state &ntb, case nir_intrinsic_load_subgroup_lt_mask: unreachable("not reached"); + case nir_intrinsic_ddx_fine: + bld.emit(FS_OPCODE_DDX_FINE, retype(dest, BRW_TYPE_F), + retype(get_nir_src(ntb, instr->src[0]), BRW_TYPE_F)); + break; + case nir_intrinsic_ddx: + case nir_intrinsic_ddx_coarse: + bld.emit(FS_OPCODE_DDX_COARSE, retype(dest, BRW_TYPE_F), + retype(get_nir_src(ntb, instr->src[0]), BRW_TYPE_F)); + break; + case nir_intrinsic_ddy_fine: + bld.emit(FS_OPCODE_DDY_FINE, retype(dest, BRW_TYPE_F), + retype(get_nir_src(ntb, instr->src[0]), BRW_TYPE_F)); + break; + case nir_intrinsic_ddy: + case nir_intrinsic_ddy_coarse: + bld.emit(FS_OPCODE_DDY_COARSE, retype(dest, BRW_TYPE_F), + retype(get_nir_src(ntb, instr->src[0]), BRW_TYPE_F)); + break; + case nir_intrinsic_quad_vote_any: case nir_intrinsic_quad_vote_all: { struct brw_reg flag = brw_flag_reg(0, 0);