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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shio
記事: 8
登録日時: 2ヶ月前

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

#1

投稿記事 by shio » 2ヶ月前

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

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

ISLe
記事: 2645
登録日時: 8年前
連絡を取る:

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

#2

投稿記事 by ISLe » 2ヶ月前

定数バッファを設定するのは、VSSetConstantBuffersやGSSetConstantBuffersメソッドなのではないでしょうか?

shio
記事: 8
登録日時: 2ヶ月前

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

#3

投稿記事 by shio » 2ヶ月前

すみません。
書き間違えました。
VSSetConstantBuffersを毎回呼び出す必要はないですか?

ISLe
記事: 2645
登録日時: 8年前
連絡を取る:

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

#4

投稿記事 by ISLe » 2ヶ月前

Direct3D 11では、並列処理を行うためにDeferred Contextという仕組みが導入されました。
Deferred Contextに対して、並列処理をしないImmediate Contextがあります。

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

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

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

shio
記事: 8
登録日時: 2ヶ月前

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

#5

投稿記事 by shio » 2ヶ月前

丁寧に説明してくださってありがとうございました。
並列処理挑戦してみようと思います。

返信

“C言語何でも質問掲示板” へ戻る