6

私は Direct3D 11 で遊んでいましたが、HLSLStructuredBuffer<T>は Shader Resource View (SRV)RWStructuredBuffer<T>にバインドする必要があるのに対し、Uniform Access View (UAV) にバインドする必要があることを発見して驚きました。これを詳しく調べてみると、すべての読み取り/書き込みシェーダー リソースには UAV が必要であるのに対し、読み取り専用リソースには SRV が必要なようです。

UNORDERED_ACCESS_VIEW_DESC構造とSHADER_RESOURCE_VIEW_DESC構造を比較すると、UAV は、SRV を記述するための情報のサブセットで記述されます。UAV と SRV をパイプライン ステージに設定する API も非常に似ています。2 つのインターフェースのドキュメントでさえ、2 人の異なるテクニカル ライターによって説明されている同じ概念のように見えます。

  • SRV: シェーダー リソース ビュー インターフェイスは、レンダリング中にシェーダーがアクセスできるサブリソースを指定します。
  • UAV: ビュー インターフェイスは、レンダリング中にパイプラインがアクセスできるリソースの部分を指定します。

私は D3D11 に精通しているわけではありませんが、UAV の概念が API を複雑にし、あまりメリットがないように思えます。SRV と UAV の違いは、ハードウェアへのマッピングを改善するためですか、それとも技術的な制限のためですか? それとも、単に API の設計上の決定でしたか?

4

1 に答える 1

2

この区別は、主にパフォーマンス上の理由から導入されたものと思われます。読み取りのみにアクセスされるデータのパフォーマンス特性は、任意の書き込みと読み取りを組み合わせてアクセスできるデータとはまったく異なります。

ほとんどのハードウェアでは、最高のパフォーマンスを得るために、リソースをサポートするメモリをさまざまな種類のメモリに割り当て、キャッシュ方法、スウィズル/タイル化、整列方法などを決定するさまざまなパラメーターを設定する必要があります。 API レベルでは、リソースの作成時とバインド時に、リソースの使用目的に関する詳細情報をドライバーに提供できます。

于 2014-03-31T20:10:31.633 に答える