Pokyny k implementaci ovladačů v režimu jádra MCDM

Tento článek obsahuje pokyny k zápisu části ovladače v režimu jádra (KMD) ovladače Microsoft Compute Only Driver (MCDM), který se označuje také jako ovladač jen pro výpočty.

Projděte si také následující články:

Soubor INF ovladače

Zařízení MCDM patří do třídy ComputeAccelerator , která musí být zadána v souboru INF ovladače:

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

Inicializace ovladačů

Ovladač MCDM musí zadat funkci DriverEntry , která provádí následující kroky:

Požadavky na podporu funkce ovladače

Ovladač MCDM zveřejňuje funkce, které implementuje ve struktuře DRIVER_INITIALIZATION_DATA .

Minimální požadovaná podpora

Ovladač MCDM musí minimálně zadat následující funkce rozhraní ovladače zařízení (DDI):

Podpora apertury hostitele CPU

Pokud je podporováno využití hostitele procesoru, musí být k dispozici také ukazatele na následující funkce:

Další informace najdete v tématu Clona hostitele CPU.

Podpora fyzického adresování

Pokud se používá fyzické adresování, musí být k dispozici také ukazatele na následující funkce:

Podpora virtuálních adres GPU

Pokud se používá virtuální adresování GPU, musí být k dispozici také ukazatele na následující funkce:

Podpora izolace IoMmu

Pokud je podporována izolace IoMmu, musí být k dispozici také ukazatele na následující funkce:

Pro podporu volitelného adaptéru propojení musí být také uveden ukazatel na následující funkci:

Podpora řízení spotřeby

Pro volitelnou podporu řízení spotřeby musí být k dispozici také ukazatele na následující funkce:

Podpora řízení spotřeby je vyžadována v moderních pohotovostních nebo připojených pohotovostních systémech.

Další informace najdete v tématu Řízení spotřeby GPU nečinných stavů a aktivního výkonu.

Podpora odebrání překvapení

Pro volitelnou podporu náhlého odstranění musí být uvedeny také ukazatele na následující funkce:

Zrušení podpory

Pro volitelnou podporu zrušení je nutné zadat také ukazatele na následující funkce:

Podpora rozhraní

Pro volitelnou podporu rozhraní musí být k dispozici také ukazatele na následující funkce:

Podpora plánování hardwaru

Pro volitelnou podporu plánování hardwaru je třeba zadat také ukazatele na následující funkce:

Podpora updateAllocationProperty

Pro volitelnou podporu UpdateAllocationProperty je třeba zadat také ukazatele na následující funkce:

Podpora escape sekvencí

Pro volitelnou podporu escape sekvencí je nutné také poskytnout ukazatele na následující funkce:

Podpora trasování událostí pro Windows

Pro volitelnou podporu ETW musí být také poskytnuty ukazatele na následující funkce:

Podpora podřízených zařízení

Pro volitelnou podporu podřízených zařízení je potřeba zadat také ukazatele na následující funkce:

Podpora hlášení spotřeby energie

Pro volitelnou podporu hlášení spotřeby energie musí být uvedeny také ukazatele na následující funkce:

Ověření odeslání příkazu

V případě volitelného ověření odeslání příkazu je nutné zadat také ukazatele na následující funkce:

Podpora IOCTL

Pro volitelnou podporu IOCTL lze zadat ukazatel na následující funkci:

DxgkDdiDispatchIoRequest

Zakázané funkce

V ovladači MCDM nesmí být k dispozici následující DDI:

  • 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

Funkce WDDM 1.x

Následující funkce se používají pouze pro ovladače WDDM 1.x:

  • DxgkDdiQueryDiagnosticTypesSupport
  • DxgkDdiQueryVidPnHWCapability
  • DxgkDdiRecommendFunctionalVidPn
  • DxgkDdiRecommendMonitorModes
  • DxgkDdiRecommendVidPnTopology
  • DxgkDdiReleaseSwizzlingRange
  • DxgkDdiRenderGdi
  • DxgkDdiRenderKm
  • DxgkDdiSetDisplayPrivateDriverFormat
  • DxgkDdiSetPalette
  • DxgkDdiSetPointerPosition
  • DxgkDdiSetPointerShape
  • DxgkDdiSetPowerPState (ovladač by neměl hlásit žádné komponenty napájení specifické pro P-state)
  • DxgkDdiSetTargetAdjustedColorimetry
  • DxgkDdiSetTargetAdjustedColorimetry2
  • DxgkDdiSetTargetAnalogCopyProtection
  • DxgkDdiSetTargetContentType
  • DxgkDdiSetTargetGamma
  • DxgkDdiSetTimingsFromVidPn
  • DxgkDdiSetVideoProtectedRegion
  • DxgkDdiSetVidPnSourceAddress
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
  • DxgkDdiSetVidPnSourceVisibility
  • DxgkDdiStopCapture
  • DxgkDdiStopDeviceAndReleasePostDisplayOwnership
  • DxgkDdiSubmitRender
  • DxgkDdiSystemDisplayEnable
  • DxgkDdiSystemDisplayWrite
  • DxgkDdiUpdateActiveVidPnPresentPath
  • DxgkDdiUpdateMonitorLinkInfo
  • DxgkDdiUpdateOverlay

