Delen via


Implementatierichtlijnen voor MCDM-kernelmodusstuurprogramma's

In dit artikel vindt u richtlijnen voor het schrijven van het KMD-gedeelte (kernelmodusstuurprogramma) van een MCDM-stuurprogramma (Microsoft Compute Only Driver), ook wel een alleen-rekenstuurprogramma genoemd.

Zie ook de volgende artikelen:

Driver INF-bestand

MCDM-apparaten behoren tot de klasse ComputeAccelerator , die moet worden opgegeven in het INF-bestand van het stuurprogramma:

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

Initialisatie van stuurprogramma's

Een MCDM-stuurprogramma moet een DriverEntry-functie opgeven die de volgende stappen uitvoert:

Ondersteuningsvereisten voor stuurprogrammafuncties

Een MCDM-stuurprogramma toont de functies die het implementeert in de DRIVER_INITIALIZATION_DATA-structuur .

Minimaal vereiste ondersteuning

Een MCDM-stuurprogramma moet minimaal de volgende DDI-functies (Device Driver Interface) leveren:

Ondersteuning voor CPU-hostaperture

Als de CPU-hostpoort wordt ondersteund, moeten ook verwijzingen naar de volgende functies worden opgegeven:

Zie CPU-hostopening voor meer informatie.

Ondersteuning voor fysieke adressering

Als fysieke adressering wordt gebruikt, moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor virtuele GPU-adressering

Als virtuele GPU-adressering wordt gebruikt, moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor IoMmu-isolatie

Als IoMmu-isolatie wordt ondersteund, moeten ook aanwijzers naar de volgende functies worden opgegeven:

Voor optionele koppelingsadapterondersteuning moet ook een aanwijzer naar de volgende functie worden opgegeven:

Ondersteuning voor energiebeheer

Voor optionele ondersteuning voor energiebeheer moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor energiebeheer is vereist voor moderne stand-by- of verbonden stand-bysystemen.

Zie GPU-energiebeheer van niet-actieve statussen en actieve energie voor meer informatie.

Ondersteuning voor het verwijderen van verrassingen

Voor optionele ondersteuning voor het verwijderen van verrassingen moeten ook aanwijzingen naar de volgende functies worden opgegeven:

Ondersteuning annuleren

Voor optionele ondersteuning voor annuleren moeten ook aanwijzers naar de volgende functies worden opgegeven:

Interfaceondersteuning

Voor optionele interfaceondersteuning moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor hardware-planning

Voor optionele ondersteuning voor hardwareplanning moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor UpdateAllocationProperty

Voor optionele ondersteuning voor UpdateAllocationProperty moeten ook aanwijzers naar de volgende functies worden opgegeven:

Escape-ondersteuning

Voor optionele escape-ondersteuning moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor gebeurtenistracering voor Windows

Voor optionele ETW-ondersteuning moeten ook pointers naar de volgende functies worden opgegeven:

Ondersteuning voor verbonden apparaten

Voor optionele ondersteuning van onderliggende apparaten moeten ook aanwijzers naar de volgende functies worden opgegeven:

Ondersteuning voor rapportage over energieverbruik

Voor optionele ondersteuning voor energieverbruiksrapportage moeten ook aanwijzers naar de volgende functies worden opgegeven:

Validatie van opdrachtinzending

Voor optionele validatie van opdrachtverzending moeten ook aanwijzers naar de volgende functies worden opgegeven:

IOCTL-ondersteuning

Voor optionele IOCTL-ondersteuning kan een aanwijzer naar de volgende functie worden opgegeven:

DxgkDdiDispatchIoRequest

Verboden functies

De volgende DDIS's mogen niet worden opgegeven in een MCDM-stuurprogramma:

  • 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-functies

De volgende functies worden alleen gebruikt voor WDDM 1.x-stuurprogramma's:

  • DxgkDdiQueryDiagnosticTypesSupport
  • DxgkDdiQueryVidPnHWCapability
  • DxgkDdiRecommendFunctionalVidPn
  • DxgkDdiRecommendMonitorModes
  • DxgkDdiRecommendVidPnTopology
  • DxgkDdiReleaseSwizzlingRange
  • DxgkDdiRenderGdi
  • DxgkDdiRenderKm
  • DxgkDdiSetDisplayPrivateDriverFormat
  • DxgkDdiSetPalette
  • DxgkDdiSetPointerPosition
  • DxgkDdiSetPointerShape
  • DxgkDdiSetPowerPState (het stuurprogramma mag geen P-state energieonderdelen rapporteren)
  • DxgkDdiSetTargetAdjustedColorimetry
  • DxgkDdiSetTargetAdjustedColorimetry2
  • DxgkDdiSetTargetAnalogCopyProtection
  • DxgkDdiSetTargetContentType
  • DxgkDdiSetTargetGamma
  • DxgkDdiSetTimingsFromVidPn
  • DxgkDdiSetVideoProtectedRegion
  • DxgkDdiSetVidPnSourceAddress
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
  • DxgkDdiSetVidPnSourceVisibility
  • DxgkDdiStopCapture
  • DxgkDdiStopDeviceAndReleasePostDisplayOwnership
  • DxgkDdiSubmitRender
  • DxgkDdiSystemDisplayEnable
  • DxgkDdiSystemDisplayWrite
  • DxgkDdiUpdateActiveVidPnPresentPath
  • DxgkDdiUpdateMonitorLinkInfo
  • DxgkDdiUpdateOverlay

