Import Tint changes from Dawn

Changes:
  - 841db7f515a57e5677d70d023c51586a096f0a6f Add libfuzzer_exports.h to Tint fuzzer common code by Ryan Harrison <rharrison@chromium.org>
  - ff2cb02e920a07ae3b9d99709db7f38c9c6b0cf5 Add bitwise_expression to the WGSL parser. by dan sinclair <dsinclair@chromium.org>
  - e86758cb26ed69b8e9502037798298f11bcd9edc reader/wgsl: Error if 'struct' has attributes by Ben Clayton <bclayton@google.com>
  - ff1330240b4e2476ed8ae8f96b7bff2b05ba63e4 tint/transform: Fix index 0 accessing in DecomposeMemoryA... by Zhaoming Jiang <zhaoming.jiang@intel.com>
  - dce63f571730edd14f0247fb4c41e7aed154cc90 tint/utils/UniqueVector: Use utils::Vector and utils::Has... by Ben Clayton <bclayton@google.com>
  - b79238d7ec35de21aa333e31fb239addfee1e2a4 tint: Implement const eval of binary minus by Antonio Maiorano <amaiorano@google.com>
  - eb0af9def79c2398f85dc49c512b03eedf117a57 Add optionally_typed_ident to WGSL parser. by dan sinclair <dsinclair@chromium.org>
  - 0f0ba20208be96cf393f2bacf16e697df108457f tint/transform: Fix PromoteInitializersToLetTest for mate... by Ben Clayton <bclayton@google.com>
  - 873f92e741517e28467c5befe7a1b1ab8433ca9d Convert assignment_statement to new WGSL grammar. by dan sinclair <dsinclair@chromium.org>
  - 6c8dc15d64c51fe39c6d941a75469d9ac9376f4d Add core_lhs_expression and lhs_expression to parser. by dan sinclair <dsinclair@chromium.org>
  - e13160efb61c34b2b816971e26437df6f792260a tint/utils: Add Hashmap and Hashset by Ben Clayton <bclayton@google.com>
  - 81f06865235c255fc309fdb30a83978a1e39fd58 tint/utils/vector: Allow use of incomplete types by Ben Clayton <bclayton@google.com>
  - 6e716c77accdd7f1fd015bceff35a1f8d9e3aecc Sync some WGSL grammar names to spec by dan sinclair <dsinclair@chromium.org>
  - f8a34d08ddfcc66c3b956e2c9f18280be7fa8f08 tint: Add CheckedSub functions by Antonio Maiorano <amaiorano@google.com>
GitOrigin-RevId: 841db7f515a57e5677d70d023c51586a096f0a6f
Change-Id: I2ff87acfadfc2fcf489a1fe88a5637de1fbe1060
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/99660
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
60 files changed
tree: 7d8c4cbcf5a89c34db7f0bcf108ce4c034ffb10b
  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.