Happy My Life

日常とか技術とか

Vulkanを学ぶ(1) インストール~サンプルのビルド

booth.pmで頒布しているVulkanの薄い本「ちょっとだけVulkan」が最近ちょこちょこと売れていたりする。

booth.pm

この本、初めて頒布したのが技術書典(2016年6月開催)なので、かれこれ2年以上経過しているのだがなぜか売れている。これって日本語のVulkanの情報が少ないからなのかな、と思っているのだが。

実際にSNSなどで情報を追ってみてもVulkanの話題を見かける事はほとんどど無い(ゲーム系の技術はよくウォッチしているのだが)。2年前には無かったが、今は一応本もある。

だが「気になる人は気になるんだろうなぁ」ということで、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をダウンロードしてインストールするだけでよい。インストーラーでの項目はデフォルトでインストールしていくこと。

vulkan.lunarg.com

インストールしたら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に書かれている通りである。