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マッピングを構築します。命名規則(例:GPUAdapter は WGpuAdapter に)とプレフィックスシステム(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メモリモデルをサポートしています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト