Appleから提案された、Webブラウザ上でGPUを活用できる規格"WebGPU"の利用サンプル
提案記事 の通りにサンプルを作っても、実装と整合性が取れておらず動かせないという問題があります。 そこで、実際に動くように修正を加える方法について説明します。
Mac OS X El Capitan以降
今のところ、WebGPUはMetalをベースとしているためMac以外では試せません。
Safari Technology Preview 26ではWebGPUが組み込まれているので、独自のビルドが不要となりました。
以下の説明は古くなっております。
事前にXcodeのインストールが必要ですので、 https://webkit.org/build-tools/ を参考に入れておきます。
以下の順にコマンドを叩くことで、WebGPUパッチを当てた状態のWebKitがビルドできます。
curl -o webgpu.patch 'https://bug-167952-attachments.webkit.org/attachment.cgi?id=300839'
git clone git://git.webkit.org/WebKit.git WebKit.git
git checkout f0884a3
git apply ../webgpu.patch
cd Tools/Scripts/
./build-webkit --debug
手元のMacbook Proではgit clone
に2時間、build-webkit
に2時間ぐらいかかりました。
git checkout f0884a3
は、パッチと整合性の取れるリビジョンを探して選びました。
ビルド済みのWebKitを用いたSafariの実行は以下のコマンドです。
./run-safari --debug
https://milhidaka.github.io/webgpu-example/
環境構築がうまくいっていれば、以下のような画面になるはずです。
シェーダのコードがなかったため、 gaprot.jp のサンプルコードを利用させていただいています。
公式サンプルでは
passDescriptor.colorAttachments[0].loadAction = "clear";
などのように、文字列で設定を行う箇所がいくつかありますが、これは動きませんでした。
passDescriptor.colorAttachments[0].loadAction = gpu.LoadActionClear;
と書き換えると動作しました(gpu=canvas.getContext("webgpu");
)。その他の文字列利用部分も同じです。