[PNG] Indexable JPEGs

A new whitepaper was just released: Variable-Rate Texture Compression:
Real-Time Rendering with JPEG <https://arxiv.org/abs/2510.08166>.

As part of our 5th Edition work, we're investigating options for better
compression.

JPEGs and PNG share a similar issue where you cannot (currently/previously)
index directly into a pixel and decode just it. (Or perhaps into a
macroblock, etc.) Typically, you have to decode the entire file and store
it in memory.

This means the image is not compressed while in use.
In some cases that is fine. Perhaps the image is decoded once and then
stored as raw data while being displayed, anyway.
But in other cases this isn't fine, such as games. In 3D rendering, texel
lookup counts are overwhelming. There is a reason GPUs have faster RAM than
what we can buy for our system RAM, leading it by several years. Keeping
that data compressed helps because it is more likely to stay in cache. But
given the nature of texel lookups, it also needs to be indexable.


I haven't yet read the paper. I assume it keeps the Huffman tree in memory
and stores offsets for each macroblock.

This is vaguely related to our investigation of DEFLATE restart markers. I
doubt we'll want to insert that many restart markers, though. If my guess
is correct, adding the index to JPEG is fairly trivial and doesn't increase
file size much. But since DEFLATE can look back into its compression
window, we would sacrifice compression ratio at each restart. It also hurts
PNG filtering. So while vaguely related, the two solutions do not apply
equally in a given scenario.

Received on Monday, 13 October 2025 18:07:19 UTC