mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
nir: add fp_math_ctrl to ddx/ddy
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40630>
This commit is contained in:
parent
854911aeab
commit
5d2be211ea
3 changed files with 6 additions and 4 deletions
|
|
@ -673,7 +673,8 @@ move_ddxy(struct move_tex_coords_state *state, nir_function_impl *impl, nir_intr
|
|||
}
|
||||
|
||||
nir_def *def = nir_vec_scalars(&state->toplevel_b, components, num_components);
|
||||
def = _nir_build_ddx(&state->toplevel_b, def->bit_size, def);
|
||||
struct _nir_ddx_indices indices = {0};
|
||||
def = _nir_build_ddx(&state->toplevel_b, def->bit_size, def, indices);
|
||||
nir_def_as_intrinsic(def)->intrinsic = instr->intrinsic;
|
||||
nir_def_rewrite_uses(&instr->def, def);
|
||||
|
||||
|
|
|
|||
|
|
@ -2163,17 +2163,18 @@ nir_tex_src_for_ssa(nir_tex_src_type src_type, nir_def *def)
|
|||
static inline nir_def *
|
||||
nir_build_deriv(nir_builder *b, nir_def *x, nir_intrinsic_op intrin)
|
||||
{
|
||||
struct _nir_ddx_indices indices = { 0 };
|
||||
if (b->shader->options->scalarize_ddx && x->num_components > 1) {
|
||||
nir_def *res[NIR_MAX_VEC_COMPONENTS] = { NULL };
|
||||
|
||||
for (unsigned i = 0; i < x->num_components; ++i) {
|
||||
res[i] = _nir_build_ddx(b, x->bit_size, nir_channel(b, x, i));
|
||||
res[i] = _nir_build_ddx(b, x->bit_size, nir_channel(b, x, i), indices);
|
||||
nir_def_as_intrinsic(res[i])->intrinsic = intrin;
|
||||
}
|
||||
|
||||
return nir_vec(b, res, x->num_components);
|
||||
} else {
|
||||
nir_def *res = _nir_build_ddx(b, x->bit_size, x);
|
||||
nir_def *res = _nir_build_ddx(b, x->bit_size, x, indices);
|
||||
nir_def_as_intrinsic(res)->intrinsic = intrin;
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -502,7 +502,7 @@ intrinsic("is_sparse_resident_zink", dest_comp=1, src_comp=[0], bit_sizes=[1],
|
|||
for suffix in ["", "_fine", "_coarse"]:
|
||||
for axis in ["x", "y"]:
|
||||
intrinsic(f"dd{axis}{suffix}", dest_comp=0, src_comp=[0],
|
||||
bit_sizes=[16, 32], flags=[CAN_ELIMINATE, QUADGROUP])
|
||||
bit_sizes=[16, 32], indices=[FP_MATH_CTRL], flags=[CAN_ELIMINATE, QUADGROUP])
|
||||
|
||||
# a barrier is an intrinsic with no inputs/outputs but which can't be moved
|
||||
# around/optimized in general
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue