BinomialLLC / basis_universal

Basis Universal GPU Texture Codec
Apache License 2.0
2.73k stars 267 forks source link

ETC1S Texture Video Specification (wiki page) says flip bit = 1 #377

Open nigeltao opened 3 months ago

nigeltao commented 3 months ago

https://github.com/BinomialLLC/basis_universal/wiki/.basis-File-Format-and-ETC1S-Texture-Video-Specification

says (emphasis added)

In ETC1S, the mode is always differential (diff bit=1), the Rd, Gd, and Bd color deltas are always (0,0,0), and the flip bit is always set. ETC1S blocks are specified using the 15-bit 555 base color (called "color endpoints" in this specification, which is terminology derived from our BC1 texture format systems), the 3-bit intensity table index, and the 4x4 texel array of 2-bit selector indices (which are called "pixel index bits" in the Khronos ETC1 specification).

The Khronos spec says

the flip bit is encoded as 0 — the subsets are identical anyway.

I mean, it doesn't matter much in practice. As Khronos says, both halves of the 4×4 block have the same base color regardless of flip-ness. But as someone writing an ETC1S encoder, I was momentarily confused on what to output and this wiki page ranks pretty highly when doing a web search for "etc1s specification".

BasisU code also emits flip bit = 0:

https://github.com/BinomialLLC/basis_universal/blob/c71b173f0d95f6fab2ac98fcd70f1f23ea1b692a/transcoder/basisu_transcoder.cpp#L7853-L7855


Relatedly, the Khronos spec also sas that "The [3 bit] Table codeword for each subblock is identical" but this wiki page also doesn't explicitly mention this constraint, unless you count the "the" (meaning unique) in "the 3-bit intensity table index".

richgel999 commented 3 months ago

Thanks - I've changed our wiki spec to say: "In ETC1S, the mode is always differential (diff bit=1), the Rd, Gd, and Bd color deltas are always (0,0,0), and the flip bit is always not set (not that this matters in practice)."

I'll re-read our spec vs. the Khronos doc and see if I can make things more clear/consistent.