May 16th, 2024

Agility SDK 1.614.0: R9B9G9E5 support for Render Targets and UAVs

Today the DirectX team is excited to announce the release of the Agility SDK 1.614.0 which includes full support for R9G9B9E5_SHAREDEXP (999E5) texture format for render targets and UAV read/writes! This new Agility SDK is also fully supported by PIX.

To get the latest release head on over to our Agility SDK downloads page.

Understanding the 999E5 Texture Format

999E5 was originally introduced in Direct3D 11 and Direct3D 12 in a limited capacity. Its Direct3D 12 support has now been extended to support render targets and UAVs.  A key benefit of the 999E5 texture format is it enables efficient storage and rendering of certain types of content in real-time computer graphics applications, such as video games and simulations. It is part of a family of texture formats that balance between storage space and rendering performance, crucial for delivering immersive visual experiences while keeping resource usage in check.

As for how the format works, 999E5 format represents color values using a shared exponent among the RGB components (Red, Green, Blue). It provides some of the benefits of floating-point representation while using fewer bits than traditional formats (e.g., FP32 or FP16). Despite its space efficiency, the 999E5 format retains a higher dynamic range compared to half-precision formats.

Advantages of 999E5 Texture Format

  1. Storage Efficiency: One of the primary benefits of the 999E5 format is its efficiency of storage. For example, traditional floating-point format FP 16 consumes 64 bits per pixel, while 999E5 consumes 32 bits per pixel.
  2. Visual Fidelity: Despite its compression, the 999E5 format retains a higher dynamic range than FP 16. The tradeoff is the lack of a sign bit and an alpha channel.

To use 999E5, applications need to create their render target and unordered access views of resources in the appropriate format. This would be the same way applications use DXGI_FORMAT_R32G32B32A32_UINT, or any other format that does not require casting to use.

Because of the hardware support ecosystem, it is recommended to always check if a driver/hardware combination supports 999E5. The code below is how an application can query the runtime to check for the upgraded support.

D3D12_FEATURE_DATA_FORMAT_SUPPORT formatSupport{};
formatSupport.Format = DXGI_FORMAT_R9G9B9E5_SHAREDEXP;

m_device->CheckFeatureSupport(
    D3D12_FEATURE_FORMAT_SUPPORT, 
    &formatSupport, 
    sizeof(D3D12_FEATURE_DATA_FORMAT_SUPPORT));

if (formatSupport.Support1 & D3D12_FORMAT_SUPPORT1_RENDER_TARGET)
{
    // Since it is all-or-nothing, supporting render target 
    // means support updated 999E5 revision
    printf("Format supports rtv and uav\n");
}

We are also working hard on making this format be swap chain compatible, and applications will be able to use 999E5 in their Present pipelines in the future.

For more up-to-date technical information, please refer to the D3D12 R9B9G9E5 spec.

PIX Support

Agility SDK 1.614 has day 0 PIX support.  To get the latest PIX that supports this SDK and to learn more about what is included in this PIX update please the latest PIX 2405-15 blog post.

Driver Availability

  • AMD: AMD has recently launched a knowledge base preview driver that supports 999E5. More details about this can be found here.
  • Intel: Developers interested in this feature should contact Intel Developer Relations for additional details.
  • NVIDIA:Please reach out to your NVIDIA developer relations representative for details.
  • Qualcomm: Future support is planned
  • WARP: 999E5 RTT and UAV is supported in WARP 1.0.11 and higher
Category
DirectX

Author

David Cook
Principal Program Manager

0 comments

Discussion are closed.