Skip to content
  • Ville Syrjälä's avatar
    i915: Fix wpos_tex vs. -1 comparison · e8eb5e80
    Ville Syrjälä authored and Andres Gomez's avatar Andres Gomez committed
    wpos_tex used to be a GLuint so assigning -1 to it and
    later comparing with -1 worked correctly, but commit
    c349031c ("i915: Fix texcoord vs. varying collision in
    fragment programs") changed wpos_tex to uint8_t and hence
    broke the comparison. To fix this define a more explicit
    invalid value for wpos_tex.
    
    gcc warns us:
    i915_fragprog.c:1255:57: warning: comparison is always true due to limited range of data type [-Wtype-limits]
        if (inputsRead & VARYING_BITS_TEX_ANY || p->wpos_tex != -1) {
                                                             ^
    
    And clang says:
    i915_fragprog.c:1255:57: warning: comparison of constant -1 with expression of type 'uint8_t' (aka 'unsigned char') is always true [-Wtautological-constant-out-of-range-compare]
       if (inputsRead & VARYING_BITS_TEX_ANY || p->wpos_tex != -1) {
                                                ~~~~~~~~~~~ ^  ~~
    
    Cc: Chih-Wei Huang <cwhuang@android-x86.org>
    Cc: Eric Anholt <eric@anholt.net>
    Cc: Ian Romanick <ian.d.romanick@intel.com>
    Cc: mesa-stable@lists.freedesktop.org
    Fixes: c349031c
    
     ("i915: Fix texcoord vs. varying collision in fragment programs")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: default avatarEmil Velikov <emil.velikov@collabora.com>
    (cherry picked from commit c1eedb43)
    
    Squashed with commit:
    
    i915: Always emit W on gen3
    
    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 c349031c ("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 c1eedb43
    ("i915: Fix wpos_tex vs. -1 comparison") we went back to the
    old behaviour and caused an apparent regression.
    
    Fixes: c1eedb43 ("i915: Fix wpos_tex vs. -1 comparison")
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101451
    
    
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: default avatarIan Romanick <ian.d.romanick@intel.com>
    (cherry picked from commit 0eef03a6)
    e8eb5e80