Skip to main content
The Virtual Display Driver supports loading custom EDID (Extended Display Identification Data) files to emulate specific monitors and automatically configure display capabilities.

EDID Integration System

EDID integration allows automatic configuration from parsed EDID files, eliminating manual setup for display modes, HDR capabilities, and color profiles.

Basic Configuration

Enable EDID integration in vdd_settings.xml:
<edid_integration>
  <enabled>true</enabled>
  <auto_configure_from_edid>true</auto_configure_from_edid>
  <edid_profile_path>EDID/monitor_profile.xml</edid_profile_path>
  <override_manual_settings>false</override_manual_settings>
  <fallback_on_error>true</fallback_on_error>
</edid_integration>
enabled
boolean
default:"false"
Enable EDID integration system. When disabled, all EDID features are bypassed.
auto_configure_from_edid
boolean
default:"false"
Automatically apply settings from monitor_profile.xml at driver startup.
edid_profile_path
string
default:"EDID/monitor_profile.xml"
Path to XML profile file relative to C:\VirtualDisplayDriver\.
override_manual_settings
boolean
default:"false"
  • true: EDID settings take priority over manual vdd_settings.xml configuration
  • false: Manual settings take priority; EDID fills in missing values
fallback_on_error
boolean
default:"true"
Use manual settings if EDID profile fails to load or parse.

Monitor Profile Format

The monitor_profile.xml file contains parsed EDID data:
<?xml version="1.0" encoding="utf-8"?>
<IddCxMonitorConfig>
  <MonitorModes>
    <MonitorMode>
      <Width>3840</Width>
      <Height>2160</Height>
      <RefreshRate>59.940</RefreshRate>
      <RefreshRateMultiplier>999</RefreshRateMultiplier>
      <NominalRefreshRate>60</NominalRefreshRate>
    </MonitorMode>
  </MonitorModes>
  
  <HDRCapabilities>
    <HDR10Supported>true</HDR10Supported>
    <DolbyVisionSupported>false</DolbyVisionSupported>
    <HDR10PlusSupported>false</HDR10PlusSupported>
    <MaxLuminance>1670.838</MaxLuminance>
    <MinLuminance>10.615</MinLuminance>
  </HDRCapabilities>
  
  <ColorProfile>
    <PrimaryColorSpace>sRGB</PrimaryColorSpace>
    <Gamma>2.200</Gamma>
    <Chromaticity>
      <RedX>0.6250</RedX>
      <RedY>0.3398</RedY>
      <GreenX>0.2803</GreenX>
      <GreenY>0.5947</GreenY>
      <BlueX>0.1553</BlueX>
      <BlueY>0.0703</BlueY>
      <WhiteX>0.2832</WhiteX>
      <WhiteY>0.2979</WhiteY>
    </Chromaticity>
  </ColorProfile>
  
  <PreferredMode>
    <Width>4096</Width>
    <Height>2160</Height>
    <RefreshRate>59.940</RefreshRate>
  </PreferredMode>
</IddCxMonitorConfig>

Parsing EDID Files

The driver includes an EDID parser (edid_parser.txt) that extracts capabilities from binary EDID files.

Supported EDID Features

The parser extracts:
  • Video modes: Resolution, refresh rates (including fractional rates like 59.94Hz)
  • HDR metadata: Static metadata type 1 (SMPTE ST.2086)
  • Color capabilities: Primaries, white point, gamma, color spaces
  • Display limits: Min/max refresh rates, pixel clock limits

Included EDID Files

Sample EDID files in EDID/ directory:
  • 8K240HzHDR.edid - 8K 240Hz HDR reference
  • lolhero_edid.bin - Gaming monitor profile
  • digihome_edid.bin - Home theater display

Parsing EDID to XML

Use the EDID parser tool (edid_parser.txt:719-1001):
# Parse EDID binary to XML profile
EDIDParseDL.exe 8K240HzHDR.edid
This generates monitor_profile.xml with extracted capabilities.

Fractional Refresh Rates

EDID profiles support fractional refresh rates using the multiplier system:
<MonitorMode>
  <Width>1920</Width>
  <Height>1080</Height>
  <RefreshRate>59.940</RefreshRate>
  <RefreshRateMultiplier>999</RefreshRateMultiplier>
  <NominalRefreshRate>60</NominalRefreshRate>
</MonitorMode>
Multiplier values:
  • 1000 = Exact rate (60.000 Hz)
  • 999 = NTSC rate (59.94 Hz = 60 × 999/1000)
See Floating-Point Refresh Rates for details.

Custom EDID Binary Files

