From 94bd06256aeaf85b6d9470bec99988b4ed0e87df Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Wed, 6 Jul 2022 13:01:24 -0700 Subject: [PATCH] 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 Part-of: --- src/intel/compiler/brw_fs.cpp | 11 ++++++----- src/intel/compiler/brw_fs.h | 3 +-- src/intel/compiler/brw_fs_nir.cpp | 8 ++------ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 87d2394190e..9e5ede1dc48 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -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; diff --git a/src/intel/compiler/brw_fs.h b/src/intel/compiler/brw_fs.h index 1008b5e9ae7..e31c23bf0f5 100644 --- a/src/intel/compiler/brw_fs.h +++ b/src/intel/compiler/brw_fs.h @@ -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); diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 43bfc39d2f8..87aff871e78 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -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]; }