Bagikan melalui


Pedoman implementasi driver MCDM KM

Artikel ini menyediakan panduan tentang cara menulis bagian driver mode kernel dari driver Microsoft Compute Only Driver (MCDM), juga disebut sebagai driver khusus komputasi.

Lihat juga artikel berikut ini:

File INF driver

Perangkat MCDM milik kelas ComputeAccelerator , yang perlu ditentukan dalam file INF:

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

Inisialisasi driver

Driver khusus komputasi harus menyediakan fungsi DriverEntry yang melakukan langkah-langkah berikut:

Persyaratan dukungan fungsi driver

Driver khusus komputasi mengekspos fungsi yang diterapkannya dalam struktur DRIVER_INITIALIZATION_DATA .

Dukungan minimum yang diperlukan

Minimal, driver khusus komputasi harus menyediakan fungsi antarmuka driver perangkat (DDI) berikut:

Dukungan aperture host CPU

Jika bukaan host CPU didukung, pointer ke fungsi berikut juga harus disediakan:

Untuk informasi selengkapnya, lihat Bukaan host CPU.

Dukungan alamat fisik

Jika alamat fisik digunakan, penunjuk ke fungsi berikut juga harus disediakan:

Dukungan alamat virtual GPU

Jika alamat virtual GPU digunakan, penunjuk ke fungsi berikut juga harus disediakan:

Dukungan isolasi IoMmu

Jika isolasi IoMmu didukung, pointer ke fungsi berikut juga harus disediakan:

Untuk dukungan adaptor tautan opsional, penunjuk ke fungsi berikut juga harus disediakan:

Dukungan manajemen daya

Untuk dukungan manajemen daya opsional, pointer ke fungsi berikut juga harus disediakan:

CATATAN: dukungan manajemen daya diperlukan pada sistem Siaga Modern atau Siaga Terhubung.

Untuk informasi selengkapnya, lihat Manajemen daya GPU status diam dan daya aktif.

Dukungan penghapusan kejutan

Untuk dukungan penghapusan kejutan opsional, pointer ke fungsi berikut juga harus disediakan:

Batalkan dukungan

Untuk dukungan pembatalan opsional, pointer ke fungsi berikut juga harus disediakan:

Dukungan antarmuka

Untuk dukungan antarmuka opsional, pointer ke fungsi berikut juga harus disediakan:

Dukungan penjadwalan perangkat keras

Untuk dukungan penjadwalan perangkat keras opsional, pointer ke fungsi berikut juga harus disediakan:

Dukungan UpdateAllocationProperty

Untuk dukungan UpdateAllocationProperty opsional, pointer ke fungsi berikut juga harus disediakan:

  • DxgkDdiValidateUpdateAllocationProperty

Dukungan escape

Untuk dukungan escape opsional, pointer ke fungsi berikut juga harus disediakan:

Penelusuran Peristiwa untuk dukungan Windows

Untuk dukungan ETW opsional, pointer ke fungsi berikut juga harus disediakan:

Dukungan perangkat anak

Untuk dukungan perangkat anak opsional, pointer ke fungsi berikut juga harus disediakan:

Dukungan pelaporan konsumsi daya

Untuk dukungan pelaporan konsumsi daya opsional, pointer ke fungsi berikut juga harus disediakan:

Validasi pengiriman perintah

Untuk validasi pengiriman perintah opsional, penunjuk ke fungsi berikut juga harus disediakan:

Dukungan IOCTL

Untuk dukungan IOCTL opsional, pointer ke fungsi berikut dapat disediakan:

DxgkDdiDispatchIoRequest

Fungsi yang dilarang

DDI berikut tidak boleh disediakan dalam driver MCDM:

  • 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

Fungsi WDDM 1.x

Fungsi berikut hanya digunakan untuk driver WDDM 1.x:

  • DxgkDdiQueryDiagnosticTypesSupport
  • DxgkDdiQueryVidPnHWCapability
  • DxgkDdiRecommendFunctionalVidPn
  • DxgkDdiRecommendMonitorModes
  • DxgkDdiRecommendVidPnTopology
  • DxgkDdiReleaseSwizzlingRange
  • DxgkDdiRenderGdi
  • DxgkDdiRenderKm
  • DxgkDdiSetDisplayPrivateDriverFormat
  • DxgkDdiSetPalette
  • DxgkDdiSetPointerPosition
  • DxgkDdiSetPointerShape
  • DxgkDdiSetPowerPState (driver tidak boleh melaporkan komponen daya P-state)
  • DxgkDdiSetTargetAdjustedColorimetry
  • DxgkDdiSetTargetAdjustedColorimetry2
  • DxgkDdiSetTargetAnalogCopyProtection
  • DxgkDdiSetTargetContentType
  • DxgkDdiSetTargetGamma
  • DxgkDdiSetTimingsFromVidPn
  • DxgkDdiSetVideoProtectedRegion
  • DxgkDdiSetVidPnSourceAddress
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
  • DxgkDdiSetVidPnSourceVisibility
  • DxgkDdiStopCapture
  • DxgkDdiStopDeviceAndReleasePostDisplayOwnership
  • DxgkDdiSubmitRender
  • DxgkDdiSystemDisplayEnable
  • DxgkDdiSystemDisplayWrite
  • DxgkDdiUpdateActiveVidPnPresentPath
  • DxgkDdiUpdateMonitorLinkInfo
  • DxgkDdiUpdateOverlay

