On Tue, Jun 20, 2017 at 11:00:52AM -0700, Ian Romanick wrote: > Reviewed-by: Ian Romanick <[email protected]>
Thanks. Pushed to master. > > On 06/20/2017 10:22 AM, [email protected] wrote: > > From: Ville Syrjälä <[email protected]> > > > > 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ä <[email protected]> > > --- > > 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) > > -- Ville Syrjälä Intel OTC _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
