Space for Fakhrul Islam
Breadcrumbs

DirectX 11 vs DirectX 12

DirectX (DX) is a graphics API used by Unreal Engine (UE) to interface with the GPU. Choosing the right DirectX version affects performance, stability, and feature support, especially in Pixel Streaming or remote GPU streaming environments like Eagle 3D.

Feature

DirectX 11 (DX11)

DirectX 12 (DX12)

Release Year

2009

2015

API Type

High-level

Low-level

CPU Overhead

Higher

Lower

Multi-core GPU Usage

Limited

Optimized

Stability

Very stable

Can be unstable in some builds

Feature Support

Mature, widely supported

Advanced (Nanite, Lumen HWRT, SM6 shaders)

Streaming / Remote Use

Recommended

Needs careful setup

Hardware Requirements

Most GPUs

Modern GPUs only (Feature Level 12_0+)



DirectX 11 (DX11)

Pros

  • Stable and mature, widely supported across Windows GPUs.

  • Works consistently with Pixel Streaming and remote GPU streaming.

  • Lower chance of unexpected crashes or frame drops in remote environments.

  • Better driver compatibility for older hardware.

Cons

  • Higher CPU overhead due to single-threaded command submission.

  • Doesn’t utilize modern GPU multi-core capabilities fully.

  • May lack support for advanced UE features like Nanite and hardware ray tracing.

Best Use Cases

  • Pixel Streaming / Web-based streaming (e.g., Eagle 3D)

  • Projects that prioritize stability and compatibility

  • Production environments with varying client GPU specs





DirectX 12 (DX12)

Pros

  • Low-level API with lower CPU overhead.

  • Optimized for multi-core CPUs and modern GPUs.

  • Supports advanced UE features: Nanite, Lumen (hardware ray tracing), Shader Model 6.

  • Better GPU scaling for extremely complex scenes.

Cons

  • Sensitive to driver versions and GPU support.

  • Can cause frame pacing issues in Pixel Streaming builds.

  • Streaming servers may require specific configuration.

  • Debugging DX12 issues is harder than DX11.

Best Use Cases

  • High-end local PC gaming.

  • CPU-bound scenarios where DX11 becomes a bottleneck.

  • Unreal Engine projects requiring Nanite, Lumen HWRT, or Shader Model 6.

  • Remote streaming only if server supports DX12 and proper codecs.




DirectX 12 Considerations for Streaming

Codec Selection

When using DX12 for Pixel Streaming or remote streaming, the choice of video codec is critical because DX12 can stress the GPU differently than DX11.

Codec

Recommended Use

Notes

H.264 (AVC)

Default, compatible with most browsers and streaming clients

Lower GPU encoding efficiency in DX12; may need tuning

H.265 (HEVC)

Recommended for DX12 in modern GPUs

Better compression, lower bitrate, better for high-res/high-fidelity DX12 scenes; requires hardware HEVC encoder

VP8 / VP9 / AV1

Only if browser supports natively

Less common in Windows DX12 + Unreal setup

Recommendation:

  • Use H.264 for maximum compatibility, especially for web streaming.

  • Use H.265 if the server GPU and clients support it, as it handles DX12’s higher GPU load better.



DX12 Streaming Tips

  1. Test locally first: Launch the packaged build with -d3d12 and confirm the GPU renders correctly.

  2. GPU encoding: Ensure the server GPU supports DX12 + hardware encoding for H.264/H.265.

  3. Fallback: If DX12 build fails to stream, use DX11 for Pixel Streaming. DX12 may break streaming pipelines due to driver or RHI issues.

  4. Flags for Unreal launch:

    YourProject.exe -d3d12 -PixelStreamingEnableH264
    
    

    or for H.265:

    YourProject.exe -d3d12 -PixelStreamingEnableHEVC
    
    





Recommendations

Scenario

DirectX Version

Notes

Pixel Streaming

DX11

Most stable, fewer dropped frames

Local high-end UE project

DX12

Best performance and advanced UE features

CPU-bound heavy scenes

DX12

Utilizes multiple threads efficiently

Older GPUs or mixed client support

DX11

Ensures all users can run the app

TL;DR:

  • Use DX11 for streaming stability

  • Use DX12 for advanced features / local performance

  • Choose H.264 for web streaming, H.265 if hardware supports it and bandwidth optimization is critical