月別アーカイブ: 2016年8月

Android で Vulkan Sample を走らせるまでの手順

Android で Vulkan の sample を build して走らせます。基本的には下記ページの通りです。Windows の場合多少手順が増えます。
https://developer.android.com/ndk/guides/graphics/getting-started.html

● Windows の場合

1. VisualStudio 2015 install (Community で構いません)

2. JDK install

3. AndroidStudio (2.1.3) をダウンロードして install します

・Android Virtual Device は無くて構いません
・初回起動時に Android SDK も install します

4. Android NDK を download します

・android-ndk-r12b-windows-x86_64.zip を任意の場所に展開します。
・下記のように AndroidStudio の中から download しても構いません

Tools -> Android -> SDK Manager -> Appearance & Behavior -> System Settings -> Android SDK -> SDK Tools -> NDK にチェックを入れて Apply

5. Phyton 3 を install します (3.3 以上)

6. cmake を install します。

7. git を install します。

8. Start Menu から “VS2015 x64 Native Tools Command prompt” を開きます

・msbuild にパスが通っていれば他の terminal でも問題ありません

9. Command prompt で作業します

update_external_sources.bat 実行時点で下記のコマンドにパスが通っている必要があります
・msbuild.exe
・python.exe
・cmake.exe
・git.exe

git clone https://github.com/googlesamples/vulkan-basic-samples.git
cd vulkan-basic-samples/LunarGSamles
update_external_sources.bat --all
cd API-samples
cmake -DANDROID=ON -DANDROID_ABI=all

10. AndroidStudio を起動して NDK のパスを設定します

・menu の File -> Project Structure -> Android NDK location

11. AndroidStudio に Project を Import します

・menu の File -> New -> import Project …
・「vulkan-basic-samples/LunarGSamples/API-samples/android」を指定
・ロードには時間がかかります。
・Gradle の Update を促すメッセージが出ますが無視します。

12. Build &実行

・Project 一覧から drawcube を選択して menu の Build -> Make Moduel ‘drawcube’
・Configuration で drawcube を選択して menu の Run -> Run ‘drawcube’

● Windows 以外

Mac OS X/Linux でもビルドできます。

● 動作端末

Android 7.0 が必要です。Nexus Player と Nexus 5X で確認しました。Nexus 9 では動作しませんでした。SHILED でもそのままでは動かないようです。こちら にまとめています。

関連ページ
Vulakn Android

関連エントリ
Linux で Vulkan を使う (GeForce, RADEON, Intel)
低レベル API 対応 GPU まとめ (D3D12,Vulkan,Metal)

Linux で Vulkan を使う (GeForce, RADEON, Intel)

前回の確認で使用した Vulkan 対応ドライバのインストール手順のメモです。環境はいずれも Ubuntu 16.04LTS。事前に ssh 等外部からアクセスできる手段を用意しておくことをお勧めします。

● AMD RADEON RX 480 他

下記ページの手順に従うだけで問題なく動作しました。

How-To Install/Uninstall AMD Radeon™ Software AMDGPU-PRO Driver for Linux® on an Ubuntu System

(1) ドライバをダウンロードします

AMDGPU-PRO Driver for Linux® – Release Notes

(2) Download したファイルと同じ場所で下記の通り実行

tar -Jxvf amdgpu-pro_16.30.3-315407.tar.xz
cd amdgpu-pro-driver
./amdgpu-pro-install
sudo usermod -a -G video $LOGNAME

(3) 再起動します

◎ Uninstall 手順

他の GPU に変更する場合は先にドライバの uninstall が必要です。下記コマンドを実行するだけです。

amdgpu-pro-uninstall

他の GPU Driver でも同様ですが、uninstall せずに他の GPU に差し替えると問題が生じる可能性があります。ログイン後に何も表示されなくなった場合は CTRL + ALT + F1 で Console に降りてから上のコマンドを。モニタに何も表示されない場合は外部から ssh でログインして driver を uninstall します。

なお試したところ RX480 だけでなく GCN 1.1 の R3 (APU Athlon 5350 Kabini RADEON HD8400) でも同じドライバで Vulkan が使えるようになりました。ただし自己責任で。

● Intel HD Graphics

基本的には下記ページの説明通りです。

Vulkan tools and drivers

