Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera wskazówki dotyczące pisania części sterownika trybu jądra (KMD) dla sterownika tylko dla obliczeń firmy Microsoft (MCDM), nazywanego także sterownikiem tylko dla obliczeń.
Zobacz również następujące artykuły:
Plik INF sterownika
Urządzenia MCDM należą do klasy ComputeAccelerator , która musi być określona w pliku INF sterownika:
[Version]
...
Class=ComputeAccelerator
ClassGuid={F01A9D53-3FF6-48D2-9F97-C8A7004BE10C}
...
Inicjowanie sterownika
Sterownik MCDM musi podać funkcję DriverEntry , która wykonuje następujące czynności:
- Przydzielanie i inicjowanie struktury DRIVER_INITIALIZATION_DATA . Aby uzyskać szczegółowe informacje, zobacz Wymagania dotyczące obsługi funkcji sterownika .
- Wywołaj funkcję DxgkInitialize za pomocą zainicjowanej struktury.
Wymagania dotyczące obsługi funkcji sterownika
Sterownik MCDM uwidacznia funkcje implementowane w strukturze DRIVER_INITIALIZATION_DATA .
Minimalna wymagana pomoc techniczna
Co najmniej sterownik MCDM musi dostarczać następujące funkcje interfejsu sterownika urządzenia (DDI):
- DxgkDdiAddDevice
- DxgkDdiBuildPagingBuffer
- DxgkDdiCalibrateGpuClock
- DxgkDdiCloseAllocation
- DxgkDdiCollectDbgInfo
- DxgkDdiCreateAllocation
- DxgkDdiCreateContext
- DxgkDdiCreateDevice
- DxgkDdiDescribeAllocation
- DxgkDdiDestroyAllocation
- DxgkDdiDestroyContext
- DxgkDdiDestroyDevice
- DxgkDdiDpcRoutine
- DxgkDdiFormatHistoryBuffer
- DxgkDdiGetNodeMetadata
- DxgkDdiGetStandardAllocationDriverData
- DxgkDdiInterruptRoutine
- DxgkDdiOpenAllocation
- DxgkDdiPreemptCommand
- DxgkDdiQueryAdapterInfo (aby uzyskać więcej informacji, zobacz Wymagania DxgkDdiQueryAdapterInfo)
- DxgkDdiQueryDependentEngineGroup
- DxgkDdiQueryDeviceDescriptor
- DxgkDdiQueryEngineStatus
- DxgkDdiRemoveDevice
- DxgkDdiResetDevice
- DxgkDdiResetEngine
- DxgkDdiResetFromTimeout
- DxgkDdiRestartFromTimeout
- DxgkDdiSetPowerState
- DxgkDdiSetStablePowerState
- DxgkDdiSetVirtualMachineData
- DxgkDdiStartDevice
- DxgkDdiStopDevice
- DxgkDdiUnload
- DxgkDdiQueryChildStatus
- DxgkDdiQueryChildRelations
- DxgkDdiQueryConnectionChange
- DxgkDdiQueryDeviceDescriptor
Obsługa apertury hosta CPU
Jeśli obsługa przysłony hosta CPU jest dostępna, należy również podać wskaźniki do następujących funkcji:
Aby uzyskać więcej informacji, zobacz Szczelina hosta CPU.
Obsługa adresowania fizycznego
Jeśli jest używane adresowanie fizyczne, należy również podać wskaźniki do następujących funkcji:
Obsługa adresowania wirtualnego procesora GPU
Jeśli jest używane adresowanie wirtualne procesora GPU, należy również podać wskaźniki do następujących funkcji:
- DxgkDdiCreateProcess
- DxgkDdiDestroyProcess
- DxgkDdiGetRootPageTableSize
- DxgkDdiSetRootPageTable
- DxgkDdiSubmitCommandVirtual
Obsługa izolacji IoMmu
Jeśli izolacja IoMmu jest obsługiwana, należy również podać wskaźniki do następujących funkcji:
Wsparcie dla adaptera łączy
W przypadku opcjonalnej obsługi adaptera linku należy również podać wskaźnik do następującej funkcji:
Obsługa zarządzania energią
W przypadku opcjonalnej obsługi zarządzania energią należy również podać wskaźniki do następujących funkcji:
- DxgkDdiSetPowerComponentFState; wymagane, jeśli zgłoszone składniki obsługują stany F.
- DxgkDdiPowerRuntimeControlRequest
- DxgkDdiPowerRuntimeSetDeviceHandle
Obsługa zarządzania energią jest wymagana w nowoczesnych systemach wstrzymania lub wstrzymania połączonego.
Aby uzyskać więcej informacji, zobacz Zarządzanie energią GPU w stanach bezczynności i przy aktywnym wykorzystaniu mocy.
Wsparcie przy niespodziewanym usuwaniu
W przypadku opcjonalnej obsługi usuwania niespodzianek należy również podać wskaźniki do następujących funkcji:
Anulowanie pomocy technicznej
Aby opcjonalnie anulować obsługę, należy również podać wskaźniki do następujących funkcji:
Obsługa interfejsu
W przypadku opcjonalnej obsługi interfejsu należy również podać wskaźniki do następujących funkcji:
Obsługa planowania sprzętu
W przypadku opcjonalnej obsługi planowania sprzętu należy również podać wskaźniki do następujących funkcji:
- DxgkDdiCreateHwContext
- DxgkDdiCreateHwQueue
- DxgkDdiDestroyHwContext
- DxgkDdiDestroyHwQueue
- DxgkDdiPresentToHwQueue
- [DxgkDdiResetHwEngine
- DxgkDdiResumeContext
- DxgkDdiResumeHwEngine
- DxgkDdiSetContextSchedulingProperties
- DxgkDdiSetSchedulingLogBuffer
- DxgkDdiSetupPriorityBands
- DxgkDdiSignalMonitoredFence
- DxgkDdiSubmitCommandToHwQueue
- DxgkDdiSuspendContext
- DxgkDdiSwitchToHwContextList
- DxgkDdiUpdateHwContextState
Obsługa właściwości UpdateAllocationProperty
W przypadku opcjonalnej obsługi właściwości UpdateAllocationProperty należy również podać wskaźniki do następujących funkcji:
Obsługa ucieczki
W przypadku opcjonalnej obsługi ucieczki należy również podać wskaźniki do następujących funkcji:
Śledzenie zdarzeń dla obsługi systemu Windows
W przypadku opcjonalnej obsługi funkcji ETW należy również podać wskaźniki do następujących funkcji:
Obsługa urządzeń podrzędnych
W przypadku opcjonalnej obsługi urządzeń podrzędnych należy również podać wskaźniki do następujących funkcji:
Obsługa raportowania zużycia energii
W przypadku opcjonalnej obsługi raportowania zużycia energii należy również podać wskaźniki do następujących funkcji:
Walidacja przesyłania poleceń
W przypadku opcjonalnej weryfikacji przesyłania poleceń należy również podać wskaźniki do następujących funkcji:
Obsługa protokołu IOCTL
W przypadku opcjonalnej obsługi IOCTL można podać wskaźnik do następującej funkcji:
Funkcje zabronione
Następujące identyfikatory DDI nie mogą być udostępniane w sterowniku 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
Funkcje WDDM 1.x
Następujące funkcje są używane tylko dla sterowników WDDM 1.x:
- DxgkDdiQueryDiagnosticTypesSupport
- DxgkDdiQueryVidPnHWCapability
- DxgkDdiRecommendFunctionalVidPn
- DxgkDdiRecommendMonitorModes
- DxgkDdiRecommendVidPnTopology
- DxgkDdiReleaseSwizzlingRange
- DxgkDdiRenderGdi
- DxgkDdiRenderKm
- DxgkDdiSetDisplayPrivateDriverFormat
- DxgkDdiSetPalette
- DxgkDdiSetPointerPosition
- DxgkDdiSetPointerShape
- DxgkDdiSetPowerPState (sterownik nie powinien zgłaszać żadnych komponentów stanu zasilania P)
- DxgkDdiSetTargetAdjustedColorimetry
- DxgkDdiSetTargetAdjustedColorimetry2
- DxgkDdiSetTargetAnalogCopyProtection
- DxgkDdiSetTargetContentType
- DxgkDdiSetTargetGamma
- DxgkDdiSetTimingsFromVidPn
- DxgkDdiSetVideoProtectedRegion
- DxgkDdiSetVidPnSourceAddress
- DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
- DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
- DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
- DxgkDdiSetVidPnSourceVisibility
- DxgkDdiStopCapture
- DxgkDdiStopDeviceAndReleasePostDisplayOwnership
- DxgkDdiSubmitRender
- DxgkDdiSystemDisplayEnable
- DxgkDdiSystemDisplayWrite
- DxgkDdiUpdateActiveVidPnPresentPath (Aktualizacja aktywnej ścieżki prezentacji VidPn)
- DxgkDdiUpdateMonitorLinkInfo
- DxgkDdiUpdateOverlay
Wymagania dotyczące informacji o adapterze zapytań
Jak wspomniano wcześniej, sterownik tylko do obliczeń musi obsługiwać DxgkDdiQueryAdapterInfo.
Następujące typy DXGK_QUERYADAPTERINFOTYPE muszą być obsługiwane:
- DXGKQAITYPE_DRIVERCAPS
- DXGKQAITYPE_NUMPOWERCOMPONENTS
- DXGKQAITYPE_HISTORYBUFFERPRECISION
- DXGKQAITYPE_QUERYSEGMENT4 (aby uzyskać więcej informacji, zobacz Używanie segmentów pamięci do opisania przestrzeni adresowej procesora GPU)
Obsługa następujących typów DXGK_QUERYADAPTERINFOTYPE jest opcjonalna:
- DXGK_ADAPTER_PERFDATA
- DXGK_ADAPTER_PERFDATACAPS
- DXGKQAITYPE_UMDRIVERPRIVATE
- DXGKQAITYPE_PHYSICALADAPTERCAPS
- DXGK_NODE_PERFDATA
- DXGK_GPUVERSION
Jeśli zgłoszono co najmniej jeden nieprawidłowy blok pamięci, należy obsługiwać następujące DXGK_QUERYADAPTERINFOTYPE:
- DXGKQAITYPE_SEGMENTMEMORYSTATE
Jeśli GPUVA jest obsługiwany, muszą być obsługiwane następujące typy DXGK_QUERYADAPTERINFOTYPE:
- DXGKQAITYPE_GPUMMUCAPS
- DXGKQAITYPE_PAGETABLELEVELDESC
Jeśli liczba zgłoszonych składników zasilania jest większa niż zero, należy obsługiwać następujące DXGK_QUERYADAPTERINFOTYPE:
- DXGKQAITYPE_POWERCOMPONENTINFO
Jeśli ustawiono limit IoMmuSecureModeSupported , należy obsługiwać następujące DXGK_QUERYADAPTERINFOTYPE:
- DXGKQAITYPE_FRAMEBUFFERSAVESIZE
- DXGKQAITYPE_HARDWARERESERVEDRANGES
Następujące DXGK_QUERYADAPTERINFOTYPE nie mogą być obsługiwane:
- 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
Wymagania dotyczące możliwości sterownika
Następujące elementy członkowskie struktury DXGK_DRIVERCAPS muszą być ustawione na odpowiednie wartości:
| Członek | Notatki |
|---|---|
| NajwyższyDopuszczalnyAdres | Jeśli ten adres jest mniejszy niż najwyższy fizyczny adres pamięci systemowej obecnej podczas ładowania sterownika, obciążenie kończy się niepowodzeniem. |
| NumerWiadomościPrzerwania | Ustaw odpowiednio. |
| HarmonogramowanieCaps | Zobacz wymagania SchedulingCaps. |
| MemoryManagementCaps | Zobacz Wymagania dotyczące funkcji MemoryManagementCaps. |
| GpuEngineTopology | Ustaw NbAsymetricProcessingNodes na liczbę obsługiwanych silników GPU. |
| WDDMVersion | Musi być ustawiona na wartość DXGKDDI_WDDMv2_6 lub nowszą. |
| PreemptionCaps | Ustaw wartość GraphicsPreemptionGranularity odpowiednio na poziom obsługiwany przez sprzęt. Co najmniej należy podjąć próbę obsługi wywłaszczania na poziomie pakietów dla pakietów, które są zaplanowane, ale nie zostały jeszcze uruchomione. Ustaw ComputePreemptionGranularity na wartość inną niż D3DKMDT_COMPUTE_PREEMPTION_NONE. |
| SupportPerEngineTDR | Musi być ustawiona wartość TRUE. Zobacz Zmiany TDR w systemie Windows 8 i nowszych. |
| Obsługa zarządzania energią w czasie wykonywania | Ustaw odpowiednio. Zobacz Zarządzanie energią procesora GPU dla stanów bezczynności i aktywnej mocy. |
| SupportSurpriseRemovalInHibernation | Ustaw wartość TRUE, jeśli sterownik obsługuje usuwanie niespodziewane w przypadku hibernacji; w przeciwnym razie ustaw odpowiednio. Zobacz DXGKDDI_NOTIFY_SURPRISE_REMOVAL. |
| HybridDiscrete | Musi być ustawione na FALSE. |
| Zintegrowany hybrydowy | Musi być ustawione na FALSE. |
| InternalnyZakresWirtualnychAdresówGpuStartowy | Ustaw odpowiednio. Jeśli procesor GPUVA nie jest obsługiwany, ustaw wartość zero. Jeśli GpuVA jest obsługiwane, ta wartość określa początek zakresu VA, który system operacyjny będzie używał podczas przydzielania zasobów wewnętrznych. |
| Zakres końca wewnętrznego adresu wirtualnego GPU | Ustaw odpowiednio. Jeśli procesor GPUVA nie jest obsługiwany, ustaw wartość zero. Jeśli GpuVA jest obsługiwane, ta wartość określa koniec zakresu VA, który system operacyjny będzie używał podczas przydzielania zasobów wewnętrznych do funkcji systemu operacyjnego. Jeśli zarówno wartości początkowe, jak i końcowe są zerowe, system operacyjny użyje całego dostępnego zakresu adresów wirtualnych. |
| ObsługaUsuwaniaZaskoczenia | Ustaw odpowiednio. Ustaw wartość TRUE, jeśli sterownik obsługuje niespodziewane usuwanie nawet poza hibernacją. Zobacz DXGKDDI_NOTIFY_SURPRISE_REMOVAL. |
| ComputeOnly | Musi być ustawiona wartość TRUE. Tę flagę należy zaimplementować. |
W związku z tym następujące elementy członkowskie struktury DXGK_DRIVERCAPS muszą być ustawione na zero lub FAŁSZ:
- IdentyfikatorMaksymalnegoMiejscaListyPrzydziałów
- ApertureSegmentCommitLimit
- MaksymalnaSzerokośćWskaźnika
- MaksymalnaWysokośćWskaźnika
- Kapturki wskaźnika
- LiczbaZakresówSwizzlingu
- MaxOverlays
- GammaRampCaps
- ColorTransformCaps
- PresentationCaps
- MaxQueuedFlipOnVSync
- FlipCaps
- SupportNonVGA
- SupportSmoothRotation
- SupportDirectFlip
- SupportMultiPlaneOverlay
- MaxOverlayPlanes
- Obsługa natychmiastowego przewracania wielowarstwowego nakładki
- CursorScaledWithMultiPlaneOverlayPlane0
- HybridAcpiChainingRequired
- MaxQueuedMultiPlaneOverlayFlipVSync
- WsparcieBezkontekstowejPrezentacji
- Odłączany
Wymagania dotyczące SchedulingCaps
Poniższe DXGK_DRIVERCAPS. Elementy członkowskie struktury SchedulingCaps muszą być ustawione na odpowiednie wartości:
| Członek | Notatki |
|---|---|
| MultiEngineAware | Musi być ustawiona wartość TRUE. Zobacz preempcję GPU. |
| VSyncPowerSaveAware | Musi być ustawiona wartość FAŁSZ. |
| Świadomy Wywłaszczenia | Musi być ustawiona wartość TRUE. Zobacz wywłaszczanie procesora GPU. |
| NoDmaPatching | Musi być ustawione na FALSE. |
| CancelCommandAware | Ustaw odpowiednio. Zobacz DXGKDDI_CANCELCOMMAND. |
| No64BitAtomics | Ustaw odpowiednio. Zobacz Monitorowanie kontekstu. |
| LowIrqlPreemptCommand | Ustaw wartość TRUE. System operacyjny wywoła sterownik DxgkDdiPreemptCommand przy niskim IRQL. |
| HwQueuePacketCap | Zastrzeżone; ustawiono na zero. |
Wymagania dotyczące funkcji MemoryManagementCaps
Poniższe DXGK_DRIVERCAPS. Elementy członkowskie struktury MemoryManagementCaps muszą być ustawione na odpowiednie wartości:
| Członek | Notatki |
|---|---|
| OutOfOrderLock | Musi być ustawione na FALSE. |
| DedicatedPagingEngine | Musi być ustawione na FALSE. |
| PagingEngineCanSwizzle | Musi być ustawione na FALSE. |
| SekcjaZapewnionaGłówna | Musi być ustawione na FALSE. |
| CrossAdapterResource | Ustaw odpowiednio. Zobacz Używanie zasobów adaptera krzyżowego w systemie hybrydowym. |
| ObsługaWirtualnegoAdresowania | Ustaw odpowiednio. Zobacz Pamięć wirtualna procesora GPU w programie WDDM 2.0. Jeśli ten parametr jest ustawiony, sterownik musi również ustawić GpuMmuSupported i/lub IoMmuSupported. |
| GpuMmuSupported | Ustaw odpowiednio. Zobacz Model GpuMmu. |
| IoMmuSupported | Ustaw odpowiednio. Ten limit jest ustawiany, gdy urządzenie udostępnia tabele stron procesorowi CPU (współużytkowanej pamięci wirtualnej (SVM). Zobacz Model IoMmu. |
| ReplicateGdiContent | Musi być ustawione na FALSE. |
| NonCpuVisiblePrimary | Musi być ustawione na FALSE. |
| Obsługiwana parawirtualizacja | Sterowniki hosta MCDM obsługujące wirtualizację urządzenia za pośrednictwem interfejsu partycjonowania procesora GPU (GPU-P z SR-IOV) powinny ustawić to pole na FALSE. Wszystkie inne przypadki (sterowniki dla maszyn fizycznych bez właściwej do kontekstu obsługi GPU-P lub sterowników dla maszyn wirtualnych vGPU uwidocznionych za pośrednictwem GPU-P) powinny ustawić to pole na "TRUE". |
| IoMmuSecureModeSupported | Ustaw odpowiednio. Jeśli ten limit ma wartość TRUE, sterownik obsługuje izolację IoMmu (urządzenie ma dedykowaną tabelę stron dla jednostki IoMmu). Jeśli ten limit ma wartość FALSE, urządzenie nie może być używane w "bezpiecznych" maszynach wirtualnych (Piaskownica systemu Windows lub MDAG). |
| DisableSelfRefreshVRAMInS3 | Ustaw odpowiednio. |
Zarządzanie pamięcią
Adresowanie wirtualne jest wymagane. Obsługa adresowania fizycznego może zostać włączona w przyszłości.
Urządzenia nie muszą obsługiwać otworu pamięci.
Obsługiwane są tylko liniowe segmenty przestrzeni pamięci i liniowe segmenty przestrzeni przysłony .