Revision history for Shaderc v2023.8 2024-01-03 - API: Expose rlaxed Vulkan rules from glslang - Update to Glslang 14.0.0 - CMake: - Comply with CMP0148: Use PythonInterp - Use TARGET_OBJECTS to simplify creating the shaderc_shared library. v2023.7 2023-10-12 - Update dependencies - Finish converting build instructions and flags to always use C++17 - Add GitHub CI to test more flows v2023.6 2023-08-09 - Update dependencies, including SPIRV-Tools v2023.4.rc2 v2023.5 2023-07-19 - Update dependencies - Update to Android NDK r25c - Update Android API level for test project (#1333) - For testing, add a dependency on Abseil's C++ library - Fix MSVC runtime library linking in CMake (#1339) v2023.4 2023-05-24 - Refresh Glslang, SPIRV-Tools, SPIRV-Headers - Android.mk: - Require NDK 21d or later - Update scripts for generating the shared library, which should fix Windows - glslc and APIs: - Add options to control mesh shading limits v2023.3 2023-03-17 - Shaderc now requires C++17 - Drop support for VS 2015 - Add glslc option -fpreserve-bindings - Refresh Glslang, SPIRV-Tools v2023.2 2023-01-18 - Update DEPS to pull in SPIRV-Tools bugfix #5049 v2023.1 2023-01-13 - General/Build - Removed support for GCC-based code coverage builds - Update minimum CMake to 3.17.2 - Fix C++20 compatibility: explicitly construct string_piece when comparing to `char*` v2022.4 2022-11-30 - Update to Glslang 11 - Update SPIRV-Tools, SPIRV-Headers dependencies - Add Cmake BUNDLE DESTINATION option for target install - The code coverage build is no longer being tested v2022.3 2022-10-12 - #1264: Implement defaults for SPV_EXT_mesh_shader builtins - Update SPIRV-Tools to v2022.4 v2022.2 2022-08-11 - Require CMake 3.14 or later - Support 16bit types in HLSL, via glslc option -fhlsl-16bit-types and associated library API methods. PR #1251 - Update glslc tests for newer Glslang debug output - Update SPIRV-Tools v2022.3 plus one patch - Update SPIRV-Headers v2022.1 2022-02-03 - Update DEPS to include two fixes on top of SPIRV-Tools v2022.1: - Validator handles Nontemporal image operand - Optimizer handles RayQueryKHR type v2022.0 2022-01-27 - Update to Glslang 11.8.0 v2021.4 2022-01-27 - Support Vulkan 1.3 - Support targeting SPIR-V 1.6, which is the default for Vulkan 1.3 - Updated copyright check: Excludes Glslang generated files when building in source tree - Fix Android.mk rules for building libshaderc_combined, to adapt to more recent NDKs that have removed the GNU binutils. v2021.3 2021-11-11 - Add build switch to disable copyright check - Update DEPS: - SPIRV-Tools v2021.4 - SPIRV-Headers GitHub master 2021-11-11 - Glslang GitHub master 2021-11-11 v2021.2 2021-08-25 - README: Mention Common Lisp bindings (external) - Update DEPS: - SPIRV-Tools v2021.3 - SPIRV-Headers master 2021-08-25 - Glslang GitHub master 2021-08-25 v2021.1 2021-06-21 - Disable --target-env=opengl_compat with an explicit error message - It has been deprecated for a long time. v2021.0 2021-04-21 - Refresh dependencies (in DEPS): - SPIRV-Tools v2021.1 - SPIRV-Headers snapshot 2021-04-21 - Glslang 11.2.0, snapshot 2021-04-21 - Fixes: #1174: Windows Bazel support: rename internal headers io.* to io_shaderc.* v2020.5 2021-02-19 - Refresh dependencies (in DEPS): - SPIRV-Tools v2020.7 + 1 patch - Glslang 11.1.0 - Add option to skip building examples - Fixes: #1153: Improve file+line parsing from Glslang messages v2020.4 2020-12-09 - Removed svpc - Fixed issues with embedders getting duplicate symbols - Converted C-style casts to static_cast - Rolled ahead to fix/pickup Vulkan Raytracing support v2020.3 2020-09-02 - General: - Last release with spvc - Cleaned up issues discovered by Infer - spvc: - Added support for Dawn using deprecated Options constructor - Adding support for the additional fixed sample mask in MSL v2020.2 2020-07-23 - General: - Remove VS2013 support - Support both posix and non-posix MinGW toolchains - Support optionally building Tint tooling for WGSL - Add -h option to glslc, spvc; same as --help - Add source file license checker - BUILD.gn improvements - glslc, libshaderc: - Update to Glslang generator 9 - Add interface to support 16bit types in HLSL - Add glslc hidden experimental option -mfmt=wgsl; requires Tint - spvc: - Add minimum buffer size for Dawn reflection v2020.1 2020-06-09 This is the last version that officially supports VS2013. - General: - Added warning signs about unsupported downloads (#1041) - Added .NET bindings to README.md (#1060) - Only add -fPIC if supported by the compiler. (#1061) - glslc, libshaderc: - Removed Singleton pattern around access to glslang (#1059) - spvc: - Added concept of comparison sampler to API (#1036) - Added support for options.hlsl.nonwritable_uav_texture_as_srv (#1048) - Support forcing storage buffers to be always declared as UAV. (#1076) v2020.0 2020-03-06 - General: - Getting spirv.hpp from SPIRV-Headers instead of not glslang (#992) - Added clarification about status of artifacts in downloads.md (#1012) - glslc, libshaderc: - Added support for new Glslang profile enum, EProfileCount (#973) - Updated user documentation for -S in glslc (#978) - Add documentation for Vulkan 1.2 and SPIR-V 1.5 (#980) - Removed NV_EXTENSIONS conditionals (#1003) - Added support for generating WebGPU SPIR-V to libshaderc (#1021) - Rolled in all DEPS for provisional SPIR-V extensions for raytracing - spvc: - Normalized API behaviour (#967) - Added source_set target for libshaderc_spvc (#976) - Added in support for spvc logging to the terminal (#981) - Internal refactoring to reduce boiler plate in API implementations (#984) - Added newline to logging messages to make them readable (#985) - Added reflection support for Dawn: - storage textures (#1001) - storage texture format (#1005) - texture dimension for storage textures (#1008) - is storage texture declared as multisampled texture (#1011) - Converted compile options to require explicit environments (#1019) - Added knob to control force_zero_initialized_variables in SPIRV-Cross (#1028) v2019.1 2020-01-22 - glslc, libshaderc: - Add -fnan-clamp: Generate code for max and min builtins so that, given a NaN operand, will return the other operand. Similarly, the clamp builtin favours non-NaN operands, as if clamp was implemented as the composition of max and min. - Add -finvert-y - Using SetBeforeHlslLegalization for more relaxed validation rules - Added support for SPIR-V 1.5 - Add --emit-line-directive option - Added support for Vulkan 1.2 - spvc: - Add many options: --flatten-multidimensional-arrays --es --no-es --glsl-emit-push-constant-as-ubo --msl-swizzle-texture-samples --msl-platform=ios|macos --msl-pad-fragment-output --msl-capture-output --msl-domain-lower-left --msl-argument-buffers --msl-discrete-descriptor-set= --hlsl-enable-compat - Reintroduce shaderc_spvc_compile_options_set_shader_model - Added option to inject robust buffer access code - Added support for emitting ToVulkan shaders - Added spirv-opt based IR generation as alternative to built in spirv_cross IR gen - Added API for specifying source and target execution environments - Added option & reflection API methods neede by Dawn - Substantial internal refactoring and code cleanup - Large number of breaking changes to the API - Replaced shaderc_spvc_compile_options_set_shader_model with shaderc_spvc_compile_options_set_hlsl_shader_model - Compiler initialization and shader generation moved into seperate calls - Seperated return codes from shaderc ones - Many small API changes - Improvements to testing - Refactoring and clean up of run_spirv_cross_tests.py - Seperation of expectations into known failures, known invalids, and cases that need investigation - Tweaks and fixes to substantially increase passing cases - Added support for running tests using spvc IR generation - Infrastructure - Update DEPS with cross-verified commits from associated repos. - Add utils/roll-deps - Infrastructure: - Removed Appveyor artifacts link - Improvements and clean up of DEPS rolling scripts - Enabled warnings about implicit fallthrough - Enabled improper semicolon warnings - Restricted -fPIC to platforms that support it - Converted remaining scripts to use Python 3 - Replaced nosetest with unittest - Removed assumptions aabout location of spirv-tools, effcee, and RE2 - Migrated BUILD.gn spirv_cross dependency to local repo - Fixes: - Fix duplicate install paths when using VisualStudio - Fixed BUILD.gn for Chromium, Dawn & Fuchsia - Explicitly enabled HLSL support in glslang - Added installing necessary headers in Android.mk - Removed unsupported Unicode characters - Fixed detection of spirv-headers directory #666: Update Docker file to use Python3 v2019.0 2019-06-04 - Add optional spvc, libshaderc_spvc as wrapper around SPIRV-Cross: - Rejects bad modules by running the SPIR-V validator first - Skips exception-heavy SPIRV-Cross SPIR-V parser - Support NV extensions for shader stages - Require SPIRV-Tools and SPIRV-Headers with SPIR-V 1.4 support Build support: - Use KhronosGroup/glslang instead of google/glslang - Stop running tests on VS 2013 (googletest no longer supports VS2013) - Require Python3 for building - Support Chromium's GN build system - Kokoro build fixes - Cmake build fixes: Only build subdirs if those targets are not yet defined - Use Android.mk from Glslang - Dockerfile gets re2 and effcee sources - Fixes for newer googletest - Add address sanitizer presubmit bot - Generate config files for pkg-config Spvc: - Add option to specify source environment. Spvc will transform from source to target environment if they are different. This only works for WebGPU0 and Vulkan 1.1. Fixes: #499: In HLSL compilation, relax layout and logical pointer validation rules prior to running the legalization recipe. v2018.0 2018-10-01 - Support -fhlsl_functionality1 (also -fhlsl-functionality1) - Support NVIDIA Turing extensions. Requires updated Glslang and SPIRV-Tools. - Use SPIR-V optimization and HLSL legalization recipes from SPIRV-Tools. - Pass target environment into SPIRV-Tools code, e.g. from --target-env vulkan1.1 - Add SONAME=1 property to shared library - Support GN build for Chromium Fixes: #469: Add virtual dtor to classes with virtual functions. #457: Fix writing SPIR-V binaries to standard output on Windows. v2017.2 2018-02-27 - Add a shared library version of libshaderc - Support GLSL 4.6 and ESSL 3.2 - Fail compilation if a resource does not have a binding. - Add options for automatically setting bindings for (uniform) resources that don't have bindings set in shader source. - Add options for automatically setting locations for pipline inputs and outputs. - Add option for using HLSL IO mappings as expressed in source. - Add options for setting resource binding base numbers. - Add option to use HLSL resource register numbers for bindings. - HLSL compilation now defaults to HLSL packing rules. (This change is inherited from Glslang commit 7cca140.) - HLSL compilation runs SPIR-V "legalization" transforms to reduce manipulation of opaque handles (e.g. images), to satisfy Vulkan rules. - Adapt to Glslang generator version numbers: - To 2: a fix for code generation for atomicCounterDecrement. - To 3: change memory barrier semantics masks - To 4: generate more access chains for swizzles - CMake install rules uses GNUInstallDirs. For example, install to lib64 when that is the norm for the target system. v2017.1 2017-03-10 - Add option to automatically assign bindings to uniform variables that don't have an explicit 'binding' layout in the shader source. - Enable NVIDIA extensions by default in GLSL compilation - README mentions language bindings provided by 3rd parties. - README describes the known-good branch on GitHub - Fixed examples in shaderc.h; added C API use to examples/online-compile - Fixes issues: #289: Don't output an object file when compilation fails. #296: Enable use of the CMake in Android Studio. v2016.2 2016-12-13 - Describe Shaderc's level of stability. - Support HLSL compilation, exposing functionality in Glslang. - Supported in C, C++ API - glslc accepts "-x hlsl", and assumes .hlsl files are HLSL. - glslc accepts "-fentry-point=" to set entry point name, overriding default value "main". - Support setting shader resource limits in C, C++ APIs, and in glslc - glslc adds -flimit= - glslc adds --show-limits to display defaults and valid resource limit syntax. - glslc adds "-flimit-file " support to read Glslang resource configuration files, i.e. the output of "glslangValidator -c". - Enable AMD extensions by default in GLSL compilation - Fixes issues: #281: Work around Android build issue with abspath on Windows #283: Increase default maxDrawBuffers to 4, to match Vulkan/GLES3.0 v2016.1 2016-10-12 - C API for assembling now takes an options object - Support compilation options to optimize for size. - Maintain compatibility with recent SPIRV-Tools and Glslang versions. - Update examples. - Build cleanups. - Fixes issues: #238: Fix invocation of python scripts during build v2016.0 2016-07-07 - Adds v. versioning, with "-dev" suffix to indicate work in progress. The intent is to summarize and report functionalities more easily for incorporating into downstream projects. - Summary of functionalities (See the README.md for more details): - Provides libraries and command line tools for generating SPIR-V modules - Supports GLSL source code or SPIR-V assembly as input - Supports SPIR-V binary or assembly text as output - Command line options follow GCC/Clang conventions - Supports various semantics (OpenGL, OpenGL Compatible and Vulkan) - Supports #include - Supports user-defined macros - Supports dependency information dumping