Skip to main content
The Virtual Display Driver provides comprehensive HDR (High Dynamic Range) support through HDR10 static metadata, custom color primaries, and advanced color space configuration.

HDR10 Static Metadata

HDR10 requires static metadata to describe the display’s luminance capabilities and content characteristics:
<hdr_advanced>
    <hdr10_static_metadata>
        <enabled>true</enabled>
        <max_display_mastering_luminance>1000.0</max_display_mastering_luminance>
        <min_display_mastering_luminance>0.05</min_display_mastering_luminance>
        <max_content_light_level>1000</max_content_light_level>
        <max_frame_avg_light_level>400</max_frame_avg_light_level>
    </hdr10_static_metadata>
</hdr_advanced>

HDR10 Parameters

hdr10_static_metadata.enabled
boolean
default:"false"
Enable HDR10 support. Must be true to use any HDR features.
Requires compatible GPU and proper color configuration.
max_display_mastering_luminance
float
default:"1000.0"
Maximum luminance of the mastering display in nits (cd/m²).Common values:
  • 1000.0 - Standard HDR displays
  • 4000.0 - High-end HDR displays
  • 10000.0 - Professional mastering displays
Valid range: 1.0 - 10000.0 nits
min_display_mastering_luminance
float
default:"0.05"
Minimum luminance of the mastering display in nits (cd/m²).Common values:
  • 0.05 - Standard displays
  • 0.0001 - OLED displays with deep blacks
Valid range: 0.0001 - 1.0 nits
max_content_light_level
integer
default:"1000"
Maximum light level of any single pixel in the content (MaxCLL) in nits.This represents the brightest pixel that will appear in the content.Valid range: 1 - 10000 nits
max_frame_avg_light_level
integer
default:"400"
Maximum average light level across the entire frame (MaxFALL) in nits.Typically lower than MaxCLL since most of the frame is darker than peak highlights.Valid range: 1 - 10000 nits

Color Depth Configuration

Configure bit depth for improved color accuracy:
<colour>
    <SDR10bit>true</SDR10bit>
    <HDRPlus>false</HDRPlus>
    <ColourFormat>RGB</ColourFormat>
</colour>

<color_advanced>
    <bit_depth_management>
        <auto_select_from_color_space>false</auto_select_from_color_space>
        <force_bit_depth>10</force_bit_depth>
        <fp16_surface_support>true</fp16_surface_support>
    </bit_depth_management>
</color_advanced>

Color Depth Parameters

colour.SDR10bit
boolean
default:"false"
Enable 10-bit color depth for SDR (Standard Dynamic Range) content.Reduces color banding in gradients.
colour.HDRPlus
boolean
default:"false"
Enable HDR+ support (requires HDR10 to be enabled).
Must enable hdr10_static_metadata.enabled first.
colour.ColourFormat
string
default:"RGB"
Color format for video output.Valid values:
  • RGB - Full RGB (best for HDR)
  • YCbCr444 - 4:4:4 chroma subsampling (no quality loss)
  • YCbCr422 - 4:2:2 chroma subsampling (some quality loss)
  • YCbCr420 - 4:2:0 chroma subsampling (significant quality loss)
RGB is recommended for HDR content to preserve full color information.
bit_depth_management.force_bit_depth
integer
default:"8"
Force specific bit depth for color channels.Valid values:
  • 8 - Standard 8-bit (16.7 million colors)
  • 10 - 10-bit (1.07 billion colors, required for HDR)
  • 12 - 12-bit (68.7 billion colors, professional use)
10-bit or higher requires compatible GPU and display pipeline.
bit_depth_management.fp16_surface_support
boolean
default:"true"
Enable 16-bit floating point surface support for improved color precision.Keep enabled for compatibility with modern rendering pipelines.

Custom Color Primaries

Define custom color gamut using CIE 1931 chromaticity coordinates:
<color_primaries>
    <enabled>true</enabled>
    <!-- DCI-P3 color space example -->
    <red_x>0.680</red_x>
    <red_y>0.320</red_y>
    <green_x>0.265</green_x>
    <green_y>0.690</green_y>
    <blue_x>0.150</blue_x>
    <blue_y>0.060</blue_y>
    <white_x>0.3127</white_x>  <!-- D65 white point -->
    <white_y>0.3290</white_y>
</color_primaries>

Color Primary Parameters

color_primaries.enabled
boolean
default:"false"
Enable custom color primaries instead of using the standard sRGB color space.
red_x
float
default:"0.640"
CIE x coordinate for red primary.Valid range: 0.0 - 1.0
red_y
float
default:"0.330"
CIE y coordinate for red primary.Valid range: 0.0 - 1.0
green_x
float
default:"0.300"
CIE x coordinate for green primary.Valid range: 0.0 - 1.0
green_y
float
default:"0.600"
CIE y coordinate for green primary.Valid range: 0.0 - 1.0
blue_x
float
default:"0.150"
CIE x coordinate for blue primary.Valid range: 0.0 - 1.0
blue_y
float
default:"0.060"
CIE y coordinate for blue primary.Valid range: 0.0 - 1.0
white_x
float
default:"0.3127"
CIE x coordinate for white point (typically D65).Valid range: 0.0 - 1.0
white_y
float
default:"0.3290"
CIE y coordinate for white point (typically D65).Valid range: 0.0 - 1.0

Color Space Presets

sRGB (Default)

<color_primaries>
    <enabled>false</enabled>  <!-- Use sRGB defaults -->
    <red_x>0.640</red_x>
    <red_y>0.330</red_y>
    <green_x>0.300</green_x>
    <green_y>0.600</green_y>
    <blue_x>0.150</blue_x>
    <blue_y>0.060</blue_y>
    <white_x>0.3127</white_x>
    <white_y>0.3290</white_y>
