KMD와 백업 저장소 공유
WDDM 3.1(Windows 11 버전 22H2)부터 WDDM은 커널 모드 드라이버(KMD)의 그래픽 할당 백업 저장소에 액세스할 수 있도록 확장되었습니다. 백업 저장소는 비디오 메모리에 상주하지 않을 때 그래픽 할당의 콘텐츠를 보유하는 커밋된 메모리 버퍼를 나타냅니다.
이 기능을 사용하면 UMD(사용자 모드 드라이버)와 KMD 모두 동일한 할당 메모리에 액세스할 수 있습니다. 이 기능은 GPU-PV(GPU 매개 변수화)를 사용하여 호스트 또는 가상 머신에서 UMD를 실행할 때 사용할 수 있습니다.
이 기능은 Windows 10 버전 20H1로 다시 이식되었습니다. DDI는 WDDM 3.1 드라이버 이상에서 사용할 수 있습니다.
WDDM 그래픽 할당 및 백업 저장소
WDDM 모델의 모든 그래픽 할당에는 백업 저장소가 있습니다. 그래픽 할당은 UMD가 Dxgkrnl의 D3DKMTCreateAllocation 함수를 호출할 때 생성됩니다. UMD는 Dxgkrnl이 DxgkddiCreateAllocation에 대한 호출을 통해 KMD에 전달하는 이 할당에 대한 프라이빗 데이터를 전달합니다. KMD는 Dxgkrnl에 원하는 할당 플래그를 반환합니다.
기능 가용성 확인
백업 저장소 공유 기능을 사용할 수 있는지 확인하려면 KMD는 먼저 FeatureId가 DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD 설정하여 다음 콜백 중 하나를 호출해야 합니다.
- DXGKCB_QUERYFEATURESUPPORT(WDDM 2.9부터 사용 가능)
- DXGKCB_ISFEATUREENABLED
이 기능은 콜백이 성공하고 Enable 이 TRUE로 설정된 경우에만 사용할 수 있습니다.
기능 흐름
KMD에서 기능이 사용하도록 설정된 것으로 확인되면 UMD는 D3DKMTCreateAllocation을 호출하여 공유 CPU 표시 할당을 만들고 개인 데이터를 통해 KMD에 할당을 KMD와 공유하도록 지시합니다. 이 호출 과정에서 다음이 발생합니다.
KMD는 OS가 KMD의 DxgkddiCreateAllocation 콜백을 호출할 때 DXGK_ALLOCATIONINFOFLAGS2 ShareBackingStoreWithKmd 플래그를 설정합니다. 이 기능을 사용하도록 설정하지 않으면 KMD에서 ShareBackingStoreWithKmd 플래그를 설정해서는 안됩니다.
Dxgkrnl은 DXGKDDI_SETALLOCATIONBACKINGSTORE DDI를 호출하여 KMD에 할당 백업 저장소에 커널 모드 주소를 제공합니다.
UMD는 D3DKMTLock2를 호출하여 할당의 사용자 모드 주소를 가져옵니다.
할당의 속성
이러한 방식으로 만든 할당에는 다음 속성이 있어야 합니다.