Požadavky na dotazování informací o adaptéru

Jak jsme uvedli dříve, ovladač jen pro výpočty musí podporovat DxgkDdiQueryAdapterInfo.

Musí být podporovány následující typy DXGK_QUERYADAPTERINFOTYPE :

Podpora následujících typů DXGK_QUERYADAPTERINFOTYPE je volitelná:

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

Pokud byla hlášena jedna nebo více neplatných bloků paměti, musí být podporován následující DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_SEGMENTMEMORYSTATE

Pokud se podporuje GPUVA, musí být podporovány následující DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_GPUMMUCAPS
  • DXGKQAITYPE_PAGETABLELEVELDESC

Pokud je počet hlášených komponent napájení větší než nula, musí být podporován následující DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_POWERCOMPONENTINFO

Pokud je nastavený limit IoMmuSecureModeSupported , musí být podporován následující DXGK_QUERYADAPTERINFOTYPE:

  • DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • DXGKQAITYPE_HARDWARERESERVEDRANGES

Následující DXGK_QUERYADAPTERINFOTYPE se nesmí podporovat:

  • 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

Požadavky na možnosti řidiče

Následující členy struktury DXGK_DRIVERCAPS musí být nastaveny na odpovídající hodnoty:

Člen Poznámky
NejvyššíPřijatelnáAdresa Pokud je tato adresa menší než nejvyšší fyzická adresa systémové paměti, která je přítomna během načítání ovladače, zatížení selže.
ČísloPřerušovacíZprávy Nastavte podle potřeby.
SchedulingCaps Viz požadavky SchedulingCaps.
MemoryManagementCaps Viz požadavky MemoryManagementCaps.
GpuEngineTopology Nastavte NbAsymetricProcessingNodes na počet podporovaných GPU motorů.
WDDMVersion Musí být nastavená na DXGKDDI_WDDMv2_6 nebo novější.
PreemptionCaps Nastavte graphicsPreemptionGranularity odpovídajícím způsobem na úroveň podporovanou hardwarem. Minimálně byste se měli pokusit podporovat předběžné zastavení na úrovni paketů pro přerušení zpracovávání paketů, které jsou naplánovány, ale ještě nebyly zahájeny. Nastavte ComputePreemptionGranularity na cokoli jiného než D3DKMDT_COMPUTE_PREEMPTION_NONE.
Podpora pro engine TDR Musí být nastavena na hodnotu PRAVDA. Podívejte se na změny TDR ve Windows 8 a novějších verzích.
SupportRuntimePowerManagement Nastavte podle potřeby. Viz řízení spotřeby GPU nečinných stavů a aktivního výkonu.
PodporaNečekanéhoOdstraněníVRežimuHibernace Pokud ovladač podporuje odstranění překvapení při hibernaci, nastavte na hodnotu TRUE; v opačném případě je nastaveno podle potřeby. Viz DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
HybridDiscrete Musí být nastaveno na false.
HybridIntegrated Musí být nastavená na HODNOTU FALSE.
InterníRozsahVirtuálníAdresyGrafickéhoProcesoruZačátek Nastavte podle potřeby. Pokud se GpuVA nepodporuje, nastavte na nulu. Pokud se podporuje GpuVA, tato hodnota určuje začátek rozsahu VA, který operační systém použije při přidělování interních prostředků pro interní použití operačního systému.
KonecVnitřníhoRozsahuVirtuálníchAdresGpu Nastavte podle potřeby. Pokud se GpuVA nepodporuje, nastavte na nulu. Pokud se podporuje GpuVA, tato hodnota určuje konec rozsahu VA, který bude operační systém používat při přidělování interních prostředků pro interní použití operačního systému. Pokud jsou počáteční i koncové hodnoty nulové, operační systém použije celý dostupný rozsah VA.
PodporaSurpriseRemoval Nastavte podle potřeby. Pokud ovladač podporuje odstranění překvapení i mimo hibernaci, nastavte na hodnotu TRUE. Viz DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
ComputeOnly Musí být nastavena na hodnotu PRAVDA. Tento příznak musí být implementován.

