• Nanley Chery's avatar
    anv/formats: Update the three-channel BC1 mappings · cbd47216
    Nanley Chery authored
    The procedure for decompressing an opaque BC1 Vulkan format is dependant on the
    comparison of two colors stored in the first 32 bits of the compressed block.
    Here's the specified OpenGL (and Vulkan) behavior for reference:
    
       The RGB color for a texel at location (x,y) in the block is given by:
    
          RGB0,              if color0 > color1 and code(x,y) == 0
          RGB1,              if color0 > color1 and code(x,y) == 1
          (2*RGB0+RGB1)/3,   if color0 > color1 and code(x,y) == 2
          (RGB0+2*RGB1)/3,   if color0 > color1 and code(x,y) == 3
    
          RGB0,              if color0 <= color1 and code(x,y) == 0
          RGB1,              if color0 <= color1 and code(x,y) == 1
          (RGB0+RGB1)/2,     if color0 <= color1 and code(x,y) == 2
          BLACK,             if color0 <= color1 and code(x,y) == 3
    
    The sampling operation performed on an opaque DXT1 Intel format essentially
    hard-codes the comparison result of the two colors as color0 > color1. This
    means that the behavior is incompatible with OpenGL and Vulkan. This is stated
    in the SKL PRM, Vol 5: Memory Views:
    
       Opaque Textures (DXT1_RGB)
          Texture format DXT1_RGB is identical to DXT1, with the exception that the
          One-bit Alpha encoding is removed. Color 0 and Color 1 are not compared, and
          the resulting texel color is derived strictly from the Opaque Color Encoding.
          The alpha channel defaults to 1.0.
    
          Programming Note
          Context: Opaque Textures (DXT1_RGB)
          The behavior of this format is not compliant with the OGL spec.
    
    The opaque and non-opaque BC1 Vulkan formats are specified to be decoded in
    exactly the same way except the BLACK value must have a transparent alpha
    channel in the latter. Use the four-channel BC1 Intel formats with the alpha
    set to 1 to provide the behavior required by the spec.
    
    v2 (Kenneth Graunke):
    - Provide a more detailed commit message.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100925
    Cc: <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
    Signed-off-by: Nanley Chery's avatarNanley Chery <nanley.g.chery@intel.com>
    (cherry picked from commit 56458cb1)
    cbd47216
Name
Last commit
Last update
bin Loading commit data...
docs Loading commit data...
doxygen Loading commit data...
include Loading commit data...
m4 Loading commit data...
scons Loading commit data...
scripts Loading commit data...
src Loading commit data...
.dir-locals.el Loading commit data...
.editorconfig Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
Android.common.mk Loading commit data...
Android.mk Loading commit data...
CleanSpec.mk Loading commit data...
Makefile.am Loading commit data...
REVIEWERS Loading commit data...
SConstruct Loading commit data...
VERSION Loading commit data...
appveyor.yml Loading commit data...
autogen.sh Loading commit data...
common.py Loading commit data...
configure.ac Loading commit data...
install-gallium-links.mk Loading commit data...
install-lib-links.mk Loading commit data...