Windows 图形显示驱动开发-WDDM 2.7功能-MCDM KM 驱动程序实现指南(二)

CPU 主机调节支持

如果支持 CPU 主机调节,则还必须提供指向以下函数的指针:

  • DxgkDdiMapCpuHostAperture
  • DxgkDdiUnmapCpuHostAperture

CPU 主机调节

CPU 主机孔径

对于 32 位 OS 离散图形处理单元 (GPU) 不支持可调整大小的 BAR,或者当调整帧缓冲区 BAR 的大小失败时,Windows 显示驱动程序模型 (WDDM) v2 将提供一种替代机制,通过该机制可以有效地访问离散 GPU VRAM。 对于支持可编程 BAR 地址空间的 GPU,WDDM v2 中引入了新的 CPU 主机光圈功能来抽象该功能。

公开 CPU 主机调节时,内核模式驱动程序会为每个支持 CPU 主机调节的段填充新的 DXGK_CPUHOSTAPERTURE 上限结构。 这定义了 CPU 主机调节的大小,这允许驱动程序保留一些 BAR 供内部使用。 页大小与内存段的 GPU 页相同。

然后,内核模式驱动程序公开两个新的设备驱动程序接口, (DDI) 来管理 BAR 地址空间,尤其是 DxgkDdiMapCpuHostAperture 和 DxgkDdiUnmapCpuHostAperture。

CPU 主机光圈后面的页表的内存由驱动程序管理,并在驱动程序初始化期间提前设置。 DxgkDdiMapCpuHostAperture 和 DxgkDdiUnmapCpuHostAperture 预期在段枚举后立即正常运行,并在视频内存管理器初始化期间使用,以在适配器初始化期间将 CPU 虚拟地址映射到系统分页进程的页目录和页表。

当需要 CPU 访问内存段时,视频内存管理器会保留 CPU 主机 Aperture 中的页,并通过它映射内存段页。 下面对此做了演示。

在链接的显示适配器配置中,除以下内容外,内容看起来类似。

  1. 默认 或 LinkMirrored 分配始终映射到 GPU0。
  2. LinkInstanced 分配的虚拟地址范围为 AllocationSize*NumberOfGPUInLink ,这些地址范围与映射到不同 GPU 的分配的各个部分相关联。

下图说明了这一点:

物理寻址支持

如果使用物理寻址,还必须提供指向以下函数的指针:

  • DxgkDdiPatch
  • DxgkDdiRender
  • DxgkDdiSubmitCommand

GPU 虚拟寻址支持

如果使用 GPU 虚拟寻址,还必须提供指向以下函数的指针:

  • DxgkDdiCreateProcess
  • DxgkDdiDestroyProcess
  • DxgkDdiGetRootPageTableSize
  • DxgkDdiSetRootPageTable
  • DxgkDdiSubmitCommandVirtual

IoMmu 隔离支持

如果支持 IoMmu 隔离,还必须提供指向以下函数的指针:

  • DxgkDdiBeginExclusiveAccess
  • DxgkDdiEndExclusiveAccess

链接适配器支持

对于可选的链接适配器支持,还必须提供指向以下函数的指针:

  • DxgkDdiLinkDevice

电源管理支持

对于可选的电源管理支持,还必须提供指向以下函数的指针:

  • DxgkDdiSetPowerComponentFState;如果报告的组件支持 F 状态,则是必需的。
  • DxgkDdiPowerRuntimeControlRequest
  • DxgkDdiPowerRuntimeSetDeviceHandle

注意:新式待机或连接待机系统需要电源管理支持。

空闲状态和活动电源的 GPU 电源管理

GPU 电源管理设备驱动程序接口 (DDI)

这些新的和更新的函数和结构从Windows 8开始可用,以便显示微型端口驱动程序转换电源组件的状态并与 Microsoft DirectX 图形内核子系统通信电源事件。

  • DxgkCbCompleteFStateTransition
  • DxgkCbPowerRuntimeControlRequest
  • DxgkCbSetPowerComponentActive
  • DxgkCbSetPowerComponentIdle
  • DxgkCbSetPowerComponentLatency
  • DxgkCbSetPowerComponentResidency
  • DxgkDdiPowerRuntimeControlRequest
  • DxgkDdiSetPowerComponentFState
  • DXGK_DRIVERCAPS
  • DXGK_POWER_COMPONENT_FLAGS
  • DXGK_POWER_COMPONENT_MAPPING
  • DXGK_POWER_COMPONENT_TYPE
  • DXGK_POWER_RUNTIME_COMPONENT
  • DXGK_QUERYADAPTERINFOTYPE
  • DXGKARG_QUERYADAPTERINFO
  • DXGK_QUERYSEGMENTOUT3

GPU 电源管理方案

GPU 和显示屏幕是笔记本电脑、移动设备和台式电脑中最大的两个电源消耗者。

以下是降低功耗和延长电池使用时间的关键电源管理方案:

  • 移动外形规格设备可以进入空闲状态并省电,因为单个系统组件在不使用时会关闭。
  • 基于芯片 (SoC) 的 Windows 系统设备的行为类似于消费设备和移动电话,即它们在需要时立即打开,从而节省能源。
相关推荐
挨踢程序员(不秃版)7 小时前
横川机器人驱动器导入参数教程
驱动开发
追兮兮8 小时前
基于亚博K210开发板——lvgl 图形化实验
驱动开发·k210
MaoXian_n12 小时前
[ARM][汇编] 02.ARM 汇编常用简单指令
arm开发·驱动开发·单片机·嵌入式硬件
打倒焦虑1 天前
驱动开发学习20250520
驱动开发
sukalot1 天前
window 显示驱动开发-GDI 硬件加速
windows·驱动开发
打倒焦虑1 天前
驱动开发学习20250522
驱动开发
sukalot1 天前
window 显示驱动开发-视频内存供应和回收(一)
驱动开发
__Benco2 天前
OpenHarmony外设驱动使用 (五),Fingerprint_auth
人工智能·驱动开发·harmonyos
AI+程序员在路上2 天前
MIPI摄像头linux驱动开发步骤及说明
linux·c语言·开发语言·驱动开发
sukalot4 天前
window 显示驱动开发-准备 DMA 缓冲区
windows·驱动开发