Persyaratan info adaptor kueri

Seperti yang dinyatakan sebelumnya, driver khusus komputasi harus mendukung DxgkDdiQueryAdapterInfo.

Jenis DXGK_QUERYADAPTERINFOTYPE berikut harus didukung:

Dukungan untuk jenis DXGK_QUERYADAPTERINFOTYPE berikut bersifat opsional:

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

Jika satu atau beberapa blok memori yang tidak valid dilaporkan, DXGK_QUERYADAPTERINFOTYPE berikut harus didukung:

  • DXGKQAITYPE_SEGMENTMEMORYSTATE

Jika GPUVA didukung, DXGK_QUERYADAPTERINFOTYPE berikut harus didukung:

  • DXGKQAITYPE_GPUMMUCAPS
  • DXGKQAITYPE_PAGETABLELEVELDESC

Jika jumlah komponen daya yang dilaporkan lebih besar dari nol, DXGK_QUERYADAPTERINFOTYPE berikut harus didukung:

  • DXGKQAITYPE_POWERCOMPONENTINFO

Jika batas IoMmuSecureModeSupported diatur, DXGK_QUERYADAPTERINFOTYPE berikut harus didukung:

  • DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • DXGKQAITYPE_HARDWARERESERVEDRANGES

DXGK_QUERYADAPTERINFOTYPE berikut ini tidak boleh didukung:

  • 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

Persyaratan kemampuan driver

Anggota struktur DXGK_DRIVERCAPS berikut harus diatur ke nilai yang sesuai:

Anggota Catatan
HighestAcceptableAddress Jika alamat ini kurang dari alamat fisik tertinggi memori sistem yang ada selama beban driver, beban akan gagal.
InterruptMessageNumber Atur sebagaimana mewajarinya.
SchedulingCaps Lihat Persyaratan SchedulingCaps.
MemoryManagementCaps Lihat Persyaratan MemoryManagementCaps.
GpuEngineTopology Atur NbAsymetricProcessingNodes ke jumlah mesin GPU yang didukung.
WDDMVersion Harus diatur ke DXGKDDI_WDDMv2_6 atau yang lebih baru.
PreemptionCaps Atur GraphicsPreemptionGranularity dengan tepat ke tingkat yang didukung oleh perangkat keras. Minimal Anda harus mencoba mendukung preemption tingkat paket; artinya, paket dequeue yang telah dijadwalkan tetapi belum mulai dieksekusi. Atur ComputePreemptionGranularity ke apa pun selain D3DKMDT_COMPUTE_PREEMPTION_NONE.
SupportPerEngineTDR Harus diatur ke TRUE. Lihat Perubahan TDR di Windows 8 dan yang lebih baru.
SupportRuntimePowerManagement Atur sebagaimana mewajarinya. Lihat Manajemen daya GPU status diam dan daya aktif.
SupportSurpriseRemovalInHibernation Atur ke TRUE jika driver mendukung penghapusan mendadak saat dalam hibernasi; jika tidak, tetapkan sebagaimana mewajarinya. Lihat DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
HybridDiscrete Harus diatur ke FALSE.
HybridIntegrated Harus diatur ke FALSE.
InternalGpuVirtualAddressRangeStart Atur sebagaimana mewajarinya. Jika GpuVA tidak didukung, atur ke nol. Jika GpuVA didukung, nilai ini menentukan awal rentang VA yang akan digunakan OS saat mengalokasikan sumber daya internal untuk penggunaan internal OS.
InternalGpuVirtualAddressRangeEnd Atur sebagaimana mewajarinya. Jika GpuVA tidak didukung, atur ke nol. Jika GpuVA didukung, nilai ini menentukan akhir rentang VA yang akan digunakan OS saat mengalokasikan sumber daya internal untuk penggunaan internal OS. Jika nilai awal dan akhir adalah nol, OS akan menggunakan seluruh rentang VA yang tersedia.
SupportSurpriseRemoval Atur sebagaimana mewajarinya. Atur ke TRUE jika driver mendukung penghapusan kejutan bahkan di luar hibernasi. Lihat DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
ComputeOnly Harus diatur ke TRUE. Bendera ini harus diimplementasikan.

