다음을 통해 공유


MCDM KM 드라이버 구현 지침

이 문서에서는 컴퓨팅 전용 드라이버라고도 하는 MCDM(Microsoft Compute Only Driver) 드라이버의 커널 모드 드라이버 부분을 작성하는 방법에 대한 지침을 제공합니다.

다음 문서도 참조하세요.

드라이버 INF 파일

MCDM 디바이스는 INF 파일에 지정해야 하는 ComputeAccelerator 클래스에 속합니다.

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

드라이버 초기화

컴퓨팅 전용 드라이버는 다음 단계를 수행하는 DriverEntry 함수를 제공해야 합니다.

드라이버 함수 지원 요구 사항

컴퓨팅 전용 드라이버는 DRIVER_INITIALIZATION_DATA 구조에서 구현하는 함수를 노출합니다.

최소 필수 지원

최소한 컴퓨팅 전용 드라이버는 다음 DDI(디바이스 드라이버 인터페이스) 함수를 제공해야 합니다.

CPU 호스트 조리개 지원

CPU 호스트 조리개도 지원되는 경우 다음 함수에 대한 포인터도 제공해야 합니다.

자세한 내용은 CPU 호스트 조리개를 참조하세요.

물리적 주소 지정 지원

물리적 주소 지정을 사용하는 경우 다음 함수에 대한 포인터도 제공해야 합니다.

GPU 가상 주소 지정 지원

GPU 가상 주소 지정을 사용하는 경우 다음 함수에 대한 포인터도 제공해야 합니다.

IoMmu 격리 지원

IoMmu 격리가 지원되는 경우 다음 함수에 대한 포인터도 제공해야 합니다.

선택적 링크 어댑터 지원의 경우 다음 함수에 대한 포인터도 제공해야 합니다.

전원 관리 지원

선택적 전원 관리 지원의 경우 다음 함수에 대한 포인터도 제공해야 합니다.

참고: 최신 대기 또는 연결된 대기 시스템에서 전원 관리 지원이 필요합니다.

자세한 내용은 유휴 상태 및 활성 전원의 GPU 전원 관리를 참조하세요.

서프라이즈 제거 지원

선택적 서프라이즈 제거 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

지원 취소

선택적 취소 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

인터페이스 지원

선택적 인터페이스 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

하드웨어 예약 지원

선택적 하드웨어 예약 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

UpdateAllocationProperty 지원

선택적 UpdateAllocationProperty 지원의 경우 다음 함수에 대한 포인터도 제공해야 합니다.

  • DxgkDdiValidateUpdateAllocationProperty

이스케이프 지원

선택적 이스케이프 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

Windows용 이벤트 추적 지원

선택적 ETW 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

자식 디바이스 지원

선택적 자식 디바이스 지원의 경우 다음 함수에 대한 포인터도 제공해야 합니다.

전력 소비 보고 지원

선택적 전력 소비 보고 지원을 위해 다음 함수에 대한 포인터도 제공해야 합니다.

명령 제출 유효성 검사

선택적 명령 제출 유효성 검사의 경우 다음 함수에 대한 포인터도 제공해야 합니다.

IOCTL 지원

선택적 IOCTL 지원의 경우 다음 함수에 대한 포인터를 제공할 수 있습니다.

DxgkDdiDispatchIoRequest

금지된 함수

MCDM 드라이버에는 다음 DDI를 제공하지 않아야 합니다.

  • 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 함수

다음 함수는 WDDM 1.x 드라이버에만 사용됩니다.

  • DxgkDdiQueryDiagnosticTypesSupport
  • DxgkDdiQueryVidPnHWCapability
  • DxgkDdiRecommendFunctionalVidPn
  • DxgkDdiRecommendMonitorModes
  • DxgkDdiRecommendVidPnTopology
  • DxgkDdiReleaseSwizzlingRange
  • DxgkDdiRenderGdi
  • DxgkDdiRenderKm
  • DxgkDdiSetDisplayPrivateDriverFormat
  • DxgkDdiSetPalette
  • DxgkDdiSetPointerPosition
  • DxgkDdiSetPointerShape
  • DxgkDdiSetPowerPState(드라이버는 P 상태 전원 구성 요소를 보고하면 안 됨)
  • DxgkDdiSetTargetAdjustedColorimetry
  • DxgkDdiSetTargetAdjustedColorimetry2
  • DxgkDdiSetTargetAnalogCopyProtection
  • DxgkDdiSetTargetContentType
  • DxgkDdiSetTargetGamma
  • DxgkDdiSetTimingsFromVidPn
  • DxgkDdiSetVideoProtectedRegion
  • DxgkDdiSetVidPnSourceAddress
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2
  • DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
  • DxgkDdiSetVidPnSourceVisibility
  • DxgkDdiStopCapture
  • DxgkDdiStopDeviceAndReleasePostDisplayOwnership
  • DxgkDdiSubmitRender
  • DxgkDdiSystemDisplayEnable
  • DxgkDdiSystemDisplayWrite
  • DxgkDdiUpdateActiveVidPnPresentPath
  • DxgkDdiUpdateMonitorLinkInfo
  • DxgkDdiUpdateOverlay