(1) ドライバをインストールします

sudo apt-add-repository ppa:canonical-x/vulkan
sudo apt update
sudo apt install vulkan-utils mesa-vulkan-drivers

(2) xorg.conf を作成

/etc/X11/xorg.conf を作ります。内容は下記の通り (参考にしたもの)

Section "Device"
   Identifier "Intel Graphics"
   Driver     "intel"
   Option     "DRI"   "3"
EndSection

(3) 再起動します

◎ Uninstall 手順

他の GPU に変更する場合は先にドライバの uninstall が必要です。Uninstall しないと GeForce Driver が動作しませんでした。

sudo apt remove mesa-vulkan-drivers

● NVIDIA GeForce

(1) ドライバの検索で GPU を選んだあと、OS 「Show All Operating Systems」 から 「Linux 64-bit」 を選択

NVIDIAドライバダウンロード

(2) Console で作業します

CTRL + ALT + F1 のあとログイン、または他の PC から ssh 。

(3) 下記の通り実行

sudo service lightdm stop
sudo ./NVIDIA-Linux-x86_64-367.44.run

(4) 終わったら再起動します

◎ Uninstall 手順

ドライバの uninstall 手順は下記のとおりです。

sudo nvidia-uninstall

● SDK と動作確認など

◎ vulkaninfo コマンド

sudo apt install vulkan-utils
vulkaninfo

◎ Package の場合

(1) https://vulkan.lunarg.com から download

(2) install と動作確認

sudo apt install git cmake build-essential bison libx11-dev libxcb1-dev libpng-dev
sh ./vulkansdk-linux-x86_64-1.0.21.1.run
cd VulkanSDK/1.0.21.1
./build_examples.sh
cd examples/build
./cube

◎ Source Code の場合

sudo apt install git cmake build-essential bison libx11-dev libxcb1-dev
git clone https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers
cd Vulkan-LoaderAndValidationLayers
./update_external_sources.sh
cmake -H. -Bdbuild -DCMAKE_BUILD_TYPE=Debug
cd dbuild
make -j
cd demos
./cube

関連ページ
Linux で Vulkan を使うまでの手順 (ドライバインストール)

関連エントリ
低レベル API 対応 GPU まとめ (D3D12,Vulkan,Metal)

低レベル API 対応 GPU まとめ (D3D12,Vulkan,Metal)

低レベル API の対応状況を調べるために、さまざまな GPU でプログラムを走らせてみました。
下記はそのまとめです。実際に試した結果は Y/N 、対応状況が判明しているが動作未確認のものは括弧付きの (Y)/(N) にしています。

GPU Direct3D 12 Vulkan
Windows
Vulkan
Linux
Metal 確認 Device
Intel HD Graphcis Gen7 N N Y Y Ivy Bridge 3615QM他
Intel HD Graphcis Gen7.5 Y N Y (Y) Haswell i7-4790K
Intel HD Graphcis Gen8 Y (N) (Y) (Y) Braswell N3150
Intel HD Graphcis Gen9 Y Y (Y) (Y) Skylake i7-6700K
GeForce Fermi N N (N) (N) GeForce GTX 560 Ti
GeForce Kepler Y Y (Y) Y GeForce GTX 760他
GeForce Maxwell GM1xx Y Y (Y) (Y) GeForce GTX 750 Ti
GeForce Maxwell GM2xx Y Y Y (Y) GeForce GTX 960
GeForce Pascal Y Y (Y) (Y) GeForce GTX 1070
RADEON GCN 1.0 Y Y (?) (Y) RADEON HD 7750
RADEON GCN 1.1 Y Y Y (Y) RADEON R3 HD8400
RADEON GCN 1.2 (Y) (Y) (Y) (Y)
RADEON GCN Polaris Y Y Y (Y) RADEON RX 480

・Windows 10 x64 (1607), Ubuntu 16.04LTS, Mac OS X 10.11 El Capiitan

● NVIDIA GeForce

Fermi は 560 Ti で試しましたが動作しませんでした。当初 DirectX12 に対応予定とのことでしたがかなり遅れており、諦めた方が良いかもしれません。
Kepler 以降はすべての API に対応しています。Linux の Vulkan は Ubuntu 16.04LTS + GeForce GTX 960 の組み合わせのみ確認しました。

