Import Tint changes from Dawn

  - bb0229002db5cd1c58df4ff846020dcc180f9258 tint/uniformity: Violations are now errors by James Price <>
  - f38ee3e07392eb1d66b8f9fb0702ccef3d062926 tint/exe: Add --allow-non-uniform-derivatives flag by James Price <>
  - e657c470bdc66ba10468ed494a4cda0a7258f982 tint/uniformity: Add derivative_uniformity filter by James Price <>
  - 5853205342386f296377f3276a76d36181558ca3 tint/sem: Record diagnostic severity modifications by James Price <>
  - 613fbcf79ad0b366711f144dbd1d1c07132b910d tint: Add diagnostic and enable to ModuleCloneTest by James Price <>
  - c744a23d77d53b8e8e7b9d5c7d7439e2622034da tint/reader/wgsl: Parse @diagnostic attributes by James Price <>
  - 75326f88e64cad9bbf3e469e61ac1427fc8f43d8 tint/writer/wgsl: Handle diagnostic attributes by James Price <>
  - 8dd35110c28830d2d6f81145b142860d57bfc845 wgsl/reader: Parse diagnostic directives by James Price <>
  - 02855b5060831b7fa2dedf1a62567a3dc0c6207b tint/resolver: Handle diagnostic attributes on functions by James Price <>
  - e8ea579bceafe593964e6110559925362eb80842 tint/writer: Handle diagnostic directives by James Price <>
  - 81e55754e148eb27ec835fceebac577003df8a6b tint/resolver: Handle diagnostic directives by James Price <>
  - 098e3d8f90800a8a2f1f0a5aff054fcdb4bca146 tint/dependency_graph: Handle diagnostic controls by James Price <>
  - 15bf15d55f5f90e08c912d70be5de207cd34a80f tint/ast: Add global diagnostic controls to Module by James Price <>
  - 7d2b192439cb4a0380a2eb60947540a79a157847 tint: rename template argument token strings by Ben Clayton <>
  - f0d8edecee77d05fb3e670ca5a77ad211116e78a tint: Fix x86 build by Ben Clayton <>
  - 355b70d2be291a5d069df330810d0b484592618d tint/reader/wgsl: Use ClassifyTemplateArguments() by Ben Clayton <>
  - ef5434dcd17a18369084fc8b6b315bf3ddb609e8 tint/ast: Add DiagnosticAttribute AST node by James Price <>
  - 4ff2645d1620d65aae6d847f191ae0ca3ee27e22 tint/reader/wgsl: Add ClassifyTemplateArguments() by Ben Clayton <>
  - 6c8aa8aff9d13050080ce3e7c471d5a72273ade7 Resolve some reader/writer dependency issues by Brandon Jones <>
  - c98d57d662b7fdd0c82fa8169cd98f87007530be tint: Rename 'static_assert' to 'const_assert' by Ben Clayton <>
  - 9dc48bcef3c390ac55eb52b76f932092c7c79f0a tint: Rename 'type' to 'alias' by Ben Clayton <>
GitOrigin-RevId: bb0229002db5cd1c58df4ff846020dcc180f9258
Change-Id: I2d8e330bd6e37c5bd974a4bafa259a3aa947c163
Commit-Queue: Ben Clayton <>
Reviewed-by: Ben Clayton <>
Kokoro: Kokoro <>
105 files changed
tree: 5de52e2a8c1c613f614b026fd0ca35629dfca001
  1. .vscode/
  2. build_overrides/
  3. docs/
  4. include/
  5. infra/
  6. kokoro/
  7. src/
  8. third_party/
  9. tools/
  10. .clang-format
  11. .gitignore
  12. .gn
  15. CMakeLists.txt
  16. CMakeSettings.json
  18. CPPLINT.cfg
  19. DEPS
  20. Doxyfile
  22. OWNERS
  25. standalone.gclient
  26. tint_overrides_with_defaults.gni


Note: This repo is read-only, minimized mirror of the Dawn repo.

Tint changes should be made in the Dawn repo.

Tint is a compiler for the WebGPU Shader Language (WGSL).

This is not an officially supported Google product.


  • Git
  • CMake (3.10.2 or later)
  • Ninja (or other build tool)
  • Python, for fetching dependencies
  • depot_tools in your path

Build options

  • TINT_BUILD_SPV_READER : enable the SPIR-V input reader (off by default)
  • TINT_BUILD_WGSL_READER : enable the WGSL input reader (on by default)
  • TINT_BUILD_SPV_WRITER : enable the SPIR-V output writer (on by default)
  • TINT_BUILD_WGSL_WRITER : enable the WGSL output writer (on by default)
  • TINT_BUILD_FUZZERS : enable building fuzzzers (off by default)


Tint uses Chromium dependency management so you need to install depot_tools and add it to your PATH.

Getting source & dependencies

# Clone the repo as "tint"
git clone tint
cd tint

# Bootstrap the gclient configuration
cp standalone.gclient .gclient

# Fetch external dependencies and toolchains with gclient
gclient sync

Compiling using CMake + Ninja

mkdir -p out/Debug
cd out/Debug
cmake -GNinja ../..
ninja # or autoninja

Compiling using CMake + make

mkdir -p out/Debug
cd out/Debug
cmake ../..
make # -j N for N-way parallel build

Compiling using gn + ninja

mkdir -p out/Debug
gn gen out/Debug
autoninja -C out/Debug

Fuzzers on MacOS

If you are attempting fuzz, using TINT_BUILD_FUZZERS=ON, the version of llvm in the XCode SDK does not have the needed libfuzzer functionality included.

The build error that you will see from using the XCode SDK will look something like this:

ld: file not found:/Applications/

The solution to this problem is to use a full version llvm, like what you would get via homebrew, brew install llvm, and use something like CC=<path to full clang> cmake .. to setup a build using that toolchain.

Checking [chromium-style] issues in CMake builds

The gn based work flow uses the Chromium toolchain for building in anticipation of integration of Tint into Chromium based projects. This toolchain has additional plugins for checking for style issues, which are marked with [chromium-style] in log messages. This means that this toolchain is more strict then the default clang toolchain.

In the future we will have a CQ that will build this work flow and flag issues automatically. Until that is in place, to avoid causing breakages you can run the [chromium-style] checks using the CMake based work flows. This requires setting CC to the version of clang checked out by gclient sync and setting the TINT_CHECK_CHROMIUM_STYLE to ON.

mkdir -p out/style
cd out/style
cmake ../..
CC=../../third_party/llvm-build/Release+Asserts/bin/clang cmake -DTINT_CHECK_CHROMIUM_STYLE=ON ../../ # add -GNinja for ninja builds


Please file any issues or feature requests at


Please see the contributing guide in the Dawn repo.