Vulkan SDK サンプルをWindows10上のAndroid Emulatorで動かす手順


# はじめに
Vulkan SDKのサンプルをビルドしてWindows10上のAndroid Emulatorで動かしてみました。
![99.Gaol_for_this_video_full.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/df3f69de-5507-39da-a91b-47f5860ad080.png)
VulkanプログラムをビルドしてAndroid Emulatorで動作させる手順は[Vulkan の設定](https://developer.android.com/ndk/guides/graphics/getting-started)にまとめられていますが、Linuxを前提とした記述となっているため、Windows10で実行するには若干の読み替えが必要です。また、上記サイトには記載されていない準備やAndroidStudioでの設定も必要です。本稿ではこれら諸々の手順を整理してみました。

 (1)[ハードウェアの確認](# ハードウェアの確認)
 (2)[必須アプリケーションのインストール](# 必須アプリケーションのインストール)
 (3)[VulkanSDKのインストール](# VulkanSDKのインストール)
 (4)[ビルド](# ビルド)
 (5)[実行](# 実行)

　※今回使用するVulkanの版数は2020年4月にリリースされたVulkan 1.2です。

#####ユーザ名について：以下の説明ではユーザ名はvlknになっています。ディレクトリを指定する際、ご自身のユーザ名に置き換えてください。


# ハードウェアの確認
GPUがVulkan 1.2に対応している必要があります。使用しているGPUのサイトにて対応しているドライバが提供されているかを確認してください。対応していないGPUを使うと正しく表示されません。冒頭に掲示した画像は対応しているGPU(Geforce GTX1650)の実行結果です。
下記の画像はVulkan1.2非対応(2020年10月時点)GPUの実行例です。![gpu_not_available.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/41db07ca-fa71-79f1-6162-edc65f3cffa6.png)



# 必須アプリケーションのインストール
Vulkan SDKのサンプルをビルドするには事前準備として下記のアプリケーションのインストールが必要です。インストールしてない場合はそれぞれのダウンロードサイトから入手してインストールしてください。括弧内は本稿を書く際に使用したバージョンです。その時点での最新版をご利用ください。

 - Android Studio                (4.0)
 - Visual Studio Community 2019  (16.6)
 - Python                        (3.8.3)
 - CMake                         (3.18.0)
 - Git                           (2.27.0)

#### Android Studioについての留意事項
Android Studioのインストールが完了した後、続けてMissing SDKというウィンドウが現れるます。Nextボタンを押下するとSDK Components Setupウィンドウが表示されます。ここでAndroid SDKのインストールを促されるのでAPIのチェックボックスをチェックしてNextボタンを押下すると、Android SDKのダウンロードとインストールが始まります。
![SDK_Components_Setup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/f26a6e15-180c-22c7-718b-7ceec372e685.png)
Android SDK Location（C:\Users\vlkn\AppData\Local\Android\Sdk）はビルド時に参照するのでメモしておいて下さい。


#### Visual Studio Community 2019についての留意事項
インストーラを起動した後、C++モジュールを選択してください。
![22.VisualStudioCommunity_install_C++_selected.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/fa6eb1b1-6414-f294-4e27-452d27b3e1b3.png)



# VulkanSDKのインストール
[LunarXchangeサイト](https://vulkan.lunarg.com/sdk/home#windows)からWindows用のVulkanSDKインストーラをダウンロードして右クリック”管理者として実行”を実施してください。括弧内は本稿を書く際に使用したバージョンです。その時点での最新版をご利用ください。
 - VulkanSDK                     (1.2.141.2)

インストールフォルダ（C:\VulkanSDK）はビルド時に参照するのでメモしておいてください。


# ビルド
　ビルドは[Vulkanの設定](https://developer.android.com/ndk/guides/graphics/getting-started)に記載してある手順に沿って実施しますが、一部Windows10向けの修正を加えながら実施します。以下、修正箇所には★印を記載しています。

###(1)NDKのインストール
　AndroidStudioを起動して、NDKをインストールします。
　AndroidStudioの「SDK Manager」にて Appearance Behavior > System Settings > Android SDKを選択しSDK ToolsタブでNDK(Side by side)とCMakeにチェックを入れて"OK"ボタンを押下する。下記のオレンジの枠内。
![ndk_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/1850ec67-2dbc-e903-2625-c7f620ecb673.png)


###(2)インポート
コマンドプロンプトを起動して、以下のコマンドを投入する。

#####Android用サンプルのソースコードをダウンロード

```
　>cd C:\VulkanSDK　　★1
　>git clone --recursive https://github.com/LunarG/VulkanSamples.git
```
★1：Vulkan SDKのインストール先（C:\VulkanSDK）に移動


#####Android 用のサンプル プロジェクトを生成
```
　>cd VulkanSamples/API-Samples
　>cmake -DANDROID=ON -DABI_NAME=x86   ★2
　>cd android
　>python compile_shaders.py　　★3
```
★2：Android Emulatorで実行させる場合は、abiにはx86を設定する。
★3：python3ではなくpython

###(3)環境変数設定

[Vulkan の設定](https://developer.android.com/ndk/guides/graphics/getting-started)では、exportコマンドによる設定方法が記載してありますが、Windows10の場合、コントロールパネルから環境変数のウィンドウを起動してシステム環境変数として設定します。下記のオレンジ枠の2箇所。

![variables.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/33647b9b-cf6f-5090-c9d4-12bc97ae111b.png)
ANDROID_SDK_ROOTは、Android SDKのインストール先（C:\Users\vlkn\AppData\Local\Android\Sdk）です。
ANDROID_NDK_HOMEは、ANDROID_SDK_ROOTの下のndkフォルダ内の版数の部分（C:\Users\vlkn\AppData\Local\Android\Sdk\ndk\21.3.6528147）です。

###(4)ビルド
AndroidStudioを起動して、「Welcome to Android Studio」ウィンドウの「Open an existing Android Studio project」をクリック。
「Open File or Project」ウィンドウが開くので、ソースのツリービューで
C:\VulkanSDK\VulkanSamples/API-Samples\android\build.gradle
を選択して、OKボタンを押下。
![Open_File_or_Project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/02759a66-de35-eec1-3eac-88ac3ddabe7b.png)

AndroidStudioのメインウィンドウが開くので、左下部のビルドボタンを押下するとビルドが始まる。
![build_button.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/7aaa63b4-f7e1-a985-38ee-612e94e21718.png)

# 実行
ビルド完了後、実行することになりますが、下記のようにメインウィンドウ上部のデバイスboxが「No Devices」の場合は、「No Devices」の右隣りの▼印を押下してOpen AVD Managerを起動してdeviceを作成してください。（deviceの作成方法は割愛）
![no_device.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/a494d0cd-4f89-b3c5-08c6-1a2450acd9cc.png)

デバイス作成後、デバイスbox右隣りの緑の三角形を押下すると冒頭に掲示したようにAndroid Emulatorが起動してディスプレイにVulkanプログラムが表示されます。ここでは、デバイスとして「Pixel 3 XL API29」を指定しています。
![run_with_device_ok.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/54b1d4ce-9c7a-722d-537d-8a7171d8ccfb.png)

###APIレベルの影響
APIレベルが異なると正常に表示されないことがあります。以下に「Pixel 3 API30」で実行した場合の表示を示します。デバイスは起動されましたが、ディスプレイには何も表示されませんでした。![api_not_suitable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/978387/f0376c26-24fd-7c0a-775d-5caccf6734e8.png)
正常に表示されない場合、APIレベルを変えて試してみてください。


# おわりに
Vulkan SDK サンプルをWindows10上のAndroid Emulatorで実行させるための一連の手順について記しました。ダウンロード時間も込みで1時間半あれば一通り実施できると思います。
この段階でまだプログラムを一行も書いていませんが、ようやく動作確認できるプログラムを作ることができる状況になったと思います。
ここまで読んでいただきありがとうございました。