window 显示驱动开发-枚举 GPU 引擎功能(一)

一、引擎功能 设备驱动程序接口 (DDI)

此接口提供指定 GPU 节点的引擎功能:

  • DxgkDdiGetNodeMetadata
  • DXGKARG_GETNODEMETADATA
  • DXGK_ENGINE_TYPE

指向 DxgkDdiGetNodeMetadata 函数的指针由 DRIVER_INITIALIZATION_DATA 结构的 DxgkDdiGetNodeMetadata 成员提供。

1.1 节点-引擎拓扑模型

window 显示驱动开发-枚举 GPU 引擎功能(一)_第1张图片

关键特性:

  1. 节点粒度:每个逻辑节点对应特定任务类型(如3D渲染/视频编解码)
  2. 多适配器聚合:在LDA配置中,节点可跨物理GPU抽象为虚拟单元
  3. 引擎隔离:节点内引擎必须实现相同功能特性集(通过DXGK_ENGINE_TYPE保证)

二、GPU 节点体系结构

系统上的每个显示适配器都有许多不同的引擎可用于计划任务。 每个引擎只分配给一个节点,但如果该节点与多个适配器相关联,则每个节点可能包含多个引擎,例如在链接的显示适配器 (LDA) 配置中,其中多个物理 GPU 链接到形成单个、更快的虚拟 GPUwindow 显示驱动开发-枚举 GPU 引擎功能(一)_第2张图片

不同的节点表示 GPU 的非对称处理核心,而每个节点中的引擎表示跨适配器的对称处理核心。 也就是说,三维节点在多个适配器上只包含相同的三维引擎,并且永远不会包含不同的引擎类型。

由于引擎始终按引擎类型分组到节点中,因此可以根据指定的节点查询引擎类型信息。 DXGK_ENGINE_TYPE 枚举中 列出了显示微型端口驱动程序可以指定的引擎类型。

2.1 元数据获取协议

typedef struct _DXGKARG_GETNODEMETADATA {
    UINT                NodeOrdinal;    // 节点索引
    DXGK_ENGINE_TYPE    EngineType;     // 引擎类型枚举
    wchar_t             FriendlyName[32]; // 可读名称输出
    ULONGLONG           HardwareCaps;   // 能力位掩码
} DXGKARG_GETNODEMETADATA;

引擎类型枚举定义:

枚举值 适用节点类型 必须实现的能力位
DXGK_ENGINE_TYPE_3D 图形渲染节点 CAPS_SHADER_MODEL_5_0+
DXGK_ENGINE_TYPE_VIDEO_DEC 视频解码节点 CAPS_H264_VLD_MAIN
DXGK_ENGINE_TYPE_COPY 数据搬移节点 CAPS_DMA_64BIT

2.2 驱动初始化绑定

// 在DriverEntry中注册回调
DRIVER_INITIALIZATION_DATA InitData = {0};
InitData.DxgkDdiGetNodeMetadata = MyGetNodeMetadata;

三、LDA配置特殊处理

3.1 多GPU节点合并规则

能力集合并:

// 示例:合并两个GPU的3D引擎能力
caps_GpuA = GetCaps(Node0);
caps_GpuB = GetCaps(Node2);
merged_caps = caps_GpuA | caps_GpuB;  // 按位或操作

资源分配策略:

  • 静态划分:按固定比例分配显存带宽(如60%/40%)
  • 动态负载均衡:基于引擎利用率自动迁移任务

3.2 故障隔离机制

引擎故障检测:通过DXGK_ENGINE_STATUS上报

typedef struct _DXGK_ENGINE_STATUS {
    UINT        FaultCode;     // PCIe AER标准错误码
    BOOL        IsRecoverable; // 是否支持热恢复
    LARGE_INTEGER Timestamp;   // 错误发生时间戳
} DXGK_ENGINE_STATUS;

备用节点切换:主节点故障时自动路由到次节点

四、性能优化指南

4.1 引擎亲和性配置

// 在DxgkDdiCreateDevice中设置:
DXGKARG_CREATEDEVICE createArgs = {0};
createArgs.EngineAffinityMask = 0x1;  // 绑定到Node0

4.2 多引擎并行调度

优化场景 推荐模式 预期加速比
视频转码 DEC+ENC双引擎流水线 1.8-2.5x
实时渲染 3D+Compute协同着色 1.3-1.6x
大数据处理 多Copy引擎分块传输 2.0-3.0x

五、调试与验证

5.1 WinDbg扩展命令

!dxgnode 0x1  // 查看节点1详情
!dxgcap -eng  // 列出所有引擎能力

5.2 ETW事件追踪

// 注册引擎性能事件
EventRegisterMicrosoft-Windows-D3D11);

你可能感兴趣的:(windows图形显示驱动开发,驱动开发)