Max Simultaneous Render Targets in DirectX

Multiple Render Targets (MRTs) allow a pixel shader to output data to several render target textures concurrently during a single draw call. In modern versions of the API, specifically DirectX 10, DirectX 11, and DirectX 12, the maximum number of simultaneous render targets supported is 8. This limit is defined in the DirectX SDK headers by constants such as D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT and D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT. In legacy versions, such as DirectX 9, the API supports a maximum of 4 simultaneous render targets, defined by D3D_MAX_SIMULTANEOUS_RENDERTARGETS.

DirectX API Limits by Version

  • DirectX 12: 8 simultaneous render targets (D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT)
  • DirectX 11: 8 simultaneous render targets (D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT)
  • DirectX 10 / 10.1: 8 simultaneous render targets (D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT)
  • DirectX 9: 4 simultaneous render targets (D3D_MAX_SIMULTANEOUS_RENDERTARGETS)

Technical Constraints and Usage Rules

When binding multiple render targets to the graphics pipeline, several technical rules apply:

  1. Dimensions: All bound render targets must share the same width and height, as well as the same depth (for 3D textures) or array size (for texture arrays).
  2. Formats: Render targets do not need to share the same resource format. A shader can write to a combination of 8-bit unsigned normalized (UNORM), 16-bit floating-point (FP16), and 32-bit floating-point (FP32) targets simultaneously.
  3. Multisampling: If multisample anti-aliasing (MSAA) is enabled, all active render targets and any bound depth-stencil buffer must have the exact same sample count and quality level.
  4. Depth-Stencil Binding: The pipeline allows one depth-stencil view (DSV) to be bound concurrently alongside the 8 render target views (RTVs).

Common Use Cases

The ability to output up to 8 render targets simultaneously is critical for deferred rendering architectures. During the geometry pass, a single shader writes various surface properties—such as diffuse albedo, world-space normals, roughness, metallic values, and ambient occlusion—into distinct textures that comprise the G-Buffer. MRTs are also widely used in post-processing pipelines to extract bright regions for bloom filters or compute depth-of-field metrics in a single pass.