バッファー内のサブ割り当て

バッファーには、D3D12 でのアプリケーションによる CPU から GPU への広範囲な遷移データの転送に必要なすべての機能があります。 このセクションでは、リソースおよびバッファーの使用と管理のための 4 つの一般的なシナリオについて説明します。

D3D11 と同様に、D3D12 でのバッファーの割り当てを D3D11 での動的/ステージング リソースと比較した場合、D3D12 のアプリケーションでもリソースの使用を宣言する必要がありますが、D3D12 では、開発者はより柔軟かつ厳密にメモリ使用量を管理できます。 バッファーには、サブ割り当てを通じた、低レベルのメモリ管理に必要なすべての機能があります。

このセクションの内容

トピック 説明
さまざまな種類のリソースのアップロード
1 つのバッファーを使用して定数バッファー データと頂点バッファー データの両方を GPU にアップロードする方法と、バッファー内にデータを適切にサブ割り当ておよび配置する方法を説明します。 単一のバッファーを使用すると、メモリ使用量の柔軟性が高まり、アプリケーションではより厳密にメモリ使用量を管理できるようになります。 また、さまざまな種類のリソースをアップロードする D3D11 と D3D12 のモデル間の違いも説明します。
バッファーを使用したテクスチャ データのアップロード
2D または 3D テクスチャ データのアップロードは 1D データのアップロードと似ていますが、アプリケーションでは列ピッチに関連したデータの配置により注意が払われる必要があります。 バッファーは、グラフィックス パイプラインの複数の部分から同時かつ直交的にに使用でき、非常に柔軟です。
バッファーを使用したデータの読み取り
GPU からのデータの読み戻しには (スクリーン ショットのキャプチャなど)、リードバック ヒープの使用が含まれます。
フェンス ベースのリソース管理
フェンスを使用して GPU の進行状況を追跡することで、リソース データの有効期間を管理する方法について説明します。 メモリは、メモリ内 (アップロード ヒープ用のリング バッファーの実装など) の空き領域の使用可能性を慎重に管理するフェンスを使って効率的に再利用できます。

メモリ管理