記述子のコピー
デバイス インターフェイス上の ID3D12Device::CopyDescriptors および ID3D12Device::CopyDescriptorsSimple メソッドでは、記述子の即時のコピーのため CPU が使用されます。 CPU または GPU 上の複数のスレッドで書き込みが潜在的に競合しない限り、これらをフリー スレッドと呼ぶことができます。
記述子の即時コピー (CPU タイムライン)
一連の記述子範囲として指定されるソース記述子 (コピー元) の数は、別の一連の記述子範囲として指定される宛先記述子 (コピー先) の数と同じでなければなりません。 それ以外の場合、ソース範囲と宛先範囲を揃える必要はありません。 たとえば、散在する記述子のセットを隣接する宛先にコピーするか、その逆にコピーするか、または組み合わせてコピーします。
コピー操作には、ソースと宛先の両方として複数の記述子ヒープが関係する可能性があります。 記述子ハンドルをパラメーターとして使用すると、コピー メソッドはヒープを記述子が格納される場所ではなく単なるメモリと見なします。
記述子ヒープの種類はコピー元とコピー先で一致していなければならないため、メソッドは単一の記述子ヒープの種類を入力として受け取ります。 ドライバーは、特定のコピー操作におけるすべての記述子のヒープの種類を認識する必要があるため、コピー操作に関係するデータのサイズを認識しています。 またドライバーは、カスタムのコピー作業を実行しなければならないことがあります (特定の記述子ヒープの種類がそれ (実装の詳細) を保証する場合)。 記述子ハンドル自体はポイントしている種類を識別しないため、コピー操作には追加のパラメーターが必要です。
1 つの範囲の記述子をある場所から別の場所にコピーする単純なケースでは、CopyDescriptors の代わりに CopyDescriptorsSimple という API を使用できます。
このようにデバイス ベースで (CPU タイムライン) 記述子をコピーする方法の場合は、ソース記述子がシェーダーに認識されない記述子ヒープに属している必要があります。 宛先記述子は、CPU に認識される (シェーダーに認識されるかどうかは無関係) どの記述子ヒープに属していてもかまいません。
関連トピック