やっていくVulkan入門

1-1. Vulkanの立ち位置とか

SDKのインストールやコーディングを始める前にまず、Vulkanとは一体どんな性格のAPIなのかという点を書いておきます。何のためにそんな話をするのか?

Vulkanにおいては「三角形を表示するだけで1000行必要になる」といったことが日常茶飯事です。これからVulkanを学ぶにあたってはとにかくやりたいことに比してアホみたいに長いコードを書くことになります。なりまくります。なぜ我々はそのような目に遭わなくてはならないのか、その理由を把握しておくことで精神を安定させるのがこの節の狙いです。

DirectX12とかと似た経緯で生まれてるとか、だいたい分かっている人は読み飛ばして構いません。

VulkanやDirectX12が生まれた土壌というのは、旧世代のOpenGLやDirectX11以前が遅いとされたところにあります。なぜ遅いのかというと、旧世代のAPIは比較的APIがGPUの面倒を見てくれる仕様だったからです。イメージで言うと、プログラマーがGPUを使いたいときに、秘書だかマネージャーだかを通すイメージでしょうか。プログラマーとしてはGPU側の細かい都合を考えなくていいので楽ですが、動作の速度は遅くなってしまいます。

そこで新世代のAPIでは速くするため、出来る限りGPUを直接的に操作できる仕様にしました。敏腕秘書は糸電話に置き換わりました。プログラマーはGPUの都合を1から10まで考えることになります。これが面倒になった理由です。

このように説明すると「じゃあ難しい仕事を頼むのは面倒だろうけど、簡単な仕事なら簡単に頼めるんじゃね?」という気分になってきますが、全然そんなことはありません。GPUに仕事を頼むには定形のフォーマットに従って頼む必要があります。そしてそのフォーマットは簡単な仕事でも難しい仕事でもほぼ変わりません。最高に複雑な仕事も頼み得るために作られているフォーマットをどんなに簡単な仕事だろうが全部埋めて渡さないとGPUに仕事は頼めません。

Vulkanを扱うときに我々が行うことはプログラミングだと思わない方がいいです。これから我々が行うのはプログラミングではなく書類埋め作業です。全部偉大なるGPU様に仕事を頼むための書類提出作業です。そう思えば1000行のプログラムもただの書類束に見えてきます。

我々が書くのはGPUをグイングイン動かす1000行のプログラムではなく、数百行の書類埋めプログラムと十数行の書類提出プログラムです。