What Are DDS and TGA Files? A Guide to Game Texture Formats
You're modding Skyrim and need to replace a texture. You open the game's data folder and find thousands of .dds files. Or you're learning Unreal Engine and the documentation says to import textures as .tga. Or you downloaded a texture pack and it's full of files your image viewer can't open. Maybe you're a 3D artist and your art director just asked for "a TGA with alpha."
DDS and TGA are texture formats built for real-time 3D graphics. They exist because JPG and PNG, while great for web and print, are terrible for GPU rendering. Understanding why requires a quick detour into how graphics cards handle images — and it turns out the answer is fundamentally different from how your web browser or image viewer handles them.
Why games don't use JPG or PNG
When a GPU renders a 3D scene, it samples textures millions of times per frame. A single frame at 1080p has about 2 million pixels. Each pixel might sample 4–8 textures (diffuse colour, normal map, specular/roughness, ambient occlusion, emissive, height map, metallic...). That's 8–16 million texture lookups per frame, 60 times per second. At 4K, multiply by four.
JPG and PNG are designed for storage and transmission, not random access. To read a single pixel from a JPG, you need to decompress an entire 8×8 block of pixels (the DCT block that JPG compression operates on). PNG is worse — it uses row-based filtering and DEFLATE compression that requires decompressing sequentially from the start of the image data to reach any particular row.
GPUs need a format where any pixel can be read from memory with a single lookup, no sequential decompression step. That's what GPU-compressed texture formats provide — fixed-ratio compression where the GPU's texture unit hardware can decode any 4×4 block independently in a single clock cycle, with no dependency on adjacent blocks. This is a hard requirement for real-time rendering.
DDS: DirectDraw Surface
DDS (DirectDraw Surface) is the standard texture container format for games on Windows and consoles. Originally created by Microsoft for DirectX (the name dates back to DirectDraw, the 2D component of early DirectX), it's now used across engines and platforms. A DDS file can contain:
GPU-compressed texture data in formats like BC1 (DXT1) through BC7 (part of the DirectX 11 spec). BC1 compresses a 4×4 pixel block into 8 bytes — a 6:1 compression ratio for RGB data. BC3 (DXT5) handles RGBA at 4:1. BC7 handles RGBA with higher quality at a 4:1 ratio using a more sophisticated encoding algorithm that picks the best compression mode per block. These compressions are lossy but the artefacts are designed to be invisible at typical viewing distances in a game — you're usually seeing textures at an angle, in motion, under dynamic lighting.
Mipmaps — pre-calculated downscaled versions of the texture (half-resolution, quarter-resolution, eighth-resolution, etc., down to 1×1). When a textured surface is far from the camera, the GPU samples from a smaller mipmap instead of the full-resolution texture, reducing aliasing (shimmering on distant surfaces) and improving cache performance. A DDS with full mipmaps takes up about 33% more space than the base texture alone — a geometric series that converges to 4/3 of the original.
Cube maps — six images arranged as the faces of a cube, used for environment reflections, skyboxes, and image-based lighting (IBL) probes.
Texture arrays and 3D textures — multiple textures stacked in a single file, used for terrain blending, volume rendering, and other multi-layer effects.
TGA: Targa
TGA (Truevision TGA, or Targa) dates back to 1984 — originally created for Truevision's TARGA and VISTA video capture boards, which were some of the first consumer-grade hardware capable of displaying true-colour images. It's one of the oldest image formats still in active daily use.
TGA stores uncompressed or RLE-compressed pixel data with an optional alpha channel. The format is dead simple: an 18-byte header (or slightly more with extensions), followed by raw pixel data in BGRA byte order, bottom-to-top row order by default. This simplicity made it trivial to implement in early game engines — you could write a TGA loader in about 50 lines of C — and the convention stuck across the industry.
Key features that keep TGA alive in game pipelines:
Alpha channel support. TGA was one of the first formats to support a proper 8-bit alpha channel. In game art, alpha channels store transparency, specular maps, roughness masks, emission masks, or any per-pixel scalar data the shader needs.
No patent or licensing issues. TGA is unencumbered by patents and has no licensing fees. Any engine, tool, or pipeline can read and write it freely. This matters for open-source game engines and indie studios.
Uncompressed option. When you need to guarantee zero quality loss in the pipeline (the GPU compression happens at import time in the engine, not at file save time), uncompressed TGA is the cleanest source format. What you paint in Photoshop is exactly what the engine receives, bit-for-bit.
DDS vs TGA: when to use which
Use DDS when: shipping runtime game assets. DDS files with BC compression load directly into GPU memory without any decompression or re-encoding step. This means faster load times (smaller files to read from disk) and lower VRAM usage (the compressed data stays compressed in memory). Most shipped games store their textures as DDS on PC and console-specific equivalents (GNF on PlayStation, GTX/ASTC on Nintendo Switch, PVRTC on older iOS).
Use TGA when: providing source art to a game engine during development. Unreal Engine and Unity both accept TGA as a source format and handle the GPU compression internally during the asset import/cooking process. Artists work in TGA because it's lossless and uncompressed — the engine applies the appropriate BC/ASTC compression when building the game for each target platform.
In practice: the typical pipeline is: artist creates texture in Photoshop/Substance Painter/Mari → exports as TGA (lossless source) → engine imports TGA and converts to BC-compressed DDS or platform-specific format (runtime) → game loads the compressed texture at runtime. The TGA is checked into version control; the DDS is generated by the build.
Newer alternatives to DDS and TGA
KTX2 (Khronos Texture container) is the Vulkan/OpenGL equivalent of DDS, supporting ASTC (Adaptive Scalable Texture Compression, the standard for mobile GPUs) and ETC2 compression. Basis Universal is a supercompressed intermediate format that transcodes to any GPU format at load time — one file that becomes BC7 on PC, ASTC on mobile, ETC2 on older mobile. EXR (OpenEXR) is used for HDR textures, lightmaps, and VFX compositing. But DDS and TGA remain the most widely supported formats in desktop game pipelines as of 2026.
How to open and view DDS and TGA files
Neither Windows nor macOS can display DDS or TGA files natively out of the box. You need additional software:
Windows: Install the NVIDIA Texture Tools Exporter (includes a Photoshop plugin and a standalone viewer) or the Intel Texture Works plugin for Photoshop. For quick viewing without Photoshop, IrfanView (free) with the Formats plugin handles both DDS and TGA, including mipmap and alpha channel display.
macOS: Preview doesn't open DDS (it does handle TGA in some cases). XnView MP (free, cross-platform) handles both formats well. For Photoshop, the NVIDIA Texture Tools plugin works on macOS too.
Cross-platform: GIMP (free, open source) opens both DDS and TGA natively with full mipmap and alpha channel support. It can also save DDS with BC compression options and mipmap generation. For DDS specifically, the gimp-dds plugin adds a more complete set of compression format options.
If you just need to convert a DDS or TGA to a standard format for viewing or sharing, the image converter handles the conversion to JPG or PNG — useful when someone sends you a game texture file and you just want to see what it looks like.
Working with DDS and TGA for game modding
Game modding is the most common reason non-developers encounter these formats. If you're replacing textures in Skyrim, Fallout, GTA V, Minecraft (Java shader packs), or any moddable game:
Replacing a DDS texture: Open the existing DDS in GIMP, IrfanView, or Photoshop (with the NVIDIA plugin) to see its dimensions, compression format (BC1, BC3, BC7), and whether it has mipmaps. Your replacement must match all of these. A texture mod with the wrong compression format will either crash the game, display as a garbled mess of random colours, or show up as a flat purple "missing texture" placeholder. Use NVIDIA Texture Tools or texconv (Microsoft's command-line tool, part of DirectXTex) to export with the correct settings.
Creating new textures: Work in Photoshop, GIMP, or Substance Painter at the target resolution (usually a power of 2: 512×512, 1024×1024, 2048×2048, or 4096×4096 pixels). Export as TGA first (lossless), then convert to DDS with the appropriate compression and mipmap generation. Power-of-two dimensions are required for mipmaps (each level is exactly half the previous) and expected by essentially all game engines.
Normal maps: These require special handling. Normal maps should be exported as BC5 (two-channel, for DX normal maps) or BC7 (if you need the blue channel). Never compress a normal map with BC1 — the colour compression introduces artefacts that cause visible lighting errors on the 3D surface.
Texture resolution and VRAM
A 4096 × 4096 texture in BC1 (DXT1) format uses about 32 MB of VRAM including mipmaps. In BC7 it uses about 64 MB. In BC3 (DXT5, RGB + alpha) it's about 64 MB. A modern AAA game might have thousands of unique textures — managing the VRAM budget is why texture compression exists in the first place.
For comparison, the same 4096 × 4096 texture as an uncompressed 32-bit RGBA image would use 64 MB without mipmaps (85 MB with). PNG or JPG compression on disk doesn't help GPU memory usage because the GPU can't sample from PNG-compressed data — it would have to decompress the entire image into uncompressed VRAM first, defeating the purpose of compression entirely.
Current consumer GPUs ship with 8–24 GB of VRAM. At 4K resolution with high-quality textures, a modern game can easily use 8–12 GB of VRAM on textures alone. Without BC compression, that would be 4–6x higher — more VRAM than most GPUs have. Texture compression isn't optional in real-time graphics.
Frequently asked questions
Can I open a DDS file in Photoshop?
Not by default. You need the NVIDIA Texture Tools plugin (free download from NVIDIA's developer site) or the Intel Texture Works plugin. Once installed, Photoshop opens DDS files with full mipmap viewing and compression format control on export. The NVIDIA plugin is more widely used.
Why are DDS files so much smaller than PNG for the same image?
DDS uses GPU-native block compression (BC1 through BC7) that's specifically designed for texture data with fixed-ratio compression. BC1 achieves 6:1 compression, BC3 achieves 4:1, BC7 achieves 4:1 with higher quality. PNG's lossless DEFLATE compression typically achieves 2:1 to 3:1 on photographic content and can't be decoded by the GPU hardware — it has to be decompressed in RAM first.
Are TGA files still used in modern game development?
Yes, though their dominance is declining. TGA remains a common source art format, especially in Unreal Engine pipelines and studios with long-established asset conventions. Some studios are moving to PNG or EXR for source art, but TGA isn't going away — it's too deeply embedded in existing toolchains and workflows.
Can I convert DDS to JPG for sharing?
Yes. The image converter converts DDS to JPG or PNG. Note that the alpha channel is lost when converting to JPG (JPG doesn't support transparency). Convert to PNG if you need to preserve the alpha data.
What's the difference between BC1/DXT1, BC3/DXT5, and BC7?
BC1 (DXT1) compresses RGB at 4 bits per pixel — good for opaque diffuse textures and anything without an alpha channel. BC3 (DXT5) adds a separately compressed alpha channel at 8 bits per pixel total — used for transparency, packed ORM (occlusion/roughness/metallic) maps, and similar multi-channel data. BC7 compresses RGBA at 8 bits per pixel with significantly higher quality than BC3, using up to 64 different encoding modes per block — the modern default for high-quality textures on DirectX 11+ and Vulkan hardware.
Convert DDS or TGA Files
Convert game texture files to JPG or PNG for viewing and sharing.