Skip to content
  • Shahbaz Youssefi's avatar
    Vulkan: Emulate dithering · 665ddccd
    Shahbaz Youssefi authored
    Dithering in OpenGL is vaguely defined, to the extent that no dithering
    is also a valid dithering algorithm.  Dithering is enabled by default,
    but emulating it has a non-negligible cost.  Similarly to some other
    GLES drivers, ANGLE enables dithering only on low-bit formats where
    visual banding is particularly common; namely RGBA4444, RGBA5551 and
    RGB565.
    
    Dithering is emulated in the fragment shader and is controlled by a spec
    constant.  Every 2 bits of the spec constant correspond to one
    attachment, with the value indicating:
    
    - 00: No dithering
    - 01: Dither for RGBA4444
    - 10: Dither for RGBA5551
    - 11: Dither for RGB565
    
    The translator appends code to the shader that, based on the format
    specified by the specialization constant, adds dithering to each color
    attachment output.  A 2x2 Bayer matrix is used for dithering, indexed by
    gl_FragCoord.xy % 2.
    
    Bug: angleproject:6755
    Change-Id: Ib45da5938e299b6626bff921119d63e7357dd353
    Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3374261
    
    
    Reviewed-by: default avatarTim Van Patten <timvp@google.com>
    Reviewed-by: default avatarJamie Madill <jmadill@chromium.org>
    Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
    665ddccd