booth.pmで頒布しているVulkanの薄い本「ちょっとだけVulkan」が最近ちょこちょこと売れていたりする。
この本、初めて頒布したのが技術書典(2016年6月開催)なので、かれこれ2年以上経過しているのだがなぜか売れている。これって日本語のVulkanの情報が少ないからなのかな、と思っているのだが。
実際にSNSなどで情報を追ってみてもVulkanの話題を見かける事はほとんどど無い(ゲーム系の技術はよくウォッチしているのだが)。2年前には無かったが、今は一応本もある。

Vulkan Programming Guide: The Official Guide to Learning Vulkan (OpenGL)
- 作者:Sellers, Graham,Kessenich, John
- 発売日: 2016/10/31
- メディア: ペーパーバック
だが「気になる人は気になるんだろうなぁ」ということで、2年経ったしVulkanの状況も何かしら変わっているだろう、ということで再度インストールから調べて続けてBlogに掲載していこうかと思っている。
最終的には技術書風に再編集してbooth.pmにて薄い本として頒布する予定。
Vulkanとは
このWebサイトを見てる時点で説明は不要だと思うので省略。詳細はVulkan (API) - Wikipediaを参考に。
動作環境
VulkanはWindows、Linux、Androidでサポートしている。ここでは最もオーソドックスなWindows環境でビルド、実行していく。他の環境でのビルド等については気が向けば。
環境の詳細は以下の通り。
- Windows 10 Home (64bit)
- Vulkan SDK 1.1.97.0
- Visual Studio 2017 Community Edition
- NVIDIA GeForce GTX 1070 (グラフィックスドライバは最新版)
インストール
https://vulkan.lunarg.com/からSDKをダウンロードしてインストールするだけでよい。インストーラーでの項目はデフォルトでインストールしていくこと。
インストールしたらC:\VulkanSDK/<バージョン番号>のフォルダができており、それ以下にいろんなファイルがインストールされている。ちなみに今回は、C:\VulkanSDK\1.1.97.0\フォルダ以下に様々なファイルがイントールされている。
フォルダ構成
C:\VulkanSDK\1.1.97.0\フォルダ以下のファイル構成は以下のようになっている。
2019/02/05 23:10 <DIR> Bin 2019/02/05 23:11 <DIR> Bin32 2019/02/05 23:12 <DIR> Config 2019/01/24 05:45 113,664 ConfigureRT.exe 2019/02/07 19:41 <DIR> Demos 2019/02/05 23:10 <DIR> Documentation 2019/02/10 14:56 <DIR> glslang 2019/02/05 23:12 <DIR> Include 2019/02/05 23:11 <DIR> LayerFactory 2019/02/05 23:10 <DIR> Lib 2019/02/05 23:11 <DIR> Lib32 2019/01/24 05:21 48,971 LICENSE.txt 2019/01/24 05:21 20,346 lunarg.bmp 2019/02/05 23:10 <DIR> RunTimeInstaller 2019/02/10 14:51 <DIR> Samples 2019/01/24 05:21 1,523 SDK_LICENSE.rtf 2019/02/05 23:12 <DIR> shaderc 2019/02/05 23:11 <DIR> Source 2019/02/10 12:42 <DIR> spirv-tools 2019/02/05 23:11 <DIR> Templates 2019/02/05 23:11 <DIR> Third-Party 2019/02/05 23:11 <DIR> Tools 2019/02/05 23:11 <DIR> Tools32 2019/01/24 05:21 190,171 Vulkan.ico
実行ファイルやライブラリ、サンプルコードなどなど、様々なファイルがインストールされている。
ここではDemosフォルダとSamplesフォルダを中心にみていく。
Demosフォルダ
DemosフォルダにはVulkanのシンプルなアプリケーションのソースコードが格納されている。DemosフォルダのコードはVisualStudioのslnファイルがあるので、VisualStudioがあればすぐにビルド、実行できる。
このフォルダのソースコードは、VisualStudio2015向けのものでありVisualStudio2017で開くと、VS2017向けにインポートしてよいか?とダイアログが出力されるのでナニも考えずインポートする。
インポートした結果、ソリューションファイルは以下のように構成されている。
さて、いくつかのサンプルコードがあるのだがこのフォルダでのメインは、テクスチャつきの立方体がぐるぐる回るサンプルコードがある。
ちなみに、同じアプリケーションがC言語(vkcube.c)、C++(vkcubecpp.cpp)で書かれている。やっている処理はどちらも同じなので好きな方をみていけばよいかと。個人的にはC++を追いかける。
他にvulkaninfoがあるが、これはVulkanから情報を取得するためのサンプルコードとなっている。Vulkanではは、実行環境の詳細な情報を取得するのも割と重要になってくるため、このようなサンプルコードもある。
Samplesフォルダ
サンプルコードは、Demoフォルダのソースコードの他にSamplesフォルダもある。
が、ここに含まれているサンプルのコードは何か単体のアプリケーションというわけではなく、より詳細な解説をするためのコードとなっている。これらのコードはビルド・実行できるが、機能に特化した説明をしているため、アプリケーションが起動しても一瞬で終了する感じとなっている。ので、動作確認はほどほどにコードを読み込んで進めて行くのがよいかもしれない。
とはいえ、ビルドした結果がどのように実行されるかは知りたいのでビルドしてみる。
ビルド方法としては以下の2つの方法がある。
- 用意されているbuild_windows_samples.batファイルを実行してビルド
- cmake等を駆使して手動でビルド
私が試した際にはbuild_windows_samples.batファイルでビルドする方法はうまくいかなかったので、手動でビルドすることにした。
あと、ドキュメントに書かれているビルドの手法がVisualStudio2015向けなので、VisualStudio2017向けにビルドするためには、いくつか指定を変更する必要がある。
サンプルコードのドキュメント&ビルド方法はfile:///C:/VulkanSDK/1.1.97.0/Documentation/vulkan_samples.html に書いてある。ちなみに、ビルドする際にはcmakeとpython3が必要である。
cmakeとpython3をインストールする
ドキュメントに書かれているように、まずWindowsのcmakeとpython3をインスト-ルする。これらのソフトウェアは公式サイトで頒布されているパッケージを使ってインストールしてもよいのだが、ここではwindows向けの有名なパッケージマネージャであるChocolateyを使ってインストールしていく。Chocolateyを使うと、MacのHomebrewぽくインストールできるので楽ちん。
Chocolateyのインストール方法を参考にインストールする。
Chocolateyをインストールしたら、あとは次のコマンドでcmakeとpython3をインストールする。この際に開くコマンドプロンプトは「管理者として実行」で開くことを忘れずに。そうしないとインストールできないので。
choco install python cmake
MS builds for Visual Studio 2017をインストール
次にMS builds for Visual Studio 2017をインストールする。デフォルトではインストールされないようなので、https://visualstudio.microsoft.com/ja/downloads/ Visual Studio 2019 for Windows および Mac のダウンロード から MS builds for Visual Studio 2017を選択してダウンロード、インストールする。
Path設定
Windowsのコマンドプロンプト向けにパス設定するのはこの4つ。
- C:\Program Files\CMake\bin
- C:\Python37\
- C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin
- C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
これでようやくビルドする環境ができた。
各種ツール、サンプルをビルドする
コマンドプロンプトを開き、最初にVsvars32.batファイルを実行する...とマニュアルには書かれているがVisualStudio 2017には存在しないので、その後継であるVsDevCmd.batファイルを実行する。このバッチファイルはC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Toolsフォルダにある。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools>VsDevCmd.bat ********************************************************************** ** Visual Studio 2017 Developer Command Prompt v15.9.4 ** Copyright (c) 2017 Microsoft Corporation **********************************************************************
つぎにSamplesのソースコードをビルドするのに必要なツールであるglslangとspirv-toolsを先にビルドする。そしてようやくSamplesフォルダのコードがビルドできる、という流れとなる。
まずは、glslangのビルドから。
> cd C:\VulkanSDK\<sdk version>\spirv-tools > mkdir build > cd build > cmake -G "Visual Studio 15 2017 Win64" .. > msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet > msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet
あと、spirv-toolsとsamplesフォルダもビルドするのだがビルドまでの流れは同じとなる。ので以下のようにビルドする。
spirv-toolsのビルド
> cd C:\VulkanSDK\<sdk version>\spirv-tools > mkdir build > cd build > cmake -G "Visual Studio 15 2017 Win64" .. > msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet > msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet
samplesフォルダのビルド
> C:\VulkanSDK\<sdk version>\Samples > mkdir build > cd build > cmake -G "Visual Studio 15 2017 Win64" .. > msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet > msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet
ビルド後の実行ファイルは、C:\VulkanSDK\1.1.97.0\Samples\build\API-Samples\Debug フォルダに生成されている。
このSamplesフォルダのソースコードの内容についてはfile:///C:/VulkanSDK/1.1.97.0/Documentation/samples_index.htmlに書かれている通りである。