冬到来!
冬はこたつでぬくぬくと Vulkan プログラミング始めたいですね.
やりましょう!
SwiftShader 使えば Vulkan 対応 GPU がなくても CPU でうごくよ.
動作環境
- Ubuntu 18.04
- Windows, macOS でも動くはず(未検証)
- Raspberry Pi 4(aarch64) などでも動くはず
必要なライブラリ
- C++11 compiler
- git, cmake
- SwiftShader Vulkan(Vulkan の CPU 実装. シェーダ実行部分(LLVM)も含まれているはず)
- Vulkan-Loader(ベンダーごとの Vulkan ドライバのロードや管理を楽(?)にするライブラリ)
- Vulkan-Headers https://github.com/KhronosGroup/Vulkan-Headers (Vulkan-Loader をコンパイルするのに必要)
SwiftShader について
SwiftShader の Software Vulkan 実装で自前 Vulkan アプリを作る準備(Linux)
https://qiita.com/syoyo/items/17a74b6809ebf1577ce7
Vulkan-Loader について
Vulkan のドライバロードなどを楽(?)にするものです. 必須ではないのですが, 基本的に使ったほうが便利なので使いましょう.
とりあえず動かすサンプルコード
Vulkan minimal compute を Vulkan-Loader 対応し, swiftshader や vulkan ヘッダーファイルも git sbumodule で一式取ってくる self-contained なのを作りました.
(LunarG Vulkan SDK のインストールは不要です)
swiftshader
branch です.
$ git submodule update --init --recursive
$ ./scripts/bootstrap-linux.sh
$ cd build
$ make
SwiftShader(+ シェーダコンパイラ)も一緒にビルドするので, 時間かかります.
バイナリができたら, Linux
に libvk_swiftshader.so
(Vulkan 実装), vk_swiftshader_icd.json
(Vulkan-Loader 用設定ファイル)もできているはずです.
VK_ICD_FILENAMES
環境変数で, vk_swiftshader_icd.json のパスを指定します.
export VK_ICD_FILENAMES=vk_swiftshader.json
としてからアプリを実行します.
Windows だと set VK_ICD_FILENAMES=...
かな?
実行するとマンデルブロー描画されるはずだよ!
Vulkan プログラミングの情報
- Sascha 先生 https://github.com/SaschaWillems/Vulkan
- Vulkan Programming Series(日本語) https://blog.techlab-xe.net/vulkan-programming-books/
- Vulkan Tutorial https://vulkan-tutorial.com/
発展
NVIDIA や AMD の GPU 積んで Vulkan ドライバが入っていれば, コード(バイナリ)はそのままで GPU で動くはずだよ! 試してみよう!
Vulkan 対応 GPU 持っていない優秀な小学生さまにおかれましては, GPU をクリスマスプレゼントとしておねだりしようね
(NVIDIA Jetson という手もあるよ! > https://developer.nvidia.com/embedded/vulkan)
(Switch で Vulkan プログラミングという奥の手があるかもだけど, 18 才以上じゃないと開発者申請できなくてぴえん 😢 https://developer.nintendo.com/ja/home )
TODO
- シェーダのコンパイルについて記載する
- 画面を出すサンプルを作る
- 優秀な若人さまが, SwiftShader を使い人類史上最速で優秀な Vukan 若人さまへ昇華なされるスキームを確立する旅に出たい