Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Wijs een DRIVER_INITIALIZATION_DATA structuur toe en initialiseer deze. Zie de ondersteuningsvereisten voor stuurprogrammafuncties voor meer informatie.
- Roep DxgkInitialize aan met de geïnitialiseerde structuur.
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:
- DxgkDdiAddDevice
- DxgkDdiBuildPagingBuffer
- DxgkDdiCalibrateGpuClock
- DxgkDdiCloseAllocation
- DxgkDdiCollectDbgInfo
- DxgkDdiCreateAllocation
- DxgkDdiCreateContext
- DxgkDdiCreateDevice
- DxgkDdiDescribeAllocation
- DxgkDdiDestroyAllocation
- DxgkDdiDestroyContext
- DxgkDdiDestroyDevice
- DxgkDdiDpcRoutine
- DxgkDdiFormatHistoryBuffer
- DxgkDdiGetNodeMetadata
- DxgkDdiGetStandardAllocationDriverData
- DxgkDdiInterruptRoutine
- DxgkDdiOpenAllocation
- DxgkDdiPreemptCommand
- DxgkDdiQueryAdapterInfo (zie vereisten voor DxgkDdiQueryAdapterInfo voor meer informatie)
- DxgkDdiQueryDependentEngineGroup
- DxgkDdiQueryDeviceDescriptor
- DxgkDdiQueryEngineStatus
- DxgkDdiRemoveDevice
- DxgkDdiResetDevice
- DxgkDdiResetEngine
- DxgkDdiResetFromTimeout
- DxgkDdiRestartFromTimeout
- DxgkDdiSetPowerState
- DxgkDdiSetStablePowerState
- DxgkDdiSetVirtualMachineData
- DxgkDdiStartDevice
- DxgkDdiStopDevice
- DxgkDdiUnload
- DxgkDdiQueryChildStatus
- DxgkDdiQueryChildRelations
- DxgkDdiQueryConnectionChange
- DxgkDdiQueryDeviceDescriptor
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:
- DxgkDdiCreateProcess
- DxgkDdiDestroyProcess
- DxgkDdiGetRootPageTableSize
- DxgkDdiSetRootPageTable
- DxgkDdiSubmitCommandVirtual
Ondersteuning voor IoMmu-isolatie
Als IoMmu-isolatie wordt ondersteund, moeten ook aanwijzers naar de volgende functies worden opgegeven:
Ondersteuning voor koppelingsadapters
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:
- DxgkDdiSetPowerComponentFState; vereist als gerapporteerde onderdelen F-statussen ondersteunen.
- DxgkDdiPowerRuntimeControlRequest
- DxgkDdiPowerRuntimeSetDeviceHandle
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:
- DxgkDdiCreateHwContext
- DxgkDdiCreateHwQueue
- DxgkDdiDestroyHwContext
- DxgkDdiDestroyHwQueue
- DxgkDdiPresentToHwQueue
- [DxgkDdiResetHwEngine
- DxgkDdiResumeContext
- DxgkDdiResumeHwEngine
- DxgkDdiSetContextSchedulingProperties
- DxgkDdiSetSchedulingLogBuffer
- DxgkDdiSetupPriorityBands
- DxgkDdiSignalMonitoredFence
- DxgkDdiSubmitCommandToHwQueue
- DxgkDdiSuspendContext
- DxgkDdiSwitchToHwContextList
- DxgkDdiUpdateHwContextState
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:
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:
- DXGKQAITYPE_DRIVERCAPS
- DXGKQAITYPE_NUMPOWERCOMPONENTS
- DXGKQAITYPE_HISTORYBUFFERPRECISION
- DXGKQAITYPE_QUERYSEGMENT4 (zie Geheugensegmenten gebruiken om de GPU-adresruimte te beschrijven) voor meer informatie.
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.