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

驱动程序功能要求

必须将以下 DXGK_DRIVERCAPS 结构成员设置为适当的值:

|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HighestAcceptableAddress | 如果此地址小于驱动程序加载期间存在的系统内存的最高物理地址,则加载将失败。 |
| |------------------------| | InterruptMessageNumber | | 根据需要设置。 |
| SchedulingCaps | 请参阅 SchedulingCaps 要求。 |
| MemoryManagementCaps | 请参阅 MemoryManagementCaps 要求。 |
| GpuEngineTopology | 将 NbAsymetricProcessingNodes 设置为支持的 GPU 引擎数。 |
| WDDMVersion | |-------------------------------| | 必须设置为 DXGKDDI_WDDMv2_6 或更高版本。 | |
| PreemptionCaps | |----------------------------------------------------------------------------------------------------------------------------------------------------------------| | 将 GraphicsPreemptionGranularity 适当设置为硬件支持的级别。 至少应尝试支持数据包级抢占;即已计划但尚未开始执行的取消排队数据包。 将 ComputePreemptionGranularity 设置为除 D3DKMDT_COMPUTE_PREEMPTION_NONE 以外的任何内容.。 | |
| SupportPerEngineTDR | 必须设置为 TRUE。 |
| SupportRuntimePowerManagement | 根据需要设置.。 |
| SupportSurpriseRemovalInHibernation | 如果驱动程序支持在休眠时意外删除,则设置为 TRUE。 |
| HybridDiscrete | 必须设置为 FALSE。 |
| HybridIntegrated | 必须设置为 FALSE。 |
| InternalGpuVirtualAddressRangeStart | 根据需要设置。 如果不支持 GpuVA,请将 设置为零。 如果支持 GpuVA,则此值指定在分配内部资源供 OS 内部使用时 OS 将使用的 VA 范围的开头。 |
| InternalGpuVirtualAddressRangeEnd | 根据需要设置。 如果不支持 GpuVA,请将 设置为零。 如果支持 GpuVA,则此值指定在分配内部资源供 OS 内部使用时 OS 将使用的 VA 范围的末尾。 如果起始值和结束值均为零,则操作系统将使用整个可用 VA 范围。 |
| SupportSurpriseRemoval | 如果驱动程序即使在休眠之外也支持意外删除,则设置为 TRUE。 |
| ComputeOnly | 必须设置为 TRUE。 必须实现此标志。 |

以下 DXGK_DRIVERCAPS 结构成员必须相应地设置为零或 FALSE:

  • MaxAllocationListSlotId
  • ApertureSegmentCommitLimit
  • MaxPointerWidth
  • MaxPointerHeight
  • PointerCaps
  • NumberOfSwizzlingRanges
  • MaxOverlays
  • GammaRampCaps
  • ColorTransformCaps
  • PresentationCaps
  • MaxQueuedFlipOnVSync
  • FlipCaps
  • SupportNonVGA
  • SupportSmoothRotation
  • SupportDirectFlip
  • SupportMultiPlaneOverlay
  • MaxOverlayPlanes
  • SupportMultiPlaneOverlayImmediateFlip
  • CursorScaledWithMultiPlaneOverlayPlane0
  • HybridAcpiChainingRequired
  • MaxQueuedMultiPlaneOverlayFlipVSync
  • SupportContextlessPresent
  • 可分离电脑

​ SchedulingCaps 要求

以下 DXGK_DRIVERCAPS。SchedulingCaps 结构成员必须设置为适当的值:

  • MultiEngineAware : 必须设置为 TRUE。
  • VSyncPowerSaveAware :必须设置为 FALSE。
  • PreemptionAware : 必须设置为 TRUE
  • NoDmaPatching : 必须设置为 FALSE。
  • CancelCommandAware : 根据需要设置。
  • No64BitAtomics : 根据需要设置。
  • LowIrqlPreemptCommand :设置为 TRUE。 操作系统将在低 IRQL 下调用驱动程序的 DxgkDdiPreemptCommand 。
  • HwQueuePacketCap : 保留,设置为零。

MemoryManagementCaps 要求

以下 DXGK_DRIVERCAPS。MemoryManagementCaps 结构成员必须设置为适当的值:

  • OutOfOrderLock : 必须设置为 FALSE。
  • DedicatedPagingEngine : 必须设置为 FALSE。
  • PagingEngineCanSwizzle : 必须设置为 FALSE。
  • SectionBackedPrimary : 必须设置为 FALSE。
  • CrossAdapterResource : 根据需要设置。
  • VirtualAddressingSupported : 根据需要设置。 如果设置了此成员,驱动程序还必须设置 GpuMmuSupported 和/或 IoMmuSupported。
  • GpuMmuSupported : 根据需要设置。
  • IoMmuSupported : 根据需要设置。 当设备与 CPU 共享页表 (共享虚拟内存 (SVM) ) 时,将设置此上限。
  • ReplicateGdiContent : 必须设置为 FALSE。
  • NonCpuVisiblePrimary : 必须设置为 FALSE。
  • ParavirtualizationSupported : 通过 GPU 分区接口 (GPU-P 和 SR-IOV) 支持设备虚拟化的 MCDM 主机驱动程序应将此字段设置为 FALSE。 所有其他情况下 (没有 GPU-P 支持的物理计算机的驱动程序,或者已通过 GPU-P) 公开的 vGPU 的来宾驱动程序,应将此字段设置为 TRUE。
  • IoMmuSecureModeSupported : 根据需要设置。 如果此上限设置为 TRUE,则驱动程序支持 IoMmu 隔离, (设备具有 IoMmu 单元) 的专用页表。 如果此上限设置为 FALSE,则设备不能在"安全"虚拟机 (Windows 沙盒 或 MDAG) 中使用。
  • DisableSelfRefreshVRAMInS3 : 根据需要设置。

内存管理

需要虚拟寻址。 将来可能会启用物理寻址支持,设备不需要支持内存调节,仅支持 线性内存空间段 和 线性调节空间段 。

相关推荐
逻极6 小时前
AI 规范驱动开发“三剑客”深度对比:Spec-Kit、Kiro 与 OpenSpec 实战指南
人工智能·驱动开发·ai·agent
逻极6 小时前
Claude Code 实战:Spec-Kit、Kiro、OpenSpec 规范驱动开发三剑客
ide·人工智能·驱动开发·ai·自动化
范纹杉想快点毕业1 天前
100道关于STM32的问题解答共十万字回答,适用入门嵌入式软件初级工程师,筑牢基础,技术积累,校招面试。
驱动开发·单片机·嵌入式硬件·fpga开发·硬件工程
进击大厂的小白1 天前
35.linux的定时器使用
驱动开发
winner88812 天前
嵌入式Linux驱动开发全流程:工具协作+核心概念拆解(从入门到理解)
linux·运维·驱动开发
Evan_ZGYF丶2 天前
深入解析CFS虚拟运行时间:Linux公平调度的核心引擎
linux·驱动开发·嵌入式·bsp
leijiwen3 天前
规则优先:AI 时代的规范驱动开发(SDD)新范式
人工智能·驱动开发
Ghost Face...3 天前
PCI总线驱动开发全解析
驱动开发
贝塔实验室3 天前
Altium Designer 6.3 PCB LAYOUT教程(四)
驱动开发·嵌入式硬件·硬件架构·硬件工程·信息与通信·基带工程·pcb工艺
小狗爱吃黄桃罐头4 天前
正点原子【第四期】Linux之驱动开发学习笔记-10.1 Linux 内核定时器实验
linux·驱动开发·学习