juj/wasm_webgpu

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

개요

wasm_webgpu는 Emscripten으로 WebAssembly로 컴파일된 C/C++ 프로그램이 브라우저의 WebGPU 그래픽스 API와 통신할 수 있게 해주는 작은 오픈 소스 라이브러리입니다. 브라우저 측 WebGPU JavaScript API를 얇고 1:1로 매핑하므로 개발자는 네이티브 C/C++로 GPU 가속 렌더링 코드를 작성하고 브라우저에서 실행할 수 있습니다(실험적으로는 브라우저 외부에서 Dawn을 통해 실행할 수도 있습니다).

기능

기능 의미
헤더 + 구현 파일 (lib_webgpu.*) 이 파일을 Emscripten 프로젝트에 넣고 lib_webgpu.h를 포함하면 wgpu_adapter_request_device_sync()와 같이 기본 WebGPU JS 함수를 호출하는 C 스타일 래퍼를 사용할 수 있습니다.
정확한 API 매핑 GPUAdapter 같은 타입은 WGpuAdapter가 되고 함수는 동일한 형태를 유지합니다 (wgpu_canvas_context_configure). 따라서 C 코드를 작성할 때 사양이 신뢰할 수 있는 참조가 됩니다.
성능 중심 바인딩 레이어는 의도적으로 저수준이며 추가 JavaScript 객체를 피합니다. Closure Compiler와 함께 작동하여 적극적인 축소화를 지원하고 런타임 오버헤드와 생성된 코드 크기를 최소화합니다.
사용자 정의 헬퍼 매핑된 버퍼 읽기/쓰기 및 URL에서 이미지 로딩 기능은 JS와 Wasm 사이에서 전달하기 어려운 일반적인 WebGPU 작업을 단순화합니다.
JSPI(동기 API) 지원 선택적 플래그(-sJSPI)를 사용하면 일반적으로 비동기인 WebGPU 호출의 동기 버전을 노출합니다. 빠른 프로토타입이나 테스트 하니스에 유용합니다.
OffscreenCanvas 및 워커 WebWorker 또는 pthread에서 OffscreenCanvas를 생성하고 제어하는 API를 제공하여 백그라운드 스레드에서 렌더링할 수 있습니다.
메모리 모델 유연성 Emscripten의 2GB, 4GB 및 Wasm64 메모리 구성에서 작동하므로 필요한 경우 대용량 데이터 세트를 대상으로 할 수 있습니다.
Dawn 백엔드(실험적) 별도의 소스 파일(lib_webgpu_dawn.cpp)을 사용하면 브라우저 외부에서 WebGPU의 Dawn 구현에 대해 컴파일할 수 있습니다. 다만 주요 초점은 아닙니다.

사용 대상

  • 게임 또는 그래픽 엔진 개발자: 핵심 렌더링 코드를 C/C++로 유지하고 JavaScript나 WebGL로 다시 작성하지 않고 웹에 배포하려는 경우.
  • 연구 코드베이스: 네이티브 C++에서 이미 GPU 컴퓨트를 사용하고 있으며 데모나 재현성을 위해 브라우저에서 실행할 수 있는 빠른 경로가 필요한 경우.
  • 도구 작성자: 동기 API와 최소 코드 크기의 이점을 활용하는 WebGPU 기반 시각화 도구, 편집기 또는 테스트 스위트를 구축하는 경우.

시작하기 (빠른 요약)

  1. Emscripten을 설치합니다.
  2. 저장소를 클론하고 lib/ 파일을 프로젝트에 복사한 다음 Emscripten 링크 단계에 라이브러리를 추가합니다 (--js-library …).
  3. samples/에 제공된 CMakeLists를 템플릿으로 사용합니다.
  4. emcmake cmake … && ninja로 빌드한 다음 생성된 HTML을 emrun .으로 제공합니다.

제한 사항 / 주의 사항

  • 라이브러리는 현재 WebGPU 사양을 정확히 반영합니다. 사양이 발전함에 따라 파괴적인 변경이 발생할 수 있으며 ABI 안정성은 보장되지 않습니다.
  • Dawn 백엔드는 오래되었으며 적극적으로 유지 관리되지 않습니다.
  • 이는 바인딩 레이어일 뿐입니다. 실제 렌더링 로직은 직접 작성해야 합니다. 제공된 샘플은 의도적으로 단순하며 화려하지 않습니다.
  • JSPI를 사용하면 예기치 않은 이벤트 루프 상호 작용이 발생할 수 있으므로 프로덕션 코드에는 프로파일링을 권장합니다.

결론

wasm_webgpu는 WebAssembly로 컴파일된 C/C++에서 WebGPU에 접근할 수 있게 해주는 진정한 저수준 브리지입니다. 고수준 그래픽 엔진을 찾는 개발자보다는 성능, 코드 크기, 공식 WebGPU 사양에 충실함을 중시하는 개발자를 대상으로 합니다.

관련

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