Introduction to GPU Texture Transcoding

It boils down to sending less data over a network and making users wait less, without killing quality of images.

In many applications, images and textures are essential. They often take up much of the data needed to run a game. One surprising thing here is just how much many games and applications could improve in this sense.

To give a user this data, we often send it over a network. This may look like downloading a game from Steam, or loading a new level in your cloud-based phone game. It can also be essential for projects like wireless VR.


Another important thing to consider about textures is how our GPU reads them.

Modern GPUs have problems with memory space. It's often not acceptable to store an image uncompressed on a GPU. Therefore, GPU manufacturers have developed special texture compression formats that allow images to be stored compressed on their GPUs, and then can be decompressed in hardware on the GPU-- this allows the decompression process to be extremely fast.

Therefore, we want our textures to be converted to these GPU formats.


You might be asking-- why not just compress to these GPU formats, and send those over the network? The issue here is that these GPU formats are not as small as we'd like. JPEG, for instance, can compress an image to about a fourth of the size of these GPU formats.

Okay, so why not compress the images to JPEG, then while the game is running turn the JPEG images into these GPU compression formats? That's problematic too. JPEG compression introduces artifacts, and then recompressing to these GPU formats will introduce different artifacts. We want to avoid extra, bad-looking artifacts if we can.

This is where crunch comes in. With crunch, you can compress an image to around the size of a JPEG image, and transcode this image directly to your desired GPU format extremely quickly without those nasty double artifacts. Transcoding is the process of going directly from one compressed format to another-- no decompression and recompresssion necessary! We now have that fast network send, less artifacts, and fast decoding. What's not to love?

Your users will be happy as they quickly download games without sacrificing quality!

There's one big problem. Crunch only supports certain GPU formats. If you want to use it on an iOS device, for instance, you can't.

And there's also the matter of speed and data size. Can crunch be even better?

Yes, yes it can. And that's what we're working on.