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 : 根据需要设置。

内存管理

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

相关推荐
程序员JerrySUN7 小时前
驱动开发硬核特训 · Day 21(上篇) 抽象理解 Linux 子系统:内核工程师的视角
java·linux·驱动开发
kuinnebula9 小时前
Linux GPIO驱动开发实战:Poll与异步通知双机制详解
驱动开发
程序员JerrySUN13 小时前
驱动开发硬核特训 │ 深度解析 fixed regulator 驱动与 regulator_ops
驱动开发
Blossom.11814 小时前
可解释人工智能(XAI):让机器决策透明化
人工智能·驱动开发·深度学习·目标检测·机器学习·aigc·硬件架构
Ant?119 小时前
rk3588 驱动开发(三)第五章 新字符设备驱动实验
数据库·驱动开发
程序员JerrySUN1 天前
驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析
linux·开发语言·驱动开发·嵌入式硬件
程序员JerrySUN2 天前
驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架
linux·驱动开发·嵌入式硬件
程序员JerrySUN2 天前
驱动开发硬核特训 · Day 19:字符设备驱动实战(控制 LED)
linux·驱动开发
程序员JerrySUN3 天前
驱动开发硬核特训 · Day 20:深入理解电源管理机制与实战演练
驱动开发
Thomas_YXQ3 天前
Unity3D Lua集成技术指南
java·开发语言·驱动开发·junit·全文检索·lua·unity3d