Update SPIR-V Tools to 54cd5e196

Changes:
    54cd5e196 spirv-opt : SPV_NV_bindless_texture related changes (#4870)
    b5d0bf285 Require ColMajor or RowMajor for matrices (#4878)
    a90ccc240 Remove default copy constructor in header. (#4879)
    4773879b6 Update structure layout validation (#4876)
    8dc0030ec spirv-as: Avoid overflow when parsing exponents on hex floats (#4874)
    cc5fca057 spirv-val: Fix Vulkan memory scope (#4869)
    388ce0ee6 spirv-as: Avoid recursion when skipping whitespace (#4866)
    e4cfa190d spirv-val: Add SPV_KHR_ray_query (#4848)
    60615b8ec Implement SPV_NV_bindless_texture related changes (#4847)
    93ebf698a spirv-val: Add OpConvertUToAccelerationStructureKHR (#4838)
    e2cf76930 spirv-val: Label VUID 06925 (#4852)
    faa8d6a65 Revert "Optimize DefUseManager allocations (#4709)" (#4846)
    69e1deabc Fix small bug traversing users in interface_var_sroa (#4850)
    bc5c8760a spirv-val: Add Vulkan decoration interface (#4831)
    05de65037 Use structural reachability in CFG checks (#4849)
    dcee3a5de Update validator diagnostics with "structurally dominated" (#4844)
    5f4284aa7 Add limit for scalar replacment when fuzzing (#4843)
    92fe420c8 Reduce load size does not work for array with spec const size (#4845)
    d5a3bfcf2 Avoid undefined behaviour when getting debug opcode (#4842)
    6803cc512 use exec_tools instead of tools for better RBE compatibility (#4837)
    32622ba7c DCE: clean up the cfg for all functions that were processed. (#4840)
    8ec4a0772 Fix unreachable loop increment (#4836)
    286e9c118 Use structural dominance to validate cfg (#4832)
    91572e769 Write binary files to stdout in binary on windows. (#4834)
    0b824324b Fix segfault in `SpirvTools::Disassemble` when printing (#4833)
    66d88508d Build struct order only for the section needed when unrolling. (#4830)
    f2dfa53ae Avoid unrolling large loops while fuzzing (#4835)
    37d2396ca Fix SplitLoopHeader to handle single block loop (#4829)
    3c9fd7577 Avoid if-conversion if both predecessors are the same (#4826)
    c4ed5157d Fixed crash unrolling loops with residual iterations (#4820)
    76fe35219 Fail validation when RelaxedPrecision is applied to a type. (#4823)
    845d98d46 Do not check if the binary changed if encoding is different (#4824)
    4f321f862 Avoid undefined divide-by-0 (#4821)
    2eff41e70 Remove stray output to stdout from tests (#4816)
    fbcb6cf4c Ability to fold Constant Vector times Matrix and Matrix times vector instructions (#4818)
    bfc611b03 spirv-val: Label 06807 and 06808 VUID (#4817)
    76ebfb989 Avoid replacing access chain with OOB access (#4819)
    8f7f5024f Simplify invocation of snprintf (#4815)
    fad68a755 Fix usage of sprintf. (#4811)
    044ff1aab spirv-val: Add support for SPV_AMD_shader_early_and_late_fragment_tests (#4812)
    c94501352 spirv-val: Optimize struct field decoration lookup (#4809)

Commands:
    ./third_party/update-spirvtools.sh

Bug: b/123642959
Change-Id: I5868aa33245f9ad3b9e2b36a13dcbee1105f0bc2
tree: 61b24e2f314332edd9fa21b6332a7aea44aa3ea8
  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 is a high-performance CPU-based implementation of the Vulkan graphics API12. Its goal is to provide hardware independence for advanced 3D graphics.

NOTE: The ANGLE project can be used to achieve a layered implementation of OpenGL ES (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.

Disclaimer

  1. Trademarks are the property of their respective owners.
  2. This is not an official Google product.