KMD와 백업 저장소 공유

Windows 11 버전 22H2부터 WDDM API가 확장되어 KMD(커널 모드 드라이버)의 그래픽 할당 지원 저장소에 액세스할 수 있습니다. 이 API를 사용하면 UMD(사용자 모드 드라이버)와 KMD가 모두 동일한 할당 메모리에 액세스할 수 있습니다. 이 기능은 GPU-PV(GPU 반가상화)를 사용하여 호스트 또는 가상 머신에서 UMD를 실행할 때 사용할 수 있습니다.

이 기능은 Windows 10 버전 20H1로 다시 이식되었습니다. DDI는 WDDM 3.1 드라이버 이상에서 사용할 수 있습니다.

WDDM 그래픽 할당 및 지원 저장소

WDDM 모델의 각 그래픽 할당에는 비디오 메모리에 없을 때 할당 콘텐츠를 보유하는 커밋된 메모리 버퍼인 백업 저장소가 있습니다.

D3DKMTCreateAllocation을 호출하여 그래픽 할당을 만듭니다. UMD는 이 할당에 대한 프라이빗 데이터를 전달하며, DxgkrnlDXGKDDI_CREATEALLOCATION 호출을 통해 KMD에 전달합니다. KMD는 원하는 할당 플래그를 Dxgkrnl에 반환합니다.

기능 가용성 확인

지원 저장소 공유 기능을 사용할 수 있는지 여부를 검사 위해 KMD는 먼저 FeatureIdDXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD 설정된 다음 콜백 중 하나를 호출해야 합니다.

이 기능은 콜백이 성공하고 사용 이 TRUE로 설정된 경우에만 사용할 수 있습니다.

기능 흐름

KMD에서 기능이 사용하도록 설정된 것으로 확인되면 UMD는 D3DKMTCreateAllocation 을 호출하여 공유 CPU 표시 할당을 만들고 프라이빗 데이터를 통해 KMD에 할당을 KMD와 공유하도록 지시합니다. 이 호출 과정에서 다음이 발생합니다.

  • KMD는 OS가 KMD의 DXGKDDI_CREATEALLOCATION 콜백을 호출할 때 DXGK_ALLOCATIONINFOFLAGS2ShareBackingStoreWithKmd 플래그를 설정합니다. 기능을 사용하도록 설정하지 않으면 KMD에서 ShareBackingStoreWithKmd 플래그를 설정하면 안됩니다.

  • Dxgkrnl은DXGKDDI_SETALLOCATIONBACKINGSTORE DDI를 호출하여 KMD에 할당 지원 저장소에 커널 모드 주소를 제공합니다.

  • UMD는 D3DKMTLock2 를 호출하여 할당의 사용자 모드 주소를 가져옵니다.

할당의 속성

이러한 방식으로 생성된 할당에는 다음 속성이 있어야 합니다.

  • 할당은 시스템 메모리 세그먼트에만 허용됩니다.
  • 할당은 공유로 만들어야 합니다.
  • 할당은 기존 시스템 메모리를 백업 저장소로 사용할 수 없습니다.
  • UMD는 일반 할당에 대해 모든 작업을 수행할 수 있습니다.
    • UMD는 D3DKMTLock2 를 호출하여 할당에 대한 포인터를 가져올 수 있습니다.
    • UMD는 D3DKMTMakeResident 를 호출하여 GPU에서 할당에 액세스할 수 있도록 할 수 있습니다.