Revision history for Shaderc

v2025.2
 - Update dependencies: Glslang, SPIRV-Tools, SPIRV-Headers
 - Supports BFloat16 floating point types

v2025.1
 - Update tools and compilers tested:
   - Clang 13
   - GCC 13
   - VisualStudio 2022
   - CMake 3.31.2
   - Python 3.12
   - NDK r27c
 - Skip version numbers to match SPIRV-Tools, to avoid
   confusion.

v2024.4
 - Support Vulkan 1.4

v2024.3
 - Update dependencies: Glslang, SPRIV-Tools, SPIRV-Headers
   - SPIRV-Tools is at v2024.4.rc1
   - This incorporates a SPIRV-Tools fix which was limiting parallelism.
     Validator friendly name generation was serializing on a mutex
     protecting the locale object.
 - During HLSL compilation or any optimizing compile, don't tell the
   validator to use "friendly names".  This should save time spent in the
   initial validation step of the optimization recipe.
 - Adapt test golden results to Glslang changes which reorder
   decorations by object enum value.
 - Fix ndk-build library dependencies: libshaderc_util depends on glslang
 - Use Python 3.12 on Linux CI bots
 - Fix Python 3.12 warnings for string escapes

v2024.2
 - Update dependencies:
     Glslang: top of tree 2024-06-21
     SPIRV-Header: top of tree 2024-06-21
     SPIRV-Tools: v2024.3.rc1
 - Build:
    - Remove support for VS2017

v2024.1
 - Update dependencies
 - Propagate test/install options to Glslang

v2024.0
 - Update dependencies
 - Utilities:
    - Use Python3 explicitly in utility scripts

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=<number>
	--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=<name>" to set entry point name,
     overriding default value "main".
 - Support setting shader resource limits in C, C++ APIs, and in
   glslc
   - glslc adds -flimit=<setting>
   - glslc adds --show-limits to display defaults and valid resource
     limit syntax.
   - glslc adds "-flimit-file <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<year>.<index> 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
