Skip to content
  • Neil Roberts's avatar
    v3d: Add a lowering pass for line smoothing · ee4d51f8
    Neil Roberts authored
    
    
    When line smoothing is enabled, the driver now increases the width of
    the line so that it can add some semi-transparent pixels to either side
    of the line. A lowering pass is added which modifies the alpha component
    of every write to fragment output 0 so that if the fragment is outside
    the width of the line then the alpha is reduced. It additionally
    discards fragments that are completely invisible. It might seem bad to
    use discard on a tiled renderer but the assumption is that any bad
    effects from using discard will also happen anyway because of enabling
    alpha blending.
    
    v2: Disable the line smoothing pass entirely when the framebuffer
        contains an integer colour output or one with no alpha channel.
        Calculate the coverage once upfront and store in a global variable
        instead of calculating each time an output write is modified. Also
        do the conditional discard once upfront.
    v3: Don’t check whether the output buffer has an alpha channel. Only
        look at output 0. Use aa_line_width intrinsic instead of calculating
        the real line width in the shader. Clamp the coverage as part of the
        global variable, not per output write.
    
    Reviewed-by: default avatarEric Anholt <eric@anholt.net>
    Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5624>
    ee4d51f8