共用方式為


MCDM 核心模式驅動程序實作指導方針

本文提供如何撰寫Microsoft僅限計算驅動程式 (MCDM) 驅動程式核心模式驅動程式 (KMD) 部分的指引,也稱為僅限計算驅動程式。

另請參閱下列文章:

驅動程式 INF 檔案

MCDM 裝置屬於 ComputeAccelerator 類別,該類別必須在驅動程式的 INF 檔案中指定:

[Version]
...
Class=ComputeAccelerator
ClassGuid={F01A9D53-3FF6-48D2-9F97-C8A7004BE10C}
...

驅動程式初始化

MCDM 驅動程式必須提供執行下列步驟的 DriverEntry 函式:

驅動程式支援函式需求

MCDM 驅動程式會公開它在 DRIVER_INITIALIZATION_DATA 結構中實作的函式。

最低必要支援

MCDM 驅動程式至少必須提供下列裝置驅動器介面 (DDI) 函式:

CPU 主機光圈支援

如果支援 CPU 主機光圈,也必須提供下列函式的指標:

如需詳細資訊,請參閱 CPU 主機光圈

實體尋址支援

如果使用實體位址,也必須提供指向下列函式的指標:

GPU 虛擬尋址支援

如果使用 GPU 虛擬尋址,也必須提供下列函式的指標:

IoMmu 隔離支援

如果支援IoMmu隔離,也必須提供下列函式的指標:

如需選擇性連結配接器支援,也必須提供下列函式的指標:

電源管理支援

若要使用選擇性的電源管理支援,還需提供以下函式的指標:

新式待命或連線待命系統上需要電源管理支援。

如需詳細資訊,請參閱 閑置狀態和主動電源的 GPU 電源管理

意外移除支援

如需選擇性的意外移除支援,也必須提供下列函式的指標:

取消支援

欲支援選擇性取消,亦需提供以下函數的指標:

介面支援

如需選擇性介面支援,也必須提供下列函式的指標:

硬體排程支援

如需支援選用的硬體排程,還必須提供下列函式的指標:

UpdateAllocationProperty 支援

如需選擇性 UpdateAllocationProperty 支援,也必須提供下列函式的指標:

逸出支援

如需選擇性逸出支援,也必須提供下列函式的指標:

Windows 事件追蹤支援

如需選擇性 ETW 支援,也必須提供下列函式的指標:

子裝置支援

如需選用的子裝置支援,也必須提供下列函式的指標:

耗電量報告支援

若需支援可選擇的耗電量報告,還必須提供以下功能的指標:

命令提交驗證

針對選擇性的命令提交驗證,也必須提供下列函式的指標:

IOCTL 支援

如需選擇性的 IOCTL 支援,可以提供下列函式的指標:

DxgkDdiDispatchIoRequest

禁止的函式

MCDM 驅動程式中不得提供下列 DIS:

  • DxgkDdiAcquireSwizzlingRange
  • DxgkDdiCheckMultiPlaneOverlaySupport
  • DxgkDdiCheckMultiPlaneOverlaySupport2
  • DxgkDdiCheckMultiPlaneOverlaySupport3
  • DxgkDdiCommitVidPn
  • DxgkDdiControlDiagnosticReporting
  • DxgkDdiControlInterrupt
  • DxgkDdiControlInterrupt2
  • DxgkDdiControlModeBehavior
  • DxgkDdiCreateOverlay
  • DxgkDdiCreatePeriodicFrameNotification
  • DxgkDdiCreateProtectedSession
  • DxgkDdiDestroyOverlay
  • DxgkDdiDestroyPeriodicFrameNotification
  • DxgkDdiDestroyProtectedSession
  • DxgkDdiDisplayDetectControl
  • DxgkDdiEnumVidPnCofuncModality
  • DxgkDdiExchangePreStartInfo
  • DxgkDdiFlipOverlay
  • DxgkDdiGetMultiPlaneOverlayCaps
  • DxgkDdiGetPostCompositionCaps
  • DxgkDdiGetScanLine
  • DxgkDdiIsSupportedVidPn
  • DxgkDdiNotifyAcpiEvent
  • DxgkDdiNotifyFocusPresent
  • DxgkDdiPostMultiPlaneOverlayPresent
  • DxgkDdiPresent
  • DxgkDdiQueryConnectionChange
  • DxgkDdiQueryCurrentFence

WDDM 1.x 函式

