シェーダーリフレクション [DirectX10]

シェーダーの中身がどのようなものが詰まっているかを取得するための方法です。
なかなか情報がなくて大変でした。
やりたいこととしては、シェーダーのバイナリファイルから
どのような変数およびデータ型がどの位置に存在するのかと知る方法となります。D3DX9には存在していたID3DXConstantTableのようなものを
D3D10ではどうやるかという感じになるでしょうか。

サンプルソース

各種リフレクションのインターフェースを取得して、中身を調査します。

実行結果

この結果は、BasicHLSL10のシェーダーコードを元にしています。
どうやら、グローバルにおいた無名の定数バッファは$Globalsという名前で配置されるようです。

また、関数の引数で uniform と宣言したものについては、
$Paramsという名前の定数バッファとして処理されるようです。

さらに、Descでの値は$Globalsの値を考慮していないっぽいです。

まとめ

いろいろと注意点はありますが、これでコンパイル済みシェーダーファイルを利用する目処が立ちそうです。
また、このリフレクションはCore APIに搭載されているため、
別途のd3dx10_**.dllに依存しないのもいい点だと思います。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする