Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Den här artikeln innehåller vägledning om hur du skriver kmd-delen (kernel-mode driver) av en MCDM-drivrutin (Microsoft Compute Only Driver), även kallad en beräkningsdrivrutin.
Se även följande artiklar:
INF-fil för drivrutiner
MCDM-enheter tillhör klassen ComputeAccelerator , som måste anges i drivrutinens INF-fil:
[Version]
...
Class=ComputeAccelerator
ClassGuid={F01A9D53-3FF6-48D2-9F97-C8A7004BE10C}
...
Drivrutinsinitialisering
En MCDM-drivrutin måste ange en DriverEntry-funktion som utför följande steg:
- Allokera och initiera en DRIVER_INITIALIZATION_DATA struktur. Mer information finns i Supportkrav för drivrutinsfunktionen .
- Anropa DxgkInitialize med den initialiserade strukturen.
Stödkrav för drivrutinsfunktionen
En MCDM-drivrutin exponerar de funktioner som implementeras i DRIVER_INITIALIZATION_DATA struktur.
Minsta stöd som krävs
Minst måste en MCDM-drivrutin tillhandahålla följande funktioner för enhetsdrivrutinsgränssnitt (DDI):
- DxgkDdiAddDevice
- DxgkDdiBuildPagingBuffer
- DxgkDdiCalibrateGpuClock
- DxgkDdiCloseAllocation
- DxgkDdiCollectDbgInfo
- DxgkDdiCreateAllocation
- DxgkDdiCreateContext
- DxgkDdiCreateDevice
- DxgkDdiDescribeAllocation
- DxgkDdiDestroyAllocation
- DxgkDdiDestroyContext
- DxgkDdiDestroyDevice
- DxgkDdiDpcRoutine
- DxgkDdiFormatHistoryBuffer
- DxgkDdiGetNodeMetadata
- DxgkDdiGetStandardAllocationDriverData
- DxgkDdiInterruptRoutine
- DxgkDdiOpenAllocation
- DxgkDdiPreemptCommand
- DxgkDdiQueryAdapterInfo (mer information finns i DxgkDdiQueryAdapterInfo krav)
- DxgkDdiQueryDependentEngineGroup
- DxgkDdiQueryDeviceDescriptor
- DxgkDdiQueryEngineStatus
- DxgkDdiRemoveDevice
- DxgkDdiResetDevice
- DxgkDdiResetEngine
- DxgkDdiResetFromTimeout
- DxgkDdiRestartFromTimeout
- DxgkDdiSetPowerState
- DxgkDdiSetStablePowerState
- DxgkDdiSetVirtualMachineData
- DxgkDdiStartDevice
- DxgkDdiStopDevice
- DxgkDdiUnload
- DxgkDdiQueryChildStatus
- DxgkDdiQueryChildRelations
- DxgkDdiQueryConnectionChange
- DxgkDdiQueryDeviceDescriptor
Stöd för cpu-värdöppning
Om CPU-värdapertur stöds måste även referenser till följande funktioner anges:
Mer information finns i CPU-värdseffektområde.
Stöd för fysisk adressering
Om fysisk adressering används måste pekare till följande funktioner också anges:
Stöd för virtuell GPU-adressering
Om virtuell GPU-adressering används måste pekare till följande funktioner också anges:
- DxgkDdiCreateProcess
- DxgkDdiDestroyProcess
- DxgkDdiGetRootPageTableSize
- DxgkDdiSetRootPageTable
- DxgkDdiSubmitCommandVirtual
Stöd för IoMmu-isolering
Om IoMmu-isolering stöds måste pekare till följande funktioner också anges:
Stöd för länkadapter
För valfritt stöd för länkkort måste en pekare till följande funktion också anges:
Stöd för energisparfunktioner
För valfritt stöd för energisparfunktioner måste pekare till följande funktioner också anges:
- DxgkDdiSetPowerComponentFState; krävs om rapporterade komponenter stöder F-tillstånd.
- DxgkDdiPowerRuntimeControlRequest
- DxgkDdiPowerRuntimeSetDeviceHandle
Stöd för energisparfunktioner krävs i moderna vänteläges- eller anslutna väntelägessystem.
Mer information finns i GPU-energisparfunktioner för inaktiva tillstånd och aktiv ström.
Stöd för överraskande borttagning
För valfritt stöd för överraskande borttagning måste pekare till följande funktioner också anges:
Avbryt supporten
För stöd av valfri avbokning måste pekare till följande funktioner också anges:
Gränssnittsstöd
För valfritt gränssnittsstöd måste pekare till följande funktioner också anges:
Stöd för maskinvaruschemaläggning
För valfritt stöd för maskinvaruschemaläggning måste pekare till följande funktioner också anges:
- DxgkDdiCreateHwContext
- DxgkDdiCreateHwQueue
- DxgkDdiDestroyHwContext
- DxgkDdiDestroyHwQueue
- DxgkDdiPresentToHwQueue
- [DxgkDdiResetHwEngine
- DxgkDdiResumeContext
- DxgkDdiResumeHwEngine
- DxgkDdiSetContextSchedulingProperties
- DxgkDdiSetSchedulingLogBuffer
- DxgkDdiSetupPriorityBands
- DxgkDdiSignalMonitoredFence
- DxgkDdiSubmitCommandToHwQueue
- DxgkDdiSuspendContext
- DxgkDdiSwitchToHwContextList
- DxgkDdiUpdateHwContextState
Stöd för UpdateAllocationProperty
För valfritt Stöd för UpdateAllocationProperty måste pekare till följande funktioner också anges:
Escape-stöd
För valfritt escape-stöd måste pekare till följande funktioner också anges:
Händelsespårning för Windows-stöd
För valfritt ETW-stöd måste pekare till följande funktioner också anges:
Stöd för underordnad enhet
För valfritt stöd för underordnad enhet måste pekare till följande funktioner också anges:
Rapporteringsstöd för strömförbrukning
För valfritt stöd för energiförbrukningsrapportering måste pekare till följande funktioner också anges:
Validering av kommandoöverföring
För valfritt kommandoöverföringsverifiering måste pekare till följande funktioner också anges:
Stöd för IOCTL
För valfritt IOCTL-stöd kan du ange en pekare till följande funktion:
Otillåtna funktioner
Följande DDI:er får inte anges i en MCDM-drivrutin:
- 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-funktioner
Följande funktioner används endast för WDDM 1.x-drivrutiner:
- DxgkDdiQueryDiagnosticTypesSupport
- DxgkDdiQueryVidPnHWCapability
- DxgkDdiRecommendFunctionalVidPn
- DxgkDdiRecommendMonitorModes
- DxgkDdiRecommendVidPnTopology
- DxgkDdiReleaseSwizzlingRange
- DxgkDdiRenderGdi
- DxgkDdiRenderKm
- DxgkDdiSetDisplayPrivateDriverFormat
- DxgkDdiSetPalette
- DxgkDdiSetPointerPosition
- DxgkDdiSetPointerShape
- DxgkDdiSetPowerPState (drivrutinen ska inte rapportera några komponenter för P-state-kraft)
- DxgkDdiSetTargetAdjustedColorimetry
- DxgkDdiSetTargetAdjustedColorimetry2
- DxgkDdiSetTargetAnalogCopyProtection
- DxgkDdiSetTargetContentType
- DxgkDdiSetTargetGamma
- DxgkDdiSetTimingsFromVidPn
- DxgkDdiSetVideoProtectedRegion
- DxgkDdiSetVidPnSourceAddress
- DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
- DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
- DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
- DxgkDdiSetVidPnSourceVisibility
- DxgkDdiStopCapture
- DxgkDdiStopDeviceAndReleasePostDisplayOwnership
- DxgkDdiSubmitRender
- DxgkDdiSystemDisplayEnable
- DxgkDdiSystemDisplayWrite
- DxgkDdiUpdateActiveVidPnPresentPath
- DxgkDdiUpdateMonitorLinkInfo
- DxgkDdiUpdateOverlay
Krav på adapterinformation
Som tidigare nämnts måste en beräkningsdrivrutin ha stöd för DxgkDdiQueryAdapterInfo.
Följande DXGK_QUERYADAPTERINFOTYPE typer måste stödjas:
- DXGKQAITYPE_DRIVERCAPS
- DXGKQAITYPE_NUMPOWERCOMPONENTS
- DXGKQAITYPE_HISTORYBUFFERPRECISION
- DXGKQAITYPE_QUERYSEGMENT4 (mer information finns i Använda minnessegment för att beskriva GPU-adressutrymmet)
Stöd för följande DXGK_QUERYADAPTERINFOTYPE typer är valfritt:
- DXGK_ADAPTER_PERFDATA
- DXGK_ADAPTER_PERFDATACAPS
- DXGKQAITYPE_UMDRIVERPRIVATE
- DXGKQAITYPE_PHYSICALADAPTERCAPS
- DXGK_NODE_PERFDATA
- DXGK_GPUVERSION
Om ett eller flera ogiltiga minnesblock rapporterades måste följande DXGK_QUERYADAPTERINFOTYPE stödjas:
- DXGKQAITYPE_SEGMENTMEMORYSTATE
Om GPUVA stöds måste följande DXGK_QUERYADAPTERINFOTYPE stödjas:
- DXGKQAITYPE_GPUMMUCAPS
- DXGKQAITYPE_PAGETABLELEVELDESC
Om antalet rapporterade energikomponenter är större än noll måste följande DXGK_QUERYADAPTERINFOTYPE stödjas:
- DXGKQAITYPE_POWERCOMPONENTINFO
Om taket IoMmuSecureModeSupported har angetts måste följande DXGK_QUERYADAPTERINFOTYPE stödjas:
- DXGKQAITYPE_FRAMEBUFFERSAVESIZE
- DXGKQAITYPE_HårdvaraReserveradeOmråden
Följande DXGK_QUERYADAPTERINFOTYPE får inte stödjas:
- 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
Krav för drivrutinsfunktioner
Följande DXGK_DRIVERCAPS strukturmedlemmar måste anges till lämpliga värden:
| Medlem | Noteringar |
|---|---|
| HighestAcceptableAddress | Om den här adressen är mindre än den högsta fysiska adressen för systemminnet som finns under drivrutinsbelastningen misslyckas belastningen. |
| InterruptMessageNumber | Ange efter behov. |
| SchedulingCaps | Se SchedulingCaps-krav. |
| MemoryManagementCaps | Se Krav för MemoryManagementCaps. |
| GpuEngineTopology | Ange NbAsymetricProcessingNodes till det antal GPU-motorer som stöds. |
| WDDMVersion | Måste anges till DXGKDDI_WDDMv2_6 eller senare. |
| PreemptionCaps | Ange GraphicsPreemptionGranularity på rätt sätt till den nivå som stöds av maskinvaran. Du bör åtminstone försöka stödja förinläsning på paketnivå för dequeue-paket som är schemalagda men som ännu inte har börjat köras. Ange ComputePreemptionGranularity till något annat än D3DKMDT_COMPUTE_PREEMPTION_NONE. |
| SupportPerEngineTDR | Måste anges till SANT. Se TDR-ändringar i Windows 8 och senare. |
| Stöd för körningseffektiv strömhantering | Ange efter behov. Se GPU-energisparfunktioner för inaktiva tillstånd och aktiv ström. |
| SupportSurpriseRemovalInHibernation | Ställ in på TRUE om drivrutinen stöder överraskande borttagning när den är i viloläge. annars anges efter behov. Se DXGKDDI_NOTIFY_SURPRISE_REMOVAL. |
| HybridDiscrete | Måste anges till FALSKT. |
| Hybridintegrerad | Måste anges till FALSE. |
| InternGpuVirtuellAdressOmrådesStart | Ange efter behov. Om GpuVA inte stöds anger du till noll. Om GpuVA stöds anger det här värdet början på det VA-intervall som operativsystemet ska använda när interna resurser allokeras för intern användning av operativsystemet. |
| "InternalGpuVirtualAddressRangeEnd" | Ange efter behov. Om GpuVA inte stöds anger du till noll. Om GpuVA stöds anger det här värdet slutet på det VA-intervall som operativsystemet ska använda när interna resurser allokeras för intern användning av operativsystemet. Om både start- och slutvärdena är noll använder operativsystemet hela det tillgängliga VA-intervallet. |
| (If translation is required) "Stöd för oväntad borttagning" | Ange efter behov. Ställ in på TRUE om drivrutinen stöder överraskande borttagning även utanför viloläge. Se även DXGKDDI_NOTIFY_SURPRISE_REMOVAL. |
| ComputeOnly | Måste anges till TRUE. Den här flaggan måste implementeras. |
Följande DXGK_DRIVERCAPS strukturmedlemmar måste anges till noll eller FALSE, i enlighet med detta:
- MaximaltTilldelningsListSlotId
- ApertureSegmentCommitLimit
- MaxPointerWidth
- MaxPointerHeight
- PointerCaps
- AntalSwizzlingOmråden
- MaxOverlays
- GammaRampCaps
- ColorTransformCaps
- PresentationCaps
- MaxQueuedFlipOnVSync
- FlipCaps
- Stöd för icke-VGA
- SupportSmoothRotation
- SupportDirectFlip
- Stöd för Multiplaned Overlay
- MaxOverlayPlanes
- StödMultiplanÖverlagringOmedelbarVändning
- KursorSkalierasMedMultiPlanÖverlagringsPlan0
- HybridAcpiChainingRequired
- MaxQueuedMultiPlaneOverlayFlipVSync
- SupportContextlessPresent
- Löstagbar
Krav för SchedulingCaps
Följande DXGK_DRIVERCAPS.SchedulingCaps-strukturmedlemmar måste anges till lämpliga värden:
| Medlem | Noteringar |
|---|---|
| MultiEngineAware | Måste anges till SANT. Se GPU-preemption. |
| VSyncPowerSaveAware | Måste anges till FALSKT. |
| PreemptionAware | Måste anges till SANT. Se GPU-preemption. |
| NoDmaPatching | Måste anges till FALSKT. |
| CancelCommandAware | Ange efter behov. Se DXGKDDI_CANCELCOMMAND. |
| No64BitAtomics | Ange efter behov. Se Sammanhangsövervakning. |
| LowIrqlPreemptCommand | Ställ in på TRUE. Operativsystemet anropar drivrutinens DxgkDdiPreemptCommand vid låg IRQL. |
| HwQueuePacketCap | Reserverad; inställd på noll. |
MemoryManagementCaps-krav
Följande DXGK_DRIVERCAPS.MemoryManagementCaps strukturmedlemmar ska anges till lämpliga värden:
| Medlem | Noteringar |
|---|---|
| OutOfOrderLock | Måste anges till FALSKT. |
| DedicatedPagingEngine | Måste anges till FALSE. |
| PagingEngineCanSwizzle | Måste anges till FALSE. |
| AvsnittsbaseradPrimär | Måste anges till Falskt. |
| CrossAdapterResource | Ange efter behov. Se Använda korsadapter-resurser i ett hybridsystem. |
| VirtuellAdresshanteringStöds | Ange efter behov. Se Virtuellt GPU-minne i WDDM 2.0. Om den här medlemmen har angetts måste drivrutinen också ange GpuMmuSupported och/eller IoMmuSupported. |
| GpuMmuSupported | Ange efter behov. Se GpuMmu-modell. |
| IoMmuSupported | Ange efter behov. Det här taket anges när enheten delar sidtabeller med processorn (delat virtuellt minne (SVM)). Se IoMmu-modell. |
| ReplicateGdiContent | Måste anges till FALSKT. |
| NonCpuVisiblePrimary | Måste anges till FALSE. |
| ParavirtualiseringStödd | MCDM-värddrivrutiner som stöder virtualisering av enheten via GPU-partitioneringsgränssnittet (GPU-P med SR-IOV) bör ange fältet till FALSE. Alla andra fall (drivrutiner för fysiska datorer utan GPU-P support eller gästdrivrutiner för vGPUs som exponeras via GPU-P) bör ange fältet till SANT. |
| IoMmuSecureModeSupported | Ange efter behov. Om denna inställning är SANN stöder drivrutinen IoMmu-isolering (enheten har en dedikerad sidtabell för IoMmu-enheten). Om det här taket har värdet FALSE kan enheten inte användas på de "säkra" virtuella datorerna (Windows Sandbox eller MDAG). |
| DisableSelfRefreshVRAMInS3 | Ange efter behov. |
Minneshantering
Virtuell adressering krävs. Stöd för fysisk adressering kan aktiveras i framtiden.
Enheter behöver inte stödja en minnesöppning.
Endast linjära segment för minnesutrymme och linjära segment för bländare och utrymme stöds.