Následující členy struktury DXGK_DRIVERCAPS musí být nastaveny na nulu nebo NEPRAVDA, a to odpovídajícím způsobem:

  • MaxAllocationListSlotId
  • ApertureSegmentCommitLimit
  • MaximálníŠířkaUkazovatele
  • Maximální výška ukazatele
  • PointerCaps
  • PočetSwizzlingRanges
  • MaxOverlays
  • GammaRampCaps
  • ColorTransformCaps (možnosti transformace barev)
  • PresentationCaps
  • MaxQueuedFlipOnVSync
  • FlipCaps
  • SupportNonVGA
  • Podpora hladkého otáčení
  • SupportDirectFlip
  • Podpora vícevrstvého překrytí
  • MaxOverlayPlanes
  • SupportMultiPlaneOverlayImmediateFlip
  • CursorScaledWithMultiPlaneOverlayPlane0
  • HybridAcpiChainingRequired
  • MaxQueuedMultiPlaneOverlayFlipVSync
  • SupportContextlessPresent
  • Odpojitelný

Požadavky na plánovací limity (SchedulingCaps)

Následující DXGK_DRIVERCAPS. Členy struktury SchedulingCaps musí být nastaveny na odpovídající hodnoty:

Člen Poznámky
MultiEngineAware Musí být nastavena na hodnotu PRAVDA. Viz GPU Preemption.
VSyncPowerSaveAware Musí být nastavená na HODNOTU FALSE.
PreemptionAware Musí být nastavena na hodnotu PRAVDA. Viz GPU Preemption.
NoDmaPatching Musí být nastavená na HODNOTU FALSE.
CancelCommandAware Nastavte podle potřeby. Podívejte se na DXGKDDI_CANCELCOMMAND.
No64BitAtomics Nastavte podle potřeby. Viz Monitorování kontextu.
LowIrqlPreemptCommand Nastavte na hodnotu TRUE. Operační systém zavolá na ovladač DxgkDdiPreemptCommand při nízké úrovni IRQL.
HwQueuePacketCap Rezervovaný; nastaveno na nulu.

Požadavky na správu paměti

Následující DXGK_DRIVERCAPS. Členy struktury MemoryManagementCaps musí být nastaveny na odpovídající hodnoty:

Člen Poznámky
OutOfOrderLock Musí být nastaveno na false.
DedicatedPagingEngine Musí být nastavená na HODNOTU FALSE.
PagingEngineCanSwizzle Musí být nastavená na HODNOTU FALSE.
SekcíPodloženýPrimární Musí být nastavená na HODNOTU FALSE.
CrossAdapterResource Nastavte podle potřeby. Viz Použití prostředků křížového adaptéru v hybridním systému.
Virtuální podpora adresování Nastavte podle potřeby. Viz virtuální paměť GPU v WDDM 2.0. Pokud je tento člen nastaven, ovladač musí také nastavit GpuMmuSupported a/nebo IoMmuSupported.
GpuMmuSupported Nastavte podle potřeby. Viz GpuMmu Model.
IoMmuSupported Nastavte podle potřeby. Tento limit se nastaví, když zařízení sdílí stránkovací tabulky s procesorem (sdílenou virtuální pamětí (SVM)). Viz také IoMmu Model.
ReplikovatGdiContent Musí být nastavená na HODNOTU FALSE.
Nepřístupný pro CPU primární Musí být nastavená na HODNOTU FALSE.
Paravirtualizace podporována Ovladače hostitele MCDM, které podporují virtualizaci zařízení prostřednictvím rozhraní dělení GPU (GPU-P s SR-IOV), by toto pole mělo nastavit na FALSE. Všechny ostatní případy (ovladače pro fyzické počítače bez podpory GPU-P nebo hostitelské ovladače vGPU, které jsou vystaveny prostřednictvím GPU-P) by měly toto pole nastavit na hodnotu TRUE.
IoMmuSecureModeSupported Nastavte podle potřeby. Pokud je tento limit nastavený na hodnotu TRUE, ovladač podporuje izolaci IoMmu (zařízení má vyhrazenou stránkovací tabulku pro jednotku IoMmu). Pokud je tento limit nastavený na HODNOTU FALSE, zařízení se nedá použít na "zabezpečených" virtuálních počítačích (Windows Sandbox nebo MDAG).
DisableSelfRefreshVRAMInS3 Nastavte podle potřeby.

Správa paměti

Vyžaduje se virtuální adresování. Podpora fyzického adresování může být v budoucnu povolená.

Zařízení nemusí podporovat paměťovou clonu.

Podporují se pouze lineární segmenty prostoru paměti a lineární segmenty prostorového prostoru .