쿼리 어댑터 정보 요구 사항

앞에서 설명한 것처럼 컴퓨팅 전용 드라이버는 DxgkDdiQueryAdapterInfo를 지원해야 합니다.

다음 DXGK_QUERYADAPTERINFOTYPE 형식을 지원해야 합니다.

다음 DXGK_QUERYADAPTERINFOTYPE 형식에 대한 지원은 선택 사항입니다.

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

하나 이상의 잘못된 메모리 블록이 보고된 경우 다음 DXGK_QUERYADAPTERINFOTYPE 지원되어야 합니다.

  • DXGKQAITYPE_SEGMENTMEMORYSTATE

GPUVA가 지원되는 경우 다음 DXGK_QUERYADAPTERINFOTYPE 지원되어야 합니다.

  • DXGKQAITYPE_GPUMMUCAPS
  • DXGKQAITYPE_PAGETABLELEVELDESC

보고된 전원 구성 요소 수가 0보다 큰 경우 다음 DXGK_QUERYADAPTERINFOTYPE 지원되어야 합니다.

  • DXGKQAITYPE_POWERCOMPONENTINFO

IoMmuSecureModeSupported 상한이 설정된 경우 다음 DXGK_QUERYADAPTERINFOTYPE 지원되어야 합니다.

  • DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • DXGKQAITYPE_HARDWARERESERVEDRANGES

다음 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

드라이버 기능 요구 사항

다음 DXGK_DRIVERCAPS 구조체 멤버를 적절한 값으로 설정해야 합니다.

멤버 참고
최고 허용Address 이 주소가 드라이버 로드 중에 있는 시스템 메모리의 가장 높은 실제 주소보다 작으면 로드가 실패합니다.
InterruptMessageNumber 적절하게 설정합니다.
SchedulingCaps SchedulingCaps 요구 사항을 참조하세요.
MemoryManagementCaps MemoryManagementCaps 요구 사항을 참조하세요.
GpuEngineTopology NbAsymetricProcessingNodes를 지원되는 GPU 엔진 수로 설정합니다.
WDDMVersion DXGKDDI_WDDMv2_6 이상으로 설정해야 합니다.
PreemptionCaps GraphicsPreemptionGranularity를 하드웨어에서 지원하는 수준으로 적절하게 설정합니다. 최소한 패킷 수준 선점 지원을 시도해야 합니다. 즉, 예약되었지만 아직 실행을 시작하지 않은 큐에서 제거된 패킷입니다. ComputePreemptionGranularity를 D3DKMDT_COMPUTE_PREEMPTION_NONE 이외의 항목으로 설정합니다.
SupportPerEngineTDR TRUE로 설정해야 합니다. Windows 8 이상에서 TDR 변경 내용을 참조하세요.
SupportRuntimePowerManagement 적절하게 설정합니다. 유휴 상태 및 활성 전원의 GPU 전원 관리를 참조하세요.
SupportSurpriseRemovalInHibernation 최대 절전 모드일 때 드라이버가 서프라이즈 제거를 지원하는 경우 TRUE로 설정합니다. 그렇지 않으면 적절하게 설정됩니다. DXGKDDI_NOTIFY_SURPRISE_REMOVAL 참조하세요.
HybridDiscrete FALSE로 설정해야 합니다.
HybridIntegrated FALSE로 설정해야 합니다.
InternalGpuVirtualAddressRangeStart 적절하게 설정합니다. GpuVA가 지원되지 않는 경우 를 0으로 설정합니다. GpuVA가 지원되는 경우 이 값은 OS 내부 사용을 위해 내부 리소스를 할당할 때 OS에서 사용할 VA 범위의 시작을 지정합니다.
InternalGpuVirtualAddressRangeEnd 적절하게 설정합니다. GpuVA가 지원되지 않는 경우 를 0으로 설정합니다. GpuVA가 지원되는 경우 이 값은 OS 내부 사용을 위해 내부 리소스를 할당할 때 OS에서 사용할 VA 범위의 끝을 지정합니다. 시작 값과 끝 값이 모두 0이면 OS는 사용 가능한 전체 VA 범위를 사용합니다.
SupportSurpriseRemoval 적절하게 설정합니다. 드라이버가 최대 절전 모드 외부에서도 깜짝 제거를 지원하는 경우 TRUE로 설정합니다. DXGKDDI_NOTIFY_SURPRISE_REMOVAL 참조하세요.
ComputeOnly TRUE로 설정해야 합니다. 이 플래그를 구현해야 합니다.