</color_primaries>
Standard sRGB color space. Safe default for most applications.

DCI-P3

<color_primaries>
    <enabled>true</enabled>
    <red_x>0.680</red_x>
    <red_y>0.320</red_y>
    <green_x>0.265</green_x>
    <green_y>0.690</green_y>
    <blue_x>0.150</blue_x>
    <blue_y>0.060</blue_y>
    <white_x>0.3127</white_x>
    <white_y>0.3290</white_y>
</color_primaries>
Wider color gamut used in digital cinema and modern displays.

Rec. 2020 (BT.2020)

<color_primaries>
    <enabled>true</enabled>
    <red_x>0.708</red_x>
    <red_y>0.292</red_y>
    <green_x>0.170</green_x>
    <green_y>0.797</green_y>
    <blue_x>0.131</blue_x>
    <blue_y>0.046</blue_y>
    <white_x>0.3127</white_x>
    <white_y>0.3290</white_y>
</color_primaries>
Ultra-wide color gamut for UHD/HDR content. Standard for 4K/8K broadcasting.

Gamma Correction

Configure gamma curve for tone mapping:
<color_space>
    <enabled>true</enabled>
    <gamma_correction>2.2</gamma_correction>
    <primary_color_space>sRGB</primary_color_space>
    <enable_matrix_transform>false</enable_matrix_transform>
</color_space>
color_space.enabled
boolean
default:"false"
Enable advanced gamma correction.
color_space.gamma_correction
float
default:"2.2"
Gamma correction value.Common values:
  • 2.2 - Standard sRGB gamma
  • 2.4 - Rec. 709/BT.1886 gamma
  • 1.0 - Linear (no gamma correction)
color_space.primary_color_space
string
default:"sRGB"
Primary color space identifier.Valid values: sRGB, DCI-P3, Rec2020

Complete HDR Configuration Example

Full HDR10 setup for 4K content creation:
<!-- Enable HDR10 -->
<hdr_advanced>
    <hdr10_static_metadata>
        <enabled>true</enabled>
        <max_display_mastering_luminance>1000.0</max_display_mastering_luminance>
        <min_display_mastering_luminance>0.05</min_display_mastering_luminance>
        <max_content_light_level>1000</max_content_light_level>
        <max_frame_avg_light_level>400</max_frame_avg_light_level>
    </hdr10_static_metadata>
    
    <!-- Use Rec. 2020 color primaries -->
    <color_primaries>
        <enabled>true</enabled>
        <red_x>0.708</red_x>
        <red_y>0.292</red_y>
        <green_x>0.170</green_x>
        <green_y>0.797</green_y>
        <blue_x>0.131</blue_x>
        <blue_y>0.046</blue_y>
        <white_x>0.3127</white_x>
        <white_y>0.3290</white_y>
    </color_primaries>
    
    <!-- Configure gamma for HDR -->
    <color_space>
        <enabled>true</enabled>
        <gamma_correction>2.4</gamma_correction>
        <primary_color_space>Rec2020</primary_color_space>
        <enable_matrix_transform>false</enable_matrix_transform>
    </color_space>
</hdr_advanced>

<!-- 10-bit color depth -->
<colour>
    <SDR10bit>true</SDR10bit>
    <HDRPlus>true</HDRPlus>
    <ColourFormat>RGB</ColourFormat>
</colour>

<color_advanced>
    <bit_depth_management>
        <auto_select_from_color_space>false</auto_select_from_color_space>
        <force_bit_depth>10</force_bit_depth>
        <fp16_surface_support>true</fp16_surface_support>
    </bit_depth_management>
    <color_format_extended>
        <sdr_white_level>80.0</sdr_white_level>
    </color_format_extended>
</color_advanced>

EDID HDR Capabilities

When using EDID integration, HDR capabilities can also be specified in monitor_profile.xml:
<HDRCapabilities>
    <HDR10Supported>true</HDR10Supported>
    <DolbyVisionSupported>false</DolbyVisionSupported>
    <HDR10PlusSupported>false</HDR10PlusSupported>
    <MaxLuminance>1670.838</MaxLuminance>
    <MinLuminance>10.615</MinLuminance>
</HDRCapabilities>
EDID HDR capabilities work in conjunction with vdd_settings.xml. See EDID Integration for details.

Troubleshooting

Checklist:
  • hdr10_static_metadata.enabled is true
  • force_bit_depth is 10 or higher
  • ColourFormat is set to RGB
  • GPU supports HDR output
  • Windows HDR settings are enabled
Possible causes:
  • Incorrect color primaries
  • Wrong gamma correction
  • Bit depth mismatch
Solution: Verify color space matches your workflow (sRGB for most applications).
Possible causes:
  • Incorrect luminance metadata
  • Wrong MaxCLL/MaxFALL values
Solution: Adjust max_display_mastering_luminance and max_content_light_level to match your content.

Best Practices

1

Start with standard values

Use the defaults (1000 nits max, 0.05 nits min) for initial setup.
2

Match your workflow

  • sRGB for web/general use
  • DCI-P3 for content creation
  • Rec. 2020 for professional HDR video
3

Enable 10-bit minimum

HDR requires at least 10-bit color depth to avoid banding.
4

Test HDR content

Verify HDR is working with test patterns or known HDR content.

EDID Integration

Configure HDR via EDID profiles

Color Formats

Overview of color configuration

Build docs developers (and LLMs) love