2016-07-22 10 views
1

ID3D12GraphicsCommandList::SetGraphicsRootSignatureメソッドの存在について少し混乱しています。私がthis MSDN pageのことを理解してから、それは唯一有効なのはSetPipelineStateの後に呼び出され、パイプライン状態オブジェクトの作成時に提供されたものと同じルート署名を与えることです。それがそうであれば、そこに暗黙のうちにどんな利益があるのでしょうか?この方法を使用する他の方法はありますか?D3D12のSetGraphicsRootSignatureのポイントは何ですか?

答えて

3

CPUの最適化では、ルート署名スロットから実際のバインディングまでのマッピングの一部を内部的に準備することができます。異なるパイプライン状態オブジェクト間でルート署名を共有する場合、この作業は、パイプライン状態オブジェクトごとに1回ではなく、ルート署名ごとに1回行うことができます。

SetGraphicsRootSignatureに電話する頻度は、SetGraphicPipelineStateと少なくなります。これが理由です。

+0

私はそれを買うことができますが、複数のグラフィックスパイプライン状態が内部で同じルートの署名を参照できると期待していました。 – Trillian

1

DirectX 12の「ルート署名」は、CPUデータ構造とGPUシェーダ言語の実行との間でデータを共有するための共通のレイアウト情報を提供します。 DirectX 12では、使用するルートシグネチャの数、使用時期、ルートシグネチャを必要とするパイプライン状態オブジェクトをプログラマが決定します。 Direct3D 11には、本質的に常にアクティブな「ルート署名」が1つあり、非常に大きくなっています。

ルートシグネチャはかなりの頻度で変更することができますが、1:1対応ではなくルートシグネチャ数が多く、PSO数が多いという前提があります。 DirectX Tool Kit for DirectX 12で簡単にするために

、我々は唯一のいくつかの異なるルート署名を使用していても、ルート署名に我々はIEffect::Apply方法にPSOを設定するたびに設定してください。

関連する問題