Adreno X1-85 / Snapdragon X Plus: external-monitor tint requires the internal panel in the display topology; GPU mode renders grayscale at very warm settings
-
Two related issues on Windows on ARM. The v4 notes mention workarounds for
Snapdragon (Adreno) external monitor support, so this may be useful — I have
a reasonably well-isolated repro.Setup
- Surface Laptop 7, Snapdragon X Plus, Adreno X1-85
- Windows 11
- f.lux 4.141
- External: Dell U2725QE, a Thunderbolt dock monitor connected directly to
the laptop's TB4 port, so DisplayPort tunneled over Thunderbolt
Issue 1 — external tint requires the internal panel to be enumerated
f.lux tints the external monitor correctly, but only while the internal display is part
of the display topology. Setting the internal panel's brightness to 0 still
works, so the dependency is on the display being enumerated, not on it being
lit. Switching to Win+P > "Second screen only" drops the tint on the external
monitor entirely.Issue 2 — GPU mode renders grayscale instead of warm
At very warm settings with "Use GPU for better quality with very warm colors" enabled, the image goes grayscale rather
than warm. It looks like the per-channel warm scaling is being lost and what
remains is a luminance-only transform.Context that may help narrow it
Windows Night Light and the Windows accessibility colour filters (Win+Ctrl+C
grayscale) both fail completely on this external monitor, in every topology,
with or without the internal panel active. Those go through the driver's
per-output colour transform, so that path is evidently unavailable on the
Adreno's external output.f.lux's GPU mode is the only mechanism that tints this display at all, which
I assume is because it draws pixels rather than requesting a transform from
the driver. That suggests issue 1 is specific to how the overlay is created
or positioned, rather than a platform limitation.Happy to run tests or collect logs. I can also retest with multiplane overlay
disabled (OverlayTestMode=5) if that would help rule out a direct-scanout
bypass in the single-display case.Driver info from f.lux:
Qualcomm Incorporated 31.0.133.1: Qualcomm(R) Adreno(TM) X1-85 GPU (20251109)Surface Panel Driver V2, 291 x 194mm, built 2023
Chromaticities:
R=0.666992 0.315430
G=0.304688 0.656250
B=0.149414 0.057617
W=0.308594 0.324219
sRGB gamut: 100%, AdobeRGB gamut: 72%Dell U2725QE (TBT HDR), 597 x 336mm, built 2025
Chromaticities:
R=0.679688 0.314453
G=0.257813 0.691406
B=0.143555 0.049805
W=0.313477 0.329102
sRGB gamut: 101%, AdobeRGB gamut: 86%Unlimited gamma ramp=1, Internal ramp=0
Monitor 1 on Qualcomm(R) Adreno(TM) X1-85 GPU
Has VCGT profile=0, Gamma Ramp works=1
Profile: Dell_U2725QE_sRGB_v2.icmWindows Build: 26200.9457
-
@hadeutscher thanks - from what we can tell, this hardware simply has no support for color controls for external displays. You have found our workaround, which is to look for "two displays active" and turn on our GPU/fallback mode.
We still have to see if the "clamshell" mode is as easy to detect.
The bad part about this is the adreno drivers still say they fully support color controls, so we cannot detect it the usual way, we had to list the driver name in the app as an exception.