Windows 图形显示驱动开发-WDDM 2.0功能_IoMmu 模型

概述

输入输出内存管理单元 (IOMMU) 是一个硬件组件,它将支持具有 DMA 功能的 I/O 总线连接到系统内存。 它将设备可见的虚拟地址映射到物理地址,使其在虚拟化中很有用。

在 WDDM 2.0 IoMmu 模型中,每个进程都有一个虚拟地址空间,即:

  • 在 CPU 和 GPU 之间共享。
  • 由 OS 内存管理器管理。

为了访问内存,GPU 向兼容的 IOMMU 发送数据请求。 该请求包括一个共享虚拟地址和一个进程地址空间标识符 (PASID)。 IOMMU 使用共享页表执行地址转换。 下图说明了此操作。

内核模式显示驱动程序 (KMD) 通过设置DXGK_VIDMMCAPS::IoMmuSupported 上限来表示对 IoMmu 模型的支持。 设置此标志后,视频内存管理器 (VidMm) 会自动将 GPU 与 IOMMU 一起使用的任何进程注册,并获取该进程地址空间的 PASID。 PASID 在创建设备期间传递给驱动程序。

VidMm 在显示之前将主要分配映射到光圈段,确保显示控制器具有对这些分配的物理访问权限。

在 IoMmu 模型中,用户模式显示驱动程序 (UMD) 继续使用 VidMm 的 Allocate 服务为 GPU 分配视频内存。 此过程允许 UMD:

  • 遵循驻留模型。
  • 支持 DirectX 资源共享模型。
  • 确保主图面对内核可见,并在显示之前映射到光圈。

UMD 在用户模式下完全管理第一级转换(磁贴资源地址到共享 CPU/GPU 地址)

DXGK_VIDMMCAPS

复制代码
typedef struct _DXGK_VIDMMCAPS {
  union {
    struct {
      UINT OutOfOrderLock : 1;
      UINT DedicatedPagingEngine : 1;
      UINT PagingEngineCanSwizzle : 1;
      UINT SectionBackedPrimary : 1;
      UINT CrossAdapterResource : 1;
      UINT VirtualAddressingSupported : 1;
      UINT GpuMmuSupported : 1;
      UINT IoMmuSupported : 1;
      UINT ReplicateGdiContent : 1;
      UINT NonCpuVisiblePrimary : 1;
      UINT ParavirtualizationSupported : 1;
      UINT IoMmuSecureModeSupported : 1;
      UINT DisableSelfRefreshVRAMInS3 : 1;
      UINT IoMmuSecureModeRequired : 1;
      UINT MapAperture2Supported : 1;
      UINT CrossAdapterResourceTexture : 1;
      UINT CrossAdapterResourceScanout : 1;
      UINT AlwaysPoweredVRAM : 1;
#if ...
      UINT Reserved : 14;
#elif
      UINT Reserved : 15;
#elif
      UINT Reserved : 18;
#elif
      UINT Reserved : 19;
#elif
      UINT Reserved : 21;
#elif
      UINT Reserved : 22;
#elif
      UINT Reserved : 27;
#elif
      UINT Reserved : 28;
#else
      UINT Reserved : 31;
#endif
    };
    UINT Value;
  };
  UINT  PagingNode;
} DXGK_VIDMMCAPS;

结构标识内核模式显示微型端口驱动程序(KMD)支持的视频内存管理功能。

相关推荐
Jaixln_HRF2 天前
率能SS8837T 单通道1.8A/12V H桥电机驱动芯片,低功耗睡眠模式120nA,用于摄像机/玩具/机器人
驱动开发·嵌入式硬件·机器人·硬件工程
bingcheby2 天前
PS通过AXI总线控制PL的LED灯实验之四---编程下载调试
驱动开发·fpga开发·iar
xu_wenming2 天前
嵌入式软件架构中的6种解耦艺术
c语言·驱动开发·嵌入式硬件·架构
DevHub3 天前
CANopen 教程:STM32 实现 CANopen 从站,3 个回调替代手写对象字典
c语言·驱动开发·stm32·单片机·嵌入式硬件·mcu
Jaixln_HRF3 天前
率能SS6216 单通道1.4A/7.2V直流电机驱动芯片,支持正反转/停止/刹车,用于玩具/智能锁/车载夹
驱动开发·嵌入式硬件·硬件工程
sukalot3 天前
windows 驱动实例分析系列: wireguard-nt驱动分析-driver篇(一)
windows·驱动开发
沫璃染墨3 天前
《从零入门Linux系统篇(二十九):文件篇·二——深入文件描述符:从文件描述符表到重定向,再到Shell实现》
linux·运维·服务器·c++·驱动开发·系统架构
Jaixln_HRF3 天前
率能SS6635E 单通道4.5A/30V直流电机驱动芯片,高压大电流,用于电子锁/玩具/机器人
驱动开发·嵌入式硬件·机器人·硬件工程
Jaixln_HRF3 天前
率能SS6623E 单通道4.3A/20V直流电机驱动芯片,超低导通电阻110mΩ,用于电子锁/玩具/机器人
驱动开发·嵌入式硬件·机器人·硬件工程
又见情义4 天前
RK3568 Android 13 移植 EC20-CE 4G 模块全记录
android·arm开发·驱动开发