DirectX Graphics Documentation

Texture Formats in DirectX

Understanding texture formats is crucial for efficient and accurate rendering in DirectX. These formats define how color and other data are stored within a texture resource, impacting memory usage, performance, and visual fidelity. This document outlines the various texture formats available in DirectX and their common use cases.

Uncompressed Formats

These formats store color data directly without any compression. They offer the highest fidelity but consume more memory.

RGBA 32-bit (8 bits per channel)

Format: DXGI_FORMAT_R8G8B8A8_UNORM

Represents colors with Red, Green, Blue, and Alpha channels, each 8 bits. This is a very common format for general-purpose textures.

RGB 24-bit (8 bits per channel)

Format: DXGI_FORMAT_R8G8B8_UNORM

Similar to RGBA 32-bit but without an alpha channel. Suitable for opaque textures.

RGBA 64-bit (16 bits per channel)

Format: DXGI_FORMAT_R16G16B16A16_UNORM

Offers higher precision for each color channel, useful for HDR rendering or textures requiring subtle color gradients.

Grayscale 8-bit

Format: DXGI_FORMAT_A8_UNORM (Alpha only) or DXGI_FORMAT_R8_UNORM (Luminance)

Used for single-channel data, such as alpha masks or grayscale images.

Compressed Formats

Compressed formats use block-based compression algorithms to reduce texture memory footprint and bandwidth requirements, often with minimal visual quality loss. These are highly recommended for most texture assets.

BC1 (DXT1)

Format: DXGI_FORMAT_BC1_UNORM

Compromises 4 bits per pixel. Supports 1-bit alpha. Good for diffuse maps and opaque textures.

BC2 (DXT2/3)

Format: DXGI_FORMAT_BC2_UNORM

Compromises 8 bits per pixel. Supports explicit alpha. Good for textures with sharp alpha transitions.

BC3 (DXT4/5)

Format: DXGI_FORMAT_BC3_UNORM

Compromises 8 bits per pixel. Supports interpolated alpha. Excellent for diffuse maps with smooth alpha fades.

BC4 (Red Channel Only)

Format: DXGI_FORMAT_BC4_UNORM

Compromises 4 bits per pixel. Stores a single channel (e.g., for normal map Y component or specular intensity).

BC5 (Red and Green Channels)

Format: DXGI_FORMAT_BC5_UNORM

Compromises 8 bits per pixel (4 bits for R, 4 bits for G). Commonly used for normal maps.

BC6H (High Dynamic Range)

Format: DXGI_FORMAT_BC6H_UF16 (Unsigned Float) or DXGI_FORMAT_BC6H_SF16 (Signed Float)

Supports HDR textures with 16-bit floating-point values. Ideal for advanced lighting and PBR workflows.

BC7

Format: DXGI_FORMAT_BC7_UNORM

Offers high-quality compression with up to 8 bits per pixel, providing excellent results for color textures, often surpassing BC3.

Depth-Stencil Formats

These formats are primarily used for depth and stencil buffers in rendering pipelines.

Depth 24, Stencil 8

Format: DXGI_FORMAT_D24_UNORM_S8_UINT

A common format for depth buffering with an 8-bit stencil channel for effects like shadow mapping or masking.

Depth 32 Float

Format: DXGI_FORMAT_D32_FLOAT

Provides higher precision for depth values, reducing Z-fighting issues.

Choosing the Right Format

Always consider the specific requirements of your texture asset and target hardware when selecting a format. Experimentation is often key to finding the optimal balance between quality and performance.