Udostępnij przez


Wytyczne dotyczące implementacji sterowników trybu jądra MCDM

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:

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):

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:

Obsługa izolacji IoMmu

Jeśli izolacja IoMmu jest obsługiwana, należy również podać wskaźniki do następujących funkcji:

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:

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:

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:

DxgkDdiDispatchIoRequest

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:

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 .