[Mesa-dev] [PATCH 5/5] i965: Remove the emit_linterp() helper.

Matt Turner mattst88 at gmail.com
Thu Jul 14 15:23:23 UTC 2016


On Thu, Jul 14, 2016 at 12:57 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> Rather than computing the barycentric mode each time we emit a LINTERP,
> we can simply compute it once, as soon as we know we're doing non-flat
> interpolation.
>
> At that point, emit_linterp() doesn't do much, so fold it into the
> call sites and drop it.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_fs.cpp | 26 ++++++++------------------
>  src/mesa/drivers/dri/i965/brw_fs.h   |  3 ---
>  2 files changed, 8 insertions(+), 21 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 1f6ff59..d4e5e86 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1104,18 +1104,6 @@ centroid_to_pixel(enum brw_barycentric_mode bary)
>     return (enum brw_barycentric_mode) ((unsigned) bary - 1);
>  }
>
> -fs_inst *
> -fs_visitor::emit_linterp(const fs_reg &attr, const fs_reg &interp,
> -                         glsl_interp_qualifier interpolation_mode,
> -                         bool is_centroid, bool is_sample)
> -{
> -   brw_barycentric_mode barycoord_mode =
> -      barycentric_mode(interpolation_mode, is_centroid, is_sample);
> -
> -   return bld.emit(FS_OPCODE_LINTERP, attr,
> -                   this->delta_xy[barycoord_mode], interp);
> -}
> -
>  void
>  fs_visitor::emit_general_interpolation(fs_reg *attr, const char *name,
>                                         const glsl_type *type,
> @@ -1179,6 +1167,9 @@ fs_visitor::emit_general_interpolation(fs_reg *attr, const char *name,
>           }
>        } else {
>           /* Smooth/noperspective interpolation case. */
> +         enum brw_barycentric_mode bary =
> +            barycentric_mode(interpolation_mode, mod_centroid, mod_sample);
> +
>           for (unsigned int i = 0; i < type->vector_elements; i++) {
>              fs_reg interp(interp_reg(*location, i));
>              if (devinfo->needs_unlit_centroid_workaround && mod_centroid) {
> @@ -1190,23 +1181,22 @@ fs_visitor::emit_general_interpolation(fs_reg *attr, const char *name,
>                 bld.emit(FS_OPCODE_MOV_DISPATCH_TO_FLAGS);
>
>                 fs_inst *inst;
> -               inst = emit_linterp(*attr, interp, interpolation_mode,
> -                                   false, false);
> +               inst = bld.emit(FS_OPCODE_LINTERP, *attr,
> +                               delta_xy[centroid_to_pixel(bary)], interp);
>                 inst->predicate = BRW_PREDICATE_NORMAL;
>                 inst->predicate_inverse = true;
>                 if (devinfo->has_pln)
>                    inst->no_dd_clear = true;
>
> -               inst = emit_linterp(*attr, interp, interpolation_mode,
> -                                   mod_centroid, mod_sample);
> +               inst = bld.emit(FS_OPCODE_LINTERP, *attr,
> +                               delta_xy[bary], interp);

I think this will fit on one line.

This series is put together very well. Nice work. It is:

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list