FWIW, the main inventor of S3TC, Konstantine Iourcha, left S3 a long time ago.S3 guys are now doing mobile which is sad since their texture compression is still very relevant...
My educated guess is that the old GeForce GPUs (like the old ATI GPUs) uncompressed DXT textures to the GPU L1 texture cache (to make filtering fast and simple). Since DXT color endpoints are 565 (16 bit), it might be tempting to uncompress it to the texture cache as 565 (16 bit). This way it uses half the texture cache space (= less cache misses = faster). However uncompressing to 8888 (32 bit) produces better quality, since DXT 565 palette values are linearly interpolated. The two endpoints colors can always be presented at 565 (lossless), but the two interpolated middle colors generated need "1.5" bits more precision for lossless storage. This kind of image quality degradation is visible most clearly in smooth gradients (= palette endpoints are 1 away from each other).GeForce 1/2/3 suffered from a hardware bug (or was it a hack to circumvent s3 patent? I think s3 sued Nvidia back in the day over due royalties for implementing s3tc into NV1x) that affected specifically DXT1 textures. Certain NVidia drivers included a way to automatically convert all DXT1 textures into DXT3/5 but at the price of lost efficiency: a DXT3 texture takes twice the memory space of a DXT1 one, for the same size, because of the additional 4bpp alpha channel (DXT1 only allows 1 bit for masking)
My impression was that this was done to make the cache hold effectively 2x the number of texels when the source was DXT1 (though I'm not entirely sure how they would then distinguish the "fully transparent" pixels mode in DXT1. Perhaps they mapped everything to 1555 rather than 565 as in the original DXT1 base colours, which'd lead to even worse colour represntation).My educated guess is that the old GeForce GPUs (like the old ATI GPUs) uncompressed DXT textures to the GPU L1 texture cache (to make filtering fast and simple).
Yeah, I agree with you. They most likely uncompressed DXT1 as 1555 in the texture cache (instead of 565) because the DXT1 supports a single bit alpha block mode (if the first color endpoint value is larger than the second in a 4x4 block palette, one of the palette entries encodes alpha=0, and there is only one interpolated value). The GPU cannot know whether the texture contains any alpha pixels, so it must assume so and use 1555 (if you wan't to shave the storage cost to 16 bits per pixel in the cache). That's kind of horrible. But not as horrible as the only available Nokia N-Gage back buffer format, which was 4444 (obviously the 4 alpha bits weren't even used for any purpose)My impression was that this was done to make the cache hold effectively 2x the number of texels when the source was DXT1 (though I'm not entirely sure how they would then distinguish the "fully transparent" pixels mode in DXT1. Perhaps they mapped everything to 1555 rather than 565 as in the original DXT1 base colours, which'd lead to even worse colour represntation).