This repository contains the stable C header webgpu.h
, a C API equivalent of
the WebGPU API for JavaScript.
All of the C API is defined in the webgpu.h
header file.
This header, its documentation, and the attached documentation articles
describe the native specifities of the C API;
for everything else, refer to the WebGPU specification.
Together, these form a rough "specification" for webgpu.h
.
Multiple implementations strive to implement this "specification" compatibly, in addition to their own extensions which are not specified here. For access to those extensions, use your implementation's extended headers.
While WebGPU is a JavaScript API made for the Web, it is a good tradeoff of ergonomic, efficient and portable graphics API. Almost all of its concepts are not specific to the Web platform and the headers replicate them exactly, while adding capabilities to interact with native concepts (like windowing).
Implementations of this header include:
- Dawn, the C++ WebGPU implementation used in Chromium
- Emdawnwebgpu for Emscripten translates
webgpu.h
calls to JavaScript WebGPU calls when compiling to WebAssembly. - wgpu-native, C bindings to wgpu, the Rust WebGPU implementation used in Firefox.
- wgpu-native does not yet implement the stable version of this header. Contributions needed!
webgpu.yml
is the main machine-readable source of truth for the C API and its documentation (in YAML format). It is used to generate the official webgpu.h
header present in this repository to generate the official documentation, and may be used by any other third party to design tools and wrappers around WebGPU-Native, especially bindings into other languages.
If you are developing bindings of webgpu.h
into another language and find that any additional high-level/semantic information would be useful in webgpu.yml
, please contribute it!
Important: When submitting a change, one must modify both the webgpu.yml
and webgpu.h
files in a consistent way. One should first edit webgpu.yml
(the source of truth), then run make gen
to update webgpu.h
and finally commit both changes together.
Here are some details about the structure of this repository.
-
webgpu.h
is the one and only header file that defines the WebGPU C API. Only this needs to be integrated in a C project that links against a WebGPU implementation. (But be sure to use the headers from your implementation if you need any extensions, or if the implementation doesn't match this header exactly.) -
webgpu.yml
- see above. -
schema.json
is the JSON schema that formally specifies the structure ofwebgpu.yml
.
-
Makefile
defines the rules to automatically generatewebgpu.h
fromwebgpu.yml
and check the result. -
gen/
and thego.*
files are the source code of the generator called by theMakefile
. -
tests/compile
is used to check that the generated C header is indeed valid C/C++ code.
.github/workflows
defines the automated processes that run upon new commits/PR, to check that changes inwebgpu.yml
andwebgpu.h
are consistent.