Partilhar via


Diretrizes de implementação do driver KM do MCDM

Este artigo fornece diretrizes sobre como escrever a parte do driver do modo kernel de um driver MCDM (Microsoft Compute Only Driver), também conhecido como driver somente computação.

Consulte também os seguintes artigos:

Arquivo INF do driver

Os dispositivos MCDM pertencem à classe ComputeAccelerator , que precisa ser especificada no arquivo INF:

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

Inicialização do driver

Um driver somente de computação deve fornecer uma função DriverEntry que execute as seguintes etapas:

Requisitos de suporte à função de driver

Um driver somente computação expõe as funções que ele implementa na estrutura DRIVER_INITIALIZATION_DATA .

Suporte mínimo necessário

No mínimo, um driver somente de computação deve fornecer as seguintes funções de DDI (interface de driver de dispositivo):

Suporte à abertura do host da CPU

Se houver suporte para a abertura do host da CPU, ponteiros para as seguintes funções também deverão ser fornecidos:

Para obter mais informações, confira Abertura do host da CPU.

Suporte a endereçamento físico

Se o endereçamento físico for usado, ponteiros para as seguintes funções também deverão ser fornecidos:

Suporte a endereçamento virtual de GPU

Se o endereçamento virtual de GPU for usado, ponteiros para as seguintes funções também deverão ser fornecidos:

Suporte ao isolamento do IoMmu

Se houver suporte para o isolamento do IoMmu, ponteiros para as seguintes funções também deverão ser fornecidos:

Para o suporte opcional ao adaptador de link, um ponteiro para a função a seguir também deve ser fornecido:

Suporte ao gerenciamento de energia

Para suporte ao gerenciamento de energia opcional, ponteiros para as seguintes funções também devem ser fornecidos:

OBSERVAÇÃO: o suporte ao gerenciamento de energia é necessário em sistemas em espera moderno ou em espera conectado.

Para obter mais informações, consulte Gerenciamento de energia de GPU de estados ociosos e energia ativa.

Suporte à remoção surpresa

Para suporte à remoção surpresa opcional, os ponteiros para as seguintes funções também devem ser fornecidos:

Cancelar suporte

Para o suporte opcional de cancelamento, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte à interface

Para suporte à interface opcional, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte ao agendamento de hardware

Para suporte ao agendamento de hardware opcional, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte a UpdateAllocationProperty

Para o suporte opcional updateAllocationProperty, ponteiros para as seguintes funções também devem ser fornecidos:

  • DxgkDdiValidateUpdateAllocationProperty

Suporte de escape

Para suporte de escape opcional, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte ao Rastreamento de Eventos para Windows

Para suporte ao ETW opcional, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte a dispositivo filho

Para suporte ao dispositivo filho opcional, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte a relatórios de consumo de energia

Para suporte opcional ao relatório de consumo de energia, os ponteiros para as seguintes funções também devem ser fornecidos:

Validação de envio de comando

Para validação de envio de comando opcional, ponteiros para as seguintes funções também devem ser fornecidos:

Suporte a IOCTL

Para suporte ao IOCTL opcional, um ponteiro para a função a seguir pode ser fornecido:

DxgkDdiDispatchIoRequest

Funções proibidas

Os seguintes DDIs não devem ser fornecidos em um driver 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

Funções do WDDM 1.x

As seguintes funções são usadas somente para drivers WDDM 1.x:

  • DxgkDdiQueryDiagnosticTypesSupport
  • DxgkDdiQueryVidPnHWCapability
  • DxgkDdiRecommendFunctionalVidPn
  • DxgkDdiRecommendMonitorModes
  • DxgkDdiRecommendVidPnTopology
  • DxgkDdiReleaseSwizzlingRange
  • DxgkDdiRenderGdi
  • DxgkDdiRenderKm
  • DxgkDdiSetDisplayPrivateDriverFormat
  • DxgkDdiSetPalette
  • DxgkDdiSetPointerPosition
  • DxgkDdiSetPointerShape
  • DxgkDdiSetPowerPState (o driver não deve relatar nenhum componente de energia de estado P)
  • DxgkDdiSetTargetAdjustedColorimetry
  • DxgkDdiSetTargetAdjustedColorimetry2
  • DxgkDdiSetTargetAnalogCopyProtection
  • DxgkDdiSetTargetContentType
  • DxgkDdiSetTargetGamma
  • DxgkDdiSetTimingsFromVidPn
  • DxgkDdiSetVideoProtectedRegion
  • DxgkDdiSetVidPnSourceAddress
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
  • DxgkDdiSetVidPnSourceVisibility
  • DxgkDdiStopCapture
  • DxgkDdiStopDeviceAndReleasePostDisplayOwnership
  • DxgkDdiSubmitRender
  • DxgkDdiSystemDisplayEnable
  • DxgkDdiSystemDisplayWrite
  • DxgkDdiUpdateActiveVidPnPresentPath
  • DxgkDdiUpdateMonitorLinkInfo
  • DxgkDdiUpdateOverlay

