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 사양 IDL을 선호하는 사용자에게 적합합니다.

주요 특징

  • 1:1 JS API 매핑: 브라우저의 WebGPU 사양을 직접 반영하여 C++와 JS 간 전환 시 예측 가능합니다.
  • 최소한의 오버헤드: 생성된 코드 크기 최소화 및 빠른 런타임 속도를 위해 설계되었습니다.
  • 가비지 감소: 렌더링 프레임 중 일시적인 JavaScript 가비지 생성을 최소화하도록 특별히 최적화되었습니다.
  • 동기 API 지원: JSPI(JavaScript Promise Integration)를 통해 비동기 함수의 동기 버전을 제공하여 프로토타이핑이 쉬워집니다.
  • OffscreenCanvas 지원: 백그라운드 Worker 스레드, pthreads, 또는 pthread로의 프록시 추상화에서 WebGPU 렌더링이 가능합니다.
  • 메모리 모델 유연성: 2GB, 4GB, Wasm64 메모리 모델을 모두 지원합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트