次の方法で共有


KMD とのバッキング ストアの共有

Windows 11 バージョン 22H2 以降では、WDDM API が拡張され、カーネル モード ドライバー (KMD) からグラフィックス割り当てバッキング ストアにアクセスできるようになりました。 この API を使用すると、ユーザー モード ドライバー (UMD) と KMD の両方が同じ割り当てメモリにアクセスできます。 この機能は、ホストまたは GPU 準仮想化 (GPU-PV) を使用して仮想マシンで UMD が実行されている場合に使用できます。

この機能は、Windows 10 バージョン 20H1 にバックポートされています。 DDI は、WDDM 3.1 以降のドライバーで使用できます。

WDDM グラフィックスの割り当てとバッキング ストア

WDDM モデルの各グラフィックス割り当てにはバッキング ストアがあります。これは、ビデオ メモリにない場合に割り当てコンテンツを保持するコミット済みメモリ バッファーです。

グラフィックス割り当ては、D3DKMTCreateAllocation を呼び出すことによって作成されます。 UMD は、この割り当てのプライベート データを渡します。Dxgkrnl は、DXGKDDI_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 からアクセスできるようにします。