● Intel HD Graphics

Intel HD Graphcis は、API や OS によって対応状況にかなりばらつきがあります。Direct3D 12 は Haswell 世代 (7.5) 以降のみ対応していますが Metal は Ivy Bridge (Gen7) でも動きます。逆に Windows の Vulkan は Skylake (Gen9) でないと動作しませんでした。また下記の beta 版の driver が必要になります。

Intel Graphics Test Driver

更にややこしいことに、同じ Vulkan でも Linux だと Haswell (Gen7.5) でも動作することがわかりました。BayTrail-D の Celeron J1900 (Gen7) でも動作したので、Ivy Bridge 以降で使えるものと思われます。

● AMD RADEON

GCN 以降は対応、GCN よりも前の GPU は非対応とわかりやすいのが RADEON です。ただし Release されている Driver の version は世代によって多少違いがあります。Linux で確認したのは RX480 (Polaris) のみです。

How-To Install/Uninstall AMD Radeon™ Software AMDGPU-PRO Driver for Linux® on an Ubuntu System

2016/08/30 訂正: GCN 1.1 + Vulkan は Linux で動作しませんでした。現時点で Linux 向けドライバがリリースされているのは GCN 1.2 以降と思われます。
2016/08/30 更に訂正: APU Athlon 5350 (R3 RADEON HD 8400 GCN1.1) ですが、RX 480 用ドライバで動作しました。

● Android の Vulkan

Android 7.0 が Release されたので Android でも試してみました。

GPU SoC Android Vulkan GLES 確認 Device
Adreno 418 Snapdragon 808 7.0 Y 3.2 Nexus 5X
PowerVR G6430 Atom Z3560 7.0 Y 3.1 Nexus Player
Tegra K1 Kepler Tegra K1 7.0 N 3.1 AEP Nexus 9
Tegra X1 Maxwell Tegra X1 6.0 Y 3.2 SHIELD Android TV

Vulkan API を使うには NDK が必要です。Java API では OpenGL ES 3.2 のみ対応しています。

予想外だったのは Nexus 9 で起動しなかったことです。SHILED ではいち早く対応した Tegra K1 なので、起動できなかった原因は不明です。OpenGL ES Context も GL ES 3.2 ではなく 3.1 AEP でした。

2016/08/30 追記: 動作確認できたので SHIELD Android TV 追加しました。

関連エントリ
Direct3D 12 GPU GeForce GTX 1070 Pascal と RADEON RX 480 Polaris
Android N Preview と Vulkan / OpenGL ES 3.2
Mac OS X Metal の対応 GPU
3D 低レベル API の現状 Direct3D 12/Metal

Direct3D 12 GPU GeForce GTX 1070 Pascal と RADEON RX 480 Polaris

GeForce GTX 1070 と RADEON RX 480 を購入したので DirectX12 対応表(下記リンク)を更新しました。Skylake (Intel HD Graphic 530 Gen 9) のデータも追加してあります。

Direct3D 12 (DirectX 12) Windows 詳細

↑表は大きいのでリンク先で見て下さい。

Windows と同時に D3D12 SDK も更新されており、いくつか機能追加が行われています。ID3D12Device1 が増えており Root Signature も修正が入りました。一番大きなトピックはおそらく ShaderModel 6.0 でしょう。上の表には ShaderModel 6.0 の Wave/Lane 関連のパラメータも追加しました。ただし今のところ対応している GPU は無いようです。

HLSL Shader Model 6.0

D3D ではありませんが、同じ低レベル API である Metal も大幅な機能拡張が行われているようです。もともと PowerVR 6 (Rogue) 向けだった Metal は昨年 Desktop GPU でも使えるようになりましたが、機能面では API に合わせた ES 3.1 相当のままでした。

今年の更新では Metal でも Tessellator が使えるようになり、D3D11/GL4 相当へと拡張が施されるようです。ただし Pipeline は独自で HS,DS,GS が無く、代わりに CS (ComputeShader) が割り当てられています。Desktop GPU だけでなく PowerVR 7XT 世代の Mobile GPU (Apple A9, iPhone 6s 世代) も対応しています。

関連エントリ
Direct3D 12 GeForce GTX970 は FeatureLevel 12_1 対応、Resource Bind/Heap Tier は低い