Import Tint changes from Dawn

Changes:
  - d623182c336bad0be262a544d8b5865a1565c5da tint/PromoteInitializers: Do not hoist abstracts by James Price <jrprice@google.com>
  - dee884c9257cc3b2c533c6b0ec338296d3839632 Convert most remaining usages to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - 7c21fe5d92c87e7defd37a367de0ab933dad1973 tint/uniformity: Fix struct member partial pointers by James Price <jrprice@google.com>
  - b7c2aed189b5006628a6998d3d9aca783c89c864 tint: Skip short-circuited array init const eval by James Price <jrprice@google.com>
  - 0723a3c7f8f193db9e557edae9833f86c226539e Convert WGSL reader to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - 0c184c285621f91969c199e6da54beaeac6560f0 Convert SPIR-V reader to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - b23cda4bc24f931f8be3d8999dbbf67838c407eb Convert the resolver over to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - b2ba57b15d6c935eaf8c2c4e6a6d6c6d5ab02566 Convert TextGenerator over to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - 88fea2a9c33436d42f284948cc8fab2d31295116 Convert the WGSL generator to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - ec24bb2f0ce2eed088d0d1fc9dcd2a087d51f5f9 Convert SPIR-V Writer over to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - 52fa68b1a748b90b3f646a46c98ce72607608c60 Convert MSL generator over to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - 2b9d5b338a28cf6d919bcb51c84561f77d2b2f16 Convert HLSL generator over to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - dba03d30fb141e94d7d823924fd9a7c3a642d095 Convert GLSL Generator over to utils::StringStream. by dan sinclair <dsinclair@chromium.org>
  - a4637ad8a314c50138c03500dfe76c3ee5ffde3e Convert IR over to `utils::StringStream`. by dan sinclair <dsinclair@chromium.org>
  - 7ca41fffb782f0f75203dbaf91a6594203894a0d Add a utils/string_stream class. by dan sinclair <dsinclair@chromium.org>
  - 4d3af66bbdafda4284a0eefb0d384ccdb77a7080 tint/msl: Preserve trailing vec3 padding by James Price <jrprice@google.com>
  - 43ffb09247e1e48f021abb63131bedd449e55209 tint: validate max number of case selectors in a switch s... by Antonio Maiorano <amaiorano@google.com>
  - 1bb5be9789272206ea23ebe6454fa8afca579722 tint: improve error message about function paramter limit by Antonio Maiorano <amaiorano@google.com>
  - 6b304e9ffd649602d8074d0362928479416c8d3e tint: validate max nesting depth of composite types by Antonio Maiorano <amaiorano@google.com>
  - 0b3400c56e1ac2782f8bca1854cab1a1c282b141 tint: Add chromium_internal_relaxed_uniform_layout by James Price <jrprice@google.com>
  - 806135658dbc91b5dd581cc11effca62455bd2ca tint: Pass constant::Values to ArrayOrStructCtor by James Price <jrprice@google.com>
  - c5ec169b890ac8a16bffbb4f063cbede6f34294e classify template args: add cases used to debug Treesitte... by David Neto <dneto@google.com>
  - 6176c85be83b08a7bf4f2e6ec6422d65a5ee5290 tint: Preserve padding in matrices with three rows by James Price <jrprice@google.com>
  - fe19fee3ea3ddf7d0ef1995f7e89739870c20a94 tint/const-eval: Fix runtime semantics for (x % 0) by James Price <jrprice@google.com>
  - 04529be9b74e20e515eb30ca14303063ae49df3f Dawn/Tint: Polyfill reflect vec2<f32> for D3D12 FXC on In... by Zhaoming Jiang <zhaoming.jiang@intel.com>
GitOrigin-RevId: d623182c336bad0be262a544d8b5865a1565c5da
Change-Id: Ie09db15507c3ff36b0e23aadb5ef1a70753dbe61
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/121680
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
188 files changed
tree: 96298f8551455678775334a02bb9008eaed75c82
  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.