Vereisten voor query-adapterinformatie

Zoals eerder vermeld, moet een alleen-rekenprocesstuurprogramma DxgkDdiQueryAdapterInfo ondersteunen.

De volgende DXGK_QUERYADAPTERINFOTYPE typen moeten worden ondersteund:

Ondersteuning voor de volgende DXGK_QUERYADAPTERINFOTYPE typen is optioneel:

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

Als een of meer ongeldige geheugenblokken zijn gerapporteerd, moet de volgende DXGK_QUERYADAPTERINFOTYPE worden ondersteund:

  • DXGKQAITYPE_SEGMENTMEMORYSTATE

Als GPUVA wordt ondersteund, moet de volgende DXGK_QUERYADAPTERINFOTYPE worden ondersteund:

  • DXGKQAITYPE_GPUMMUCAPS
  • DXGKQAITYPE_PAGETABLELEVELDESC

Als het aantal gerapporteerde energieonderdelen groter is dan nul, moet de volgende DXGK_QUERYADAPTERINFOTYPE worden ondersteund:

  • DXGKQAITYPE_POWERCOMPONENTINFO

Als de IoMmuSecureModeSupported cap is ingesteld, moet de volgende DXGK_QUERYADAPTERINFOTYPE worden ondersteund:

  • DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • DXGKQAITYPE_HARDWARERESERVEDRANGES

De volgende DXGK_QUERYADAPTERINFOTYPE mag niet worden ondersteund:

  • 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

Vereisten voor stuurprogrammamogelijkheden

De volgende DXGK_DRIVERCAPS structuurleden moeten worden ingesteld op de juiste waarden:

Lid Opmerkingen
HoogsteAanvaardbareAdres Als dit adres kleiner is dan het hoogste fysieke adres van het systeemgeheugen dat aanwezig is tijdens het laden van het stuurprogramma, mislukt de belasting.
InterruptMessageNumber Stel deze in, indien van toepassing.
SchedulingCaps Zie PlanningCaps-vereisten.
MemoryManagementCaps Zie de vereisten voor MemoryManagementCaps.
GpuEngineTopology Stel NbAsymetricProcessingNodes in op het aantal ondersteunde GPU-engines.
WDDMVersion Moet worden ingesteld op DXGKDDI_WDDMv2_6 of hoger.
PreemptionCaps Stel GraphicsPreemptionGranularity op de juiste manier in op het niveau dat wordt ondersteund door de hardware. U zou op zijn minst moeten proberen om preemption op pakketniveau te ondersteunen voor pakketten die in de wachtrij staan, zijn ingepland, maar nog niet gestart zijn met uitvoeren. Stel ComputePreemptionGranularity in op iets anders dan D3DKMDT_COMPUTE_PREEMPTION_NONE.
SupportPerEngineTDR Moet worden ingesteld op TRUE. Zie TDR-wijzigingen in Windows 8 en hoger.
OndersteuningVoorRuntimeEnergiebeheer Stel deze in, indien van toepassing. Zie GPU-energiebeheer van niet-actieve statussen en actieve energie.
SupportSurpriseRemovalInHibernation Ingesteld op TRUE als de bestuurder verrassingsverwijdering ondersteunt in de sluimerstand; anders ingesteld indien van toepassing. Zie DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
HybridDiscrete Moet zijn ingesteld op FALSE.
Hybride Geïntegreerd Moet worden ingesteld op ONWAAR.
Interne Gpu Virtueel Adresbereik Start Stel deze in, indien van toepassing. Als GpuVA niet wordt ondersteund, stelt u deze in op nul. Als GpuVA wordt ondersteund, geeft deze waarde het begin aan van het VA-bereik dat het besturingssysteem gebruikt bij het toewijzen van interne resources voor intern gebruik van het besturingssysteem.
InternalGpuVirtualAddressRangeEnd Stel deze in, indien van toepassing. Als GpuVA niet wordt ondersteund, stelt u deze in op nul. Als GpuVA wordt ondersteund, geeft deze waarde het einde van het VA-bereik aan dat het besturingssysteem gebruikt bij het toewijzen van interne resources voor intern gebruik van het besturingssysteem. Als zowel de begin- als de eindwaarden nul zijn, gebruikt het besturingssysteem het volledige beschikbare VA-bereik.
SupportSurpriseRemoval Stel deze in, indien van toepassing. Ingesteld op TRUE als het stuurprogramma ondersteuning biedt voor verwijderen zonder waarschuwing, zelfs buiten de sluimerstand. Zie DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
ComputeOnly Moet worden ingesteld op TRUE. Deze vlag moet worden geïmplementeerd.

