しんさんのブログ

科学や技術のこと読書のことなど

Vulkan Overviewを読んでみる

Khronosグループが発表している、2015年8月時点で最新のVulkan Overviewを読んでみました。
https://www.khronos.org/assets/uploads/developers/library/overview/vulkan-overview.pdf

※ Khronosグループとは、OpenGL/ES, WebGLといったGraphics APIのオープンスタンダードを手掛ける非営利の共同コンソーシアムで、日本の企業も参加しています。

Vulkanの特徴
いろんなデバイスにGPUが乗るようになってきた。
GPUは3Dグラフィックスだけのためじゃなくなってきた。
じゃあ、そのGPUを効率的に使えるようにしないといけない。
Vulkanはlow-overheadで多くのベンダーのGPUをサポートする。
mobile, desktop, console, embedded platformすべてで同一のAPIを提供
デバッグ、評価のレイヤーと最終製品レイヤーを分けられる。

OpenGL/ES とVulkanとの大きな違い

OpenGL/ES
複雑なドライバGPUドライバ層、overheadが大きい、負荷の予想ができない
ドライバがGPUコンテクスト保持・更新、メモリーマネジメント、エラーマネジメントすべてを行う。
エラーマネジメントが常に動いている(安全ともいえる)
APIはGLとESで、デスクトップとモバイル用に分かれている

Vulkan

メモリマネジメント、スレッドマネジメント、コマンドバッファの生成・更新のすべてをユーザーアプリが行う。
ドライバはシンプルになり、low-overhead。
エラーマネジメントは必要な時だけ動かせる。
モバイル、デスクトップ、組み込み機器のすべてで同じAPIを使用

上記特徴を知ったうえで、開発者はGL/ESを使うか、Vulkanを使うかを選択できる。

ミドルウェア、エンジン
ユーザーアプリとVulkanの中間にミドルウェアゲームエンジンなどが入ることがあり、これらのエンジンがハードウェアをダイレクトに操作することで処理速度が向上する。

Vulkanのmulti-threading
コマンドバッファ作成スレッドと、コマンドを投げるスレッドを別々に並列に実行できる。GPUがCPUを待つことなく次々とコマンドを受け取ることができるようになる。

SPIR-Vという中間言語が提供される。


OpenGL ES 3.1/ OpenGL 4.X以上をサポートするGPUに対するインプリを今年中に行う。