brw: switch to derivative intrinsics

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30566>
This commit is contained in:
Alyssa Rosenzweig 2024-07-24 13:33:23 -04:00 committed by Marge Bot
parent 19ff16387a
commit eec02246f8
2 changed files with 21 additions and 15 deletions

View file

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

View file

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