Vertex として Stream で読み込んでいる Buffer を、
ShaderResourceView で同時にランダムアクセスすることができました。
これはいいね、使えそう。
可能
・Stream + ShaderResourceView
不可能
・StreamOutput + ShaderResourceView
・StreamOutput + StreamInput
これらのパラメータ組み合わせは D3D10_CREATE_DEVICE_DEBUG 時は
かなり細かくチェックしてくれて詳細な説明とともにエラーが出ます。
若干気をつけないといけないのはパラメータ設定の順番です。
IASetVertex BufA
SOSetTarget BufB
Draw
IASetVertex BufB
SOSetTarget BufC
Draw
SOSetTarget NULL
一見問題ないように見えますが、2つ目の IASetVertex BufB では、
BufB がまだ StreamOutput 対象だからだめだと怒られます。
先に SOSetTarget BufC を設定しなおして BufB を切り離すか、
間に SOSetTarget NULL が必要となります。
IASetVertex BufA
SOSetTarget BufB
Draw
SOSetTarget BufC
IASetVertex BufB
Draw
SOSetTarget NULL
同様のことは ShaderResource や StreamInput 側にも言えます。
特に Stream の 2~3 番目に設定された Buffer は NULL による解放を
を忘れがちなので、あとから StreamOutput の Target にしようとすると
エラーです。
ミスを無くすためには Set 系には毎回こまめに NULL を入れた方が
いいようです。
それにしても Direct3D10 + ShaderModel4.0 は、
こうしなければいけないっていう変な制限が少なく、
Buffer やら InstanceID とか組み合わせたり、
結構自由に考えたとおりに動いてくれるのが気持ちいいですね。
(速度や効率はおいといて)