juj/wasm_webgpu

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

解决的问题

该项目为 C/C++ 开发者提供了一个系统库,可通过 Emscripten 从 WebAssembly (Wasm) 直接使用 WebGPU。它允许开发者使用 C++ 编写高性能的图形和计算代码,同时针对官方浏览器端的 WebGPU JavaScript API,无需手动编写 JavaScript 胶水代码。

工作原理

该库在 C/C++ API 与浏览器的 WebGPU JS API 之间建立 1:1 映射。它使用命名约定(例如 GPUAdapter 变为 WGpuAdapter)和前缀系统(wgpu_*)将 JavaScript 函数暴露给 WebAssembly 侧。为确保最大性能和最小二进制体积,它以类 C 风格实现,不包含高级抽象,因此可与 Closure Compiler 配合进一步压缩。

适用人群

希望在浏览器端应用中利用 WebGPU 的 C/C++ 开发者,特别是那些需要极小代码体积限制,或更倾向于使用官方 WebGPU 规范文档 IDL 而非 Dawn C++ API 的用户。

主要亮点

  • 1:1 JS API 映射:直接对应浏览器的 WebGPU 规范,C++ 与 JS 之间的转换具有可预测性。
  • 极低开销:专为最小生成代码体积和最快运行速度而设计。
  • 减少垃圾回收:特别优化以最小化渲染帧期间临时 JavaScript 垃圾的生成。
  • 支持同步 API:通过 JSPI(JavaScript Promise Integration)提供异步函数的同步变体,便于快速原型开发。
  • 支持 OffscreenCanvas:支持从后台 Worker 线程、pthreads 或 pthread 代理抽象中进行 WebGPU 渲染。
  • 内存模型灵活:支持 2GB、4GB 和 Wasm64 内存模型。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目