Import Tint changes from Dawn

Changes:
  - 4f3f45c00f414e6b57782126b4d98c8c44813d8f Tint/transform: Fix insertBits polyfill for HLSL by Zhaoming Jiang <zhaoming.jiang@intel.com>
  - a70e365313d31757bc9b75002fa46b3366d551a8 tint: fix extractBits edge case by Antonio Maiorano <amaiorano@google.com>
  - c36417343fe1c2a526dc83cc378d96a6db3ce5e5 tint: const eval of cross by Antonio Maiorano <amaiorano@google.com>
  - eb949c87ee5aaa819faae6252dd36bfeda649070 spirv-reader: use spirv.hpp11 by David Neto <dneto@google.com>
  - 1bdaded736d61e4bdbf18a90c8ebac9f3274cb2f Implemement const-eval for some unpack routines. by dan sinclair <dsinclair@chromium.org>
  - ec4b650adb133672f48ed7d76c12459933cb229c Remove fallthrough from fuzzer AST mutation. by dan sinclair <dsinclair@chromium.org>
  - ba200e87c5db20d67e3c0d51bfb4ddf3151766fc tint: Bump stack size for MSVC + debug build by Ben Clayton <bclayton@google.com>
  - 5071a54af491e05444c02122b48e9cd5d65f82c7 Make reserved words an error. by dan sinclair <dsinclair@chromium.org>
  - 2d706a04360dc35409a2df324b936f6735eb1cd8 Implemement const-eval for some pack routines. by dan sinclair <dsinclair@chromium.org>
  - 3b2b5484e239fc558871c04eb061c201d0c15c36 Remove module-scope let deprecation. by dan sinclair <dsinclair@chromium.org>
  - c027f33cfd88efd155e88623300dc3356fcd6b95 tint: Fix gdb and lldb pretty printers for recently updat... by Antonio Maiorano <amaiorano@google.com>
  - ca98b1b1b9d797bf1fc65340036193a2e7a205b1 tint/resolver: Resolve dependencies of parameter attributes by Ben Clayton <bclayton@google.com>
  - 6f799d676d8cdec69153cc6b5ca6003598baf19f Change default acos test value. by dan sinclair <dsinclair@chromium.org>
  - f218af04610a66598d44ecbba6c2b17bb1e78433 Remove the `@stage` attribute by dan sinclair <dsinclair@chromium.org>
GitOrigin-RevId: 4f3f45c00f414e6b57782126b4d98c8c44813d8f
Change-Id: Ica3b6cfbfc9b29a0d28600b6f3116001246ad3a2
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/109100
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
38 files changed
tree: 1e7b3562be77e5455b0cd76379f13a16af0b8ab0
  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.