To use raw EDID binary files instead of XML profiles:
<edid>
  <CustomEdid>true</CustomEdid>
  <PreventSpoof>false</PreventSpoof>
  <EdidCeaOverride>false</EdidCeaOverride>
</edid>
Place user_edid.bin in C:\VirtualDisplayDriver\. The driver will load this binary EDID directly.
CustomEdid
boolean
default:"false"
Load user_edid.bin binary EDID file instead of generating EDID from configuration.
PreventSpoof
boolean
default:"false"
Prevent manufacturer ID spoofing when using custom EDID files.
EdidCeaOverride
boolean
default:"false"
Override CEA extension block in generated EDID with custom data.

Auto Resolution Management

When EDID integration is enabled, configure automatic resolution management:
<auto_resolutions>
  <enabled>true</enabled>
  <source_priority>combined</source_priority>
  <edid_mode_filtering>
    <min_refresh_rate>24</min_refresh_rate>
    <max_refresh_rate>240</max_refresh_rate>
    <exclude_fractional_rates>false</exclude_fractional_rates>
    <min_resolution_width>640</min_resolution_width>
    <min_resolution_height>480</min_resolution_height>
    <max_resolution_width>7680</max_resolution_width>
    <max_resolution_height>4320</max_resolution_height>
  </edid_mode_filtering>
  <preferred_mode>
    <use_edid_preferred>true</use_edid_preferred>
    <fallback_width>1920</fallback_width>
    <fallback_height>1080</fallback_height>
    <fallback_refresh>60</fallback_refresh>
  </preferred_mode>
</auto_resolutions>

Source Priority Modes

source_priority
enum
default:"manual"
Controls which resolution list is used:
  • manual: Use only manual resolutions from vdd_settings.xml
  • edid: Use only resolutions from EDID profile
  • combined: Merge both lists (removes duplicates)

EDID Parsing Implementation

The parser (edid_parser.txt) supports:

Base EDID (128 bytes)

  • Established timings (bytes 35-37)
  • Standard timings (bytes 38-53)
  • Detailed timing descriptors (bytes 54-125)
  • Chromaticity coordinates (bytes 25-34)
  • Display range limits

CEA Extension Blocks

  • Video Data Block: VIC (Video Identification Code) modes
  • Vendor Specific Data Block: HDMI/DisplayPort capabilities
  • Extended Tag Block 0x06: HDR Static Metadata
  • Extended Tag Block 0x07: HDR Dynamic Metadata
  • Extended Tag Block 0x05: Colorimetry Data

HDR Detection

The parser detects HDR support from:
// EOTF (Electro-Optical Transfer Function) support
if (eotf_support & 0x04) {  // SMPTE ST2084 (PQ)
    hdr_metadata.hdr10_supported = true;
}
if (eotf_support & 0x08) {  // Hybrid Log-Gamma
    // HLG support detected
}
See edid_parser.txt:618-677 for HDR parsing logic.

Configuration Examples

EDID-Only Configuration

<edid_integration>
  <enabled>true</enabled>
  <auto_configure_from_edid>true</auto_configure_from_edid>
  <override_manual_settings>true</override_manual_settings>
</edid_integration>

<auto_resolutions>
  <enabled>true</enabled>
  <source_priority>edid</source_priority>
</auto_resolutions>

Hybrid Configuration (Manual + EDID)

<edid_integration>
  <enabled>true</enabled>
  <auto_configure_from_edid>true</auto_configure_from_edid>
  <override_manual_settings>false</override_manual_settings>
</edid_integration>

<auto_resolutions>
  <enabled>true</enabled>
  <source_priority>combined</source_priority>
</auto_resolutions>

Safe Fallback Configuration

<edid_integration>
  <enabled>true</enabled>
  <auto_configure_from_edid>true</auto_configure_from_edid>
  <fallback_on_error>true</fallback_on_error>
</edid_integration>

<auto_resolutions>
  <preferred_mode>
    <use_edid_preferred>false</use_edid_preferred>
    <fallback_width>1920</fallback_width>
    <fallback_height>1080</fallback_height>
  </preferred_mode>
</auto_resolutions>
The driver limits mode lists to 32 modes for optimal performance (Driver.cpp:1104-1110). Enable filtering to prevent mode list overflow.

Validation and Debugging

Enable detailed logging to verify EDID loading:
<logging>
  <logging>true</logging>
  <debuglogging>true</debuglogging>
</logging>
Log output shows:
[INFO] EDID Profile loaded: 24 modes, HDR10: Yes, Color space: Rec.2020
[INFO] Enhanced mode management completed:
  Original manual modes: 3
  Generated EDID modes: 24
  Final optimized modes: 27
  Preferred mode: 3840x2160@60Hz

Build docs developers (and LLMs) love