Requisitos de informações do adaptador de consulta

Conforme mencionado anteriormente, um driver somente de computação deve dar suporte a DxgkDdiQueryAdapterInfo.

Os seguintes tipos de DXGK_QUERYADAPTERINFOTYPE devem ter suporte:

O suporte para os seguintes tipos de DXGK_QUERYADAPTERINFOTYPE é opcional:

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

Se um ou mais blocos de memória inválidos tiverem sido relatados, os seguintes DXGK_QUERYADAPTERINFOTYPE deverão ter suporte:

  • DXGKQAITYPE_SEGMENTMEMORYSTATE

Se houver suporte para GPUVA, os seguintes DXGK_QUERYADAPTERINFOTYPE deverão ter suporte:

  • DXGKQAITYPE_GPUMMUCAPS
  • DXGKQAITYPE_PAGETABLELEVELDESC

Se o número de componentes de energia relatados for maior que zero, os seguintes DXGK_QUERYADAPTERINFOTYPE deverão ter suporte:

  • DXGKQAITYPE_POWERCOMPONENTINFO

Se o limite IoMmuSecureModeSupported estiver definido, os seguintes DXGK_QUERYADAPTERINFOTYPE deverão ter suporte:

  • DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • DXGKQAITYPE_HARDWARERESERVEDRANGES

Não há suporte para as seguintes DXGK_QUERYADAPTERINFOTYPE:

  • 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

Requisitos de funcionalidade do driver

Os seguintes membros da estrutura DXGK_DRIVERCAPS devem ser definidos para os valores apropriados:

Membro Observações
HighestAcceptableAddress Se esse endereço for menor que o endereço físico mais alto da memória do sistema presente durante a carga do driver, a carga falhará.
InterruptMessageNumber Defina conforme apropriado.
SchedulingCaps Confira Requisitos de SchedulingCaps.
MemoryManagementCaps Confira Requisitos de MemoryManagementCaps.
GpuEngineTopology Defina NbAsymetricProcessingNodes como o número de mecanismos de GPU com suporte.
WDDMVersion Deve ser definido como DXGKDDI_WDDMv2_6 ou posterior.
PreemptionCaps Defina GraphicsPreemptionGranularity adequadamente para o nível compatível com o hardware. No mínimo, você deve tentar dar suporte à preempção no nível do pacote; ou seja, um pacote de remoção de fila que foi agendado, mas ainda não começou a ser executado. Defina ComputePreemptionGranularity como qualquer outra coisa que não seja D3DKMDT_COMPUTE_PREEMPTION_NONE.
SupportPerEngineTDR Deve ser definido como TRUE. Consulte Alterações de TDR no Windows 8 e posterior.
SupportRuntimePowerManagement Defina conforme apropriado. Confira Gerenciamento de energia de GPU de estados ociosos e energia ativa.
SupportSurpriseRemovalInHibernation Defina como TRUE se o driver der suporte à remoção surpresa quando estiver em hibernação; caso contrário, defina conforme apropriado. Consulte DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
HybridDiscrete Deve ser definido como FALSE.
Híbrido Integrado Deve ser definido como FALSE.
InternalGpuVirtualAddressRangeStart Defina conforme apropriado. Se não houver suporte para GpuVA, defina como zero. Se houver suporte para GpuVA, esse valor especificará o início do intervalo de VA que o sistema operacional usará ao alocar recursos internos para uso interno do sistema operacional.
InternalGpuVirtualAddressRangeEnd Defina conforme apropriado. Se não houver suporte para GpuVA, defina como zero. Se houver suporte para GpuVA, esse valor especificará o final do intervalo de VA que o sistema operacional usará ao alocar recursos internos para uso interno do sistema operacional. Se os valores inicial e final forem zero, o sistema operacional usará todo o intervalo de VA disponível.
SupportSurpriseRemoval Defina conforme apropriado. Defina como TRUE se o driver der suporte à remoção surpresa mesmo fora da hibernação. Consulte DXGKDDI_NOTIFY_SURPRISE_REMOVAL.
ComputeOnly Deve ser definido como TRUE. Esse sinalizador deve ser implementado.

