目次
Vulkan の情報
2017/06/25 19:03 | |
2016/09/12 15:46 | |
2016/09/24 16:33 | |
2016/09/21 11:01 |
Driver
Windows 10 | Linux | Android | |
---|---|---|---|
GeForce Fermi | N | N | N |
GeForce Kepler | Y | Y | Y? |
GeForce Maxwell | Y | Y | Y? |
GeForce Pascal | Y | Y | ? |
RADEON GCN 1.0/1.1/1.2 | Y | Y? | ? |
RADEON GCN Polaris | Y | Y | ? |
Intel HD Graphics Gen7 | N | Y | ? |
Intel HD Graphics Gen7.5 | N | Y | ? |
Intel HD Graphics Gen8 | N | Y | ? |
Intel HD Graphics Gen9 | Y (beta) | Y | ? |
PowerVR Series 6 Rogue | N | ? | Y |
Snapdragon Adreno 400 | N | ? | Y |
SDK install
Driver とヘッダファイルだけで構成されていた OpenGL と違い、Vulkan は Tool と Library が必要です。 SDK が用意されています。 直接 build することもできます。
Tool and Libraries の build
GitHub の code を直接ビルドすることができます。
Windows の Build 手順
- cmake, python3 の install
- glslang の build
- Vulkan-LoaderAndValidationLayers の build に必要
- Vulkan-LoaderAndValidationLayers の build
glslang と Vulkan-LoaderAndValidationLayers は同じ階層に配置しておいてください。
> git clone https://github.com/KhronosGroup/glslang.git > git clone https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers.git > cd glslang > mkdir build_win64 > cd build_win64 > cmake .. -G "Visual Studio 14 Win64"
- これで glslang.sln が生成されるので VisualStudio 上で build できます。
- Solution Explorer 上で ALL_BUILD の上で右ボタンメニューを開いて Build
- Command Line から msbuild を使っても構いません。
- Release, Debug ともに build したら INSTALL します。
- Solution Explorer 上で INSTALL の上で右ボタンメニューを開いて Build
- コマンド類は build_win64/install/bin に入ります
同じ手順を Vulkan-LoaderAndValidationLayers でも行います。
> cd Vulkan-LoaderAndValidationLayers > mkdir build_win64 > cd build_win64 > cmake .. -G "Visual Studio 14 Win64"
- VULAKN.sln を開いて build します。
- Solution Explorer 上で ALL_BUILD の上で右ボタンメニューを開いて Build
- 動作確認するには、cube や tri の上で右ボタンメニューを開いて Set as StartUp Project してから Build & 実行します
Shader Binary SPIR-V の作り方
glslangValidator -V <shader_source> -o <output_binary.spv>
入力ファイルの拡張子で shader type を判別するので注意が必要です。
- .vert = VertexShader
- .frag = PixelShader
- .geom = GeometryShader
- .tesc = HullShader
- .tese = DomainShader
- .comp = ComputeShader
公式リンク
以下旧情報
現在わかっている範囲でのまとめ。
Vulkan は新しい世代の 3D API です。特徴は下記の通り。
- (1) Direct3D 12, Metal 同様の Low Overhead API
- (2) Multi Platform 対応
- (3) Desktop 及び Mobile 両対応
(1) Low Overhead API
Direct3D の低レベル API が Direct3D 12 であるように、Vulkan は位置づけ的には OpenGL の流れを汲む低レベル API に相当します。 ただし OpenGL との互換性はありません。
Direct3D 12 や Metal と同じように CPU 負荷を大幅に削減しており、効率化は動作速度を引き上げると同時にバッテリーへの負担も減らすことになります。
(2) Multi Platform 対応
Direct3D が Windows のみ、Metal が Apple platform のみサポートしているのに対して、Vulkan は唯一の Multi platform に対応した低レベル API となります。
(3) Desktop 及び Mobile 両対応
これも Direct3D 12, Metal 同様、新しい API の特徴です。Metal はすでに iOS/OS X の両方に対応していますし、Vulkan も Android が対応することを発表しています。
OpenGL との違い
- 一新された API 。互換性の枷がない、わかりにくい global state がない。
- Multi-Thread 対応
- Shader のバイナリ形式のサポート。事前 Compile に対応
- Mobile API と Desktop API の統合。ES のような細分化は開発の妨げになっていた。
Direct3D12/Metal との違い
- OpenGL 同様 Platform を選ばない
- Windows, Linux, Android など
- 対応 GPU と Driver さえあれば Windows 7 でも動く (NVIDIA は XP 以降と表明)
- Direct3D 12 : Windows 10 のみ
- Metal : iOS/OS X のみ
- 最後発であることのメリット
- GCN 系 API である Mantle, Direct3D と、Rogue 系 API である Metal の両機能をサポート
- 例えば GCN 系 Descriptor と Rogue の TBR(TBDR) 系 RenderPass 両方に対応している
対応 GPU
Direct3D12, Metal の対応状況からの推測では下記の通り。
- Desktop
- OpenGL 4.x 世代 (Direct3D11 世代)
- Fermi 以降
- GCN 以降
- HD Graphics Gen7.5 以降 (Gen7 は不明)
- Mobile
- おそらく OpenGL ES 3.1 世代の GPU のうちメーカーが対応を表明したもの
- ES3.1 以降と推測した理由は ComputeShader が必須となると考えられるため
API の系列
現在の低レベル API は下記の 2系列あります。
- GCN アーキテクチャベース
- Mantle
- Direct3D 12
- Vulkan
- Rogue アーキテクチャベース
- Metal iOS
- Metal OSX
Vulkan の API セットは Direct3D 12 にある程度似ているものになると考えられます。
Direct3D 12 / Metal との比較
Direct3D 12 | Vulkan | Metal |
---|---|---|
RootSignature | Pipeline Layout | – |
Descriptor Heap | Descriptor Pool | – |
Descriptor | Descriptor Set / ImageView | – |
CommandList | Command Buffer | CommandBuffer |
CommandAllocator | Command Pool | – |
CommandQueue | Command Queue | CommandQueue |
PipelineState | Pipeline State | PipelineState, DepthStencilState, RenderState |
– | Render Pass | RenderPassDesc (RenderCommandEncoder) |
ResourceBarrier | Pipeline Barrier | (TextureBarrier) |