私は 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 の設計上の決定でしたか?