This is a small test app that uses WebGPU's unofficial webgpu.h header as a platform-agnostic hardware abstraction layer. It uses a C++ layer over webgpu.h, called webgpu_cpp.h. On native platforms, this project can be built against Dawn, Chromium's native WebGPU implementation. On the Web, this project can be built against Emscripten, which implements webgpu.h on top of the browser's own WebGPU JavaScript API (if enabled). It currently hasn't been set up to build against wgpu-native's webgpu.h implementation, but that is a goal.

Check the issues tab for known issues.

Building

Instructions are for Linux/Mac; they will need to be adapted to work on Windows.

Native build

Build has only been tested on Linux/Mac.

If you run into issues building the OpenGL or OpenGL ES backend, add these options to your cmake invocation: -DDAWN_ENABLE_DESKTOP_GL=OFF -DDAWN_ENABLE_OPENGLES=OFF

./setup_native_build.sh
mkdir -p out/native
cd out/native

Then:

cmake ../..
make -j4 clean all

Or, to use Ninja instead of Make:

cmake -GNinja ../..
ninja

Web build

This has been mainly tested with Chrome Canary on Mac, but should work on Chrome/Edge/Firefox on any platform with support (modulo compatibility differences due to pre-release spec changes). Requires chrome://flags/#enable-unsafe-webgpu on Chrome/Edge.

Note: To build, the active Emscripten version must be at least 2.0.0.

# Make sure Emscripten tools are in the path.
pushd path/to/emsdk
source emsdk_env.sh
popd

mkdir -p out/web
cd out/web

Then:

emcmake cmake ../..
make -j4 clean all

Or, to use Ninja instead of Make:

emcmake cmake -GNinja ../..
ninja

There are shorthands for these in package.json so you can use, for example, npm run ninja-web.