De volgende DXGK_DRIVERCAPS structuurleden moeten worden ingesteld op nul of ONWAAR, dienovereenkomstig:

  • MaxAllocationListSlotId
  • ApertureSegmentCommitLimit
  • MaxPointerWidth
  • Maximale Aanhwijzerhoogte
  • PointerCaps
  • NumberOfSwizzlingRanges
  • MaxOverlays
  • GammaRampCaps
  • ColorTransformCaps
  • PresentationCaps
  • MaxQueuedFlipOnVSync
  • FlipCaps
  • Ondersteuning niet-VGA
  • SupportSmoothRotation
  • SupportDirectFlip
  • SupportMultiPlaneOverlay
  • MaxOverlayPlanes
  • OndersteuningMeervlaksOverlayOnmiddellijkeFlip
  • CursorGeschaaldMetMultiVlakOvereenkomstVlak0
  • HybridAcpiChainingVereist
  • MaxQueuedMultiPlaneOverlayFlipVSync
  • OndersteuningContextlozeHuidig
  • Afneembaar

Vereisten voor SchedulingCaps

De volgende leden van de DXGK_DRIVERCAPS.SchedulingCaps-structuur moeten op de juiste waarden worden ingesteld:

Lid Opmerkingen
MultiEngineAware Moet worden ingesteld op TRUE. Zie GPU-preemption.
VSyncEnergieSpaarBewust Moet ingesteld zijn op false.
PreemptionAware Moet worden ingesteld op TRUE. Zie GPU-preemption.
NoDmaPatching Moet worden ingesteld op false.
CancelCommandAware Stel deze in, indien van toepassing. Zie DXGKDDI_CANCELCOMMAND.
No64BitAtomics Stel deze in, indien van toepassing. Zie Contextmonitoring.
LowIrqlPreemptCommand Ingesteld op TRUE. Het besturingssysteem roept bij lage IRQL de DxgkDdiPreemptCommand van het stuurprogramma aan.
HwQueuePacketCap Gereserveerd; ingesteld op nul.

Vereisten voor MemoryManagementCaps

De volgende DXGK_DRIVERCAPS. MemoryManagementCaps-structuurleden moeten worden ingesteld op de juiste waarden:

Lid Opmerkingen
OutOfOrderLock Moet worden ingesteld op FALSE.
DedicatedPagingEngine Moet zijn ingesteld op ONWAAR.
PagingEngineCanSwizzle Moet zijn ingesteld op ONWAAR.
SectionBackedPrimary Moet worden ingesteld op false.
CrossAdapterResource Stel deze in, indien van toepassing. Zie Kruisadapterbronnen gebruiken in een hybride systeem.
VirtueleAdresseringOndersteund Stel deze in, indien van toepassing. Zie het virtuele GPU-geheugen in WDDM 2.0. Als dit lid is ingesteld, moet het stuurprogramma ook GpuMmuSupported en/of IoMmuSupported instellen.
GpuMmuSupported Stel deze in, indien van toepassing. Zie GpuMmu-model.
IoMmuSupported Stel deze in, indien van toepassing. Deze limiet wordt ingesteld wanneer de paginatabellen van het apparaat worden gedeeld met de CPU (gedeeld virtueel geheugen (SVM)). Zie IoMmu-model.
ReplicateGdiContent Moet zijn ingesteld op FALSE.
NonCpuVisiblePrimary Moet worden ingesteld op ONWAAR.
ParavirtualisatieOndersteund MCDM-hoststuurprogramma's die ondersteuning bieden voor de virtualisatie van het apparaat via de GPU-partitioneringsinterface (GPU-P met SR-IOV) moeten dit veld instellen op FALSE. Alle andere gevallen (stuurprogramma's voor fysieke machines zonder GPU-P ondersteuning of gaststuurprogramma's van vGPU's die beschikbaar zijn via GPU-P) moeten dit veld instellen op TRUE.
IoMmuSecureModeSupported Stel deze in, indien van toepassing. Als deze limiet TRUE is ingesteld, ondersteunt het stuurprogramma IoMmu-isolatie (het apparaat heeft een toegewezen paginatabel voor de IoMmu-eenheid). Als deze limiet ONWAAR is ingesteld, kan het apparaat niet worden gebruikt in de 'beveiligde' virtuele machines (Windows Sandbox of MDAG).
DisableSelfRefreshVRAMIns3 Stel deze in, indien van toepassing.

Geheugenbeheer

Virtuele adressering is vereist. Ondersteuning voor fysieke adressering kan in de toekomst worden ingeschakeld.

Apparaten zijn niet vereist om een geheugenopening te ondersteunen.

Alleen lineaire geheugenruimtesegmenten en lineaire segmenten van de aperture-ruimte worden ondersteund.