下列函式僅適用於 WDDM 1.x 驅動程式:

  • DxgkDdiQueryDiagnosticTypesSupport
  • DxgkDdiQueryVidPnHWCapability
  • DxgkDdiRecommendFunctionalVidPn
  • DxgkDdiRecommendMonitorModes
  • DxgkDdiRecommendVidPnTopology
  • DxgkDdiReleaseSwizzlingRange
  • DxgkDdiRenderGdi
  • DxgkDdiRenderKm
  • DxgkDdiSetDisplayPrivateDriverFormat
  • DxgkDdiSetPalette
  • DxgkDdiSetPointerPosition
  • DxgkDdiSetPointerShape
  • DxgkDdiSetPowerPState (驅動程序不應該報告任何 P 狀態電源元件)
  • DxgkDdi設定目標調整的色度測量
  • DxgkDdiSetTargetAdjustedColorimetry2
  • DxgkDdiSetTargetAnalogCopyProtection
  • DxgkDdiSetTargetContentType
  • DxgkDdiSetTargetGamma
  • DxgkDdiSetTimingsFromVidPn
  • DxgkDdiSetVideoProtectedRegion
  • DxgkDdiSetVidPnSourceAddress
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
  • DxgkDdiSetVidPnSourceVisibility
  • DxgkDdiStopCapture
  • DxgkDdiStopDeviceAndReleasePostDisplayOwnership(停止裝置並釋放後顯示擁有權)
  • DxgkDdiSubmitRender
  • DxgkDdiSystemDisplayEnable
  • DxgkDdiSystemDisplayWrite
  • DxgkDdiUpdateActiveVidPnPresentPath
  • DxgkDdiUpdateMonitorLinkInfo
  • DxgkDdiUpdateOverlay

查詢配接器資訊需求

如先前所述,計算專用驅動程式必須支援 DxgkDdiQueryAdapterInfo

必須支援下列 DXGK_QUERYADAPTERINFOTYPE 類型:

下列DXGK_QUERYADAPTERINFOTYPE類型的支持是選擇性的:

  • DXGK_ADAPTER_PERFDATA
  • DXGK_ADAPTER_PERFDATACAPS
  • DXGKQAITYPE_UMDRIVERPRIVATE
  • DXGKQAITYPE_PHYSICALADAPTERCAPS
  • DXGK_NODE_PERFDATA
  • DXGK_GPUVERSION

如果報告了一或多個無效的記憶體區塊,則必須支援下列DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_SEGMENTMEMORYSTATE

如果支援 GPUVA,則必須支援下列DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_GPUMMUCAPS
  • DXGKQAITYPE_PAGETABLELEVELDESC

如果報告的電源元件數目大於零,則必須支援下列DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_POWERCOMPONENTINFO

如果已設定 IoMmuSecureModeSupported cap,則必須支援下列DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • DXGKQAITYPE_HARDWARERESERVEDRANGES

不得支援下列DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_DEVICE_TYPE_CAPS
  • DXGKQAITYPE_DISPLAY_DRIVERCAPS_EXTENSION
  • DXGKQAITYPE_DISPLAYID_DESCRIPTOR
  • DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR
  • DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2
  • DXGKQAITYPE_POWERCOMPONENTPSTATEINFO
  • DXGKQAITYPE_PREFERREDGPUNODE
  • DXGKQAITYPE_QUERYCOLORIMETRYOVERRIDES
  • DXGKQAITYPE_QUERYSEGMENT
  • DXGKQAITYPE_QUERYSEGMENT2
  • DXGKQAITYPE_QUERYSEGMENT3
  • DXGKQAITYPE_UEFIFRAMEBUFFERRANGES

驅動程式功能需求

下列 DXGK_DRIVERCAPS 結構成員必須設定為適當的值:

會員 註釋
最高可接受位址 如果此位址小於驅動程式載入期間存在之系統記憶體的最高實體位址,則載入會失敗。
中斷訊息號碼 視需要設定。
SchedulingCaps 請參閱 SchedulingCaps 需求
MemoryManagementCaps 請參閱 MemoryManagementCaps 需求
GpuEngineTopology NbAsymetricProcessingNodes 設定為支援的 GPU 引擎數目。
WDDM版本 必須設定為 DXGKDDI_WDDMv2_6 或更新版本。
PreemptionCaps GraphicsPreemptionGranularity 適當地設定為硬體所支援的層級。 您至少應嘗試支援排程但尚未開始執行的封包,進行封包層級的清除佇列先佔。 將 ComputePreemptionGranularity 設定為D3DKMDT_COMPUTE_PREEMPTION_NONE以外的任何專案。
SupportPerEngineTDR 必須設定為TRUE。 請參閱 Windows 8 和更新版本中的 TDR 變更
支援運行時電源管理 視需要設定。 請參閱 閑置狀態和作用中電源的 GPU 電源管理
SupportSurpriseRemovalInHibernation 如果驅動程式在休眠時支援意外移除,則設定為TRUE;否則,請視情況設定。 請參閱 DXGKDDI_NOTIFY_SURPRISE_REMOVAL
HybridDiscrete 必須設定為 FALSE。
HybridIntegrated 必須設定為 FALSE。
InternalGpuVirtualAddressRangeStart 視需要設定。 如果不支援 GpuVA,請將 設定為零。 如果支援 GpuVA,這個值會指定 OS 在配置內部資源供 OS 內部使用時將使用的 VA 範圍的開頭。
InternalGpuVirtualAddressRangeEnd 視需要設定。 如果不支援 GpuVA,請將 設定為零。 如果支援 GpuVA,這個值會指定 OS 在配置內部資源供 OS 內部使用時將使用的 VA 範圍結尾。 如果開始和結束值都是零,則OS會使用整個可用的VA範圍。
SupportSurpriseRemoval 視需要設定。 如果驅動程式即使在休眠之外也支援意外移除,請設定為TRUE。 請參閱 DXGKDDI_NOTIFY_SURPRISE_REMOVAL
ComputeOnly 必須設定為TRUE。 必須實作此旗標。

