Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> On 06/20/2017 10:22 AM, ville.syrj...@linux.intel.com wrote: > From: Ville Syrjälä <ville.syrj...@linux.intel.com> > > Unlike the older gen2 hardware, gen3 performs perspective > correct interpolation even for the primary/secondary colors. > To do that it naturally needs us to emit W for the vertices. > > Currently we emit W only when at least one texture coordinate > set gets emitted. This means the interpolation of color will > change depending on whether texcoords/varyings are used or not. > That's probably not what anyone would expect, so let's just > always emit W to get consistent behaviour. Trying to avoid > emitting W seems like more hassle than it's worth, especially > as bspec seems to suggest that the hardware will perform the > perspective division anyway. > > This used to be broken until it was accidentally fixed it in > commit c349031c27b7 ("i915: Fix texcoord vs. varying collision > in fragment programs") by introducing a bug that made the driver > always emit W. After fixing that bug in commit c1eedb43f32f > ("i915: Fix wpos_tex vs. -1 comparison") we went back to the > old behaviour and caused an apparent regression. > > Fixes: c1eedb43f32f ("i915: Fix wpos_tex vs. -1 comparison") > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101451 > Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com> > --- > src/mesa/drivers/dri/i915/i915_fragprog.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c > b/src/mesa/drivers/dri/i915/i915_fragprog.c > index e19ca60bd334..3657b2d82565 100644 > --- a/src/mesa/drivers/dri/i915/i915_fragprog.c > +++ b/src/mesa/drivers/dri/i915/i915_fragprog.c > @@ -1252,12 +1252,10 @@ i915ValidateFragmentProgram(struct i915_context *i915) > intel->coloroffset = 0; > intel->specoffset = 0; > > - if (inputsRead & VARYING_BITS_TEX_ANY || p->wpos_tex != > I915_WPOS_TEX_INVALID) { > - EMIT_ATTR(_TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, S4_VFMT_XYZW, 16); > - } > - else { > - EMIT_ATTR(_TNL_ATTRIB_POS, EMIT_3F_VIEWPORT, S4_VFMT_XYZ, 12); > - } > + /* Always emit W to get consistent perspective > + * correct interpolation of primary/secondary colors. > + */ > + EMIT_ATTR(_TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, S4_VFMT_XYZW, 16); > > /* Handle gl_PointSize builtin var here */ > if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev