# Revision history for `glslang` All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). ## NEXT * Deprecate the HLSL front-end. It will be removed at the next major version. See issue #4210 for details. * Add support for GL_EXT_opacity_micromap_ray_query_mode * Add support for GL_EXT_clip_cull_distance and GL_ARB_cull_distance * Fix extension checks on the remaining members of a redeclared instance-named block * Fix an out-of-range block member index when a feature is used under `#extension all : warn` ## 16.6.0 2026-09-10 ### New Extensions * Implement `GL_EXT_cooperative_matrix_maintenance1` * Implement `GL_EXT_optional_input_attachment_index` * Implement `DebugEntryPoint` for `NonSemantic.Shader.DebugInfo` 102 ### `SPV_KHR_abort` / `abortEXT` * Require the first parameter of `abortEXT` to be a string literal, emit an error if it is not * Require the first parameter of `printf` to be a string literal, emit an error if it is not * Fix abort message struct layout for matrix, vector, and aggregate arguments * Pack the abort message with scalar layout when the shader requests `GL_EXT_scalar_block_layout` * Pack the abort message with scalar layout unconditionally so that consumers use one fixed set of rules * Fix abort message type to use separate value and laid out types, removing invalid `ArrayStride` on constant types * Fix `abort` to handle boolean and opaque types correctly ### API Changes * Add access to the source entry point in the C API ### Bug Fixes * Fix relaxed Vulkan access chain traversal for buffer references * Fix 32-bit identity fillers used in 16-bit matrix constructors * Fix out-of-bounds slot access for `atomic_uint` in `reserveResourceSlot` * Fix out-of-bounds read when folding component-wise intrinsics on matrices * Fix out-of-bounds dereference on undeclared ray tracing location * Fix out-of-bounds read on empty `entryPoints` in `postProcessFeatures` * Fix out-of-bounds read on short `coopMatPerElementNV` argument list * Fix crash on empty struct initializers in cascading error mode * Guard empty block member list in `getBlockSize` * Validate argument count in `decomposeStructBufferMethods` * Require constant scope and semantics operands in `memorySemanticsCheck` * Fix string escaping in preprocessed output * Fix `Aligned` decoration on `buffer_reference` swizzle-store read-modify-write load * Fold bit-cast conversions as constant expressions * Fold hyperbolic functions (`sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh`) as constant expressions * Improve parsing of `#pragma STDGL` ### Performance * Replace linear search with a hash table for composite and struct constant creation in the SPIR-V builder ## 16.5.0 2026-07-31 ### New Extensions * Implement `GLSL_EXT_split_barrier` / `SPV_EXT_split_barrier` * Implement `GLSL_QCOM_multiple_wait_queues` * Implement `GLSL_QCOM_image_processing3` * Implement `GL_EXT_function_control_attributes` ### API Changes * Expose `TVarEntryInfo` as part of the public API in `ShaderLang.h` ### Bug Fixes * Fix undefined shifts and signed overflow in `#if` expression evaluation * Fix out-of-bounds read when indexing `idInstruction` and `idDescriptor` * Fix null dereference in iomapper when `uniformVarMap` is empty * Fix out-of-bounds read on empty array initializer in `convertInitializerList` * Fix stack overflow on deeply nested macro invocations, capping macro expansion depth at 200 and emitting an error * Fix out-of-bounds read in `handlePragma` when `#pragma STDGL` has fewer than 4 tokens * Fix crash in preprocessor output when a backslash-newline continuation appears at end of input due to column underflow * Fix crash on excess `#endif` directives when a malformed `#if` expression desynchronizes `elseSeen`/`ifdepth` preprocessor counters * Fix out-of-bounds write in `memberRemapper` for nested `buffer_reference` blocks * Fix out-of-bounds read on long vector index in `checkIndex` ### Other * Update SPIR-V size optimization and HLSL legalization pass lists to match spirv-tools, and add performance optimization option * Increase `input_attachment_index` limit to `INT_MAX` * Print compile and link error logs to stderr instead of stdout ## 16.4.0 2026-07-14 ### Descriptor Heap * Implement `GLSL_EXT_structured_descriptor_heap` with SPIR-V layout generation, heap offset access, buffer references, matrix layout decorations, and correct `readonly`/`writeonly` qualifier propagation for buffer and image descriptors * Fix descriptor heap-bound buffer access to use typed pointers * Omit `NonUniform` decoration when using descriptor heaps, as the SPIR-V spec does not require it * Add `--relax-set-binding-limits` option to allow large `layout(set)` and `layout(binding)` values for descriptor heap-style workflows with sparse set spaces * Reject combined image samplers with `descriptor_heap` ### Compute Shader Derivatives * Fix `GL_KHR_compute_shader_derivatives` regressions on shaders using the `GL_NV` variant * Update compute shader derivative rules to allow texture operations with implicit derivatives without extensions, falling back to LoD 0 ### New Extensions * Implement `GL_EXT_ocp_microscaling_types` * Implement `GL_NV_cooperative_matrix_decode_vector` * Add basic support for `GL_NV_desktop_lowp_mediump` * Implement `GL_EXT_opacity_micromap_ray_query_mode` ### Bug Fixes * Fix generated decoration string from `UTF8EncodingKHR` to `UTFEncodingKHR` * Fix missing SPIR-V extension emission for `float16` derivative functions with `SPV_AMD_gpu_shader_half_float` * Apply `NoContraction` decoration to `dot()` when `noContraction` is set * Fix `OpStore` of buffer device address pointer to use 8-byte alignment, consistent with loads * Fix `RayTracingOpacityMicromapKHR` capability emission to only occur when `gl_RayFlagsForceOpacityMicromap2StateEXT` is actually used, fixing SPIR-V validation failures in ray query shaders outside ray-tracing pipeline stages * Fix `setInvertY()` to apply Y-inversion to GLSL vertex, geometry, and tessellation-evaluation shaders (previously only affected HLSL) * Fix `.length()` on arrays of long/cooperative vectors to use `OpArrayLength` instead of a constant component count * Fix unnecessary cooperative matrix conversions when creating arrays of KHR cooperative matrices * Add error for cooperative matrix `*=` with bf16/fp8 scalar operands * Fix out-of-bounds access in `elseSeen` at maximum `#if`/`#ifdef` nesting depth * Fix out-of-bounds read on empty struct texture template types * Fix crash in `layoutObjectCheck` when accessing members of an empty block * Emit an error when HLSL [numthreads] is given more than three arguments instead of crashing the compiler. * Emit error when attempting to convert a literal string to an incompatible type * Fix `abortKHR` to preserve the original user-defined string without modification * Fix out-of-bounds indexing in `TDefaultIoResolverBase::addStage` when a negative `EShLanguage` value is passed ### Other * Add `--discard-is-terminate` option to emit `OpTerminateInvocation` instead of `OpDemoteToHelperInvocation` for GLSL `discard` when targeting SPIR-V 1.6+ * Add REUSE license compliance infrastructure ## 16.3.0 2026-05-01 ### Deprecation Notice * Deprecate the HLSL front-end. See issue #4210 for details. ### Other changes * Support GL_NV_explicit_typecast * Raise the maximum limit for specialization constant IDs * Add explicit 8-bit and 16-bit type support for bitfieldReverse * Implement system include directives for the standalone wrapper * Check for invalid usage of gl_WorkGroupSize components * HLSL: Provide string error context only if token is a string * Fix layoutDescriptorStride bitfield truncation for large stride values * GL_EXT_long_vector with 2-4 components no longer require LongVector capability * Fix alignment of guard blocks * Fix ShaderDebugInfo having invalid line numbers when generating SPIRV 1.0 * Replace ostringstream with string concat during #include preprocessing * Check for bad parameters on long vector type * HLSL: Check for bad integer argument on Load*, Store*, Interlocked* * HLSL: handle type error for ternary operator * HLSL: Ensure scope is popped even when method body fails to parse * Avoid unneccessary copies in SpirvIntrinsics.cpp * Unconditionally emit debug source for include files when using non-semantic debug info * Support bfloat16 and float8 tensors * Add small type capabilities for GLSL.STD.450 * Add initial support for NonSemantic.Shader.DebugInfo 101 * Fix access chains for GL_ARM_tensors with raw descriptor heap accesses * Support GL_KHR_compute_shader_derivatives * Require a quad or linear layout qualifier to be specified for GL_KHR_compute_shader_derivatives * Supportx SPV_KHR_constant_data and SPV_KHR_abort ## 16.2.0 2026-01-22 * Allow gl_FragDepth identifier to be redeclared * Replace 'GL_TASK(MESH)_SHADER_NV' with 'GL_TASK(MESH)_SHADER_EXT' * Scalarize swizzled MeshEXT stores * Support GL_EXT_long_vector * Add missing preamble #define for GL_EXT_nontemporal_keyword * Support GL_NV_push_constant_bank * Support GL_EXT_descriptor_heap ## 16.1.0 2025-12-01 * Avoid emitting OpCapability RuntimeDescriptorArray when unnecessary * Improve compilation speed when debug infomation is enabled * Fix Debug Info for Retargeted Builtins * Support GL_EXT_shader_invocation_reorder * Add checks to coopMatMulAdd * Implement stringify operator * Add ES support for depth layout qualifier * Add debug info for hitObjectNV * Emit a DebugGlobalVariable instead of DebugLocalVariable for rayQueryEXT * Add debug info for constant variable * Improve debug line to point declaration * Fix bugs in buffer reference alignment * Reject string operands in binary and select ops * Support GL_EXT_shader_64bit_indexing * Support GLSL_EXT_uniform_buffer_unsized_array * Add semantic check for cooperative vector loads/stores * Improve the debug info name of opaque (sampler) types * Support IO mapping of combined samplers and acceleration structures * Fix bug in debug info for bool types inside SSBO/UBO * Fix bug in debug info for struct member names * Add methods for entry point and invert-y to C interface ## 16.0.0 2025-09-25 ### Breaking changes * Remove spirv-remapper (ported to SPIRV-Tools as canonicalize-ids optimization pass) ### Other changes * Emit error for in/out structs containing booleans * Fix contradictory layout link errors * Improve error checks for float8 math * Fix bug in cooperative matrix load/store handling of array slices * Update memory semantic validation rules to match update to Vulkan specification * Simplify glslang grammar for identifier lists * Fix erroneous parse errors in variable declarations using existing struct names * Fix type conversions for createTensorLayout/ViewNV * Fix OpAccessChain signed index issue for small unsigned integers * Support GLSL_QCOM_cooperative_matrix_conversion * Allow spec constant matrix use * Fix inconsistent labeling of capability strings * Fix crash on unnamed function parameters under relaxed rules * Fix exported member functions in ShaderLang.h ## 15.4.0 2025-06-26 * Support GL_NV_gpu_shader5/GL_ARB_gpu_shader5 * Remove BUILD_SHARED_LIBS option (defer to built-in variable) * Remap discard to OpDemoteToHelperInvocation * Fix typos and improve readability of help message * Support GLSL_QCOM_tile_shading * Emit correct capability for linear swept sphere * Support GL_EXT_float8_e5m2_e4m3 * Move E_SPV_ARM_cooperative_matrix_layouts into GLSL.ext.ARM.h * Support GL_ARM_tensors ## 15.3.0 2025-04-24 * Fix CMake find_package on Windows when building shared libraries * Fix crash calling coopMatLoadTensorNV on an array element * Avoid reusing array types with stride when no stride is requested * Fix non-ASCII comments * Support GL_EXT_bfloat16 * Fix several issues with link-time implicit array size merging * Support DebugSourceContinued * LiveTraverser no longer traverses switch cases that are statically not accessed * Implement optional cross-stage check for inputs with no matching outputs ## 15.2.0 2025-02-24 * Fix find_package on Windows when BUILD_SHARED_LIBS=ON * Emit error if using in/out with struct pointer * Emit SPV_EXT_opacity_micromap if GL extension is present * Support GL_NV_linear_swept_spheres * Support GLSL_EXT_nontemporal_keyword * Support GL_NV_cluster_acceleration_structure * Support GL_NV_cooperative_vector * Check SparseTextureOffset non-const parameters * Support GL_EXT_texture_offset_non_const * Revert cross-stage check for missing outputs * Support EXT_integer_dot_product * Add support for OpTypeRayQueryKHR and OpTypeAccelerationStructureKHR to SPVRemapper ## 15.1.0 2024-12-13 * Add Vulkan 1.4 target and client * Improve conversion of uniform block to push constant * Improve cross stage error reporting by reporting proper stager rather than "unkwown stage" * Add warning if forward declaration uses layout qualifiers * Implement GLSL_NV_cooperative_matrix2 * Emit OpModfStruct instead of depracated OpModf * Add link-time cross stage optimization * Add column to DebugLexicalBlock * Propagate errors from symbol table initialization * Fix nonsemantic debuginfo line attribution for cooperative matrix ## 15.0.0 2024-09-23 ### Breaking changes * Explicitly export all symbols that are part of the public API and hide other symbols by default ### Other changes * Allow building glslang without the SPIR-V backend using the new ENABLE_SPIRV build option * Add setResourceSetBinding method to the API * Add interface to get the GLSL IO mapper and resolver * Allow compute derivative modes when the workgroup dimensions are spec constants * Improve debug location of branch/return instructions * Silence preprocessor '#' error reporting in inactive #if/#ifdef/#elif/#else blocks * Apply GLSL memory decorations to top-level OpVariable * Move definition of GLSLANG_EXPORT to visibility.h * Merge ancillary libraries into main glslang library and stub originals * Add public setSourceFile and addSourceText methods to TShader class * Add type checks for hitObjectNV * Add optimizerAllowExpandedIDBound to SpvOptions * Add SpvTools.h back to public headers * Add cross-stage check for missing outputs * Fix HLSL offsets for non-buffers * Add types and functions for IO mapping to API * Add function to set preprocessed code to API * Add set/get version functions to API * Expose setGlobalUniform functions to API * Don't emit debug instructions before an OpPhi * Add command-line and API option to enable reporting column location for compiler errors * Improve location aliasing checks * Support constant expression calculated by matrixCompMult * Fix crash caused by atomicCounter() use without arguments * Fix multi-line function call line numbers * Add line info to OpDebugDeclare for function parameters * Fix HLSL OpDebugFunction file name * Fix duplicate decorations * Enable compilation of glslang without thread support for WASI ## 14.3.0 2024-06-25 * Generate vector constructions more efficiently when sizes match * Skip identity conversions for 8-bit and 16-bit types * Add cmake aliases for public libraries * Support ARM extended matrix layout * Emit debug info for buffer references * Add support for OpExtInstWithForwardRefsKHR * Generate SPV_EXT_replicated_compisites when requested by pragma * Reuse loads generated for repeated function arguments * Fix gl_HitT alias of gl_RayTmax * Fix some cases where invalid SPIR-V was being generated when using separate samplers * Add back layoutLocation to public API ## 14.2.0 2024-05-02 * Improve checking for location aliasing errors * Fix undefined behavior in parser * Add bounds check to gl_SampleMask * Fix alignment and padding of matrices consuming one vector * Remove duplicate SPIR-V decorations * Check for exponent overflow in float parser * Fix bug in relaxed verification rules * Fix disassembly of debugBreak * Fix bug when importing SPIR-V extended intruction set * Fix issues with the interaction of cooperative_matrix and spirv_intrinsics * Support SPV_QCOM_image_processing2 * Support files with UTF8BOM character ## 14.1.0 2024-03-08 * Add a new --abosute-path command-line option to output absolute paths in error messages * Support GL_EXT_control_flow_attributes2 * Support GL_ARB_shading_language_include * Fix HLSL built-in passthrough via inout * Enable -Wimplicit-fallthrough and fix warnings * Fix -Wmissing_field_initializer warnings * Document supported dependencies in known_good.json * Clear spirv vector before use * Emit debug info for accelerationStructure and rayQuery variables * Support NV_shader_atomic_fp16_vector * Support GL_EXT_expect_assume_support * Allow external control of whether glslang will be tested or installed * Improve debug source and line info * Support GL_KHR_shader_subgroup_rotate * Add SPIRV-Tools-opt dependency if ENABLE_OPT * Support EXT_shader_quad_control * Add OpAssumeTrueKHR and OpExpectKHR * Support GL_EXT_maximal_reconvergence * Remove generation of deprecated Target.cmake files * Fix array size of gl_SampleMask and gl_SampleMaskIn * Support GL_ARB_texture_multisample_extension * Emit DebugTypePointer when non-semantic debug info is enabled ## 14.0.0 2023-12-21 ### Breaking changes * The legacy libraries named HLSL and OGLCompiler have been removed. To avoid future disruptions, please use cmake's find_package mechanism rather than hardcoding library dependencies. * Only the headers that are part of glslang's public interface are included in the install target. * Remove OVERRIDE_MSVCCRT cmake option. ### Other changes * Fix spv_options initialization * Fix line number for OpDebugFunction and OpDebugScope for function * Fix SPV_KHR_cooperative_matrix enumerants * Fix nullptr crash * Fix GL_ARB_shader_storage_buffer_object version * Fix interpolant ES error * Generate DebugValue for constant arguments * Overflow/underflow out-of-range floats to infinity/0.0 respectively * Support SV_ViewID keywords for HLSL * Implement relaxed rule for opaque struct members * Add BUILD_WERROR cmake option * Add GLSLANG_TESTS cmake option * Always generate OpDebugBasicType for bool type * Fix GLSL parsing of '#' when not preceded by space or tab * Fix GL_ARB_bindless_texture availability * Support GL_EXT_draw_instanced extension * Support GL_EXT_texture_array extension * Fix conversion of 64-bit unsigned integer constants to bool * Output 8-bit and 16-bit capabilities when appropriate for OpSpecConstant ## 13.1.1 2023-10-16 * Initialize compile_only field in C interface ## 13.1.0 2023-10-13 * Support GL_EXT_texture_shadow_lod * Support GL_NV_displacement_micromap * Fix ByteAddressBuffer when used a function parameter * Add more verbose messages if SPIRV-Tools is not found * Fix names for explicitly sized types when emitting nonsemantic debug info * Emit error for r-value arguments in atomic memory operations * Add --no-link option * Beautify preprocessor output format * Fix race condition in glslangValidator * Only set LocalSizeId mode when necessary * Don't emit invalid debug info for buffer references ## 13.0.0 2023-08-23 ### Breaking changes * Simplify PoolAlloc via thread_local * Remove InitializeDLL functions * Remove OSDependent TLS functions * Remove GLSLANG_WEB and GLSLANG_WEB_DEVEL code paths ### Other changes * Raise CMAKE minimum to 3.17.2 * Support GL_KHR_cooperative_matrix * Support GL_QCOM_image_processing_support * Support outputting each module to a filename with spirv-remap * Generate an error when gl_PrimitiveShaderRateEXT is used without enabling the extension * Improve layout checking when GL_EXT_spirv_intrinsics is enabled ## 12.3.1 2023-07-20 ### Other changes * Improve backward compatibility for glslangValidator rename on Windows ## 12.3.0 2023-07-19 ### Other changes * Rename glslangValidator to glslang and create glslangValidator symlink * Support HLSL binary literals * Add missing initialization members for web * Improve push_constant upgrading * Fix race condition in spirv remap * Support pre and post HLSL qualifier validation * Force generateDebugInfo when non-semantic debug info is enabled * Exit with error if output file cannot be written * Fix struct member buffer reference decorations ## 12.2.0 2023-05-17 ### Other changes * Support GLSL_EXT_shader_tile_image * Support GL_EXT_ray_tracing_position_fetch * Support custom include callbacks via the C API * Add preamble-text command-line option * Accept variables as parameters of spirv_decorate_id * Fix generation of conditionals with a struct result * Fix double expansion of macros * Fix DebugCompilationUnit scope * Improve line information ## 12.1.0 2023-03-21 ### Other changes * Reject non-float inputs/outputs for version less than 120 * Fix invalid BufferBlock decoration for SPIR-V 1.3 and above * Add HLSL relaxed-precision float/int matrix expansions * Block decorate Vulkan structs with RuntimeArrays * Support InterlockedAdd on float types ## 12.0.0 2023-01-18 ### Breaking changes * An ABI was accidentally broken in #3014. Consequently, we have incremented the major revision number. ### Other changes * Add support for ARB_bindless_texture. * Add support for GL_NV_shader_invocation_reorder. * Fix const parameter debug types when using NonSemantic.Shader.DebugInfo.100. * Fix NonSemantic.Shader.DebugInfo.100 disassembly. * Fix MaxDualSourceDrawBuffersEXT usage. * Fix structure member reference crash. ## 11.13.0 2022-12-06 ### Other changes * Make HelperInvocation accesses volatile for SPIR-V 1.6. * Improve forward compatibility of ResourceLimits interface * Remove GLSLANG_ANGLE ## 11.12.0 2022-10-12 ### Other changes * Update generator version * Add support for GL_EXT_mesh_shader * Add support for NonSemantic.Shader.DebugInfo.100 * Make OpEmitMeshTasksEXT a terminal instruction * Make gl_SubGroupARB a flat in int in Vulkan * Add support for GL_EXT_opacity_micromap * Add preamble support to C interface ## 11.11.0 2022-08-11 ### Other changes * Add OpSource support to C interface * Deprecate samplerBuffer for spirv1.6 and later * Add support for SPV_AMD_shader_early_and_late_fragment_tests ## 11.10.0 2022-06-02 ### Other changes * Generate OpLine before OpFunction * Add support for VK_EXT_fragment_shader_barycentric * Add whitelist filtering for debug comments in SPIRV-Remap * Add support for GL_EXT_ray_cull_mask ## 11.9.0 2022-04-06 ### Other changes * Add GLSL version override functionality * Add eliminate-dead-input-components to -Os * Add enhanced-msgs option * Explicitly use Python 3 for builds ## 11.8.0 2022-01-27 ### Other changes * Add support for SPIR-V 1.6 * Add support for Vulkan 1.3 * Add --hlsl-dx-position-w option ## 11.7.0 2021-11-11 ### Other changes * Add support for targeting Vulkan 1.2 in the C API ## 11.6.0 2021-08-25 ### Other changes * Atomic memory function only for shader storage block member or shared variable * Add support for gl_MaxVaryingVectors for ogl * Fix loading bool arrays from interface blocks * Generate separate stores for partially swizzled memory stores * Allow layout(std430) uniform with GL_EXT_scalar_block_layout * Support for pragma STDGL invariant(all) * Support for GL_NV_ray_tracing_motion_blur ## 11.5.0 2021-06-23 ### Other changes * Implement GLSL_EXT_shader_atomic_float2 * Implement GL_EXT_spirv_intrinsics * Fixed SPIR-V remapper not remapping OpExtInst instruction set IDs * only declare compatibility gl_ variables in compatibility mode * Add support for float spec const vector initialization * Implement GL_EXT_subgroup_uniform_control_flow. * Fix arrays dimensioned with spec constant sized gl_WorkGroupSize * Add support for 64bit integer scalar and vector types to bitCount() builtin ## 11.4.0 2021-04-22 ### Other changes * Fix to keep source compatible with CMake 3.10.2 ## 11.3.0 2021-04-21 ### Other changes * Added --depfile * Added --auto-sampled-textures * Now supports InterpolateAt-based functions * Supports cross-stage automatic IO mapping * Supports GL_EXT_vulkan_glsl_relaxed (-R option) ## 11.2.0 2021-02-18 ### Other changes * Removed Python requirement when not building with spirv-tools * Add support for GL_EXT_shared_memory_block * Implement GL_EXT_null_initializer * Add CMake support for Fuschia ## 11.1.0 2020-12-07 ### Other changes * Added ray-tracing extension support ## 11.0.0 2020-07-20 ### Breaking changes #### Visual Studio 2013 is no longer supported [As scheduled](https://github.com/KhronosGroup/glslang/blob/9eef54b2513ca6b40b47b07d24f453848b65c0df/README.md#planned-deprecationsremovals), Microsoft Visual Studio 2013 is no longer officially supported. Please upgrade to at least Visual Studio 2015. ## 10.15.3847 2020-07-20 ### Breaking changes * The following files have been removed: * `glslang/include/revision.h` * `glslang/include/revision.template` The `GLSLANG_MINOR_VERSION` and `GLSLANG_PATCH_LEVEL` defines have been removed from the public headers. \ Instead each build script now uses the new `build_info.py` script along with the `build_info.h.tmpl` and this `CHANGES.md` file to generate the glslang build-time generated header `glslang/build_info.h`. The new public API to obtain the `glslang` version is `glslang::GetVersion()`. ### Other changes * `glslang` shared objects produced by CMake are now `SONAME` versioned using [Semantic Versioning 2.0.0](https://semver.org/).