ページ 11

DirectXの定数バッファについて

Posted: 2019年5月29日(水) 22:01
by shio
DirectX11をついこの前から始めたものです。
VSSetShaderやGSSetShaderなどで定数バッファを各シェーダーに設定するのだと思うのですが、
これは定数バッファの値を変えるたびに必ず呼び出さなければならないのでしょうか。
借りた書籍に載っていたサンプルコードでは必ず呼び出していたのですが、
値変更時にMap/UnMapだけ行って、VSSetShaderやGSSetShaderは毎回行わないように
コードを書き換えてみたところ、そのまま動いています。

速度を測ってみるとこっちの方が早いので、できればこのようにしたいのですが
この方法は正しいのですか。

Re: DirectXの定数バッファについて

Posted: 2019年6月01日(土) 05:52
by ISLe
定数バッファを設定するのは、VSSetConstantBuffersやGSSetConstantBuffersメソッドなのではないでしょうか?

Re: DirectXの定数バッファについて

Posted: 2019年6月01日(土) 12:10
by shio
すみません。
書き間違えました。
VSSetConstantBuffersを毎回呼び出す必要はないですか?

Re: DirectXの定数バッファについて

Posted: 2019年6月02日(日) 06:26
by ISLe
Direct3D 11では、並列処理を行うためにDeferred Contextという仕組みが導入されました。
Deferred Contextに対して、並列処理をしないImmediate Contextがあります。

デフォルトのコンテキストはImmediate Contextで、必要に応じてDeferred Contextを複数作成し、最後にまとめてImmediate Contextに投げる形になります。

Deferred Contextはステートを引き継がないので、VSSetConstantBuffersやGSSetConstantBuffersメソッドなど毎回呼ぶ必要があります。

shio さんが書きました:
4年前
速度を測ってみるとこっちの方が早いので、できればこのようにしたいのですが
この方法は正しいのですか。
shio さんが書きました:
4年前
VSSetConstantBuffersを毎回呼び出す必要はないですか?
現状においては、毎回呼び出さなくても問題ないでしょう。
ただし、並列処理を利用したほうがもっと速くなる場合があるかもしれませんし、Direct3D 11なら、並列処理を前提として覚えたほうが混乱が少ないかもしれません。

Re: DirectXの定数バッファについて

Posted: 2019年6月02日(日) 09:09
by shio
丁寧に説明してくださってありがとうございました。
並列処理挑戦してみようと思います。