i965: Remove the emit_linterp() helper.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 12 Jul 2016 00:19:06 +0000 (17:19 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 16 Jul 2016 00:16:54 +0000 (17:16 -0700)
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@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h

index 1f6ff59d13b36ce95e16b078ece46ddc525083f3..d4e5e86e4656563d48696c1c3de80bc8d822b001 100644 (file)
@@ -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);
                inst->predicate = BRW_PREDICATE_NORMAL;
                inst->predicate_inverse = false;
                if (devinfo->has_pln)
                   inst->no_dd_check = true;
 
             } else {
-               emit_linterp(*attr, interp, interpolation_mode,
-                            mod_centroid, mod_sample);
+               bld.emit(FS_OPCODE_LINTERP, *attr, delta_xy[bary], interp);
             }
             if (devinfo->gen < 6 && interpolation_mode == INTERP_QUALIFIER_SMOOTH) {
                bld.MUL(*attr, *attr, this->pixel_w);
index ddd66ca708fd6ff7a671533ae513562dec783c04..70e324919e1415634b9319829f2b5bcd259f3d60 100644 (file)
@@ -170,9 +170,6 @@ public:
    void emit_dummy_fs();
    void emit_repclear_shader();
    fs_reg *emit_fragcoord_interpolation();
-   fs_inst *emit_linterp(const fs_reg &attr, const fs_reg &interp,
-                         glsl_interp_qualifier interpolation_mode,
-                         bool is_centroid, bool is_sample);
    fs_reg *emit_frontfacing_interpolation();
    fs_reg *emit_samplepos_setup();
    fs_reg *emit_sampleid_setup();