Mesa (master): i965/fs: Refactor interpolation code to prepare for adding centroid support.

Paul Berry stereotype441 at kemper.freedesktop.org
Mon Jun 25 18:08:48 UTC 2012


Module: Mesa
Branch: master
Commit: cf0e7aa9f8bc9c175ebd9b2ab3a8bfec4afc5abf
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf0e7aa9f8bc9c175ebd9b2ab3a8bfec4afc5abf

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Thu Jun 21 11:33:22 2012 -0700

i965/fs: Refactor interpolation code to prepare for adding centroid support.

Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   23 +++++++++++++++--------
 src/mesa/drivers/dri/i965/brw_fs.h   |    2 ++
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 43efd68..c3f851e 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -419,6 +419,20 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
    return reg;
 }
 
+fs_inst *
+fs_visitor::emit_linterp(const fs_reg &attr, const fs_reg &interp,
+                         glsl_interp_qualifier interpolation_mode)
+{
+   brw_wm_barycentric_interp_mode barycoord_mode;
+   if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)
+      barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;
+   else
+      barycoord_mode = BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;
+   return emit(FS_OPCODE_LINTERP, attr,
+               this->delta_x[barycoord_mode],
+               this->delta_y[barycoord_mode], interp);
+}
+
 fs_reg *
 fs_visitor::emit_general_interpolation(ir_variable *ir)
 {
@@ -482,14 +496,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
 		  emit(BRW_OPCODE_MOV, attr, fs_reg(1.0f));
 	       } else {
 		  struct brw_reg interp = interp_reg(location, k);
-                  brw_wm_barycentric_interp_mode barycoord_mode;
-                  if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)
-                     barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;
-                  else
-                     barycoord_mode = BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;
-                  emit(FS_OPCODE_LINTERP, attr,
-                       this->delta_x[barycoord_mode],
-                       this->delta_y[barycoord_mode], fs_reg(interp));
+                  emit_linterp(attr, fs_reg(interp), interpolation_mode);
 		  if (intel->gen < 6) {
 		     emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w);
 		  }
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 2c2cb6c..3e62d12 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -542,6 +542,8 @@ public:
 
    void emit_dummy_fs();
    fs_reg *emit_fragcoord_interpolation(ir_variable *ir);
+   fs_inst *emit_linterp(const fs_reg &attr, const fs_reg &interp,
+                         glsl_interp_qualifier interpolation_mode);
    fs_reg *emit_frontfacing_interpolation(ir_variable *ir);
    fs_reg *emit_general_interpolation(ir_variable *ir);
    void emit_interpolation_setup_gen4();




More information about the mesa-commit mailing list