Os seguintes membros da estrutura DXGK_DRIVERCAPS devem ser definidos como zero ou FALSE, de acordo:

  • MaxAllocationListSlotId
  • ApertureSegmentCommitLimit
  • MaxPointerWidth
  • MaxPointerHeight
  • PointerCaps
  • NumberOfSwizzlingRanges
  • MaxOverlays
  • GammaRampCaps
  • ColorTransformCaps
  • PresentationCaps
  • MaxQueuedFlipOnVSync
  • FlipCaps
  • SupportNonVGA
  • SupportSmoothRotation
  • SupportDirectFlip
  • SupportMultiPlaneOverlay
  • MaxOverlayPlanes
  • SupportMultiPlaneOverlayImmediateFlip
  • CursorScaledWithMultiPlaneOverlayPlane0
  • HybridAcpiChainingRequired
  • MaxQueuedMultiPlaneOverlayFlipVSync
  • SupportContextlessPresent
  • Detachable

Requisitos de SchedulingCaps

O DXGK_DRIVERCAPS a seguir. Os membros da estrutura SchedulingCaps devem ser definidos com os valores apropriados:

Membro Observações
MultiEngineAware Deve ser definido como TRUE. Confira Preempção de GPU.
VSyncPowerSaveAware Deve ser definido como FALSE.
PreemptionAware Deve ser definido como TRUE. Confira Preempção de GPU.
NoDmaPatching Deve ser definido como FALSE.
CancelCommandAware Defina conforme apropriado. Consulte DXGKDDI_CANCELCOMMAND.
No64BitAtomics Defina conforme apropriado. Confira Monitoramento de Contexto.
LowIrqlPreemptCommand Defina como TRUE. O sistema operacional chamará o DxgkDdiPreemptCommand do driver em IRQL baixo.
HwQueuePacketCap Reservados; definido como zero.

Requisitos de MemoryManagementCaps

O DXGK_DRIVERCAPS a seguir. Os membros da estrutura MemoryManagementCaps devem ser definidos para os valores apropriados:

Membro Observações
OutOfOrderLock Deve ser definido como FALSE.
DedicatedPagingEngine Deve ser definido como FALSE.
PagingEngineCanSwizzle Deve ser definido como FALSE.
SectionBackedPrimary Deve ser definido como FALSE.
CrossAdapterResource Defina conforme apropriado. Consulte Usando recursos de adaptador cruzado em um sistema híbrido.
VirtualAddressingSupported Defina conforme apropriado. Confira Memória Virtual de GPU no WDDM 2.0. Se esse membro estiver definido, o driver também deverá definir GpuMmuSupported e/ou IoMmuSupported.
GpuMmuSupported Defina conforme apropriado. Confira Modelo gpummu.
IoMmuSupported Defina conforme apropriado. Esse limite é definido quando o dispositivo compartilha tabelas de página com a CPU (memória virtual compartilhada (SVM)). Confira Modelo IoMmu.
ReplicateGdiContent Deve ser definido como FALSE.
NonCpuVisiblePrimary Deve ser definido como FALSE.
ParavirtualizationSupported Os drivers de host MCDM que dão suporte à virtualização do dispositivo por meio da interface de particionamento de GPU (GPU-P com SR-IOV) devem definir esse campo como FALSE. Todos os outros casos (drivers para computadores físicos sem suporte a GPU-P ou drivers convidados de vGPUs que foram expostos por meio de GPU-P) devem definir esse campo como TRUE.
IoMmuSecureModeSupported Defina conforme apropriado. Se esse limite for definido como TRUE, o driver oferecerá suporte ao isolamento IoMmu (o dispositivo tem uma tabela de página dedicada para a unidade IoMmu). Se esse limite for definido como FALSE, o dispositivo não poderá ser usado nas máquinas virtuais "seguras" (Área Restrita do Windows ou MDAG).
DisableSelfRefreshVRAMInS3 Defina conforme apropriado.

Gerenciamento de memória

O endereçamento virtual é necessário. O suporte a endereçamento físico pode ser habilitado no futuro.

Os dispositivos não são necessários para dar suporte a uma abertura de memória.

Há suporte apenas para segmentos lineares de espaço de memória e segmentos lineares de espaço de abertura .