Update SPIR-V Tools to 339d4475c

Changes:
    339d4475c Improve decoration validation (#4490)
    1589720e1 spirv-opt: create OpDecorate for OpMemberDecorate in desc-sroa (#4617)
    6b073f899 Run the wasm build on push and pull_request (#4614)
    66ef7cb68 Remove publish-to-npm step for Wasm build (#4610)
    d645ea270 Update CHANGES, README for WebAssembly build (#4609)
    0d0013002 Add Wasm build (#3752)
    1082de6bb Handle overflowing id in merge return (#4606)
    97d449560 Avoid bitwise and in boolean expression (#4603)
    e3c709810 In generated cmake config file for SPIRV-Tools only access cmake target, if present (#4590)
    e3a373f2b Make cxx exceptions controllable  (#4591)
    c194bb2a7 spirv-val Update LocalSizeId VUID (#4602)
    6c7885dbd Change branch handling in ADCE to fix errors (#4596)
    bd5bf754b Fix Linker generator ID (#4601)
    791f5b463 Only validate workgroup layout for explicit workgroup memory (#4542)
    2feb7074d Avoid confusing short-circuiting (#3404)
    7c5b17d37 Update passes to handle function declarations (#4599)
    b2ba019bf Delete decorations before replaces uses in dead branch elim (#4598)
    3291b6951 Do not fold snegate feeding sdiv. (#4600)
    d997c83b1 Add spirv-opt pass to replace descriptor accesses based on variable indices (#4574)
    d78c1c4cd Make IsLocalVar in ADCE work at any time. (NFC) (#4595)
    8c91f14a9 Add libFuzzer target for spirv-fuzz (#4434)
    17a5bacfa Handle missing execution modes for limitation check (#4594)
    7326b494d opt: set upper bits of spec constant according to spec (#4589)
    f3fbd98ff opt/spec_constants: fix bit pattern width checks. (#4588)
    0f3bc1d9b Fix i386 build issues related to random generation (#4586)
    001604bd4 Generate constants directly in CreateDebugInlinedAt (#4572)
    7a7a69037 README: Remove appveyor build badge. (#4584)
    4578db3c4 README: Update tested versions of compilers (#4579)
    387cae472 Opt passes should apply to the exported functions (#4554)
    35fd0e17d Consider 0xffffffff offset as missing (#4564)
    06ebc4806 Account for strided components in arrays (#4575)
    10343e53e Remove Appveyor CI, update README (#4578)
    3e6a85303 Mark DebugInfoNone as live in ADCE when DebugInfo present (#4568)
    e6e77dbdf Enable OpConstFunctionPointerINTEL outside function (#4576)
    5ed637caa Fix output of SPIR-V version in diagnostic (#4562)
    d31218c56 Use max enum instead of static array of legal values (#4571)
    0292d6b16 Update SPIRV-Headers (#4573)
    6dd73728e Fix merge-block assertions with debugInfo (#4563)
    e4349dd8f Fix CI failure (#4570)
    b46995741 Avoid bugprone-move-forwarding-reference warning in Clang (#4560)
    0c4deebc9 Include a maximum value for spv_target_env (#4559)
    63a391232 Fix ConstantManager to not run AnalyzeInstDefUse if DefUse not valid (#4557)
    2d12367ce Stop consuming input in fuzzers to select target environment (#4544)
    eeb973f50 More ADCE refactoring (#4548)
    9529d3c2c Avoid implicit fallthrough, by duplicating code (#4556)
    24476c2e3 spirv-opt: Don't eliminate dead members from StructuredBuffer (#4553)
    3234daada Do not assume there are execution modes (#4555)
    ba4b390c3 Suppress protobuf warning (#4551)
    c3adcb034 Adce refactor (NFC) (#4547)
    19dc86c48 Handle NonSemantic.Shader Debug[No]Line (#4530)
    f125452cf Fix inst_buff_addr_check to handle struct loads (#4489)
    134d763f4 GN: Fix build for debuginfo codegen. (#4536)
    1d48824ba Update SPIRV-Headers (#4543)
    a6c5056db Fix checks for offset in nested structs (#4531)
    0f4508752 Fix UBSan error in spirv-dis fuzzer (#4517)
    59f51bb4f Fix extract with out-of-bounds index (#4529)
    1454c95d1 spirv-opt: Switch from Vulkan.DebugInfo to Shader.DebugInfo (#4493)
    4ac8e5e54 Add preserve_interface mode to aggressive_dead_code_elim (#4520)
    9e65f054d spirv-fuzz: Account for differing signedness in WrapVectorSynonym (#4414)
    36ff13534 spirv-opt: Avoid integer overflow during constant folding (#4511)
    cb6c66917 Roll external/googletest/ b7d472f12..955c7f837 (111 commits) (#4521)
    846b032b5 Fix infinite loop in validation (#4523)
    bf463fe37 Fix UBSan kokoro config (#4522)
    5efeaad30 Fix bad order of checks in atomic validation (#4524)
    8865b2029 Handle out-of-bounds accesses in VDCE (#4518)
    4f4f76037 Change validator boolean tests to avoid asserts (#4503)
    912460e46 Fix infinite loop in GetBlockDepth (#4519)
    013b1f3d6 Fix validation message for cooperative matrix column type (#4502)
    2a938fcfa Add UBSan kokoro configuration (#4512)
    c16224c68 Add some missing switch validation (#4507)
    92868b8f3 spirv-val: Fix ubsan error (#4505)
    4db6b8dcc Remove environment features that are never used (#4491)
    7e860e383 fix parsing of bad binary exponents in hex floats (#4501)
    789de0dc4 Adjust build for fuzzer targets to support OSS-Fuzz (#4498)
    0c09258e0 Set threshold for reduce-load-size pass (#4499)
    bd3a271ce Handle exported functions in ADCE (#4495)
    702e6af38 Only add `-DSPIRV_CHECK_CONTEXT` for Debug builds (#4496)
    b8fce5f9e spirv-lint: Add lint based on divergence analysis (#4488)
    ee3077365 Add a feature for allowing LocalSizeId (#4492)
    2a5cc342f Start SPIRV-Tools v2021.4
    1fbed83c8 Finalize SPIRV-Tools v2021.3
    3d4246b4a Update CHANGES
    a1d5d67ae spirv-val: Validate vulkan debug info similarly to opencl debug info (#4466)
    937227c76 Add divergence analysis to linter (#4465)
    d699296b4 spirv-val: Fix WorkgroupSize VUID 04425 (#4482)
    1ad8b7135 spirv-lint: add basic CLI argument handling (#4478)
    a9ce5e07c Fix matrix stride validation (#4468)
    e172833bd Don't double count variables for location validation (#4474)
    926ff6d1b GN: Suppress unreachable code warnings. (#4476)
    57e1d8ebe Add spirv-opt convert-to-sampled-image pass (#4340)
    b2e36b67e Disallow loading a runtime-sized array (#4473)
    2c829c415 Fix early-out for Clamp constant folding (#4461)
    869a550d2 Don't fold unsigned divides of an constant and a negation (#4457)
    881001070 fix SIGSEGV when reading from a non-existant file (#4453)
    00b106e76 Limit location validation (#4467)
    54524ffa6 Update SPIRV-Headers (#4463)
    de69f32e8 spirv-opt: Add handling of vulkan debug info to DebugInfoManager (#4423)
    c4c6f2ba5 spirv-opt: Add dataflow analysis framework (#4402)
    f9d03bb40 Remove PCH from source/lint/CMakeLists.txt (#4459)
    706dc27a6 Add new target for spirv-lint (#4446)
    3510a14cf Add a section releases to the README (#4444)
    175ecd49e Fix array layout validation slowdown (#4449)
    07f130235 spirv-fuzz: Support AtomicStore (#4440)
    366d1be5e fuzzers: Disable suggest-destructor-override warning (#4439)
    3ab6fb9c0 Add CMake rules for libFuzzer targets (#4445)
    0065c5672 spirv-fuzz: support AtomicLoad (#4330)
    affe280c2 Add GraphicsFuzz shaders to fuzzer corpus (#4429)
    c5bda7ae5 Fuzzer: Default the new constructor parameter (#4438)
    5737dbb06 Fix validator crash (#4418)
    17bf44376 spirv-fuzz: Add minimal SPIR-V example to test shaders (#4415)
    c6422cff3 spirv-opt: Rename ControlDependenceAnalysis::DoesBlockExist to HasBlock (#4412)
    983ee2313 spirv-opt: Add specific handling of vulkan debug info differences (#4398)
    9c4481419 spirv-fuzz: Allow inapplicable transformations to be ignored (#4407)
    c9e094cc4 spirv-fuzz: Quit fuzzer pass when no types are available (#4409)
    4bcd13ff1 spirv-opt: Add more tests to control dependence  (#4410)
    7dadcf9c7 Add control dependence analysis to opt (#4380)
    11cd875ed spirv-fuzz: Use reference in CanMakeSynonymOf (#4401)
    4376a10c1 Fix public deps on generated headers (#4386)
    b2db20a7e BUILD.gn: introduce finer grained internal targets for Tint (#4399)
    63238d4f2 Initialize context in `opt::Instruction`'s move constructor (#4397)
    183fb9fe4 spirv-fuzz: Fix problem with instruction context (#4394)
    94bcae134 spirv-fuzz: Avoid out-of-bounds access (#4395)
    cc3fe2b67 spirv-fuzz: Fix vector wrapping fuzzer pass (#4392)
    2419f3be8 spirv-fuzz: Tighten checks on null and undef pointers (#4367)
    2a7a561c0 Fix local size hint id tests (#4400)
    d9f892578 spirv-opt: Where possible make code agnostic of opencl/vulkan debuginfo (#4385)
    033768c24 spirv-fuzz: TransformationWrapVectorSynonym that rewrites scalar operations using vectors (#4376)
    f084bcfe2 spirv-fuzz: Support atomic operations opcode (#4348)
    3a68a7274 CMake: add ENABLE_RTTI option (#4382)
    8966cc2b2 Add common enum for debug info instructions from either opencl or vulkan (#4377)
    5427d5cf0 Don't mention VS2013 in PR review instructions (#4384)
    7320b9acd Explain how to run tests with CMake and Bazel (#4383)
    e0937d7fd spirv-fuzz: Don't replace memory semantics / scope operands (#4349)
    2685c9a68 Add missing fuzzer header dependency. (#4381)
    640b17b5f Fix -Wunreachable-code-aggressive. (#4358)
    4baf3affe spirv-opt: support SPV_EXT_shader_image_int64 (#4379)
    feb05446b Fix BUILD.gn (#4378)
    2299b710d spirv-fuzz: support building using gn (#4365)
    d432bebb1 Fix vendor table build in BUILD.gn for nonsemantic.vulkan.debuginfo.100 (#4375)
    3b6abf41c Add non-semantic vulkan extended instruction set (#4362)
    c26baf4c9 Update SPIRV-Headers deps (#4369)
    9ce7a2fb6 spirv-reduce: Eliminate skeletal structured control flow construct (#4360)
    4d2832e3c spirv-fuzz: Check updated analyses in transformation tests (#4266)
    776336052 spirv-fuzz: Added tests for signedness analysis (#4361)
    a95bc460f Add remove_unused_interface_variable_pass.* to BUILD.gn (#4363)
    c67f13208 add tests for SPV_KHR_bit_instructions (#4350)
    06f114d48 spirv-fuzz: Avoid out of bounds access (#4355)
    74e8105eb Enabled tvOS platform (#4329)
    f9893c454 spirv-opt: A pass to removed unused input on OpEntryPoint instructions. (#4275)
    8442a1812 Bump glob-parent from 5.0.0 to 5.1.2. (#4353)
    eeff9af1e fix strncpy bound error (#4331)
    b8587c984 spirv-reduce: Allow merging unreachable blocks (#4303)
    4fcdc5894 Add IsReachable function to IRContext (#4323)
    237173a07 spirv-reduce: Cleanup a few things (#4352)
    8cc8b6562 spirv-fuzz: Add illustrative tests for new issues (#4347)
    3a02d1126 Add validation for SPV_EXT_shader_atomic_float16_add (#4325)
    e065c482c Initial support for SPV_KHR_integer_dot_product (#4327)
    e992c96c8 fix symbol exports check, for Android build cases (#4342)
    0c21e5092 Start SPIRV-Tools v2021.3
    e198c6a78 Finalize SPIRV-Tools v2021.2
    f8eafd4d8 spirv-val: Label VUID 04780 (#4334)
    e84bcb251 spirv-val: Add GLCompute to VUID 04644 message (#4333)
    5dd2f7691 Update CHANGES file for upcoming release.
    bcef91374 Update SPIRV-Headers deps (#4328)
    4d22f58a8 Support SPV_KHR_subgroup_uniform_control_flow (#4318)
    ecdd9a3e6 spirv-val: Vulkan Storage Class for Execution Model (#4212)
    edc3a2478 Add SPV_KHR_vulkan_memory_model to aggressive_dead_code_elim (#4320)
    bbc660eda Support Intel extensions for fixed point and hls-float (#4321)
    9dbca316a spirv-fuzz: Improve TransformationAddBitInstructionSynonym to check integer signedness (#4312)
    c1a75bfab spirv-fuzz: Support bitwise or and xor in TransformationAddBitInstructionSynonym (#4310)
    d07505c76 Update lodash (#4317)
    fb02131cb No error report for variable image offset when before-legal-hlsl is on (#4316)
    87a286797 Add kInstErrorMax to instrument.hpp (#4315)
    c05f74415 Spirv-fuzz: Add tests for MaybeGet* functions in fuzzerutil (#4284)
    6d5c5677e Remove VS2013 kokoro build (#4314)
    26cdce984 spirv-fuzz: add tests for full coverage of TransformationAccessChain (#4304)
    c853a9114 spirv-fuzz: Added test to increase coverage of the add_parameter transformation (#4305)
    126a826d3 Spirv-fuzz: Achieve coverage of TransformationAddDeadBlock test  (#4306)
    8b3dc6bbe Check that valid bitcasted constant was returned (#4311)
    0861a8fa2 spirv-fuzz: Fix OutlineFunction in presence of unreachable blocks (#4308)
    9646c733e spirv-fuzz: Fix def-use update in PermutePhiOperands (#4309)
    ec1bc3e2e spirv-fuzz: Added extra tests for AddTypeFloat and AddTypeInt transformations (#4292)
    94f570d7a spirv-fuzz: Increase test coverage of TransformationCompositeConstruct (#4301)
    00ce2bb47 spirv-fuzz: Enhancing permute function variables and its testing (#4295)
    e2ac64bdf spirv-fuzz: Move ApplyTransformation to .cpp file (#4258)
    91931ffcd spirv-fuzz: Enhance test to improve lines covered (#4289)
    0afe1f2b3 spirv-fuzz: Cover protobuf message creation in tests (#4285)
    f0d110e30 Invalidate analyses (#4260)
    18d45142e Fix crash when optimizing shaders with DebugPrintf (#4280)
    010cd289d Fix continue construct for single block loops (#4277)
    f6b59599a spirv-fuzz: Respect control flow rules when merging returns (#4279)
    de1cae069 val test: Update capability dependency (#4268)
    1020e394c spirv-fuzz: Fix underflow problem in `fuzzer_pass_swap_two_functions` (#4253)
    8ec9f456e Fix export symbol test. (#4254)
    f30465d2b build: Fix Android build (#4157)
    f8c78cc53 Updates to the vscode SPIR-V extension (#4246)
    f82f5af5e Invalidate DefUse analysis (#4255)
    089d716d2 Fix dangling phi bug from loop-unroll (#4239)
    07ec4f83c Support folding OpBitcast with numeric constants (#4247)
    6cdf07d2b spirv-fuzz: Swap positions of two functions in a module (#4236)
    1b8341b8b Fix warning in python script. (#4251)
    9f23457ee GraphicsRobustAccessPass: Set module_status_.modified (#4167)
    8fe39ad58 spirv-fuzz: Permute the order of variables at function scope issue (#4248)
    22b82872b Start SPIRV-Tools v2021.2
    c2d5375fa Finalize SPIRV-Tools v2021.1
    dc72924cb Update CHANGES
    693d564db spriv-val: Fix clang-format bug for VUID string (#4238)
    a02a9205f spirv-fuzz: Accept limitations in AddFunction (#4226)
    ae6a1e1d2 Fix UWP build (#4235)
    6210375e1 Fix clang-format-diff.py URL (#4233)
    8da800c4c spirv-reduce: Remove redundant r-value references (#4232)
    212895d4c Typo fix (#4225)
    48007a5c7 Add interpolate legalization pass (#4220)
    61e256c9c spirv-fuzz: Efficiency improvements to fuzzer pass (#4188)
    2ee21fbde spirv-fuzz: Avoid invalidating analyses when splitting blocks (#4218)
    22eb528f1 spirv-fuzz: Do not add too many dead blocks (#4217)
    d0c73fcee spirv-fuzz: Optimize transformations (#4216)
    f22793015 spirv-fuzz: Fix comments #4215
    ecc840d30 Add validation for SPV_EXT_shader_atomic_float_min_max (#4105)
    d20c9c2cf Make spirv-tools-build-version a common dependency (#4210)
    bed84792f spirv-fuzz: Call by value and move in transformations (#4208)
    c0833ce62 spirv-fuzz: Remove destructors from FuzzerPass subclasses (#4209)
    3d3951796 spirv-fuzz: Improve transformation test oracles (#4207)
    edb8399b0 spirv-fuzz: Add WGSL compatibility flag to context (#4193)
    6382cbb49 spirv-fuzz: Avoid invalidating analyses in various transformations (#4205)
    657889978 spirv-fuzz: Manage available instructions efficiently (#4177)
    75d7c14cf spirv-fuzz: Remove AddType methods from fuzzerutil (#4204)
    f2a19b015 spirv-val: Refactor of atomic pass (#4200)
    8f421ced3 spirv-val: Label VUID 04643 (#4202)
    2b0d16a05 spirv-val: Label VUID 04667 (#4201)
    a732e4c03 spirv-fuzz: Apply fuzzer pass before checking exit conditions (#4199)
    a611be778 spirv-val: Fix Int64Atomics check (#4192)
    4f498774d Roll deps (#4185)
    c040bd3ae spirv-val: Add Vulkan Execution Scope checks (#4183)
    8866fd7ae spirv-fuzz: Locate instructions more efficiently (#4189)
    db2a70646 spirv-fuzz: Make adding equation instructions more efficient (#4190)
    e8ab7101f spirv-fuzz: Make PermutePhiOperands more efficient (#4191)
    79ab273f9 Accept OpImageTexelPointer user in scalar-replacement (#4187)
    042eff73f spirv-val: Add Vulkan Invocation Sematics check (#4182)
    03f23106c spirv-val: Label VUID 04634 (#4181)
    4100477e7 Support SPV_KHR_linkonce_odr, SPV_KHR_expect_assume (#4161)
    478754c00 spirv-fuzz: Avoid invalidating analyses (#4176)
    777990758 spirv-fuzz: Add buggy test (#4180)
    9e93b165c Remove usage of std::iterator. (#4171)
    5d8c40399 BUILD.gn: fix typo for 'cflags' (#4169)
    77eb2b608 Suppress warning (#4168)
    f7cf3ec2a spirv-fuzz: Avoid unnecessary dependency (#4165)
    1746ed39d Add `void` in function declaration to keep some compilers happy (#4160)
    4a59fd476 Fix -Wextra-semi-stmt -Wsuggest-destructor-override -Wdeprecated-copy-dtor (#4164)
    c6da5e343 spirv-val: Vulkan 64-bit OpAtomicStore check (#4163)
    e6a9f4e43 spirv-fuzz: Fix the bug in TransformationReplaceBranchFromDeadBlockWithExit (#4140)
    7d514cf1c spirv-fuzz: Fix PartialCount (#4159)
    f7043c0de spirv-fuzz: Handle Vulkan SPIR-V versions (#4156)
    43cfa9bc1 spirv-fuzz: Add persistent state to the fuzzer (#4137)
    939bc0260 Require an OpSelectionMerge before an OpSwitch (#4154)
    0bd920eb9 Use standard function to get stdin to binary mode. (#4141)
    d28186db9 Fixes for the vscode language server extension (#4150)
    ef3290bbe spirv-opt: Don't call GenerateCopy for mismatched image types (#4126)
    1b35745ad Start SPIRV-Tools v2021.0
    07383c65d Finalize SPIRV-Tools v2020.7
    05cda81ab Update CHANGES
    c79edd260 Generate differentiated error codes for buffer oob checking (#4144)
    cfa1dadb1 Update a few virtuals to overrides. (#4143)
    f0c96f40c spriv-val: Vulkan image gather constant component (#4133)
    3ad7e5fcc spirv-val: Fix/Label UniformConstant VUID (#4134)
    f11f74348 spirv-val: Add Vulkan Invariant Decoration VUID (#4132)
    c91a25af1 spirv-val: label tests for VUID 04657 (#4119)
    d61a7d110 spirv-val: Add Vulkan PSB64 convert VUID (#4122)
    297723d75 Mark module as modified if convert-to-half removes decorations. (#4127)
    e8bd26e1f Set correct scope and line info for DebugValue (#4125)
    b812fd634 Validate SPV_KHR_workgroup_memory_explicit_layout (#4128)
    cc81f53d3 Validate VK_KHR_zero_initialize_workgroup_memory (#4124)
    d71ac38b8 spirv-val: Add Vulkan image gather offset VUID (#4118)
    a4f97da40 Add cmake to windows path for kokoro (#4129)
    a61600c76 spirv-val: Label Vulkan atomic semantics VUIDs (#4120)
    819117cd4 spirv-val: Label VUID 04662 (#4123)
    89ad2272b spirv-val: Label VUID 04683 (#4121)
    968659aee Remove obsolete GN config (#4110)

Commands:
    ./third_party/update-spirvtools.sh

Bug: b/123642959
tree: fb633a9ee51f9f1d50b183fefac8c62133f1d070
  1. .vscode/
  2. build/
  3. build_overrides/
  4. docs/
  5. extensions/
  6. include/
  7. infra/
  8. src/
  9. tests/
  10. third_party/
  11. tools/
  12. .clang-format
  13. .dir-locals.el
  14. .gitignore
  15. .gitmodules
  16. Android.bp
  17. AUTHORS.txt
  18. BUILD.gn
  19. CMakeLists.txt
  20. CMakeSettings.json
  21. codereview.settings
  22. CONTRIBUTING.txt
  23. CONTRIBUTORS.txt
  24. DIR_METADATA
  25. LICENSE.txt
  26. OWNERS
  27. 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: SwiftShader's OpenGL ES implementation is no longer supported, and will be removed. Read more about our recommendation to use ANGLE on top of SwiftShader Vulkan here (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.

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.