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 系统设备的行为类似于消费设备和移动电话,即它们在需要时立即打开,从而节省能源。
相关推荐
触角010100013 小时前
MPU6050模块详解:从原理到STM32驱动指南(上) | 零基础入门STM32第八十九步
驱动开发·stm32·单片机·嵌入式硬件·物联网
VermouthSp12 小时前
Linux驱动开发 块设备
linux·驱动开发
sukalot14 小时前
Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十二)
windows·驱动开发
lljss20201 天前
70. Linux驱动开发与裸机开发区别,字符设备驱动开发
linux·驱动开发
光芒Shine2 天前
【Linux-驱动开发-pinctrl子系统】
驱动开发
执念斩长河3 天前
gin学习
驱动开发·学习·gin
少年、潜行4 天前
STM32F103C8T6移植DMP解算MPU9250
驱动开发·stm32·嵌入式硬件
Blasit4 天前
GD32 ISP下载程序(串口烧录)
c语言·驱动开发·单片机·嵌入式硬件·程序人生
王小小海4 天前
【笔记分享】NCS/Zephyr USB MSC实现方法介绍
驱动开发·笔记·单片机·嵌入式