背景
- Android で Vulkan でレイトレーシングや機械学習したい.
- Android で Vulkan(C/C++)開発を効率化したい
- Gradle or Android Stuio で Java(Kotlin)経由で JNI で Vulkan とかめんどくさすぎる.
- とりあえず compute 実行でよいので, Vulkan 開発と動作チェックする仕組みを作りたい
ねんがんの Pixel4 + Termux で Vulkan minimal compute の実行に成功したぞ!!!! 🎉🎉🎉🎉🎉🤩🤩🤩🤩🤩🤩🤩🤩😍😍😍😍😍😍😍✌️✌️✌️✌️✌️✌️✌️✌️💪💪💪💪💪💪 thanks to @ilmarihei 's advice I can finally got Vulkan running on Android + Termux!!! 🎊🎊🎊🎊🎊🎊 pic.twitter.com/Y9FHhr8fZY
— Syoyo Fujita 🌸 RayWa(Ray and Peace) (@syoyo) January 10, 2020
できました.
情報
きっかけは ilmari 先生のツイートでした.
Termux + Vulkan runner on aarch64 is go! 🥳🥳🥳🚀📲💥
— Ilmari Heikkinen (@ilmarihei) December 20, 2018
調べると /system/lib64/libvulkan.so
があります.
Android のドキュメントでも vulkan.so があるとありました. Vulkan は C API, .so 自体も C のみで実装(のはず)ですので, C++ ABI 周りの問題もあまりないはずですから, Termux でも直接呼べる(NDK の clang とバージョンや STL を合わせる必要がない)と想像できます.
実行
いつものように, Termux で vulkan_minimal_compute で動作を試してみます.
Vulkan のヘッダーファイル(vulkan_android.h)は, x11 関連あたりを pkg install すれば, Termux に入っていました.
(Termux では, /usr
は /data/data/com.termux/files/
にあります)
もしファイルがなければ, vulkan-headers(+ Vulkan-Loader) を使うのも手でしょう
冬到来! SwiftShader を使い人類史上最速で Vulkan プログラミングをはじめよう!
https://qiita.com/syoyo/items/ef5518f8c3638e50a6b9
あとは /system/lib64/libvulkan.so
とリンクするようにすればよいです!
感想
しかしスマホの画面では, 外部物理キーボードつかってもめんどいです.
Snapdragon 855 あたり搭載した GPU 性能のよいタブレットがほしいところです.
TODO
- Fluxbox + VNC だと quantized color モードになるようで, 画像を Display(ImageMagick)してもきちんと色が出ないので 32bit color になる設定を見つける.
-
画面に出す
- X11 + XCB Surface でいけるか?
- Flutter で GUI を作り, ffi で Vulkan 関数を呼ぶ
- Termux へ ssh ログインだとなんだか反応わるい. VNC も不安定なのでなんとかしたい.
- Termux から PC Linux の X11 にはなぜか飛ばせない問題を解決する(ポート or username 問題?)