WDDM、HAGS 与 MPO:为什么卡顿不是帧率问题
Windows 显示栈如何合成画面、硬件加速 GPU 调度与多平面叠加改变了什么,以及怎么验证差别。
测试环境Pro (26H2) · 版本号 26300.9457 · x64
E1- 版本号
- 26300.9457
- 版本
- Pro (26H2)
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 概念
三层决定你看到什么,只有一层是游戏:
- WDDM——Windows 显示驱动模型:OS 如何调度 GPU 工作与管理显存。
- 合成——DWM 把所有窗口合成为最终画面。
- 呈现——翻转、叠加还是拷贝:这一帧怎么送到面板。
“卡顿”通常意味着帧节奏坏了,而不是平均帧率下降。平均 120 帧但每隔几秒来一帧 80ms,体感比稳定 90 帧更差。
三个常被混淆的概念
Section titled “三个常被混淆的概念”| 概念 | 是什么 | 改变了什么 |
|---|---|---|
| WDDM 3.x | 驱动模型版本 | 调度、显存管理、功能可用性 |
| HAGS(硬件加速 GPU 调度) | 让 GPU 自己管理命令队列 | 降低 CPU 开销,改变节奏行为 |
| MPO(多平面叠加) | 显示硬件直接合成图层,而不是 DWM 拷贝 | 省电、降延迟,但也是闪烁/卡顿 bug 来源 |
HAGS 与 MPO 是栈的特性,不是“开了就更好”的开关。两者都出现过特定驱动下的 bug,关掉就恢复正常。
MPO 在哪里咬人
Section titled “MPO 在哪里咬人”有 MPO 时,显示控制器可以把视频或游戏窗口直接叠加,而不必让 DWM 把一切合成到一个表面。这省电、降延迟——同时意味着驱动的叠加路径进入了关键路径。
被归因于 MPO 的现象:
- 视频开始播放时闪一下或短暂黑帧;
- 只在浏览器窗口播放视频时卡;
- 光标或覆盖层撕裂;
- 多显示器与单显示器表现不同。
标准诊断方法是在驱动注册表里关闭 MPO(显示适配器类下的厂商键),看现象是否消失。这是诊断,不是永久修复——你会失去省电收益。
看栈在做什么
Section titled “看栈在做什么”Get-CimInstance Win32_VideoController | Select-Object Name,DriverVersion,DriverDate,VideoModeDescriptiondxdiag /t $env:TEMP\dxdiag.txt
Get-Counter '\GPU Engine(*)\Utilization Percentage' -MaxSamples 2dxdiag 会报告驱动模型与各适配器的功能级别。计数器能看出是否有某个进程占满了拷贝引擎——那是合成路径在做不该它做的事的典型信号。
诚实地测量帧节奏
Section titled “诚实地测量帧节奏”要谈卡顿就要帧时间,不是平均值:
- 帧间隔(present interval),不是 fps;
- 99 分位或最差帧时间,不是均值;
- 同一场景、同一设置、同一驱动,多跑几次。
Windows 自带工具在这里很弱。显卡厂商的覆盖层与帧时间捕获工具能给逐帧数据;只显示平均值的工具分不清流畅和卡顿。
什么时候该动设置
Section titled “什么时候该动设置”| 现象 | 先试 |
|---|---|
| 只在窗口内播放视频时卡 | 关 MPO 验证,再查驱动更新 |
| 快显卡但 CPU 占用高 | 开 HAGS(驱动支持的话) |
| 切窗口时黑闪 | MPO/驱动,不是 Windows 设置 |
| 只有一个显示器卡 | 线材/链路带宽,再看 MPO |
| 帧率一直低 | GPU 占用、温度、功耗墙——不是栈 |
一次只改一项,并记下来改了什么。栈里的变量足够多,同时改两项等于什么都没学到。
E1。栈行为有微软文档依据。实验室是虚拟显示适配器,没有 MPO 或 HAGS 路径,未复现卡顿,也不发布帧时间数据。