intel/fs: Simplify brw_barycentric_mode() args.

Reduce a bit of mode lookup noise I was tracing through trying to resolve
the previous bug.

Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17381>
This commit is contained in:
Emma Anholt 2022-07-06 13:01:24 -07:00 committed by Marge Bot
parent 2d1f021e16
commit 94bd06256a
3 changed files with 9 additions and 13 deletions

View File

@ -1178,13 +1178,16 @@ fs_visitor::emit_fragcoord_interpolation(fs_reg wpos)
}
enum brw_barycentric_mode
brw_barycentric_mode(enum glsl_interp_mode mode, nir_intrinsic_op op)
brw_barycentric_mode(nir_intrinsic_instr *intr)
{
const glsl_interp_mode mode =
(enum glsl_interp_mode) nir_intrinsic_interp_mode(intr);
/* Barycentric modes don't make sense for flat inputs. */
assert(mode != INTERP_MODE_FLAT);
unsigned bary;
switch (op) {
switch (intr->intrinsic) {
case nir_intrinsic_load_barycentric_pixel:
case nir_intrinsic_load_barycentric_at_offset:
bary = BRW_BARYCENTRIC_PERSPECTIVE_PIXEL;
@ -7088,11 +7091,9 @@ brw_compute_barycentric_interp_modes(const struct intel_device_info *devinfo,
if (!is_used_in_not_interp_frag_coord(&intrin->dest.ssa))
continue;
enum glsl_interp_mode interp = (enum glsl_interp_mode)
nir_intrinsic_interp_mode(intrin);
nir_intrinsic_op bary_op = intrin->intrinsic;
enum brw_barycentric_mode bary =
brw_barycentric_mode(interp, bary_op);
brw_barycentric_mode(intrin);
barycentric_interp_modes |= 1 << bary;

View File

@ -648,8 +648,7 @@ fs_reg setup_imm_b(const brw::fs_builder &bld,
fs_reg setup_imm_ub(const brw::fs_builder &bld,
uint8_t v);
enum brw_barycentric_mode brw_barycentric_mode(enum glsl_interp_mode mode,
nir_intrinsic_op op);
enum brw_barycentric_mode brw_barycentric_mode(nir_intrinsic_instr *intr);
uint32_t brw_fb_write_msg_control(const fs_inst *inst,
const struct brw_wm_prog_data *prog_data);

View File

@ -3661,10 +3661,7 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder &bld,
case nir_intrinsic_load_barycentric_centroid:
case nir_intrinsic_load_barycentric_sample: {
/* Use the delta_xy values computed from the payload */
const glsl_interp_mode interp_mode =
(enum glsl_interp_mode) nir_intrinsic_interp_mode(instr);
enum brw_barycentric_mode bary =
brw_barycentric_mode(interp_mode, instr->intrinsic);
enum brw_barycentric_mode bary = brw_barycentric_mode(instr);
const fs_reg srcs[] = { offset(this->delta_xy[bary], bld, 0),
offset(this->delta_xy[bary], bld, 1) };
bld.LOAD_PAYLOAD(dest, srcs, ARRAY_SIZE(srcs), 0);
@ -3788,8 +3785,7 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder &bld,
dst_xy = retype(get_nir_src(instr->src[0]), BRW_REGISTER_TYPE_F);
} else {
/* Use the delta_xy values computed from the payload */
enum brw_barycentric_mode bary =
brw_barycentric_mode(interp_mode, bary_intrin);
enum brw_barycentric_mode bary = brw_barycentric_mode(bary_intrinsic);
dst_xy = this->delta_xy[bary];
}