juj/wasm_webgpu

System headers for interfacing WebGPU from C programs compiled via Emscripten to WebAssembly

何を解決するか

このプロジェクトは、Emscriptenを介してWebAssembly(Wasm)から直接WebGPUを使用できるC/C++開発者向けのシステムライブラリを提供します。C++で高性能なグラフィックスおよびコンピュートコードを記述しつつ、公式のブラウザベースのWebGPU JavaScript APIをターゲットにすることで、手動でのJavaScriptグルーコードの記述を回避できます。

動作方法

このライブラリは、C/C++ APIとブラウザのWebGPU JS APIの1:1マッピングを構築します。命名規則(例:GPUAdapterWGpuAdapter に)とプレフィックスシステム(wgpu_*)を使用して、JavaScript関数をWebAssembly側に公開します。最大限のパフォーマンスと最小限のバイナリサイズを確保するため、高レベルの抽象化を用いず、C風のスタイルで実装されており、さらにClosure Compilerによる最適化も可能になっています。

対象ユーザー

ブラウザベースのアプリケーションでWebGPUを活用したいC/C++開発者。特に、極めて厳しいコードサイズ制約が必要な場合や、Dawn C++ APIではなく公式のWebGPU仕様IDRを好むユーザーに適しています。

特徴

  • 1:1 JS API マッピング:ブラウザのWebGPU仕様を直接反映し、C++とJS間の遷移が予測可能になります。
  • 最小限のオーバーヘッド:生成コードサイズを最小限に抑え、実行速度を最速に設計されています。
  • ガベージ削減:レンダリングフレーム中に一時的なJavaScriptガベージの生成を最小限に抑えるように最適化されています。
  • 同期APIサポート:JSPI(JavaScript Promise Integration)を介して非同期関数の同期バージョンを提供し、プロトタイピングが容易になります。
  • OffscreenCanvasサポート:バックグラウンドWorkerスレッド、pthreads、またはpthreadへのプロキシ抽象化からWebGPUレンダリングを可能にします。
  • メモリモデルの柔軟性:2GB、4GB、およびWasm64メモリモデルをサポートしています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト