7

私は今少し混乱しているので、いくつかのアイデアを明確にするのを手伝ってくれるよう皆さんにお願いしたいだけです.

HLSL シェーダー (コンピュート シェーダーなど) では、StructuredBuffer sb を宣言できますよね? register(t0) などのレジスタにバインドする必要がありますか?

アプリケーション側からは、CSSetShaderResources(...) を呼び出すことができます。最初の引数 (StartSlot) は、レジスタ宣言の "t" の後ろにある小さな数字と関係がありますか?

たとえば、StartSlot を 0 に設定し、2 番目の引数を 2 に設定した場合、1 つは register(t0) に、もう 1 つは register(t1) にある 2 つの Shader Resource View をバインドすることを API に伝えていますか?

Texture2D tex[10] : register(t0) を宣言すると、CSSetShaderResources(0, 10, ...) を呼び出して設定できます。これは、レジスタ(t0~t9)がすべて使用されているということですか?

このような「急速な」質問で申し訳ありませんが、私は本当に混乱しており、いくつかのテストでは相反する結果が得られているようです...

どんな助けでも大歓迎です。

4

2 に答える 2

4

それでは、順番にお答えしましょう。

もちろん、計算シェーダーで StructuredBuffer を宣言できます (実際には、どのタイプのシェーダーでも宣言できます)。

エフェクト フレームワーク (テクニック) を使用しない場合は、レジスタを宣言する必要があります。これにより、シェーダーはデータからどこを読み取るかを知ることができます (エフェクト フレームワークを使用すると、内部でそれを行うだけですが、明示的に宣言することもできます)。

CSSetShaderResources は、開始スロットから N 個のリソースをバインドするように指示するため、0,2 を使用するという説明は正しいです。

テクスチャの配列については、PIX を実行して確認する必要がありましたが、確かに仰る通りです。

Texture2D tex[10] : register(t0); 

指定したレジスタから始まるスロットが各テクスチャ インデックスに割り当てられることを意味するため、CSSetShaderResources(0,10,srvarray) を呼び出して設定する必要があります。

于 2012-09-29T13:42:08.403 に答える