此过程从 Windows 8.1 开始用于验证显示适配器混合系统的配置:
- 当系统启动时,其中一个显示适配器被标记为当前 POST 适配器。 如果此 POST 适配器支持 Windows 显示驱动程序模型 (WDDM) 1.3 并且具有集成显示面板,则它被视为 集成混合 适配器。
- 混合系统中的离散适配器被视为 混合离散 适配器。 条件为:
- 设置 DXGK_DRIVERCAPS。HybridDiscrete 成员。
- 支持 WDDM 1.3。
- 支持跨适配器资源。
- 没有显示输出。
- 系统只允许使用一个 WDDM 混合离散适配器。
- 检测到集成混合适配器时:
- 任何新的 WDDM 1.3 显示适配器 (不包括与 (2) 或 (3) 匹配的适配器,或者是基本显示器或基本呈现驱动程序) 将不会加载。
- 任何加载的 WDDM 1.3 显示适配器 (不包括与 (2) 或 (3) 匹配的适配器,或者不是混合离散适配器的基本显示或基本呈现驱动程序) 都将停止。
- 即使存在集成的混合适配器,也允许加载支持 1.3 之前的 WDDM 版本的驱动程序。
一、适配器类型判定流程
graph TD
A[系统启动] --> B[识别POST适配器]
B --> C{支持WDDM1.3且带集成面板?}
C -->|是| D[标记为集成混合适配器]
C -->|否| E[检查其他适配器]
E --> F{满足混合离散条件?}
F -->|是| G[标记为混合离散适配器]
F -->|否| H[按普通适配器处理]
二、驱动能力声明要求
2.1 集成适配器驱动配置
// 在DxgkDdiQueryAdapterInfo中设置
DXGK_DRIVERCAPS caps = {0};
caps.HybridIntegrated = TRUE; // 必须声明
caps.CrossAdapterResources = TRUE;
2.2 离散适配器驱动配置
DXGK_DRIVERCAPS caps = {0};
caps.HybridDiscrete = TRUE; // 关键标志
caps.WDDMVersion = DXGKDDI_WDDMv1_3;
caps.NoDisplayOutput = TRUE; // 必须无显示输出
三、系统加载规则
3.1 适配器过滤矩阵
适配器类型 | WDDM 1.3支持 | 允许加载 | 备注 |
---|---|---|---|
集成混合适配器 | 是 | 是 | 必须带显示输出 |
混合离散适配器 | 是 | 是 | 仅限1个 |
普通WDDM 1.3适配器 | 是 | 否 | 检测到集成适配器时拒绝 |
WDDM 1.2及以下适配器 | 否 | 是 | 兼容模式运行 |
3.2 资源共享要求
// 离散适配器必须实现
NTSTATUS DxgkDdiOpenCrossAdapterResource(
_In_ CONST HANDLE hAdapter,
_Inout_ DXGKARG_OPENCROSSADAPTERRESOURCE* pArgs)
{
// 必须支持至少以下格式
if (!IsSupportedFormat(pArgs->Format)) {
return STATUS_GRAPHICS_UNSUPPORTED_PIXELFORMAT;
}
return STATUS_SUCCESS;
}
四、验证流程
4.1 启动时检查
# PowerShell验证命令
Get-WmiObject Win32_VideoController |
Where-Object { $_.PNPDeviceID -like "PCI*" } |
Select-Object Name, @{N="HybridType";E={
if ($_.Caption -match "Integrated") { "Integrated" }
elseif ($_.AdapterDACType -eq "Internal") { "Discrete" }
else { "Standard" }
}}
4.2 运行时验证
// 驱动内检查混合状态
BOOL IsRunningInHybridMode() {
DXGK_ADAPTER_INFO info = {0};
info.Version = DXGK_ADAPTER_INFO_VERSION_2;
DxgkDdiQueryAdapterInfo(hAdapter, &info);
return info.HybridSystem;
}
五、调试支持
5.1 WinDbg扩展命令
!dxgkd.hybridinfo // 显示混合适配器状态
!adapterlist // 列出所有适配器属性
5.2 ETW事件追踪
EventWriteHYBRID_SYSTEM_DETECTED(
bIntegratedPresent,
bDiscretePresent,
dwActiveAdapterCount);
六、错误处理
6.1 常见错误码
错误代码 | 触发条件 | 恢复建议 |
---|---|---|
STATUS_GRAPHICS_HYBRID_MODE_CONFLICT | 检测到多个离散适配器 | 禁用非认证适配器 |
STATUS_GRAPHICS_INVALID_DRIVER_MODEL | WDDM版本不匹配 | 更新驱动至1.3版本 |
七、版本演进
Windows版本 | 新增要求 |
---|---|
8.1 | 基础混合架构支持 |
10 (1709) | 增加DXGK_HYBRID_DLIST_SUPPORT标志 |
11 (22H2) | 要求WDDM 2.0+驱动 |