I have been working on the long-standing white-screen problem affecting newer AMD APUs with the legacy Windows 7 display driver.
I now have a working fix on Lucienne / Ryzen 5 5500U, including Aero/DWM.
Verified hardware
-
Lenovo Xiaoxin Air 14ALC 2021 / 82LM
-
AMD Ryzen 5 5500U / Lucienne
-
PCI\VEN_1002&DEV_164C&REV_C2 -
Windows 7 SP1 x64
-
1920×1080 internal eDP panel
-
AMD KMD
27.20.20911.1001
Working:
-
AMD Radeon Graphics loads normally
-
native internal-panel output
-
hardware cursor
-
hardware-accelerated desktop
-
Aero / DWM composition
-
normal driver mode
-
no Test Mode required
The white-screen problem
This is not an INF/device-ID issue.
With the unmodified legacy Windows 7 KMD, the GPU initializes and the hardware cursor remains visible, but the primary desktop becomes completely white.
Runtime analysis showed that the GPU was actually rendering valid desktop pixels into the primary backing store.
So the failure was not in GFX rendering.
The failure was in the final primary-plane scanout path.
For the affected primary allocations, the original KMD exposed:
SupportedReadSegmentSet = 0x4
SupportedWriteSegmentSet = 0x4
This forces Windows VidMm to use segment 3, the aperture/GART path.
On the tested Lucienne system, the GPU can render into this allocation, but the display engine does not correctly scan out the primary image from the coordinate submitted by the legacy Windows 7 driver.
Result:
GDI / DWM
|
v
Primary surface
|
v
Segment 3 / aperture-GART
|
+--> GPU rendering works
|
+--> primary scanout fails
-> white screen
Fix
The patch intercepts the result of DxgkDdiCreateAllocation.
For primary-sized allocations matching the affected segment semantics, it changes the segment policy to:
PreferredSegment = 1
SupportedReadSegmentSet = 0x5
SupportedWriteSegmentSet = 0x5
Segment 1 is CPU-visible local memory.
Segment 3 is not removed; it remains available as fallback.
After the change:
GDI / DWM
|
v
Primary surface
|
v
Segment 1 / local memory
|
+--> GPU rendering works
|
+--> primary scanout works
-> visible desktop
Aero / DWM
The first working patch only matched the basic desktop primary size (0x870000).
That restored the normal desktop, but enabling Aero caused the white screen to return.
Tracing showed that DWM creates slightly different primary scanout allocations (0x880000).
The final version therefore identifies the relevant allocations by size range and segment capabilities instead of matching one exact allocation size.
With the current patch, Aero works and DWM alternates its primary surfaces between local-segment addresses such as:
0xF400000000
0xF400880000
SetVidPnSourceAddress then continuously submits the local-memory surfaces and the display remains stable.
Internal eDP panel
There is also a separate small patch related to internal-panel takeover.
On the tested laptop, a legacy display cleanup routine could shut down the firmware-established eDP state before the old KMD established a working replacement.
The release build preserves that firmware display state during takeover.
This is separate from the segment-selection fix:
-
eDP-state patch: prevents the panel from being unnecessarily shut down
-
allocation patch: fixes the white primary scanout
Download / source / technical details
GitHub:
https://github.com/hrx114514x/win7-amd-apu-scanout-fix
Thanks to CanonKong for helping with the signed normal-mode driver build.
Edit by Fernando: Thread title shortened




