Resizable BAR のシステムとドライバーのサポート

現在、ディスクリート グラフィックス処理ユニット (GPU) では、そのフレーム バッファーの一部のみを PCI バスで公開するのが一般的です。 32 ビットの OS との互換性のために、ディスクリート GPU は通常、フレーム バッファー用に 256 MB の I/O 領域を要求します。これは、一般的なファームウェアで構成される方法です。

サイズ変更可能なベース アドレス レジスタ (BAR) をサポートする GPU では、Windows は Windows Display Driver Model (WDDM) v2 以降でファームウェアの初期化後に GPU の BAR のサイズを再ネゴシエーションします。 再設定可能な BAR の詳細については、PCI SIG 仕様ライブラリの「REsizable BAR 機能の仕様 」を参照してください

サイズ変更可能な BAR をサポートする GPU では、BAR の再プログラミング中にディスプレイを維持し、静的なイメージを表示できる必要があります。 このプロセス中は、表示を空白にしてからバックアップすることはできません。 ファームウェアに表示されるイメージ、ブート ローダー イメージ、カーネル モード ドライバーによって生成された最初のイメージの間で、スムーズに遷移することが重要です。 再ネゴシエーションが行われる間、GPU に対して PCI トランザクションは発生しません。

この再ネゴシエーションは、主にカーネル モード ドライバーからは見えません。 再ネゴシエーションが成功すると、カーネル モード ドライバーは、個別の GPU の VRAM 全体を公開するために GPU バーのサイズが最大サイズに変更されたことを確認します。

サイズ変更に成功すると、カーネル モード ドライバーは 1 つの CPUVisible メモリ セグメントをビデオ メモリ マネージャーに公開する必要があります。 CPU がメモリ セグメントのコンテンツにアクセスする必要がある場合、ビデオ メモリ マネージャーは CPU 仮想アドレスをこの範囲に直接マップします。