Anggota struktur DXGK_DRIVERCAPS berikut harus diatur ke nol atau FALSE, yang sesuai:

  • MaxAllocationListSlotId
  • ApertureSegmentCommitLimit
  • MaxPointerWidth
  • MaxPointerHeight
  • PointerCaps
  • NumberOfSwizzlingRanges
  • MaxOverlays
  • GammaRampCaps
  • ColorTransformCaps
  • PresentationCaps
  • MaxQueuedFlipOnVSync
  • FlipCaps
  • SupportNonVGA
  • SupportSmoothRotation
  • SupportDirectFlip
  • SupportMultiPlaneOverlay
  • MaxOverlayPlanes
  • SupportMultiPlaneOverlayImmediateFlip
  • CursorScaledWithMultiPlaneOverlayPlane0
  • HybridAcpiChainingRequired
  • MaxQueuedMultiPlaneOverlayFlipVSync
  • SupportContextlessPresent
  • Dilepas

Persyaratan SchedulingCaps

Berikut ini DXGK_DRIVERCAPS. Anggota struktur SchedulingCaps harus diatur ke nilai yang sesuai:

Anggota Catatan
MultiEngineAware Harus diatur ke TRUE. Lihat Preemption GPU.
VSyncPowerSaveAware Harus diatur ke FALSE.
PreemptionAware Harus diatur ke TRUE. Lihat Preemption GPU.
NoDmaPatching Harus diatur ke FALSE.
CancelCommandAware Atur sebagaimana mewajarkan. Lihat DXGKDDI_CANCELCOMMAND.
No64BitAtomics Atur sebagaimana mewajarkan. Lihat Pemantauan Konteks.
LowIrqlPreemptCommand Atur ke TRUE. OS akan memanggil DxgkDdiPreemptCommand driver di IRQL rendah.
HwQueuePacketCap Dipesan; atur ke nol.

Persyaratan MemoryManagementCaps

Berikut ini DXGK_DRIVERCAPS. Anggota struktur MemoryManagementCaps harus diatur ke nilai yang sesuai:

Anggota Catatan
OutOfOrderLock Harus diatur ke FALSE.
DedicatedPagingEngine Harus diatur ke FALSE.
PagingEngineCanSwizzle Harus diatur ke FALSE.
SectionBackedPrimary Harus diatur ke FALSE.
CrossAdapterResource Atur sebagaimana mewajarkan. Lihat Menggunakan Sumber Daya Adaptor Silang dalam Sistem Hibrid.
VirtualAddressingSupported Atur sebagaimana mewajarkan. Lihat memori virtual GPU di WDDM 2.0. Jika anggota ini diatur, driver juga harus mengatur GpuMmuSupported dan/atau IoMmuSupported.
GpuMmuSupported Atur sebagaimana mewajarkan. Lihat Model GpuMmu.
IoMmuSupported Atur sebagaimana mewajarkan. Batas ini diatur ketika perangkat berbagi tabel halaman dengan CPU (memori virtual bersama (SVM)). Lihat Model IoMmu.
ReplicateGdiContent Harus diatur ke FALSE.
NonCpuVisiblePrimary Harus diatur ke FALSE.
ParavirtualizationSupported Driver host MCDM yang mendukung virtualisasi perangkat melalui antarmuka partisi GPU (GPU-P dengan SR-IOV) harus mengatur bidang ini ke FALSE. Semua kasus lain (driver untuk komputer fisik tanpa dukungan GPU-P atau driver tamu vGPU yang telah diekspos melalui GPU-P) harus mengatur bidang ini ke TRUE.
IoMmuSecureModeSupported Atur sebagaimana mewajarkan. Jika batas ini diatur TRUE, driver mendukung isolasi IoMmu (perangkat memiliki tabel halaman khusus untuk unit IoMmu). Jika batas ini diatur FALSE, perangkat tidak dapat digunakan di komputer virtual "aman" (Kotak Pasir Windows atau MDAG).
DisableSelfRefreshVRAMInS3 Atur sebagaimana mewajarkan.

Manajemen Memori

Alamat virtual diperlukan. Dukungan alamat fisik mungkin diaktifkan di masa mendatang.

Perangkat tidak diperlukan untuk mendukung bukaan memori.

Hanya segmen ruang memori linier dan segmen ruang bukaan linier yang didukung.