Update SPIR-V Tools to 1a7f71afb

Changes:
    1a7f71afb clean: constexpr-ify and unify anon namespace use (#4991)
    8ea3ae6be Split EliminateDeadInputComponents into safe and unsafe versions. (#4984)
    a8647f59c Use Python3 for presubmit (#4986)
    68e8327f2 Instrument: Change output buffer offset definitions (#4961)
    996d4c021 spirv-val: Multiple interface var with same SC (#4969)
    aae7d4132 Fix macos kokoro builds (#4985)
    525bc3806 Add pass to eliminate dead output components (#4982)
    54d4e77fa spirv-opt: Add const folding for CompositeInsert (#4943)
    a5e766b2b spirv-val: Add VUID label for 07703 (#4980)
    d35a78db5 Switch SPIRV-Tools to use spirv.hpp11 internally (#4981)
    c8e1588cf Add passes to eliminate dead output stores (#4970)
    a52de681d Prevent eliminating case constructs in block merging (#4976)
    4563d9093 Only validate full layout in Vulkan environments (#4972)
    9f3a4afae spirv-val: Label new Vulkan OpPtrAccessChain VUs (#4975)
    b49a2caa7 Revert "test" (#4974)
    da215f10c test
    7326b967a Prevent null pointer from being dereferenced (#4971)
    0ebf83057 spirv-val: Add OpPtrAccessChain Base checks (#4965)
    eb113f0fd spirv-val: Improve PR 4831 error message (#4968)
    ecd5b9c16 spirv-val: Add remaining Component decoration validation (#4966)
    b53d3a6be Start SPIRV-Tools v2022.5
    eb0a36633 Finalize SPIRV-Tools v2022.4
    4a6290b56 Update CHANGES
    a9291988d Roll external/spirv-headers/ 4bd8fc0c8..85a1ed200 (4 commits)
    a25a9d0b5 Roll external/re2/ 5723bb895..d2836d1b1 (11 commits)
    59043d177 Roll external/googletest/ 548b13dc3..d9bb8412d (78 commits)
    95ae2da35 Roll external/effcee/ ddf5e2bb9..35912e1b7 (1 commit)
    a3350c0ff Update SPIRV-Headers revision (#4962)
    1cecf9170 Support Narrow Types in BitCast Folding Rule (#4941)
    a6e6454ef spirv-val: Add SPV_ARM_core_builtins validation (#4958)
    4dbc66380 spirv-val: Use ostringstream in id validation tests (#4956)
    07d361b67 spirv-val: Add an option to use friendly names or not (#4951)
    3ec6b3698 spirv-val: Consistently quote ids in messages (#4950)
    e1a8b5d60 build: Fix BUILD.gn build error (#4948)
    49230a230 spirv-opt: Remove unused folding rule (#4942)
    b53d7a8af spirv-val: Add initial SPV_EXT_mesh_shader validation (#4924)
    265b455c9 Fix CreatDebugInlinedAt to not invoke def_use_mgr (#4939)
    ddbee48f8 spirv-opt: Fix stacked CompositeExtract constant folds (#4932)
    f98473cee Remove `spvOpcodeTerminatesExecution` (#4931)
    21146c1b4 Fix builtin validator for unimplemented opcodes. (#4940)
    aeb1c64d4 spirv-val: Make it legal to use arrays of ray queries (#4938)
    11d0d1622 Cleanup code for 272e4b3d0 (#4934)
    91c29a197 spirv-val: Fix comment for checking extended alignments (#4937)
    0c4ce11b4 spirv-val: Update VUID from 1.3.228 Vulkan spec (#4936)
    5f4ce362a spirv-val: Label VUID 07290 (#4927)
    8422d8a44 spirv-val: Label ShaderRecordBufferKHR VUID (#4926)
    c3f844aec spirv-val: Test file suffix consistency (#4925)
    272e4b3d0 Fix missing and incorrect DebugValues (#4929)
    49deada73 Also consider EmitMeshTasksEXT terminator in spirv-opt. (#4930)
    fb27bbf30 Fix DebugInlinedAt Line operand (#4928)
    f5b27b651 spirv-diff: Allow no SpecId (#4904)
    59cf5b134 spirv-val: consider OpEmitMeshTasksEXT a terminator instruction (#4923)
    934a05978 spirv-val: Label Builtin Array Test VUIDs (#4921)
    5f45f793a Support building on OpenBSD (#4912)
    529955e03 Improve time to build dominators (#4916)
    8eb850983 build: cmake: Add support for GNU/Hurd (#4895)
    4386afb05 spirv-opt: Remove unused fold spec const code (#4906)
    4c456f7da Implement tool changes for SPV_EXT_mesh_shader. (#4915)
    33113abf4 Instrument: Add OpNames to generated functions and variables (#4873)
    b5d1040b9 Fix ADCE to mark scope and inlined_at of line instructions as live. (#4910)
    d51dc53d2 Improve algorithm to reorder blocks in a function (#4911)
    fca39d5cb spirv-val: Better message for using OpTypeBool in input/output (#4901)
    66bdbacc9 spirv-val: Use lookup table for Decoration string (#4903)
    f76431cba spirv-val: Add SPV_KHR_ray_tracing storage class (#4868)
    a98f05d02 tests: Make InstrumentPass tests use SinglePassRunAndMatch<> and stateful pattern matching (#4897)
    b41e3e131 Disable DebugInfoMgr during the entire CompactIds pass (#4905)
    3c1a14b2b spirv-val: SBT Index for OpExecuteCallableKHR (#4900)
    0073a1fa3 spirv-val: Remove ImageWrite Texel todo (#4899)
    71b2aee6c Add structs to eliminate dead input components (#4894)
    1728c1d40 spirv-opt: fix copy-propagate-arrays index opti on structs. (#4891)
    9abacb34a Fix ADCE to not eliminate top level DebugInfo instructions (#4889)
    3a8a961cf Fix array copy propagation (#4890)
    afbb52b13 Start SPIRV-Tools v2022.4
    409e11679 Finalize SPIRV-Tools v2022.3
    0a43a84e0 Fix shuffle feeding shuffle with undef literal (#4883)
    0ebcdc4d1 Allow spirv-opt print-all to show pretty IDs (#4888)
    ed3b9c83b Local access chain convert: check for negative indexes (#4884)
    f20e8d05f spirv-val: Add SPV_KHR_ray_tracing instructions (#4871)
    5e61ea209 Update CHANGES (#4886)
    b362d2b7d spirv-diff: Fix asserts in ComparePreambleInstructions() (#4872)
    08c542d34 spirv-val: Label VUID 06997 (#4881)

Commands:
    ./third_party/update-spirvtools.sh

Bug: chromium:1207012
Bug: b/123642959
Change-Id: I62460105fcda972e2e503b778a8e1b1bbbe1977c
tree: 5652d90ea8f0bf1d562385580f1a8ed40753a120
  1. .vscode/
  2. build/
  3. build_overrides/
  4. docs/
  5. include/
  6. infra/
  7. src/
  8. tests/
  9. third_party/
  10. tools/
  11. .clang-format
  12. .dir-locals.el
  13. .gitignore
  14. .gitmodules
  15. Android.bp
  16. AUTHORS.txt
  17. BUILD.gn
  18. CMakeLists.txt
  19. CMakeSettings.json
  20. codereview.settings
  21. CONTRIBUTING.txt
  22. CONTRIBUTORS.txt
  23. DIR_METADATA
  24. LICENSE.txt
  25. OWNERS
  26. README.md
README.md

SwiftShader

License

Introduction

SwiftShader[^1] is a high-performance CPU-based implementation[^2] of the Vulkan[^3] 1.3 graphics API. Its goal is to provide hardware independence for advanced 3D graphics.

NOTE: The ANGLE project can be used to achieve a layered implementation[^4] of OpenGL ES 3.1 (aka. “SwANGLE”).

Building

SwiftShader libraries can be built for Windows, Linux, and macOS.
Android and Chrome (OS) build environments are also supported.

  • CMake
    Install CMake for Linux, macOS, or Windows and use either the GUI or run the following terminal commands:

    cd build
    cmake ..
    cmake --build . --parallel
    
    ./vk-unittests
    

    Tip: Set the CMAKE_BUILD_PARALLEL_LEVEL environment variable to control the level of parallelism.

  • Visual Studio
    To build the Vulkan ICD library, use Visual Studio 2019 to open the project folder and wait for it to run CMake. Open the CMake Targets View in the Solution Explorer and select the vk_swiftshader project to build it.

Usage

The SwiftShader libraries act as drop-in replacements for graphics drivers.

On Windows, most applications can be made to use SwiftShader's DLLs by placing them in the same folder as the executable. On Linux, the LD_LIBRARY_PATH environment variable or -rpath linker option can be used to direct applications to search for shared libraries in the indicated directory first.

In general, Vulkan applications look for a shared library named vulkan-1.dll on Windows (vulkan-1.so on Linux). This ‘loader’ library then redirects API calls to the actual Installable Client Driver (ICD). SwiftShader's ICD is named libvk_swiftshader.dll, but it can be renamed to vulkan-1.dll to be loaded directly by the application. Alternatively, you can set the VK_ICD_FILENAMES environment variable to the path to vk_swiftshader_icd.json file that is generated under the build directory (e.g. .\SwiftShader\build\Windows\vk_swiftshader_icd.json). To learn more about how Vulkan loading works, read the official documentation here.

Contributing

See CONTRIBUTING.txt for important contributing requirements.

The canonical repository for SwiftShader is hosted at: https://swiftshader.googlesource.com/SwiftShader.

All changes must be reviewed and approved in the Gerrit review tool at: https://swiftshader-review.googlesource.com. You must sign in to this site with a Google Account before changes can be uploaded.

Next, authenticate your account here: https://swiftshader-review.googlesource.com/new-password (use the same e-mail address as the one configured as the Git commit author).

All changes require a Change-ID tag in the commit message. A commit hook may be used to add this tag automatically, and can be found at: https://gerrit-review.googlesource.com/tools/hooks/commit-msg. You can execute git clone https://swiftshader.googlesource.com/SwiftShader and manually place the commit hook in SwiftShader/.git/hooks/, or to clone the repository and install the commit hook in one go:

git clone https://swiftshader.googlesource.com/SwiftShader && (cd SwiftShader && git submodule update --init --recursive third_party/git-hooks && ./third_party/git-hooks/install_hooks.sh)

On Windows, this command line requires using the Git Bash Shell.

Changes are uploaded to Gerrit by executing:

git push origin HEAD:refs/for/master

When ready, add a project owner as a reviewer on your change.

Some tests will automatically be run against the change. Notably, presubmit.sh verifies the change has been formatted using clang-format 11.0.1. Most IDEs come with clang-format support, but may require upgrading/downgrading to the clang-format version 11.0.0 release version (notably Chromium's buildtools has a clang-format binary which can be an in-between revision which produces different formatting results).

Testing

SwiftShader's Vulkan implementation can be tested using the dEQP test suite.

See docs/dEQP.md for details.

Third-Party Dependencies

The third_party directory contains projects which originated outside of SwiftShader:

subzero contains a fork of the Subzero project. It originates from Google Chrome‘s (Portable) Native Client project. The fork was made using git-subtree to include all of Subzero’s history.

llvm-subzero contains a minimized set of LLVM dependencies of the Subzero project.

PowerVR_SDK contains a subset of the PowerVR Graphics Native SDK for running several sample applications.

googletest contains the Google Test project, as a Git submodule. It is used for running unit tests for Chromium, and Reactor unit tests. Run git submodule update --init to obtain/update the code. Any contributions should be made upstream.

Documentation

See docs/Index.md.

Contact

Public mailing list: swiftshader@googlegroups.com

General bug tracker: https://g.co/swiftshaderbugs
Chrome specific bugs: https://bugs.chromium.org/p/swiftshader

License

The SwiftShader project is licensed under the Apache License Version 2.0. You can find a copy of it in LICENSE.txt.

Files in the third_party folder are subject to their respective license.

Authors and Contributors

The legal authors for copyright purposes are listed in AUTHORS.txt.

CONTRIBUTORS.txt contains a list of names of individuals who have contributed to SwiftShader. If you‘re not on the list, but you’ve signed the Google CLA and have contributed more than a formatting change, feel free to request to be added.

Notes and Disclaimers

[^1]: This is not an official Google product.
[^2]: Vulkan 1.3 conformance: https://www.khronos.org/conformance/adopters/conformant-products#submission_717
[^3]: Trademarks are the property of their respective owners.
[^4]: OpenGL ES 3.1 conformance: https://www.khronos.org/conformance/adopters/conformant-products/opengles#submission_906