2017-01-22 3 views

答えて

4

アップロードヒープリソースには、読み込みに関連するコストがあります。これは既定のリソースよりも高くなります。

定数バッファの場合、これは一般的には良いです(ライトワンス/リードワンスシナリオのように)が、他の場合(大きな頂点/インデックスバッファ)は一般的に好ましくありません。

一般的なアプローチでは、アップロードヒープ内に1つ、デフォルトヒープ内に1つのリソースを作成し、アップロードリソースにデータをコピーしてから(前述のマップを使用して)、CopyResourceまたはCopyBufferRegionをデフォルトのリソースに追加します。

ResourceBarrierと移行状態を使用して、リソースコピーの前後に正しいリソース状態が設定されていることを確認してください。

コピーを呼び出す前に、リソースはコピーの前にD3D12_RESOURCE_STATE_COPY_DESTになければなりません。また、リソースに依存する読み取りフラグのいずれかが必要です。

GPUコピーのコピーコマンドキューを使用することができます(ダイレクトコマンドリストでの実行を避けることができます)が、リソースを使用する前にコピーが完了していることを確認する必要があります(フェンスを使って)。特に場合は(あなたが使用することができますので、組み合わせるメモリの書き込み -

マルチエンジンは、あなただけ_writing_リソースにある場合、あなたは直接書き込み、およびアップロードを使用していないことにより、より高速なパフォーマンスを得ることがありますが、MSDN here

+0

に記述されていますあなたはこれを頻繁にやっています)。これは、シナリオの最適化/確認が必要なものの1つです。 – cmaughan

+0

@cmaughanこれはバッファの場合にのみ当てはまると言えます。そのようにテクスチャをマップする方法はありません。 – galop1n

+0

@ galop1n Nope;あなたもテクスチャでそれを行うことができます。しかし、もう一度、より速いプロファイルを作成する必要があります。 – cmaughan

関連する問題