次の方法で共有


DXGI 1.4 の機能強化

次の機能は、主に Direct3D 12 をサポートするために、Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) 1.4 で追加または変更されています。

安価なアダプター列挙

Direct3D 12 の場合、デバイスを作成するために使用された IDXGIAdapter にバックトラックすることはできなくなります。 D3D12CreateDeviceにD3D_DRIVER_TYPE_WARPを提供することもできなくなりました。 開発を容易にするために、IDXGIFactory4 を使用して、これらの両方に対処できます。 IDXGIFactory4::EnumAdapterByLuid (ID3D12Device::GetAdapterLuidとペアリングするように設計されています) を使用すると、Direct3D 12 デバイスが作成されたアダプターに関する情報をアプリで取得できます。 IDXGIFactory4::EnumWarpAdapterは、WARP レンダラーを使用するために D3D12CreateDevice に提供できるアダプターを提供します。

ビデオ メモリの予算の追跡

アプリケーション開発者は、ビデオ メモリ予約システムを使用して、アプリが使用できない物理ビデオ メモリの量を OS に通知することをお勧めします。

プロセスで使用できる物理メモリの量は、"ビデオ メモリの予算" と呼ばれます。 バックグラウンド プロセスのウェイクアップとスリープが行われると、予算が著しく変動する可能性があります。ユーザーが別のアプリケーションに切り替わると、大幅に変動します。 予算が変更されたときにアプリケーションに通知し、現在の予算と現在消費されているメモリ量の両方をポーリングできます。 アプリケーションが予算内に留まらない場合、プロセスは断続的に凍結され、他のアプリケーションの実行が許可されるか、作成 API によってエラーが返されます。 IDXGIAdapter3 インターフェイスは、この機能に関連するメソッドを提供します。特に、QueryVideoMemoryInfo と RegisterVideoMemoryBudgetChangeNotificationEventします。

詳細については、常駐に関する Direct3D 12 のトピックを参照してください。

Direct3D 12 スワップチェーンの変更

Direct3D 12 のオーバーヘッド削減を実現するために、既存の Direct3D 11 スワップチェーン機能の一部が非推奨になりました。 その他の変更は、Direct3D 12 の概念に合わせて行われたか、Direct3D 12 機能のサポートを強化するために行われました。

インバリアント バックバッファー ID

Direct3D 11 では、アプリケーションで GetBuffer( 0, ... )呼び出すことができるのは 1 回だけです。 Present呼び出すたびに、返されるインターフェイスのリソース ID が暗黙的に変更されます。 Direct3D 12 では、必要な CPU オーバーヘッドと柔軟なリソース記述子の設計により、暗黙的なリソース ID の変更がサポートされなくなりました。 その結果、アプリケーションは、スワップチェーンで作成されたすべてのバッファー GetBuffer を手動で呼び出す必要があります。 アプリケーションは、Present を呼び出した後、シーケンス内の次のバッファー手動でレンダリングする必要があります。 アプリケーションでは、各 Presentごとに多数のオブジェクトを再作成するのではなく、バッファーごとに記述子のキャッシュを作成することをお勧めします。

マルチアダプター のサポート

マルチ GPU アダプターでスワップチェーンが作成されると、バックバッファーはすべてノード 1 に作成され、1 つのコマンド キューのみがサポートされます。 ResizeBuffers1 を使用すると、アプリケーションは異なるノードにバックバッファーを作成でき、それぞれで異なるコマンド キューを使用できます。 これらの機能により、代替フレーム レンダリング (AFR) 手法をスワップチェーンで使用できます。 マルチアダプター・システム を参照してください。

その他の

  • コマンド キュー オブジェクトは、Direct3D 12 デバイス オブジェクトではなく、CreateSwapChain メソッドに渡す必要があります。
  • 次の 2 つのフリップ モデル スワップ効果のみがサポートされています。
    DXGI_SWAP_EFFECT_FLIP_DISCARDは、アプリケーションがバックバッファーを表示する前に完全にレンダリングする場合や、マルチアダプター のシナリオを簡単にサポートすることに関心がある場合に推奨されます。
    DXGI_SWAP_EFFECT_FLIP_SEQUENTIALは、部分的なプレゼンテーションの最適化に依存するアプリケーションや、以前に提示されたバックバッファーから定期的に読み取るアプリケーションで使用する必要があります。
  • SetFullscreenState はディスプレイを排他的に所有しなくなったため、ユーザーが開始したオペレーティング システム要素をアプリケーション出力の前にシームレスに表示できます。 ボリュームの設定は、この例です。

Direct3D 12 ハードウェア機能レベル

DXGI プログラミング ガイド