ユーザ用ツール

サイト用ツール


vulkan

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 手順

  1. cmake, python3 の install
  2. glslang の build
    • Vulkan-LoaderAndValidationLayers の build に必要
  3. 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"
  1. これで glslang.sln が生成されるので VisualStudio 上で build できます。
    • Solution Explorer 上で ALL_BUILD の上で右ボタンメニューを開いて Build
    • Command Line から msbuild を使っても構いません。
  2. 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"
  1. VULAKN.sln を開いて build します。
    • Solution Explorer 上で ALL_BUILD の上で右ボタンメニューを開いて Build
  2. 動作確認するには、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)
vulkan.txt · 最終更新: 2016/09/24 14:52 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki