<div dir="ltr">On 26 April 2013 16:52, Chris Forbes <span dir="ltr"><<a href="mailto:chrisf@ijw.co.nz" target="_blank">chrisf@ijw.co.nz</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Interpolation modes other than perspective-barycentric-pixel-center (and<br>
their associated coefficients in the WM payload) only exist in Gen6 and<br>
later.<br>
<br>
Unfortunately, if a varying was declared as `centroid`, we would blindly<br>
read the nonexistant values, and so produce all manner of bad behavior<br>
-- texture swimming, snow, etc.<br>
<br>
Fixes rendering in Counter-Strike Source and Team Fortress 2 on<br>
Ironlake.<br>
<br>
Signed-off-by: Chris Forbes <<a href="mailto:chrisf@ijw.co.nz">chrisf@ijw.co.nz</a>><br></blockquote><div><br></div><div>This bug was my fault--thanks for fixing it.<br></div><div><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br>
<br></div><div>A few procedural notes about backporting this stuff to 9.1:<br><br></div><div>- Usually we like to let patches sit on master for about a week before backporting them to 9.1 to make sure no one discovers problems with them.  So I would say go ahead and commit your backport of 0967c362 now (since it's based on a commit that's been in master for nearly a month), but wait a while before backporting this patch.<br>
<br></div><div>- When committing a patch to master that's intended to be backported to stable branches, please include the comment "NOTE: This is a candidate for the 9.1 branch." or "NOTE: This is a candidate for stable branches".  We have a script (bin/get-pick-list.sh) which uses this phrase to identify patches that should be backported to stable branches.<br>
<br></div><div>- When you do the backport, please use "git cherry-pick -x".  This adds "(cherry picked from commit ...)" to the commit message.  bin/get-pick-list.sh looks for this message to identify patches that no longer need backporting.<br>
<br></div><div>- We try really hard to make sure that no patch on a stable branch introduces any regressions or build errors (not even transient ones that are fixed in the next commit).  Please do a clean build and a full piglit run before pushing to 9.1 to make sure there are no regressions.<br>
<br>Thanks :)<br></div> <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
---<br>
 src/mesa/drivers/dri/i965/brw_fs.cpp | 26 +++++++++++++++++---------<br>
 1 file changed, 17 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
index 66e78d0..1d810d8 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
@@ -984,16 +984,24 @@ fs_visitor::emit_linterp(const fs_reg &attr, const fs_reg &interp,<br>
                          bool is_centroid)<br>
 {<br>
    brw_wm_barycentric_interp_mode barycoord_mode;<br>
-   if (is_centroid) {<br>
-      if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)<br>
-         barycoord_mode = BRW_WM_PERSPECTIVE_CENTROID_BARYCENTRIC;<br>
-      else<br>
-         barycoord_mode = BRW_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC;<br>
+   if (intel->gen >= 6) {<br>
+      if (is_centroid) {<br>
+         if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)<br>
+            barycoord_mode = BRW_WM_PERSPECTIVE_CENTROID_BARYCENTRIC;<br>
+         else<br>
+            barycoord_mode = BRW_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC;<br>
+      } else {<br>
+         if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)<br>
+            barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;<br>
+         else<br>
+            barycoord_mode = BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;<br>
+      }<br>
    } else {<br>
-      if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)<br>
-         barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;<br>
-      else<br>
-         barycoord_mode = BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;<br>
+      /* On Ironlake and below, there is only one interpolation mode.<br>
+       * Centroid interpolation doesn't mean anything on this hardware --<br>
+       * there is no multisampling.<br>
+       */<br>
+      barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;<br>
    }<br>
    return emit(FS_OPCODE_LINTERP, attr,<br>
                this->delta_x[barycoord_mode],<br>
<span class=""><font color="#888888">--<br>
1.8.2.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>