Which OS?
Win11 Pro
Which release?
24H2
Driver Version
latest
Device Specifications
OS: Windows 11 ARM64
Device: Snapdragon X (Adreno X1-45 GPU)
Driver: Virtual Display Driver (latest from this repo)
Architecture: Native ARM64 build
Describe the bug
On Windows 11 ARM (Snapdragon X / Adreno GPU), the Virtual Display Driver successfully creates a display device and monitor, but it is not attached to the desktop.
As a result:
This suggests the display exists but is not promoted to an active desktop output.
Observed Behavior
With Virtual Display Enabled
-
EnumDisplayDevices:
-
❌ EnumDisplayMonitors:
Total monitors: 1
(only primary display)
-
❌ DXGI:
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \\.\DISPLAY1
-
❌ display-info crate:
Key Finding
The virtual display is present but not attached to the desktop.
From EnumDisplayDevices:
-
Primary display:
Flags: 0x5 (attached + active)
-
Virtual display:
Flags: 0x2 (NOT attached to desktop)
This explains why all modern APIs ignore it.
Additional Notes
- Windows Settings UI can show the display
- But it is not treated as an active desktop output
- Issue reproducible consistently on ARM64, but not on x86
Thanks for the great project 👍
Steps to reproduce
No response
Expected behavior
No response
Log File
Here is log Output from my debug program
=== SYSTEM INFO ===
ARCH: aarch64
OS: windows
Pointer Width: 64-bit
=== display-info crate ===
Found 1 displays
#0: DisplayInfo { id: 2776250164, raw_handle: HMONITOR(65537), x: 0, y: 0, width: 1440, height: 810, rotation: 0.0, scale_factor: 2.0, frequency: 120.0, is_primary: true }
Before Adding Virtual Display
Win32: EnumDisplayMonitors
Monitor 1: \.\DISPLAY1
Total monitors: 1
=== Win32: EnumDisplayDevices ===
Adapter 0:
Name: \.\DISPLAY1
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x5
Monitor 0:
Name: \.\DISPLAY1\Monitor0
Desc: Generic PnP Monitor
Flags: 0x3
Adapter 1:
Name: \.\DISPLAY2
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 2:
Name: \.\DISPLAY3
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 3:
Name: \.\DISPLAY4
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 4:
Name: \.\DISPLAY5
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 5:
Name: \.\DISPLAY6
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 6:
Name: \.\DISPLAY7
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 7:
Name: \.\DISPLAY8
Desc: Virtual Display Driver
Flags: 0x0
DXGI
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \.\DISPLAY1
Desktop Coords: left=0 top=0 right=1440 bottom=810
Attached: true
Adapter 1: Qualcomm(R) Adreno(TM) X1-45 GPU
Adapter 2: Microsoft Basic Render Driver
After Adding Virtual Display
=== Win32: EnumDisplayMonitors ===
Monitor 1: \.\DISPLAY1
Total monitors: 1
=== Win32: EnumDisplayDevices ===
Adapter 0:
Name: \.\DISPLAY1
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x5
Monitor 0:
Name: \.\DISPLAY1\Monitor0
Desc: Generic PnP Monitor
Flags: 0x3
Adapter 1:
Name: \.\DISPLAY2
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 2:
Name: \.\DISPLAY3
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 3:
Name: \.\DISPLAY4
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 4:
Name: \.\DISPLAY5
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 5:
Name: \.\DISPLAY6
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 6:
Name: \.\DISPLAY7
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 7:
Name: \.\DISPLAY8
Desc: Virtual Display Driver
Flags: 0x0
Monitor 0:
Name: \.\DISPLAY8\Monitor0
Desc: Generic PnP Monitor
Flags: 0x2
=== DXGI ===
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \.\DISPLAY1
Desktop Coords: left=0 top=0 right=1440 bottom=810
Attached: true
Adapter 1: Qualcomm(R) Adreno(TM) X1-45 GPU
Adapter 2: Microsoft Basic Render Driver
===================== WITH VDD ===================================
C:\Users\nbehn\Downloads>arm_display_test.exe
=== SYSTEM INFO ===
ARCH: aarch64
OS: windows
Pointer Width: 64-bit
=== display-info crate ===
Found 1 displays
#0: DisplayInfo { id: 2776250164, raw_handle: HMONITOR(65537), x: 0, y: 0, width: 1440, height: 810, rotation: 0.0, scale_factor: 2.0, frequency: 120.0, is_primary: true }
====================================================
=== Win32: EnumDisplayMonitors ===
Monitor 1: \.\DISPLAY1
Total monitors: 1
====================================================
=== Win32: EnumDisplayDevices ===
Adapter 0:
Name: \.\DISPLAY1
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x5
Monitor 0:
Name: \.\DISPLAY1\Monitor0
Desc: Generic PnP Monitor
Flags: 0x3
Adapter 1:
Name: \.\DISPLAY2
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 2:
Name: \.\DISPLAY3
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 3:
Name: \.\DISPLAY4
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 4:
Name: \.\DISPLAY5
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 5:
Name: \.\DISPLAY6
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 6:
Name: \.\DISPLAY7
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 7:
Name: \.\DISPLAY8
Desc: Virtual Display Driver
Flags: 0x0
Monitor 0:
Name: \.\DISPLAY8\Monitor0
Desc: Generic PnP Monitor
Flags: 0x2
====================================================
=== DXGI ===
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \.\DISPLAY1
Desktop Coords: left=0 top=0 right=1440 bottom=810
Attached: true
Adapter 1: Qualcomm(R) Adreno(TM) X1-45 GPU
Adapter 2: Microsoft Basic Render Driver
====================================================
Done.
Press 'q' then Enter to exit...
Contact Details
No response
Which OS?
Win11 Pro
Which release?
24H2
Driver Version
latest
Device Specifications
OS: Windows 11 ARM64
Device: Snapdragon X (Adreno X1-45 GPU)
Driver: Virtual Display Driver (latest from this repo)
Architecture: Native ARM64 build
Describe the bug
On Windows 11 ARM (Snapdragon X / Adreno GPU), the Virtual Display Driver successfully creates a display device and monitor, but it is not attached to the desktop.
As a result:
The display does NOT appear in:
EnumDisplayMonitorsIDXGIAdapter::EnumOutputs)display-infoBut it does appear in:
EnumDisplayDevicesThis suggests the display exists but is not promoted to an active desktop output.
Observed Behavior
With Virtual Display Enabled
EnumDisplayDevices:Shows
\\.\DISPLAY8Description:
Virtual Display DriverMonitor present:
❌
EnumDisplayMonitors:❌ DXGI:
❌
display-infocrate:Key Finding
The virtual display is present but not attached to the desktop.
From
EnumDisplayDevices:Primary display:
Virtual display:
This explains why all modern APIs ignore it.
Additional Notes
Thanks for the great project 👍
Steps to reproduce
No response
Expected behavior
No response
Log File
Here is log Output from my debug program
=== SYSTEM INFO ===
ARCH: aarch64
OS: windows
Pointer Width: 64-bit
=== display-info crate ===
Found 1 displays
#0: DisplayInfo { id: 2776250164, raw_handle: HMONITOR(65537), x: 0, y: 0, width: 1440, height: 810, rotation: 0.0, scale_factor: 2.0, frequency: 120.0, is_primary: true }
Before Adding Virtual Display
Win32: EnumDisplayMonitors
Monitor 1: \.\DISPLAY1
Total monitors: 1
=== Win32: EnumDisplayDevices ===
Adapter 0:
Name: \.\DISPLAY1
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x5
Monitor 0:
Name: \.\DISPLAY1\Monitor0
Desc: Generic PnP Monitor
Flags: 0x3
Adapter 1:
Name: \.\DISPLAY2
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 2:
Name: \.\DISPLAY3
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 3:
Name: \.\DISPLAY4
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 4:
Name: \.\DISPLAY5
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 5:
Name: \.\DISPLAY6
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 6:
Name: \.\DISPLAY7
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 7:
Name: \.\DISPLAY8
Desc: Virtual Display Driver
Flags: 0x0
DXGI
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \.\DISPLAY1
Desktop Coords: left=0 top=0 right=1440 bottom=810
Attached: true
Adapter 1: Qualcomm(R) Adreno(TM) X1-45 GPU
Adapter 2: Microsoft Basic Render Driver
After Adding Virtual Display
=== Win32: EnumDisplayMonitors ===
Monitor 1: \.\DISPLAY1
Total monitors: 1
=== Win32: EnumDisplayDevices ===
Adapter 0:
Name: \.\DISPLAY1
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x5
Monitor 0:
Name: \.\DISPLAY1\Monitor0
Desc: Generic PnP Monitor
Flags: 0x3
Adapter 1:
Name: \.\DISPLAY2
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 2:
Name: \.\DISPLAY3
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 3:
Name: \.\DISPLAY4
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 4:
Name: \.\DISPLAY5
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 5:
Name: \.\DISPLAY6
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 6:
Name: \.\DISPLAY7
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 7:
Name: \.\DISPLAY8
Desc: Virtual Display Driver
Flags: 0x0
Monitor 0:
Name: \.\DISPLAY8\Monitor0
Desc: Generic PnP Monitor
Flags: 0x2
=== DXGI ===
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \.\DISPLAY1
Desktop Coords: left=0 top=0 right=1440 bottom=810
Attached: true
Adapter 1: Qualcomm(R) Adreno(TM) X1-45 GPU
Adapter 2: Microsoft Basic Render Driver
===================== WITH VDD ===================================
C:\Users\nbehn\Downloads>arm_display_test.exe
=== SYSTEM INFO ===
ARCH: aarch64
OS: windows
Pointer Width: 64-bit
=== display-info crate ===
Found 1 displays
#0: DisplayInfo { id: 2776250164, raw_handle: HMONITOR(65537), x: 0, y: 0, width: 1440, height: 810, rotation: 0.0, scale_factor: 2.0, frequency: 120.0, is_primary: true }
====================================================
=== Win32: EnumDisplayMonitors ===
Monitor 1: \.\DISPLAY1
Total monitors: 1
====================================================
=== Win32: EnumDisplayDevices ===
Adapter 0:
Name: \.\DISPLAY1
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x5
Monitor 0:
Name: \.\DISPLAY1\Monitor0
Desc: Generic PnP Monitor
Flags: 0x3
Adapter 1:
Name: \.\DISPLAY2
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 2:
Name: \.\DISPLAY3
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 3:
Name: \.\DISPLAY4
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 4:
Name: \.\DISPLAY5
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 5:
Name: \.\DISPLAY6
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 6:
Name: \.\DISPLAY7
Desc: Qualcomm(R) Adreno(TM) X1-45 GPU
Flags: 0x0
Adapter 7:
Name: \.\DISPLAY8
Desc: Virtual Display Driver
Flags: 0x0
Monitor 0:
Name: \.\DISPLAY8\Monitor0
Desc: Generic PnP Monitor
Flags: 0x2
====================================================
=== DXGI ===
Adapter 0: Qualcomm(R) Adreno(TM) X1-45 GPU
Output 0: \.\DISPLAY1
Desktop Coords: left=0 top=0 right=1440 bottom=810
Attached: true
Adapter 1: Qualcomm(R) Adreno(TM) X1-45 GPU
Adapter 2: Microsoft Basic Render Driver
====================================================
Done.
Press 'q' then Enter to exit...
Contact Details
No response