다음과 같은 DXGK_DRIVERCAPS 구조체 멤버를 0 또는 FALSE로 설정해야 합니다.

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

SchedulingCaps 요구 사항

다음 DXGK_DRIVERCAPS. SchedulingCaps 구조체 멤버를 적절한 값으로 설정해야 합니다.

멤버 참고
MultiEngineAware TRUE로 설정해야 합니다. GPU 선점 참조
VSyncPowerSaveAware FALSE로 설정해야 합니다.
PreemptionAware TRUE로 설정해야 합니다. GPU 선점 참조
NoDmaPatching FALSE로 설정해야 합니다.
CancelCommandAware 적절하게 설정합니다. DXGKDDI_CANCELCOMMAND 참조하세요.
No64BitAtomics 적절하게 설정합니다. 컨텍스트 모니터링을 참조하세요.
LowIrqlPreemptCommand TRUE로 설정합니다. OS는 낮은 IRQL에서 드라이버의 DxgkDdiPreemptCommand 를 호출합니다.
HwQueuePacketCap 예약; 를 0으로 설정합니다.

MemoryManagementCaps 요구 사항

다음 DXGK_DRIVERCAPS. MemoryManagementCaps 구조체 멤버를 적절한 값으로 설정해야 합니다.

멤버 참고
OutOfOrderLock FALSE로 설정해야 합니다.
DedicatedPagingEngine FALSE로 설정해야 합니다.
PagingEngineCanSwizzle FALSE로 설정해야 합니다.
SectionBackedPrimary FALSE로 설정해야 합니다.
CrossAdapterResource 적절하게 설정합니다. 하이브리드 시스템에서 어댑터 간 리소스 사용을 참조하세요.
VirtualAddressingSupported 적절하게 설정합니다. WDDM 2.0의 GPU 가상 메모리를 참조하세요. 이 멤버가 설정된 경우 드라이버는 GpuMmuSupported 및/또는 IoMmuSupported도 설정해야 합니다.
GpuMmuSupported 적절하게 설정합니다. GpuMmu 모델을 참조하세요.
IoMmuSupported 적절하게 설정합니다. 이 상한은 디바이스가 CPU(공유 가상 메모리(SVM))와 페이지 테이블을 공유할 때 설정됩니다. IoMmu 모델을 참조하세요.
ReplicateGdiContent FALSE로 설정해야 합니다.
NonCpuVisiblePrimary FALSE로 설정해야 합니다.
ParavirtualizationSupported GPU 분할 인터페이스(SR-IOV를 사용하는 GPU-P)를 통해 디바이스의 가상화를 지원하는 MCDM 호스트 드라이버는 이 필드를 FALSE로 설정해야 합니다. 다른 모든 경우(GPU-P가 지원되지 않는 물리적 컴퓨터의 드라이버 또는 GPU-P를 통해 노출된 vGPU의 게스트 드라이버)는 이 필드를 TRUE로 설정해야 합니다.
IoMmuSecureModeSupported 적절하게 설정합니다. 이 상한이 TRUE로 설정되면 드라이버는 IoMmu 격리를 지원합니다(디바이스에는 IoMmu 단위에 대한 전용 페이지 테이블이 있습니다). 이 한도가 FALSE로 설정되면 "보안" 가상 머신(Windows 샌드박스 또는 MDAG)에서 디바이스를 사용할 수 없습니다.
DisableSelfRefreshVRAMInS3 적절하게 설정합니다.

메모리 관리

가상 주소 지정이 필요합니다. 실제 주소 지정 지원은 나중에 사용하도록 설정될 수 있습니다.

디바이스는 메모리 조리개를 지원할 필요가 없습니다.

선형 메모리 공간 세그먼트 및선형 조리개 공간 세그먼트만 지원됩니다.