mesa: Add texstore functions for BPTC-compressed textures
authorNeil Roberts <neil@linux.intel.com>
Thu, 17 Jul 2014 13:33:10 +0000 (14:33 +0100)
committerNeil Roberts <neil@linux.intel.com>
Tue, 12 Aug 2014 17:23:50 +0000 (18:23 +0100)
commit17cde55c538009764207bd29b78a909d2c5d14b4
tree23bff537d60f843ad38e87b4fb5bd23b8cdb92d4
parent442bcd7fd373b2a55c0db9ee806f6f4be64b0285
mesa: Add texstore functions for BPTC-compressed textures

This adds compressors for all four of the BPTC compressed-texture formats. The
compressor is written from scratch and takes a very simple approach. It always
uses a single mode of the BPTC format (4 for unorm and 3 for half-floats) and
picks the two endpoints by dividing the texels into those which have more or
less than the average luminance of the block and then calculating an average
color of the texels within each division.

It's probably not really sensible to try to use BPTC compression at runtime
because for example with the Nvidia offline compression tool it can take in
the order of an hour to compress a full-screen image. With that in mind I
don't think it's worth having a proper compressor in Mesa and this approach
gives reasonable results for a usage that is basically a corner case.

v2: Always use the custom compressor, even for the unorm formats. Fix the
    quantization step for the half-float format compressor. Fixed a typo which
    was breaking the right-hand edge of half-float textures with a width that
    isn't a multiple of four.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/texcompress_bptc.c
src/mesa/main/texcompress_bptc.h
src/mesa/main/texstore.c