下列 DXGK_DRIVERCAPS 結構成員必須分別設定為零或 FALSE。

  • MaxAllocationListSlotId
  • 光圈區段提交限制
  • 最大指標寬度
  • 最大指標高度
  • PointerCaps
  • 擺動範圍數量
  • MaxOverlays
  • GammaRampCaps
  • ColorTransformCaps
  • PresentationCaps
  • MaxQueuedFlipOnVSync
  • FlipCaps
  • 支援非VGA設備
  • SupportSmoothRotation
  • SupportDirectFlip
  • SupportMultiPlaneOverlay
  • MaxOverlayPlanes
  • 支援多平面疊加即時翻轉
  • 游標在多平面覆蓋的平面0上縮放
  • 混合Acpi鏈接需求
  • MaxQueuedMultiPlaneOverlayFlipVSync
  • 支援無上下文表示
  • 可卸離

SchedulingCaps 需求

下列 DXGK_DRIVERCAPSSchedulingCaps 結構成員必須設定為適當的值:

會員 註釋
MultiEngineAware 必須設定為TRUE。 請參閱 GPU 先佔
VSyncPowerSaveAware 必須設定為 FALSE。
搶占意識 必須設定為TRUE。 請參閱 GPU 搶占
NoDmaPatching 必須設定為 FALSE。
CancelCommandAware 視需要設定。 請參閱 DXGKDDI_CANCELCOMMAND
No64BitAtomics 視需要設定。 請參閱 內容監視
LowIrqlPreemptCommand 設定為TRUE。 OS 會在低 IRQL 呼叫驅動程式的 DxgkDdiPreemptCommand
HwQueuePacketCap 保留;設定為零。

記憶體管理功能要求

下列 DXGK_DRIVERCAPSMemoryManagementCaps 結構成員必須設定為適當的值:

會員 註釋
OutOfOrderLock 必須設定為 FALSE。
DedicatedPagingEngine 必須設定為 FALSE。
PagingEngineCanSwizzle 必須設定為 FALSE。
章節支持主體 必須設定為 FALSE。
CrossAdapterResource 視需要設定。 請參閱 在混合式系統中使用交叉配接器資源
支援虛擬位址 (VirtualAddressingSupported) 視需要設定。 請參閱 WDDM 2.0 中的 GPU 虛擬記憶體。 如果已設定此成員,驅動程式也必須設定 GpuMmuSupported 和/或 IoMmuSupported。
GpuMmuSupported 視需要設定。 請參閱 GpuMmu 模型
IoMmuSupported 視需要設定。 當裝置與 CPU 共用頁面數據表(共用虛擬記憶體 (SVM)時,會設定此上限。 請參閱 IoMmu模型
ReplicateGdiContent 必須設定為 FALSE。
非CPU可見主要資源 必須設定為 FALSE。
ParavirtualizationSupported 透過 GPU 分割介面支援虛擬化裝置的 MCDM 主機驅動程式(GPU-P 含 SR-IOV),應將此字段設定為 FALSE。 所有其他案例(沒有 GPU-P 支援之實體機器的驅動程式或透過 GPU-P公開之 vCPU 的客體驅動程式)都應該將此字段設定為 TRUE。
IoMmuSecureModeSupported 視需要設定。 如果此上限設定為TRUE,驅動程式支援IoMmu隔離(裝置有IoMmu單元的專用分頁表)。 如果此上限設定為 FALSE,則裝置無法用於「安全」虛擬機(Windows 沙盒或 MDAG)。
關閉S3模式的VRAM自刷新 視需要設定。

記憶體管理

需要虛擬尋址。 未來可能會啟用實體尋址支援。

裝置不需要支援記憶體孔徑。

僅支援 線性記憶體空間區段線性孔徑空間區段