「SPIRV-Reflect」の版間の差分
Administrator (トーク | 投稿記録) ページの作成:「'''SPIRV-Reflect'''(コマンドはすべて小文字:spirv-reflect)とは、Vulkan SDKに含まれるツールのひとつで、SPIR-Vのバイトコー…」 |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の3版が非表示) | |||
| 8行目: | 8行目: | ||
間違いなく[[バグ]]の温床になる。 | 間違いなく[[バグ]]の温床になる。 | ||
そこで一度[[SPIRV]]に[[コンパイル]] | そこで一度[[SPIRV]]に[[コンパイル]]した後に、そこから整形・整頓されたデータ構造を抽出しようというのがspirv-reflectである。。[[プログラマー]]が自由に書いたソースコードから抽出するよりマシ、「データを送る処理の書き換えも楽になる」だろうという代物である。 | ||
[[プログラマー]] | |||
== 備考 == | == 備考 == | ||
spirv-reflectは[[yaml]] | spirv-reflectは[[yaml]]形式でのデータ構造の出力もできる。その情報から自前で[[データベース]]でいう[[ORM]]みたいなものを作り「データを送る処理」を全自動化するのが現実的な解決策であろう。たぶんこれが一番バグを減らせると思う。 | ||
$ spirv-reflect --yaml render_vs.spv | $ spirv-reflect --yaml render_vs.spv | ||
== 備考2 == | |||
「[[SPIRV-Cross]]」の--reflectオプションの方がパーサーが豊富な[[JSON]]で出力されるので圧倒的に扱いやすいと思う。 | |||
$ spirv-cross render_vs.spv --reflect | |||
== 外部リンク== | == 外部リンク== | ||
2022年11月28日 (月) 06:41時点における最新版
SPIRV-Reflect(コマンドはすべて小文字:spirv-reflect)とは、Vulkan SDKに含まれるツールのひとつで、SPIR-Vのバイトコードに含まれるデータ構造を表示するもの。
概要[編集 | ソースを編集]
GPUでシェーダーを実行する際にはシェーダー本体(プログラム)とデータ(変数)をCPUからGPUへ送る必要がある。 この際に「CPUから送り込まれた変数」と「シェーダーで使っている変数」のデータ構造が一致しないと当然ながら暴走する。
ただ、このデータ構造をプログラマーが自由に書いたソースコードから目視で取得するは大変な作業である。当然ながらシェーダーのソースコードを書き換えたら「データを送る処理」も書き換えなければならない。 間違いなくバグの温床になる。
そこで一度SPIRVにコンパイルした後に、そこから整形・整頓されたデータ構造を抽出しようというのがspirv-reflectである。。プログラマーが自由に書いたソースコードから抽出するよりマシ、「データを送る処理の書き換えも楽になる」だろうという代物である。
備考[編集 | ソースを編集]
spirv-reflectはyaml形式でのデータ構造の出力もできる。その情報から自前でデータベースでいうORMみたいなものを作り「データを送る処理」を全自動化するのが現実的な解決策であろう。たぶんこれが一番バグを減らせると思う。
$ spirv-reflect --yaml render_vs.spv
備考2[編集 | ソースを編集]
「SPIRV-Cross」の--reflectオプションの方がパーサーが豊富なJSONで出力されるので圧倒的に扱いやすいと思う。
$ spirv-cross render_vs.spv --reflect