DDS (DirectDraw Surface) is a GPU texture container, not a web image format — it feeds graphics hardware in real-time 3D games, a job AVIF was never designed to do. Microsoft introduced it with DirectX 7 in 1999 to load block-compressed textures straight into video memory. This page explains what DDS stores, why that has nothing to do with delivering photographs to browsers, and the only reason you would ever convert a .dds file to AVIF or PNG.
What DDS actually holds
A DDS file holds GPU-ready texture data, not a decoded picture. Its payload is one or more block-compressed surfaces the graphics card reads with zero CPU decode.
Three properties define it:
- Block compression — pixels are packed in 4×4 blocks using the BCn / DXT family, as low as 4 bits per pixel.
- Mipmaps — pre-scaled copies (full, half, quarter, down to 1×1) ship inside the same file.
- Texture topologies — a single
.ddscan store a 2D image, a 6-face cubemap, a volume texture, or a texture array.
The MIME type is image/vnd.ms-dds and the file begins with the 4 ASCII bytes DDS . Volume textures arrived with DirectX 8 in 2000.
Block compression (BCn / DXT) in plain terms
Block compression keeps a texture compressed while still resident in GPU memory, so the card decodes each 4×4 block on demand during rendering instead of unpacking the whole image first.
The common modes, by job:
- BC1 (DXT1) — 4 bpp, opaque colour such as a wall or terrain diffuse map.
- BC3 (DXT5) — 8 bpp, colour plus smooth alpha such as foliage or decals.
- BC5 — two-channel, used for normal maps.
- BC6H / BC7 — HDR and high-quality RGBA on newer hardware.
This is the opposite of what a delivery codec does. AVIF and JPEG fully decode to plain RGB pixels in RAM, then the browser paints them once. A GPU sampling a textured surface millions of times per frame cannot afford that, which is why games never ship JPEGs as live textures.
Why DDS and AVIF solve different problems
DDS and AVIF never compete, because they target different hardware paths. One stays compressed inside a GPU; the other shrinks bytes on a network.
| Concern | DDS | AVIF |
|---|---|---|
| Consumer | GPU sampler, real-time | Browser, decode-once |
| Goal | Stay GPU-resident, fast random pixel access | Fewest bytes over the wire |
| Compression | Fixed-rate per 4×4 block | Variable-rate AV1 intra frame |
Decoded by <img>? | No browser renders it | ~94% of browsers |
AVIF stores a photograph in roughly half the bytes of a JPEG and beats WebP by 20–25%, but it is a still-image delivery format. It would be a poor texture format: variable-rate compression means the GPU cannot index a pixel without decoding a whole frame.
Do not convert game textures to AVIF for engine use
Never re-encode a DDS texture as AVIF and feed it back to a game engine. The result is slower and lower quality, not better.
Two failures follow:
- Decode cost returns. AVIF must be CPU-decoded to RGB before upload, erasing the zero-decode advantage DDS exists to provide.
- Mipmaps and block layout are lost. AVIF carries no mipmap chain, no cubemap faces, and no BCn blocks the sampler expects.
For 3D pipelines that need a portable compressed texture, the modern targets are KTX2 and Basis Universal, not AVIF. Those transcode to the GPU's native block format at load time.
The only valid DDS to AVIF or PNG conversion
Convert a .dds file only to preview or share a texture as a normal viewable image — never to run it in an engine.
Two practical paths:
- DDS → PNG for a lossless preview that keeps alpha and shows the texture exactly. See Convert AVIF to PNG for the reverse direction once you have an AVIF.
- DDS → AVIF when you want a small shareable thumbnail of a texture for a wiki, mod page, or art breakdown.
A typical flow: a tool such as Microsoft DirectXTex texconv, AMD Compressonator, or NVIDIA Texture Tools exports the DDS to PNG, then you bring that PNG here for AVIF. Going the other way, Convert PNG to AVIF and Convert JPG to AVIF turn ordinary images into AVIF in your browser with no upload.
Because the conversion crosses compression families, treat it as lossy by intent. The Lossy vs Lossless Compression guide covers why, and AVIF Optimization covers settings once the image is a normal photo.
FAQ
Can a browser open a DDS file?
No. No mainstream browser renders DDS in an <img> tag. WebGL and WebGPU can upload the same block-compressed data through extensions, but only via custom loaders inside a 3D app.
Should I use AVIF for game textures?
No. AVIF is a delivery codec for photos, not a GPU texture format. Keep DDS, KTX2, or Basis Universal for engine assets.
How do I view a DDS file as a normal image?
Export it to PNG with texconv, Compressonator, or NVIDIA Texture Tools, then convert the PNG to AVIF or JPG if you need a smaller share copy.
Is DDS lossy or lossless?
Usually lossy. BCn block compression discards data per 4×4 block, though it is tuned to hold up at game rendering distances.
Does DDS support transparency?
Yes. BC2, BC3, and BC7 carry an alpha channel, used for cutout foliage, glass, and decals.
Sources and further reading
- DirectDraw Surface (DDS) — Microsoft Learn
- Texture Block Compression in Direct3D 11 — Microsoft Learn
- Texconv texture converter — Microsoft DirectXTex wiki
- AVIF format overview — the still-image delivery codec DDS is contrasted with
- Lossy vs Lossless Compression — choosing a mode when you flatten a texture to a normal image