Import Tint changes from Dawn

Changes:
  - 15e7f94b762e86dec964bd040230271c39134df3 Remove ArrayCount helpers. by dan sinclair <dsinclair@chromium.org>
  - 4b1d79e29281c403e9a24c99dfde0b8e60b38487 Moved sem::ArrayCount to an inherited structure by dan sinclair <dsinclair@chromium.org>
  - 847cfa07c57e10f200329ac2c6eca16a8c2d93bb Move allocator into TypeManager by dan sinclair <dsinclair@chromium.org>
  - 2939c4531e84b22f49900b606cf56f0af4351d10 Fix stack-overflow in `lhs_expression`. by dan sinclair <dsinclair@chromium.org>
  - 6992f51ebd3feefb50b03e72cfc9170e5dd46793 tint: Add DirectVariableAccess transform by Ben Clayton <bclayton@google.com>
  - d257e287929813fae395a2d6766fe305d883ce1e tint: Don't override alignment with @offset by Ben Clayton <bclayton@google.com>
  - efb17b02543fb52c0b2e21d6082c0c9fbc2168a9 tint/writer/wgsl: Print @offset attributes as comment by Ben Clayton <bclayton@google.com>
  - f745e4e2bfacedfd6e127888c0ea55177a078ecf Add Source to sem::Struct by dan sinclair <dsinclair@chromium.org>
  - 8954189545af1423f7885afc7b9bee5778c49253 tint_common_fuzzer: Don't attempt to use an invalid program by Ben Clayton <bclayton@google.com>
  - 527e38b68bb2615a4277a6efae9271ba7291d8ea [sem] Move TransitivelyReferencedOverrides to sem::Info. by dan sinclair <dsinclair@chromium.org>
  - 331a3b7980ccd21ec06888acf6acbba934cddde0 Add Source to sem::StructMember by dan sinclair <dsinclair@chromium.org>
  - c5b1b5c77ad375f0706f9db305618f69274e6cb6 Access struct member name through sem. by dan sinclair <dsinclair@chromium.org>
  - d5d207ba9f5c44a578b6d790f28eada38687fab6 tint: Add builtin type aliases (vec3f, etc) by Ben Clayton <bclayton@google.com>
  - f62aec2dc86e41c6b5b61b891f2cb4909cac1fa4 tint: Add missing tests / benchmarks by Ben Clayton <bclayton@google.com>
  - f1f6e6fbea4e0fb0744f9300d6e1fbe25a595e1d tint: merge const eval shift left definitions by Antonio Maiorano <amaiorano@google.com>
  - a54df5eca5dcc90bc36d4fe3ece4bce8a036faa0 Tint: Fix extractBits polyfill by Zhaoming Jiang <zhaoming.jiang@intel.com>
  - 85ceb08d5ca7896605878551ad164d293dcc16d7 Add ExternalTexture Rotate and FlipY Functionality by Brandon Jones <brandon1.jones@intel.com>
  - 94706ecba727e2917e1a3104edaa4a755f39a816 tint: Add 'chromium_experimental_full_ptr_parameters' ext... by Ben Clayton <bclayton@google.com>
  - 53f646c55c973be64daf54b3deced5bf2e5ee29a [ir] Split Binary from Instruction by dan sinclair <dsinclair@chromium.org>
  - babc21f9316878f04a8968bef870453dabd8ee3c tint: const eval of modulo operator by Antonio Maiorano <amaiorano@google.com>
  - 171c542bf791f57400f3211180a94c671c6d58dd tint: improve compile error when calling builder::Val wit... by Antonio Maiorano <amaiorano@google.com>
  - 6e306d34b5067ee01144bb83bf2330c7a32beb40 [ir] Remove operator<< by dan sinclair <dsinclair@chromium.org>
  - a160ccb8c3f309064ba9e14656c4c958454ea2cd tint/ir: Fix build by Ben Clayton <bclayton@google.com>
  - cfea22092700ac50f0d5d314c8aad959dc8728bc tint/number: add CheckedMod functions by Antonio Maiorano <amaiorano@google.com>
  - 4c593c356b165b604396937839f6aba3aa592b0a tint/sem: Minor cleanup by Ben Clayton <bclayton@google.com>
GitOrigin-RevId: 15e7f94b762e86dec964bd040230271c39134df3
Change-Id: I0da9b543283ca4c662dd1f13537bedc5c07ffee5
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/112540
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
119 files changed
tree: 0993d1a6a8bc31897e5d15a4d97f7a66dba62da4
  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
  13. AUTHORS
  14. BUILD.gn
  15. CMakeLists.txt
  16. CMakeSettings.json
  17. CODE_OF_CONDUCT.md
  18. CPPLINT.cfg
  19. DEPS
  20. Doxyfile
  21. LICENSE
  22. OWNERS
  23. PRESUBMIT.py
  24. README.md
  25. standalone.gclient
  26. tint_overrides_with_defaults.gni
README.md

Tint


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.

Requirements

  • 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)

Building

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 https://dawn.googlesource.com/tint 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/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.fuzzer_osx.a

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

Issues

Please file any issues or feature requests at https://bugs.chromium.org/p/tint/issues/entry

Contributing

Please see the contributing guide in the Dawn repo.