1394 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			1394 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
Revision history for SPIRV-Tools
 | 
						|
 | 
						|
v2022.2-dev 2022-01-26
 | 
						|
  - Start v2022.2-dev
 | 
						|
 | 
						|
v2022.1 2022-01-26
 | 
						|
  - General
 | 
						|
    - Add SPIR-V 1.6 support to wasm build (#4674)
 | 
						|
    - Improvements to disassembly within PassManager (#4677)
 | 
						|
    - Basic support for SPIR-V 1.6 (#4663)
 | 
						|
    - reflect debug (#4662)
 | 
						|
    - Fix endianness of string literals (#4622)
 | 
						|
  - Optimizer
 | 
						|
    - spirv-opt: add pass to Spread Volatile semantics (#4667)
 | 
						|
    - Fix constant propagation and folding of FClamp instructions (#4651)
 | 
						|
    - Manually fold floating point division by zero (#4637)
 | 
						|
    - Allow ADCE to remove dead inputs (#4629)
 | 
						|
  - Linker
 | 
						|
    - Linker improvements (#4679)
 | 
						|
      * test/linker: Code factorisation and small tweaks
 | 
						|
      * linker: Do not fail when going over limits
 | 
						|
  - Validator
 | 
						|
    - val: interface struct with builtins must be Block (#4665)
 | 
						|
  - Fuzzer
 | 
						|
    - Avoid id bound errors during opt fuzzing (#4658)
 | 
						|
    - Avoid uninitialised read when parsing hex float (#4646)
 | 
						|
 | 
						|
v2021.4 2021-11-11
 | 
						|
  - General
 | 
						|
    - Add a WebAssembly build (#3752)
 | 
						|
    - Make cxx exceptions controllable (#4591)
 | 
						|
  - Validator
 | 
						|
    - Improve decoration validation (#4490)
 | 
						|
  - Optimizer
 | 
						|
    - Add spirv-opt pass to replace descriptor accesses based on variable indices (#4574)
 | 
						|
    - Do not fold snegate feeding sdiv (#4600)
 | 
						|
    - Handle overflowing id in merge return (#4606)
 | 
						|
  - Fuzzer
 | 
						|
    - Add libFuzzer target for spirv-fuzz (#4434)
 | 
						|
  - Linter
 | 
						|
 | 
						|
v2021.3 2021-08-24
 | 
						|
 - General
 | 
						|
    - Initial support for SPV_KHR_integer_dot_product (#4327)
 | 
						|
    - Add non-semantic vulkan extended instruction set (#4362)
 | 
						|
    - Add common enum for debug info instructions from either opencl or vulkan (#4377)
 | 
						|
 - Validator
 | 
						|
    - Add validation for SPV_EXT_shader_atomic_float16_add (#4325)
 | 
						|
    - Disallow loading a runtime-sized array (#4473)
 | 
						|
    - spirv-val: Validate vulkan debug info similarly to opencl debug info (#4466)
 | 
						|
 - Optimizer
 | 
						|
    - spirv-opt: support SPV_EXT_shader_image_int64 (#4379)
 | 
						|
    - spirv-opt: Add dataflow analysis framework (#4402)
 | 
						|
    - Add control dependence analysis to opt (#4380)
 | 
						|
    - Add spirv-opt convert-to-sampled-image pass (#4340)
 | 
						|
    - spirv-opt: Add handling of vulkan debug info to DebugInfoManager (#4423)
 | 
						|
 - Fuzz
 | 
						|
    - spirv-fuzz: support AtomicLoad (#4330)
 | 
						|
    - spirv-fuzz: Support AtomicStore (#4440)
 | 
						|
    - spirv-fuzz: TransformationWrapVectorSynonym that rewrites scalar operations using vectors (#4376)
 | 
						|
    - spirv-fuzz: Add minimal SPIR-V example to test shaders (#4415)
 | 
						|
    - spirv-fuzz: support building using gn (#4365)
 | 
						|
 - Linter
 | 
						|
    - Add new target for spirv-lint (#4446)
 | 
						|
    - spirv-lint: add basic CLI argument handling (#4478)
 | 
						|
    - Add divergence analysis to linter (#4465)
 | 
						|
 | 
						|
v2021.2 2021-06-18
 | 
						|
 - General
 | 
						|
    - Support SPV_KHR_subgroup_uniform_control_flow (#4318)
 | 
						|
    - Support Intel extensions for fixed point and hls-float (#4321)
 | 
						|
    - Fix crash when optimizing shaders with DebugPrintf (#4280)
 | 
						|
 | 
						|
 - Validator
 | 
						|
    - Support Vulkan Storage Class for Execution Model (#4212)
 | 
						|
 | 
						|
 - Optimizer
 | 
						|
    - Handle SPV_KHR_vulkan_memory_model in dead-code elimination (#4320)
 | 
						|
    - Support folding OpBitcast with numeric constants (#4247)
 | 
						|
 | 
						|
 - Fuzz
 | 
						|
    - Add tests for MaybeGet* functions in fuzzerutil (#4284)
 | 
						|
    - Fix OutlineFunction in presence of unreachable blocks (#4308)
 | 
						|
    - Fix def-use update in PermutePhiOperands (#4309)
 | 
						|
    - Swap positions of two functions in a module (#4236)
 | 
						|
 | 
						|
v2021.1 2021-04-19
 | 
						|
 - General
 | 
						|
    - Support SPV_KHR_linkonce_odr, SPV_KHR_expect_assume (#4161)
 | 
						|
    - Fixes for the vscode language server extension (#4150)
 | 
						|
 - Validator
 | 
						|
    - Add validation for SPV_EXT_shader_atomic_float_min_max (#4105)
 | 
						|
    - Add Vulkan Execution Scope checks (#4183)
 | 
						|
    - Vulkan 64-bit OpAtomicStore check (#4163)
 | 
						|
 - Optimizer
 | 
						|
    - Add interpolate legalization pass (#4220)
 | 
						|
 - Fuzz
 | 
						|
    - Various performance optimizations
 | 
						|
    - Do not add too many dead blocks (#4217)
 | 
						|
    - Add WGSL compatibility flag to context (#4193)
 | 
						|
    - Add persistent state to the fuzzer (#4137)
 | 
						|
 | 
						|
v2020.7 2021-02-16
 | 
						|
 - General
 | 
						|
    - Support pending Intel extensions (#4116)
 | 
						|
    - Remove WebGPU support (#4108)
 | 
						|
 - Validator
 | 
						|
    - Vulkan image gather constant component (#4133)
 | 
						|
    - Add Vulkan PSB64 convert VUID (#4122)
 | 
						|
    - Validate SPV_KHR_workgroup_memory_explicit_layout (#4128)
 | 
						|
    - Validate VK_KHR_zero_initialize_workgroup_memory (#4124)
 | 
						|
    - Add Vulkan image gather offset VUID (#4118)
 | 
						|
    - Label Vulkan atomic semantics VUIDs (#4120)
 | 
						|
    - Label VUID 04662 (#4123)
 | 
						|
    - Label VUID 04683 (#4121)
 | 
						|
    - Add Vulkan EXT builtins (#4115)
 | 
						|
    - Validate Sampled=1 for Vulkan ImageQuerySizeLod, ImageQueryLevels, ImageQueryLod (#4103)
 | 
						|
    - Add Vulkan Memory Scope VUs (#4106)
 | 
						|
    - Add Vulkan Addressing Model check (#4107)
 | 
						|
    - Vulkan atomic storage class (#4079)
 | 
						|
    - Label standalone Vulkan VUID (#4091)
 | 
						|
    - Add Vulkan decroation VUID (#4090)
 | 
						|
    - Add Vulkan FP Mode VUID (#4088)
 | 
						|
    - Fix Vulkan image sampled check (#4085)
 | 
						|
    - Add Vulkan ForwardPointer VUID (#4089)
 | 
						|
    - Add Vulkan ImageTexelPointer format check (#4087)
 | 
						|
    - Add Vulkan Group Operation VUID (#4086)
 | 
						|
    - Add first StandAlone VUID 04633 (#4077)
 | 
						|
    - Add Subgroup VUIDs (#4074)
 | 
						|
    - validate return type of OpImageRead (#4072)
 | 
						|
    - tighter validation of multisampled images (#4059)
 | 
						|
    - validate OpTypeImage Sampled values for environemnts (#4064)
 | 
						|
    - validate StorageImageMultisampled capability (#4062)
 | 
						|
    - Add last TessLevelOuter and TessLevelInner VUID (#4055)
 | 
						|
    - Add last ClipDistance and CullDistance VUID (#4054)
 | 
						|
    - Add last ViewportIndex and Layer VUID (#4053)
 | 
						|
    - Add last Position VUID (#4052)
 | 
						|
    - Allow forward pointer to be used in types generally (#4044)
 | 
						|
 - Optimizer
 | 
						|
    - Mark module as modified if convert-to-half removes decorations (#4127)
 | 
						|
    - Fix binding number calculation in desc sroa (#4095)
 | 
						|
    - Run DCE when SPV_KHR_shader_clock is used (#4049)
 | 
						|
 - Debug Info
 | 
						|
    - Set correct scope and line info for DebugValue (#4125)
 | 
						|
    - Avoid integrity check failures caused by propagating line instructions (#4096)
 | 
						|
 - Linker
 | 
						|
    - Linker usability improvements (#4084)
 | 
						|
 - Instrumentation
 | 
						|
    - Generate differentiated error codes for buffer oob checking (#4097)
 | 
						|
 - Fuzz
 | 
						|
    - Fix OpPhi handling in DuplicateRegionWithSelection (#4065)
 | 
						|
 | 
						|
v2020.6 2020-12-07
 | 
						|
 - General
 | 
						|
    CMake: Add SPIRV_TOOLS_BUILD_STATIC flag (#3910)
 | 
						|
 - Disassembler
 | 
						|
    Add some context comments to disassembly. (#3847)
 | 
						|
 - Optimizer
 | 
						|
   - Take new (raytracing) termination instructions into account. (#4050)
 | 
						|
   - Do run DCE if SPV_KHR_ray_query is used. (#4047)
 | 
						|
   - Handle 8-bit index in elim dead member (#4043)
 | 
						|
   - Add texel buffer out-of-bounds checking instrumentation (#4038)
 | 
						|
   - Update MeshShadingNV dependencies (and land Ray tracing updates) (#4028)
 | 
						|
   - Fix buffer oob instrumentation for matrix refs (#4025)
 | 
						|
   - Fix SSA re-writing in the presence of variable pointers. (#4010)
 | 
						|
   - Add support to prevent functions from being inlined if they have
 | 
						|
     DontInline flag (#3858)
 | 
						|
   - Add SPV_EXT_shader_image_int64 (#3852)
 | 
						|
   - Support SPV_KHR_fragment_shading_rate (#3943)
 | 
						|
   - Fix use-after-move in val/validate.cpp (#3848)
 | 
						|
 - Debug Info
 | 
						|
   - properly preserve DebugValue indexes operand (#4022)
 | 
						|
   - Add DebugValue for invisible store in single_store_elim (#4002)
 | 
						|
   - Propagate OpLine to all applied instructions in spirv-opt (#3951)
 | 
						|
   - Add DebugValue for DebugDecl invisible to value assignment (#3973)
 | 
						|
   - Add DebugValue for function param regardless of scope (#3923)
 | 
						|
   - Debug info preservation in convert-local-access-chains pass (#3835)
 | 
						|
   - Debug info preservation in redundancy-elimination pass (#3839)
 | 
						|
   - Debug info preservation in if-conversion pass (#3861)
 | 
						|
 - Validator
 | 
						|
   - Add validation support for the ray tracing built-in variables (#4041)
 | 
						|
   - Use less stack space when validating Vulkan builtins (#4019)
 | 
						|
   - Fix SPV_KHR_fragment_shading_rate VUID label (#4014)
 | 
						|
   - Label Layer and ViewportIndex VUIDs (#4013)
 | 
						|
   - Allow the ViewportIndex and Layer built-ins on SPIR-V 1.5 (#3986)
 | 
						|
   - Fix validation of OpPhi instructions (#3919)
 | 
						|
 - Fuzz
 | 
						|
   - Fix facts arising from CompositeConstruct (#4034)
 | 
						|
   - Do not flatten conditionals that create synonyms (#4030)
 | 
						|
   - Add support for reining in rogue fuzzer passes (#3987)
 | 
						|
   - Fix assertion failure in FuzzerPassAddCompositeExtract (#3995)
 | 
						|
   - Fix invalid equation facts (#4009)
 | 
						|
   - Fix bugs in TransformationFlattenConditionalBranch (#4006)
 | 
						|
   - Fix bug related to transformation applicability (#3990)
 | 
						|
   - Add expand vector reduction transformation (#3869)
 | 
						|
   - Add FuzzerPassAddCompositeExtract (#3904)
 | 
						|
   - Fix mismatch with shrinker step limit (#3985)
 | 
						|
   - Fix off-by-one error in replayer (#3982)
 | 
						|
   - Get order right for OpSelect arguments (#3974)
 | 
						|
   - Do not add synonym-creating loops in dead blocks (#3975)
 | 
						|
   - Skip OpTypeSampledImage when propagating up (#3976)
 | 
						|
   - Pass OpUndef in function call if needed (#3978)
 | 
						|
   - Fix off-by-one in TransformationCompositeConstruct (#3979)
 | 
						|
   - Tolerate absent ids in data synonym fact management (#3966)
 | 
						|
   - Fix to id availability (#3971)
 | 
						|
   - Fix operand types (#3962)
 | 
						|
   - Don't flatten conditional if condition is irrelevant (#3944)
 | 
						|
   - Do not produce OpPhis of type OpTypeSampledImage (#3964)
 | 
						|
   - Restrict fuzzer pass to reachable blocks (#3970)
 | 
						|
   - Handle more types when extending OpPhi instructions (#3969)
 | 
						|
   - Skip early terminator wrappers when merging returns (#3968)
 | 
						|
   - Avoid irrelevant constants in synonym-creating loops (#3967)
 | 
						|
   - Skip dead blocks in FuzzerPassAddOpPhiSynonyms (#3965)
 | 
						|
   - Avoid the type manager when looking for struct types (#3963)
 | 
						|
   - Fix to TransformationDuplicateRegionWithSelection (#3941)
 | 
						|
   - Skip OpFunction when replacing irrelevant ids (#3932)
 | 
						|
   - Use component-wise selectors when flattening conditional branches (#3921)
 | 
						|
   - Avoid void struct member when outlining functions (#3936)
 | 
						|
   - Do not allow Block-decorated structs when adding parameters (#3931)
 | 
						|
   - Fix to operand id type (#3937)
 | 
						|
   - Handle dead blocks in TransformationEquationInstruction (#3933)
 | 
						|
   - Do not allow sampled image load when flattening conditionals (#3930)
 | 
						|
   - Take care of OpPhi instructions when inlining (#3939)
 | 
						|
   - Fix to TransformationInlineFunction (#3913)
 | 
						|
   - Wrap early terminators before merging returns (#3925)
 | 
						|
   - Lower probability of adding bit instruction synonyms (#3917)
 | 
						|
   - Fix handling of OpPhi in FlattenConditionalBranch (#3916)
 | 
						|
   - Avoid creating blocks without parents (#3908)
 | 
						|
   - Do not allow creation of constants of block-decorated structs (#3903)
 | 
						|
   - Fixes related to irrelevant ids (#3901)
 | 
						|
   - Fix to transformation that adds a synonym via a loop (#3898)
 | 
						|
   - Fix to duplicate region with selection (#3896)
 | 
						|
   - Do not expose synonym facts for non-existent ids (#3891)
 | 
						|
   - Do not add synonyms involving irrelevant ids (#3890)
 | 
						|
   - Do not replace irrelevant ids that are not in blocks (#3892)
 | 
						|
   - Wrap OpKill and similar in function calls (#3884)
 | 
						|
   - Integrate spirv-reduce with shrinker (#3849)
 | 
						|
   - Report fresh ids in transformations (#3856)
 | 
						|
   - Support OpNot bit instruction case (#3841)
 | 
						|
   - Return IR and transformation context after replay (#3846)
 | 
						|
 | 
						|
v2020.5 2020-09-22
 | 
						|
 - General
 | 
						|
   - Enable building with BUILD_SHARED_LIBS=1 (#3490)
 | 
						|
   - Avoid using /MP4 for clang on windows. (#3662)
 | 
						|
   - Fix compiler error on macOS with XCode12. (#3836)
 | 
						|
 - Optimizer
 | 
						|
   - Preserve OpenCL.DebugInfo.100 through private-to-local pass (#3571)
 | 
						|
   - Preserve debug info in scalar replacement pass (#3461)
 | 
						|
   - Debug info preservation in loop-unroll pass (#3548)
 | 
						|
   - Preserve debug info in dead-insert-elim pass (#3652)
 | 
						|
   - Improve non-semantic instruction handling in the optimizer (#3693)
 | 
						|
   - Let ADCE pass check DebugScope (#3703)
 | 
						|
   - Add undef for inlined void function (#3720)
 | 
						|
   - Fix SSA-rewrite to remove DebugDeclare for variables without loads (#3719)
 | 
						|
   - Handle DebugScope in compact-ids pass (#3724)
 | 
						|
   - Add buffer oob check to bindless instrumentation (#3800)
 | 
						|
 - Validator
 | 
						|
   - Update OpenCL capabilities validation (#3149)
 | 
						|
   - Validator support for non-semantic clspv reflection (#3618)
 | 
						|
   - OpenCL.DebugInfo.100 DebugTypeArray with variable size (#3549)
 | 
						|
   - Only validation locations for appropriate execution models (#3656)
 | 
						|
   - Validate more OpenCL.DebugInfo.100 instructions (#3684)
 | 
						|
   - Allow DebugTypeTemplate for Type operand (#3702)
 | 
						|
   - spirv-val: Add Vulkan VUID labels to BuiltIn (#3756)
 | 
						|
   - Allow SPV_KHR_8bit_storage extension. (#3780)
 | 
						|
   - Validate SPIRV Version number when parsing binary header (#3834)
 | 
						|
 - Reduce
 | 
						|
   - Support reducing a specific function (#3774)
 | 
						|
 - Fuzz
 | 
						|
   - adds TransformationReplaceCopyObjectWithStoreLoad (#3567)
 | 
						|
   - adds TransformationReplaceCopyMemoryWithLoadStore (#3575)
 | 
						|
   - adds TransformationReplaceLoadStoreWithCopyMemory (#3586)
 | 
						|
   - Implement the OpOuterProduct linear algebra case (#3617)
 | 
						|
   - Pass to replace int operands with ints of opposite signedness (#3612)
 | 
						|
   - TransformationMoveInstructionDown (#3477)
 | 
						|
   - Add TransformationMakeVectorOperationDynamic (#3597)
 | 
						|
   - TransformationReplaceAddSubMulWithCarryingExtended (#3598)
 | 
						|
   - FuzzerPassPropagateInstructionsUp (#3478)
 | 
						|
   - add FuzzerPassAddCompositeInserts (#3606)
 | 
						|
   - Add inline function transformation (#3517)
 | 
						|
   - Transformation to replace the use of an irrelevant id (#3697)
 | 
						|
   - Add SPIRV_FUZZ_PROTOC_COMMAND (#3789)
 | 
						|
   - Add TransformationDuplicateRegionWithSelection (#3773)
 | 
						|
   - Transformation to flatten conditional branch (#3667)
 | 
						|
   - Handle OpPhis in TransformationInlineFunction (#3833)
 | 
						|
   - Create synonym of int constant using a loop (#3790)
 | 
						|
   - Support dead blocks in TransformationAddSynonym (#3832)
 | 
						|
 - Linker
 | 
						|
 | 
						|
v2020.4 2020-07-22
 | 
						|
 - General
 | 
						|
   - Changed variable names to be more descriptive (#3433)
 | 
						|
   - Add support to GPU-AV instrumentation for Task and Mesh shaders (#3512)
 | 
						|
   - Permit Simple and GLSL450 memory model in WEBGPU_0 (#3463)
 | 
						|
   - Support SPV_KHR_terminate_invocation (#3568)
 | 
						|
 - Optimizer
 | 
						|
   - Preserving debug information in optimizations
 | 
						|
     (#3389,#3420,#3425,#3356,#3459,#3444,#3492,#3451,#3497i,#3498,#3542)
 | 
						|
   - Eliminate branches with condition of OpConstantNull (#3438)
 | 
						|
   - Use structured order to unroll loops. (#3443)
 | 
						|
   - Updated desc_sroa to support flattening structures (#3448)
 | 
						|
   - Support OpCompositeExtract pattern in desc_sroa (#3456)
 | 
						|
   - Fix ADCE pass bug for mulitple entries (#3470)
 | 
						|
     - Sink pointer instructions in merge return (#3569)
 | 
						|
 - Validator
 | 
						|
   - Validate location assignments (#3308)
 | 
						|
     - Fix reachability in the validator (#3541)
 | 
						|
 - Reduce
 | 
						|
 - Fuzz
 | 
						|
   - Add support for OpSpecConstant* (#3373)
 | 
						|
   - Add replace linear algebra instruction transformation (#3402)
 | 
						|
   - Implement vector shuffle fuzzer pass (#3412)
 | 
						|
   - Swap operands in OpBranchConditional (#3423)
 | 
						|
   - Permute OpPhi instruction operands (#3421)
 | 
						|
   - Add FuzzerPassAddCopyMemoryInstructions (#3391)
 | 
						|
   - TransformationInvertComparisonOperator (#3475)
 | 
						|
   - Add variables with workgroup storage class (#3485)
 | 
						|
   - Add image sample unused components transformation (#3439)
 | 
						|
   - TransformationReplaceParameterWithGlobal (#3434)
 | 
						|
     - Support adding dead break from back-edge block (#3519)
 | 
						|
       - Fuzzer pass to interchange zero-like constants (#3524)
 | 
						|
 - Linker
 | 
						|
 | 
						|
v2020.3 2020-05-27
 | 
						|
 - General
 | 
						|
   - Prevent Effcee from installing things when building spirv-tools with testing enabled (#3256)
 | 
						|
   - Update acorn version (#3294)
 | 
						|
   - If SPIRV-Headers is in our tree, include it as subproject (#3299)
 | 
						|
   - allow cross compiling for Windows Store, UWP, etc. (#3330)
 | 
						|
 - Optimizer
 | 
						|
   - Remove deprecated interfaces from instrument passes (#3361)
 | 
						|
   - Preserve debug info in inline pass (#3349)
 | 
						|
   - Handle more cases in dead member elim (#3289)
 | 
						|
   - Preserve debug info in eliminate-dead-functions (#3251)
 | 
						|
   - Fix Struct CFG analysis for single block loop (#3293)
 | 
						|
   - Add tests for recently added command line option (#3297)
 | 
						|
   - Consider sampled images as read-only storage (#3295)
 | 
						|
   - Allow various validation options to be passed to spirv-opt (#3314)
 | 
						|
   - Add debug information analysis (#3305)
 | 
						|
   - Preserve debug info for wrap-opkill (#3331)
 | 
						|
   - refactor inlining pass (#3328)
 | 
						|
   - Add unrolling to performance passes (#3082)
 | 
						|
 - Validator
 | 
						|
   - Add validation support for ImageGatherBiasLodAMD (#3363)
 | 
						|
   - Validate ShaderCallKHR memory scope (#3332)
 | 
						|
   - Validate Buffer and BufferBlock apply only to struct types (#3259)
 | 
						|
 - Reduce
 | 
						|
   - increase default step limit (#3327)
 | 
						|
   - Remove unused uniforms and similar (#3321)
 | 
						|
 - Fuzz
 | 
						|
   - Add support for StorageBuffer (#3348)
 | 
						|
   - Add validator options (#3254)
 | 
						|
   - Limit adding of new variables to 'basic' types (#3257)
 | 
						|
   - Transformation to add OpConstantNull (#3273)
 | 
						|
   - Handling of more fuzzing opportunities (#3277, #3280, #3281, #3290, #3292)
 | 
						|
   - Respect rules for OpSampledImage (#3287)
 | 
						|
   - Do not outline regions that produce pointer outputs (#3291)
 | 
						|
 - Linker
 | 
						|
 | 
						|
v2020.2 2020-03-26
 | 
						|
 - General:
 | 
						|
   - Support extended instructions in the vscode language server
 | 
						|
   - Make spvOpcodeString part of the public API (#3174)
 | 
						|
   - Added guide to writing a spirv-fuzz fuzzer pass (#3190)
 | 
						|
   - Add support for KHR_ray_{query,tracing} extensions (#3235)
 | 
						|
 - Optimizer
 | 
						|
   - Debug Printf support (#3215)
 | 
						|
   - Add data structure for DebugScope, DebugDeclare in spirv-opt (#3183)
 | 
						|
   - Fix identification of Vulkan images and buffers (#3253)
 | 
						|
 - Validator
 | 
						|
   - Add support for SPV_AMD_shader_image_load_store_lod (#3186)
 | 
						|
   - Add validation rules for OpenCL.DebugInfo.100 extension (#3133)
 | 
						|
   - Adding WebGPU specific Workgroup scope rule (#3204)
 | 
						|
   - Disallow phis of images, samplers and sampled images (#3246)
 | 
						|
 - Reduce
 | 
						|
 - Fuzz
 | 
						|
   - Fuzzer passes to add local and global variables (#3175)
 | 
						|
   - Add fuzzer passes to add loads/stores (#3176)
 | 
						|
   - Fuzzer pass to add function calls (#3178)
 | 
						|
   - Fuzzer pass that adds access chains (#3182)
 | 
						|
   - Fuzzer pass to add equation instructions (#3202)
 | 
						|
   - Add swap commutable operands transformation (#3205)
 | 
						|
   - Add fuzzer pass to permute function parameters (#3212)
 | 
						|
   - Allow OpPhi operand to be replaced with a composite synonym (#3221)
 | 
						|
 - Linker
 | 
						|
 | 
						|
v2020.1 2020-02-03
 | 
						|
 - General:
 | 
						|
   - Add support for SPV_KHR_non_semantic_info (#3110)
 | 
						|
   - Support OpenCL.DebugInfo.100 extended instruction set (#3080)
 | 
						|
   - Added support for Vulkan 1.2
 | 
						|
   - Add API function to better handle getting the necessary environment (#3142)
 | 
						|
   - Clarify mapping of target env to SPIR-V version (#3150)
 | 
						|
   - Implement constant folding for many transcendentals (#3166)
 | 
						|
 - Optimizer
 | 
						|
   - Change default version for CreatInstBindlessCheckPass to 2 (#3096, #3119)
 | 
						|
   - Better handling of OpLine on merge blocks (#3130)
 | 
						|
   - Use placeholder switch instead of placeholder loop in MergeReturn pass. (#3151)
 | 
						|
   - Handle TimeAMD in AmdExtensionToKhrPass. (#3168)
 | 
						|
 - Validator
 | 
						|
   - Fix structured exit validation (#3141)
 | 
						|
 - Reduce
 | 
						|
 - Fuzz
 | 
						|
   - Fuzzer pass to merge blocks (#3097)
 | 
						|
   - Transformation to add a new function to a module (#3114)
 | 
						|
   - Add fuzzer pass to perform module donation (#3117)
 | 
						|
   - Fuzzer passes to create and branch to new dead blocks (#3135)
 | 
						|
   - Fuzzer pass to add composite types (#3171)
 | 
						|
 - Linker:
 | 
						|
   - Remove names and decorations of imported symbols (#3081)
 | 
						|
 | 
						|
v2019.5 2019-12-11
 | 
						|
 - General:
 | 
						|
   - Export SPIRV-Tools targets on installation
 | 
						|
   - SPIRV-Tools support for SPIR-V 1.5 (#2865)
 | 
						|
   - Add WebGPU SPIR-V Assembler in JavaScript. (#2876)
 | 
						|
   - Add Bazel build configuration. (#2891)
 | 
						|
   - Add support for building with emscripten (#2948)
 | 
						|
   - Update SPIR-V binary header test for SPIR-V 1.5 (#2967)
 | 
						|
   - Add fuzzer for spirv-as call path (#2976)
 | 
						|
   - Improved CMake install step. (#2963)
 | 
						|
   - Add fuzzer for spirv-dis call path (#2977)
 | 
						|
   - Ensure timestamp does not vary with timezone. (#2982)
 | 
						|
   - Add a vscode extension for SPIR-V disassembly files (#2987)
 | 
						|
   - Add iOS as a supported platform (#3001)
 | 
						|
   - utils/vscode: Add SPIR-V language server support
 | 
						|
   - Respect CMAKE_INSTALL_LIBDIR in installed CMake files (#3054)
 | 
						|
   - Permit the debug instructions in WebGPU SPIR-V (#3063)
 | 
						|
   - Add support for Fuchsia. (#3062)
 | 
						|
 - Optimizer
 | 
						|
   - Add descriptor array scalar replacement (#2742)
 | 
						|
   - Add pass to wrap OpKill in a function call (#2790)
 | 
						|
   - Fold FMix during constant folding. (#2818)
 | 
						|
   - Add pass to replace AMD shader ballot extension (#2811)
 | 
						|
   - Add pass to make Float32 operation relax precision (#2808)
 | 
						|
   - Add pass to make relax precision operation Float16 (#2808)
 | 
						|
   - Add pass to replace uses of 3 AMD extensions (#2814)
 | 
						|
   - Fold Min, Max, and Clamp instructions. (#2836)
 | 
						|
   - Better handling of OpKill in continues (#2842,#2922,#2933)
 | 
						|
   - Enable OpTypeCooperativeMatrix specialization (#2927)
 | 
						|
   - Support constant-folding UConvert and SConvert (#2960)
 | 
						|
   - Update Offset to ConstOffset bitmask if operand is constant. (#3024)
 | 
						|
   - Improve RegisterSizePasses (#3059)
 | 
						|
   - Folding: perform add and sub on mismatched integer types (#3084)
 | 
						|
   - Graphics robust access: use signed clamp (#3073)
 | 
						|
   Fixes:
 | 
						|
   - Instrument: Fix version 2 output record write for tess eval shaders. (#2782)
 | 
						|
   - Instrument: Add support for Buffer Device Address extension (#2792)
 | 
						|
   - Fix check for changed binary in API call. (#2798)
 | 
						|
   - For WebGPU<->Vulkan optimization, set correct execution environment (#2834)
 | 
						|
   - Handle OpConstantNull in copy-prop-arrays. (#2870)
 | 
						|
   - Use OpReturn* in wrap-opkill (#2886)
 | 
						|
 - Validator
 | 
						|
   - Add generic builtin validation of target (#2843)
 | 
						|
   - Extra resource interface validation (#2864)
 | 
						|
   - Adding valilidation checks for OpEntryPoint duplicate names and execution mode (#2862)
 | 
						|
   - Relaxed bitcast with pointers (#2878)
 | 
						|
   - Validate physical storage buffer restrictions (#2930)
 | 
						|
   - Add SPV_KHR_shader_clock validation (#2879, #3013)
 | 
						|
   - Validate that selections are structured (#2962)
 | 
						|
   - Disallow use of OpCompositeExtract/OpCompositeInsert with no indices (#2980)
 | 
						|
   - Check that derivatives operate on 32-bit values (#2983)
 | 
						|
   - Validate array stride does not cause overlap (#3028)
 | 
						|
   - Validate nested constructs (#3068)
 | 
						|
   Fixes:
 | 
						|
   - Fix validation of constant matrices (#2794)
 | 
						|
   - Update "remquor" validation
 | 
						|
   - Only allow previously declared forward refs in structs (#2920)
 | 
						|
 - Reduce
 | 
						|
   - Remove relaxed precision decorations (#2797)
 | 
						|
   - Reduce/fuzz: improve command line args (#2932)
 | 
						|
   - Improve remove unref instr pass (#2945)
 | 
						|
   Fixes:
 | 
						|
 - Fuzz
 | 
						|
   - Fix add-dead-break and add-dead-continue passes to respect dominance (#2838)
 | 
						|
   - Add fuzzer pass to copy objects (#2853)
 | 
						|
   - Add fuzzer pass to replace ids with synonyms (#2857)
 | 
						|
   - Allow validation during spirv-fuzz replay (#2873)
 | 
						|
   - Employ the "swarm testing" idea in spirv-fuzz (#2890)
 | 
						|
   - reduce/fuzz: improve command line args (#2932)
 | 
						|
   - option to convert shader into a form that renders red (#2934)
 | 
						|
   - Add fuzzer pass to change selection controls (#2944)
 | 
						|
   - add transformation and pass to construct composites (#2941)
 | 
						|
   - Add fuzzer pass to change loop controls (#2949)
 | 
						|
   - Add fuzzer pass to change function controls (#2951)
 | 
						|
   - Add fuzzer pass to add NoContraction decorations (#2950)
 | 
						|
   - Add missing functionality for matrix composites (#2974)
 | 
						|
   - Fuzzer pass to adjust memory access operands (#2968)
 | 
						|
   - Transformation to extract from a composite object (#2991)
 | 
						|
   - Vector shuffle transformation (#3015)
 | 
						|
   - Improve debugging facilities (#3074)
 | 
						|
   - Function outlining fuzzer pass (#3078)
 | 
						|
 | 
						|
 | 
						|
v2019.4 2019-08-08
 | 
						|
 - General:
 | 
						|
   - Memory model support for SPIR-V 1.4
 | 
						|
   - Add new spirv-fuzz tool
 | 
						|
   - Add option for base branch in check_code_format.sh
 | 
						|
   - Removed MarkV and Stats code. (#2576)
 | 
						|
   - Instrument: Add version 2 of record formats (#2630)
 | 
						|
   - Linker: Better type comparison for OpTypeArray and OpTypeForwardPointer (#2580)
 | 
						|
 - Optimizer
 | 
						|
   - Bindless Validation: Instrument descriptor-based loads and stores (#2583)
 | 
						|
   - Better folding for OpSpecConstantOp (#2585, #2614)
 | 
						|
   - Add in individual flags for Vulkan <-> WebGPU passes (#2615)
 | 
						|
   - Handle nested breaks from switches. (#2624)
 | 
						|
   - Optimizer: Handle array type with OpSpecConstantOp length (#2652)
 | 
						|
   - Perform merge return with single return in loop. (#2714)
 | 
						|
   - Add --preserve-bindings and --preserve-spec-constants (#2693)
 | 
						|
   - Remove Common Uniform Elimination Pass (#2731)
 | 
						|
   - Allow ray tracing shaders in inst bindle check pass. (#2733)
 | 
						|
   - Add pass to inject code for robust-buffer-access semantics (#2771)
 | 
						|
   - Treat access chain indexes as signed in SROA (#2776)
 | 
						|
   - Handle RelaxedPrecision in SROA (#2788)
 | 
						|
   - Add descriptor array scalar replacement (#2742)
 | 
						|
   Fixes:
 | 
						|
   - Handle decorations better in some optimizations (#2716)
 | 
						|
   - Change the order branches are simplified in dead branch elim (#2728)
 | 
						|
   - Fix bug in merge return (#2734)
 | 
						|
   - SSA rewriter: Don't use trivial phis (#2757)
 | 
						|
   - Record correct dominators in merge return (#2760)
 | 
						|
   - Process OpDecorateId in ADCE (#2761)
 | 
						|
   - Fix check for unreachable blocks in merge-return (#2762)
 | 
						|
   - Handle out-of-bounds scalar replacements. (#2767)
 | 
						|
   - Don't move debug or decorations when folding (#2772)
 | 
						|
   - Protect against out-of-bounds references when folding OpCompositeExtract (#2774)
 | 
						|
 - Validator
 | 
						|
   - Validate loop merge (#2579)
 | 
						|
   - Validate construct exits (#2459)
 | 
						|
   - Validate OpenCL memory and addressing model environment rules (#2589)
 | 
						|
   - Validate OpenCL environment rules for OpTypeImage (#2606)
 | 
						|
   - Allow breaks to switch merge from nested construct (#2604)
 | 
						|
   - Validate OpenCL environment rules for OpImageWrite (#2619)
 | 
						|
   - Allow arrays of out per-primitive builtins for mesh shaders (#2617)
 | 
						|
   - Validate OpenCL rules for ImageRead and OpImageSampleExplicitLod (#2643)
 | 
						|
   - Add validation for SPV_EXT_fragment_shader_interlock (#2650)
 | 
						|
   - Add builtin validation for SPV_NV_shader_sm_builtins (#2656)
 | 
						|
   - Add validation for Subgroup builtins (#2637)
 | 
						|
   - Validate variable initializer type (#2668)
 | 
						|
   - Disallow stores to UBOs (#2651)A
 | 
						|
   - Validate Volatile memory semantics bit (#2672)
 | 
						|
   - Basic validation for Component decorations (#2679)
 | 
						|
   - Validate that in OpenGL env block variables have Binding (#2685)
 | 
						|
   - Validate usage of 8- and 16-bit types with only storage capabilities (#2704)
 | 
						|
   - Add validation for SPV_EXT_demote_to_helper_invocation (#2707)
 | 
						|
   - Extra small storage validation (#2732)
 | 
						|
   - For Vulkan, disallow structures containing opaque types (#2546)
 | 
						|
   - Validate storage class OpenCL environment rules for atomics (#2750)
 | 
						|
   - Update OpControlBarriers rules for WebGPU (#2769)
 | 
						|
   - Update OpMemoryBarriers rules for WebGPU (#2775)
 | 
						|
   - Update WebGPU validation rules of OpAtomic*s (#2777)
 | 
						|
   Fixes:
 | 
						|
   - Disallow merge targeting block with OpLoopMerge (#2610)
 | 
						|
   - Update vloadn and vstoren validation to match the OpenCL Extended
 | 
						|
     Instruction Set Specification (#2599)
 | 
						|
   - Update memory scope rules for WebGPU (#2725)
 | 
						|
   - Allow LOD ops in compute shaders with derivative group execution modes (#2752)
 | 
						|
 - Reduce
 | 
						|
   Fixes:
 | 
						|
 | 
						|
v2019.3 2019-05-14
 | 
						|
 - General:
 | 
						|
   - Require Python 3 since Python 2 will out of service soon.
 | 
						|
   - Add a continuous test that does memory checks using the address sanitizer.
 | 
						|
   - Fix the build files so the SPIRV_USE_SANITIZER=address build works.
 | 
						|
   - Packaging top of tree build artifacts again.
 | 
						|
   - Added support for SPIR-V 1.4. (#2550)
 | 
						|
 - Optimizer
 | 
						|
   - Remove duplicates from list of interface IDs in OpEntryPoint instruction (#2449)
 | 
						|
   - Bindless Validation: Descriptor Initialization Check (#2419)
 | 
						|
   - Add option to validate after each pass (#2462)
 | 
						|
   - Add legalization pass to fix mismatched pointer (#2430, #2535)
 | 
						|
   - Add error messages when the input contains unknown instructions. (#2487)
 | 
						|
   - Add pass to convert from WebGPU Spir-V to Vulkan Spir-V and back. (#2495)
 | 
						|
   Fixes:
 | 
						|
   - #2412: Dead memeber elimination should not change input and output variables.
 | 
						|
   - #2405: Fix OpDot folding of half float vectors.
 | 
						|
   - #2391: Dead branch elim should not fold away back edges.
 | 
						|
   - #2441: Removing decorations when doing constant propagation.
 | 
						|
   - #2455: Maintain inst to block mapping in merge return.
 | 
						|
   - #2453: Fix merge return in the face of breaks.
 | 
						|
   - #2456: Handle dead infinite loops in DCE.
 | 
						|
   - #2458: Handle variable pointer in some optimizations.
 | 
						|
   - #2452: Fix dead branch elimination to handle unreachable blocks better.
 | 
						|
   - #2528: Fix undefined bit shift in sroa.
 | 
						|
   - #2539: Change implementation of post order CFG traversal.
 | 
						|
 - Validator
 | 
						|
   - Add validation of storage classes for WebGPU (#2446)
 | 
						|
   - Add validation for ExecutionMode in WebGPU (#2443)
 | 
						|
   - Implement WebGPU specific CFG validation (#2386)
 | 
						|
   - Allow NonWritable to target struct members. (#2420)
 | 
						|
   - Allow storage type mismatch for parameter in relaxed addressing mode.
 | 
						|
   - Allow non memory objects as parameter in relaxed addressing mode.
 | 
						|
   - Disallow nested Blocks and buffer blocks (#2410).
 | 
						|
   - Add validation for SPV_NV_cooperative_matrix (#2404)
 | 
						|
   - Add --strip-atomic-counter-memory (#2413)
 | 
						|
   - Check OpSampledImage is only passed into valid instructions (#2467)
 | 
						|
   - Handle function decls in Structured CFG analysis (#2474)
 | 
						|
   - Validate that OpUnreacahble is not statically reachable (#2473)
 | 
						|
   - Add pass to generate needed initializers for WebGPU (#2481)
 | 
						|
   - Allow images without format for OpenCL. (#2470)
 | 
						|
   - Remove unreachable block validation (#2525)
 | 
						|
   - Reduce runtime of array layout checks (#2534)
 | 
						|
   - Add validation specific to OpExecutionModeId (#2536)
 | 
						|
   - Validate sign of int types. (#2549)
 | 
						|
   - VK_KHR_uniform_buffer_standard_layout validation (#2562)
 | 
						|
   Fixes:
 | 
						|
   - #2439: Add missing DepthGreater case to Fragment only check.
 | 
						|
   - #2168: Disallow BufferBlock on StorageBuffer variables for Vulkan.
 | 
						|
   - #2408: Restrict and Aliased decorations cannot be applied to the same id.
 | 
						|
   - #2447: Improve function call parameter check.
 | 
						|
 - Reduce
 | 
						|
   - Add Pass to remove unreferenced blocks. (#2398)
 | 
						|
   - Allows passing options to the validator. (#2401)
 | 
						|
   - Improve reducer algorithm and other changes (#2472)
 | 
						|
   - Add Pass to remove selections (#2485)
 | 
						|
   - Add passes to simplify branches (#2507)
 | 
						|
   Fixes:
 | 
						|
   - #2478: fix loop to selection pass for loops with combined header/continue block
 | 
						|
 | 
						|
v2019.2 2019-02-20
 | 
						|
 - General:
 | 
						|
   - Support SPV_EXT_physical_storage_buffer
 | 
						|
   - A number of memory leak have been fixed.
 | 
						|
   - Removed use of deprecated Google test macro:
 | 
						|
   - Changed the BUILD.gn to only build tests in Chromium.
 | 
						|
 - Optimizer
 | 
						|
   - Upgrade memory model improvments for modf and frexp.
 | 
						|
   - Add a new pass to move loads closer to their uses: code sinking.
 | 
						|
   - Invalidating the type manager now invalidates the constnat manager.
 | 
						|
   - Expand instrumentation pass for bindless bounds checking to runtime-sized descriptor arrays.
 | 
						|
   - Add a new pass that removes members from structs that are not used: dead member elimination.
 | 
						|
   Fixes:
 | 
						|
   - #2292: Remove undefined behaviour when folding bit shifts.
 | 
						|
   - #2294: Fixes for instrumentation code.
 | 
						|
   - #2293: Fix overflow when folding -INT_MIN.
 | 
						|
   - #2374: Don't merge unreachable blocks when merging blocks.
 | 
						|
 - Validator
 | 
						|
   - Support SPV_KHR_no_integer_wrap and related decorations.
 | 
						|
   - Validate Vulkan rules for OpTypeRuntimeArray.
 | 
						|
   - Validate NonWritable decoration.
 | 
						|
   - Many WebGPU specific validation rules were added.
 | 
						|
   - Validate variable pointer related function call rules.
 | 
						|
   - Better error messages.
 | 
						|
   Fixes:
 | 
						|
   - #2307: Check forwards references in OpTypeArray.
 | 
						|
   - #2315, #2303: Fixed the layout check for relaxed layout.
 | 
						|
   - #1628: Emit an error when an OpSwitch target is not an OpLabel.
 | 
						|
 - Reduce
 | 
						|
   - Added more documentation for spirv-reduce.
 | 
						|
   - Add ability to remove OpPhi instructions.
 | 
						|
   - Add ability to merge two basic blocks.
 | 
						|
   - Add ability to remove unused functions and unused basic blocks.
 | 
						|
   Fixes:
 | 
						|
 | 
						|
v2019.1 2019-01-07
 | 
						|
 - General:
 | 
						|
   - Created a new tool called spirv-reduce.
 | 
						|
   - Add cmake option to turn off SPIRV_TIMER_ENABLED (#2103)
 | 
						|
   - New optimization pass to update the memory model from GLSL450 to VulkanKHR.
 | 
						|
   - Recognize OpTypeAccelerationStructureNV as a type instruction and ray tracing storage classes.
 | 
						|
   - Fix GCC8 build.
 | 
						|
   - Add --target-env flag to spirv-opt.
 | 
						|
   - Add --webgpu-mode flag to run optimizations for webgpu.
 | 
						|
   - The output disassembled line number stead of byte offset in validation errors. (#2091)
 | 
						|
 - Optimizer
 | 
						|
   - Added the instrumentation passes for bindless validation.
 | 
						|
   - Added passes to help preserve OpLine information (#2027)
 | 
						|
   - Add basic support for EXT_fragment_invocation_density (#2100)
 | 
						|
   - Fix invalid OpPhi generated by merge-return. (#2172)
 | 
						|
   - Constant and type manager have been turned into analysies. (#2251)
 | 
						|
   Fixes:
 | 
						|
   - #2018: Don't inline functions with a return in a structured CFG contstruct.
 | 
						|
   - #2047: Fix bug in folding when volatile stores are present.
 | 
						|
   - #2053: Fix check for when folding floating pointer values is allowed.
 | 
						|
   - #2130: Don't inline recursive functions.
 | 
						|
   - #2202: Handle multiple edges between two basic blocks in SSA-rewriter.
 | 
						|
   - #2205: Don't unswitch a latch condition during loop unswitch.
 | 
						|
   - #2245: Don't fold branch in loop unswitch.  Run dead branch elimination to fold them.
 | 
						|
   - #2204: Fix eliminate common uniform to place OpPhi instructions correctly.
 | 
						|
   - #2247: Fix type mismatches caused by scalar replacement.
 | 
						|
   - #2248: Fix missing OpPhi after merge return.
 | 
						|
   - #2211: After merge return, fix invalid continue target.
 | 
						|
   - #2210: Fix loop invariant code motion to not place code between merge instruction and branch.
 | 
						|
   - #2258: Handle CompositeInsert with no indices in VDCE.
 | 
						|
   - #2261: Have replace load size handle extact with no index.
 | 
						|
 - Validator
 | 
						|
   - Changed the naming convention of outputing ids with names in diagnostic messages.
 | 
						|
   - Added validation rules for UniformConstant variables in Vulkan.
 | 
						|
   - #1949: Validate uniform variable type in Vulkan
 | 
						|
   - Ensure for OpVariable that result type and storage class operand agree (#2052)
 | 
						|
   - Validator: Support VK_EXT_scalar_block_layout
 | 
						|
   - Added Vulkan memory model semantics validation
 | 
						|
   - Added validation checkes spefic to WebGPU environment.
 | 
						|
   - Add support for VK_EXT_Transform_feedback capabilities (#2088)
 | 
						|
   - Add validation for OpArrayLength. (#2117)
 | 
						|
   - Ensure that function parameter's type is not void (#2118)
 | 
						|
   - Validate pointer variables (#2111)
 | 
						|
   - Add check for QueueFamilyKHMR memory scope (#2144)
 | 
						|
   - Validate PushConstants annotation and type (#2140)
 | 
						|
   - Allow Float16/Int8 for Vulkan 1.0 (#2153)
 | 
						|
   - Check binding annotations in resource variables (#2151, #2167)
 | 
						|
   - Validate OpForwardPointer (#2156)
 | 
						|
   - Validate operation for OpSpecConstantOp (#2260)
 | 
						|
   Fixes:
 | 
						|
   - #2049: Allow InstanceId for NV ray tracing
 | 
						|
 - Reduce
 | 
						|
   - Initial commit wit a few passes to reduce test cases.
 | 
						|
   - Validation is run after each reduction step.
 | 
						|
   Fixes:
 | 
						|
 | 
						|
 | 
						|
v2018.6 2018-11-07
 | 
						|
 - General:
 | 
						|
   - Added support for the Nvidia Turing and ray tracing extensions.
 | 
						|
   - Make C++11 the CXX standard in CMakeLists.txt.
 | 
						|
   - Enabled a parallel build for MSVC.
 | 
						|
   - Enable pre-compiled headers for MSVC.
 | 
						|
   - Added a code of conduct.
 | 
						|
   - EFFCEE and RE2 are now required when build the tests.
 | 
						|
 - Optimizer
 | 
						|
   - Unrolling loops marked for unrolling in the legalization passes.
 | 
						|
   - Improved the compile time of loop unrolling.
 | 
						|
   - Changee merge-return to create a placeholder loop around the function.
 | 
						|
   - Small improvement to merge-blocks to allow it to merge more often.
 | 
						|
   - Enforce an upper bound for the ids, and add option to set it.
 | 
						|
   - #1966: Report error if there are unreachable block before running merge return
 | 
						|
   Fixes:
 | 
						|
   - #1917: Allow 0 (meaning unlimited) as a parameter to --scalar-replacement
 | 
						|
   - #1915: Improve handling of group decorations.
 | 
						|
   - #1942: Fix incorrect uses of the constant manager.  Avoids type mismatches in generated code.
 | 
						|
   - #1997: Fix dead branch elimination when there is a loop in folded selection.
 | 
						|
   - #1991: Fixes legality check in if-conversion.
 | 
						|
   - #1987: Add nullptr check to array copy propagation.
 | 
						|
   - #1984: Better handling of OpUnreachable in ADCE.
 | 
						|
   - #1983: Run merge return on reachable functions only.
 | 
						|
   - #1956: Handled atomic operations in ADCE.
 | 
						|
   - #1963: Fold integer divisions by 0 to 0.
 | 
						|
   - #2019: Handle MemberDecorateStringGOOGLE in ADCE and strip reflect.
 | 
						|
 - Validator
 | 
						|
   - Added validation for OpGroupNonUniformBallotBitCount.
 | 
						|
   - Added validation for the Vulkan memory model.
 | 
						|
   - Added support for VK_KHR_shader_atddomic_int64.
 | 
						|
   - Added validation for execution modes.
 | 
						|
   - Added validation for runtime array layouts.
 | 
						|
   - Added validation for 8-bit storage.
 | 
						|
   - Added validation of OpPhi instructions with pointer result type.
 | 
						|
   - Added checks for the Vulkan memory model.
 | 
						|
   - Validate MakeTexelAvailableKHR and MakeTexelVisibleKHR
 | 
						|
   - Allow atomic function pointer for OpenCL.
 | 
						|
   - FPRounding mode checks were implemented.
 | 
						|
   - Added validation for the id bound with an option to set the max id bound.
 | 
						|
   Fixes:
 | 
						|
   - #1882: Improve the validation of decorations to reduce memory usage.
 | 
						|
   - #1891: Fix an potential infinite loop in dead-branch-elimination.
 | 
						|
   - #1405: Validate the storage class of boolean objects.
 | 
						|
   - #1880: Identify arrays of type void as invalid.
 | 
						|
   - #487: Validate OpImageTexelPointer.
 | 
						|
   - #1922: Validate OpPhi instructions are at the start of a block correctly.
 | 
						|
   - #1923: Validate function scope variable are at the start of the entry block.
 | 
						|
 | 
						|
v2018.5 2018-09-07
 | 
						|
 - General:
 | 
						|
   - Support SPV_KHR_vulkan_memory_model
 | 
						|
   - Update Dim capabilities, to match SPIR-V 1.3 Rev 4
 | 
						|
   - Automated build bots no run tests for the VS2013 case
 | 
						|
   - Support Chromium GN build
 | 
						|
   - Use Kokoro bots:
 | 
						|
     - Disable Travis-CI bots
 | 
						|
     - Disable AppVeyor VisualStudio Release builds. Keep VS 2017 Debug build
 | 
						|
   - Don't check export symbols on OSX (Darwin): some installations don't have 'objdump'
 | 
						|
   - Reorganize source files and namespaces
 | 
						|
   - Fixes for ClangTidy, and whitespace (passes 'git cl presumit --all -uf')
 | 
						|
   - Fix unused param compile warnings/errors when Effcee not present
 | 
						|
   - Avoid including time headers when timer functionality is disabled
 | 
						|
   - Avoid too-stringent warnings flags for Clang on Windows
 | 
						|
   - Internal refactoring
 | 
						|
   - Add hooks for automated fuzzing
 | 
						|
   - Add testing of command line executables
 | 
						|
   - #1688: Use binary mode on stdin; fixes "spirv-dis <foo.spv" on Windows
 | 
						|
 - Optimizer
 | 
						|
   - The optimizer validates the module before it begins
 | 
						|
   - Add API to register passes by string name
 | 
						|
   - Fold a vector shuffle feeding a vector shuffle
 | 
						|
   - Add -combine-access-chains transform
 | 
						|
   - Refactor how IRContext is handled by passes
 | 
						|
   - Improve bookkeeping for instruction result type and result id
 | 
						|
   - Fix over-duplication of decorations
 | 
						|
   - Fix handling of exits from selections in dead-branch elimination, and dead code
 | 
						|
     elimination.
 | 
						|
   - Fix handling of certain kinds of flow control in merge-return
 | 
						|
   Fixes:
 | 
						|
   - #1721: Fix size bug when folding vector shuffles
 | 
						|
   - #1722: Fix size infinite loop when folding vector shuffles
 | 
						|
   - #1724: Fix finding a constant of a specific type
 | 
						|
   - #1727: Dead branch elim: Reorder blocks if needed to satisfy dominance rule
 | 
						|
   - #1729: Handle VariablePointers cases in various optimizations
 | 
						|
   - #1731: Fix vector shuffle with literal id indicating undef value
 | 
						|
   - #1736: Fix handling of decorations and phis in merge-return
 | 
						|
   - #1787: Fix handling of decorations related to access chains
 | 
						|
   - #1865: Avoid leaking memory for SPIR-V constant values
 | 
						|
 - Validator
 | 
						|
   - Improve error messages
 | 
						|
   - Avoid platform-dependent traversal ordering, to ensure consistent messages
 | 
						|
   - Use libspirv::Instruction where possible
 | 
						|
   - Add option to skip all block layout checks
 | 
						|
   - Validate all type IDs
 | 
						|
   - Validate uses of OpFunction
 | 
						|
   - Validate uses of OpTypeFunction
 | 
						|
   - Disallow a struct containing its own type https://crbug.com/874372
 | 
						|
   - #1685: Vulkan permits non-monotonic offsets for block members
 | 
						|
   - #1697: Enforce block layout rules even when using relaxed block layout option
 | 
						|
   - #1719: Fix line number for vector shuffle valiation error
 | 
						|
   - #1789: Avoid assertion failure when validating some functions
 | 
						|
   - #1800: Fix validation of OpCopyMemorySized
 | 
						|
   - #1822: Stop enforcing struct member offset montonicity
 | 
						|
   - #1831: Disallow void members in structs
 | 
						|
 | 
						|
v2018.4 2018-07-08
 | 
						|
 - General:
 | 
						|
   - Support SPV_KHR_8bit_storage
 | 
						|
   - Add gclient and presubmit configurations
 | 
						|
   - Enable Kokoro build bots (#1625)
 | 
						|
   - Group tests into fewer executables, reduces load on CI
 | 
						|
   - Port test script to Python 3
 | 
						|
   - Symbol export tests respect SPIRV_SKIP_TESTS
 | 
						|
   - #1596: Operand lookup succeeds if enabled by a capability
 | 
						|
   - #1624: Instruction lookup succeeds if enabled by a capability
 | 
						|
   - Refactoring namespaces:
 | 
						|
     - #1678: Change libspirv to spvtools
 | 
						|
     - Code in source/utils moved into spvtools::utils
 | 
						|
     - Code in source/comp moved into spvtools::comp
 | 
						|
 - Optimizer:
 | 
						|
   - Remove insert-extract-elim pass. Use simplification pass instead.
 | 
						|
   - Preserve instruction-to-block mapping in most passes, to reduce runtime.
 | 
						|
   - Small vector optimization for operands
 | 
						|
   - Add pass to move Private variables to Function. Increase opportunity to optimize.
 | 
						|
   - Fixes:
 | 
						|
     #1120: Check static uses of entry point interfaces
 | 
						|
     #1372: Avoid merging some structs, to preserve names for reflection
 | 
						|
     #1577: Scalar replacement uses only undecorated types.
 | 
						|
     #1578: Fix handling of forward-pointer types, and types embedding pointers
 | 
						|
       to themselves.
 | 
						|
     #1591: Inliner: Callee variable with initializer should have a store at the call site.
 | 
						|
     #1634: Fix crash: Use type id in vector type lookup
 | 
						|
     #1649: Fix assert in compact-ids pass
 | 
						|
     Fix constant folder: ensure it uses the right type
 | 
						|
     #1659: Folding rules added to IRContext. Avoids leak.
 | 
						|
 - Validator
 | 
						|
   - Add work-in-progress WebGPU environment. Disallows OpUndef
 | 
						|
   - #670, #1581: Improve error messages; disassemble instruction
 | 
						|
   - #491: Check structured switches
 | 
						|
   - #937: Check layout rules for Block and BufferBlock in Uniform, StorageBuffer, PushConstant
 | 
						|
   - #1281: Check invalid branches into structured constructs
 | 
						|
   - #1522: Disallow array-of-arrays with DescriptorSets
 | 
						|
   - #1577: Allow duplicate pointer types.
 | 
						|
   - #1581: Better messages: output ID names along with numbers in more cases.
 | 
						|
   - #1597: Check Vulkan 1.1 capabilities
 | 
						|
   - #1618: Check invalid exit from structured case construct
 | 
						|
   - #1622: Run IdPass before DataRulesPass
 | 
						|
   - #1632: Reduce test time by artificially lowering limits in limit test
 | 
						|
   - #1638: Block-decorated structs member order must respect offset order
 | 
						|
   - #1657: Improve CFG validation diagnostics
 | 
						|
   - Khronos SPIR-V #337: GLSL.std.450 Refract instruction Eta param can be any float scalar.
 | 
						|
   - #1606: PushConstant Blocks follow storage-buffer layout rules
 | 
						|
   - #1664: Check layout of StorageBuffer variables with Block decoration, using storage buffer
 | 
						|
     rules
 | 
						|
   - #1666: Layout validation should permit {vec3; float} packing
 | 
						|
   - #1637, #1668: Layout validation uses RowMajor, ArrayStride, MatrixStride properly
 | 
						|
 - Linker
 | 
						|
   - Avoid buffer overrun when creating OpModuleProcessed
 | 
						|
 | 
						|
v2018.3 2018-05-25
 | 
						|
 - General:
 | 
						|
   - Support SPV_EXT_descriptor_indexing
 | 
						|
   - Support SPV_GOOGLE_decorate_string
 | 
						|
   - Support SPV_GOOGLE_hlsl_functionality1
 | 
						|
   - Support SPV_NV_shader_subgroup_partitioned
 | 
						|
   - Use "unified1" grammar from SPIRV-Headers
 | 
						|
   - Simplify support for new extensions. Assembler, disassembler, and simple validation
 | 
						|
     support is automatic if new tokens are introduced with appropriate extension
 | 
						|
     attributes in the "unified1" SPIR-V core grammar.
 | 
						|
   - Disassembler: Emit more digits on floating point, to reliably reproduce all
 | 
						|
     significand bits.  (Use std::max_digits10 instead of std::digits10)
 | 
						|
   - Fix compilation for old XCode versions: Explicit construction required for std::set.
 | 
						|
 - Optimizer:
 | 
						|
   - Add --strip-reflect
 | 
						|
   - Add --time-report
 | 
						|
   - Add --loop-fission
 | 
						|
   - Add lop fusion.
 | 
						|
   - Add loop peeling pass and internal utility.
 | 
						|
   - Improve optimizer runtime.
 | 
						|
   - Merge-return now works with structured control flow.
 | 
						|
   - New (faster) SSA rewriter to convert local loads and stores to SSA IDs and phis.
 | 
						|
     Can replace load/store elimination passes.
 | 
						|
   - Fix instruction folding case: insertion that feeds and extract, when the extract
 | 
						|
     remains.
 | 
						|
   - Fold OpDot.
 | 
						|
   - Fold OpFNegate.
 | 
						|
   - Fold multply and divide of same value.
 | 
						|
   - Fold FClamp feeding a compare.
 | 
						|
   - Fold OpLoad feeding an extract, to reduce excessive copying. (#1547)
 | 
						|
   - Fold Fmix feeding an extract.
 | 
						|
   - Use simplification pass instead of insert-extract elimination.
 | 
						|
   - Constant fold OpVectorTimesScalar.
 | 
						|
   - Copy propagate arrays, in simple cases.
 | 
						|
   - Aggressive dead code elimination: Can remove more instructions, e.g. derivatives.
 | 
						|
   - Aggressive dead code elimination: Remove Workgroup variables that are written but not read.
 | 
						|
   - Better handling of OpImageTexelPointer
 | 
						|
   - Initial utilities for scalar evolution.
 | 
						|
   - Add Vector dead code elimination.
 | 
						|
   - Each pass can only run once.
 | 
						|
   - Allow code hosting in if-conversion.
 | 
						|
   - Add external interface for adding a PassToken, so external code can make their own
 | 
						|
     passes.
 | 
						|
   - Fixes:
 | 
						|
     #1404: Don't optimize away the compute compute workgroup size constant.
 | 
						|
     #1407: Remove a bad assertion
 | 
						|
     #1456: Fix bug in SSA rewriter related to variables updated in loops.
 | 
						|
     #1487: Fix long runtime in Dead insertion elimination: Don't revist select phi nodes.
 | 
						|
     #1492: Aggressive dead code elimination can remove OpDecorateStringGOOGLE.
 | 
						|
     #1527: Fix inlining of functions having OpKill and OpUnreachable.
 | 
						|
     #1559: Fix assert failure in reduce-load-size pass.
 | 
						|
     #1556: Aggressive dead code elimination: Fix handling of OpCopyMemory.
 | 
						|
 - Validator:
 | 
						|
   - Check Vulkan built-in variables
 | 
						|
   - Check Vulkan-specific atomic result type rule.
 | 
						|
   - Relax control barrier check for SPIR-V 1.3.  Fixes #1427
 | 
						|
   - Check OpPhi.
 | 
						|
   - Check OpMemoryModel.
 | 
						|
   - Stop checking sizes derived from spec-constants.
 | 
						|
   - Re-enable checks for OpUConvert.
 | 
						|
   - Vulkan: Fix check for PrimitiveId: Permit as Input in fragment shader.
 | 
						|
   - Validate binary version for the given target environment.
 | 
						|
   - Add tests for OpBranch checks.
 | 
						|
   - Vulkan 1.1: Check scope for non-uniform subgroup operations.
 | 
						|
   - Fix checks for SPV_AMD_gpu_shader_int16.
 | 
						|
   - Fix logical layout check for OpDecorateId.
 | 
						|
   - Fix checks for ViewportIndex & Layer for Vulkan and SPV_EXT_shader_viewport_index_layer.
 | 
						|
   - Fixes:
 | 
						|
     #1470: Vulkan: Don't restrict WorkgroupSize to Input storage class.
 | 
						|
     #1469: Vulkan: Permit Subgroup memory scope for Vulkan 1.1.
 | 
						|
     #1472: Per-vertex variable validation fixes.
 | 
						|
     #1483: Valdiate barrier execution scopes for Vulkan 1.1.
 | 
						|
 - Fixes:
 | 
						|
   #898: Linker properly removes FuncParamAttr from imported symbols.
 | 
						|
   #924, #1174: Fix handling of decoration groups in optimizer, linker.
 | 
						|
 | 
						|
v2018.2 2018-03-07
 | 
						|
 - General:
 | 
						|
   - Support SPIR-V 1.3 and Vulkan 1.1.
 | 
						|
     - Default target environment is now SPIR-V 1.3.  For command-line tools,
 | 
						|
       use the --target-env option to override the default.  Examples:
 | 
						|
	  # Generate a SPIR-V 1.0 binary instead of SPIR-V 1.3
 | 
						|
	  spirv-as --target-env spv1.0 a.spvasm -o a.spv
 | 
						|
	  spirv-as --target-env vulkan1.0 a.spvasm -o a.spv
 | 
						|
	  # Validate as Vulkan 1.0
 | 
						|
	  spirv-val --target-env vulkan1.0 a.spv
 | 
						|
   - Support SPV_GOOGLE_decorate_string and SPV_GOOGLE_hlsl_functionality1
 | 
						|
 - Fixes:
 | 
						|
   - Fix Android.mk build. Compilation was failing due to missing definitions of
 | 
						|
     SpvCapabilityFloat16ImageAMD and other enumerated values.
 | 
						|
   - Optimizer: Avoid generating duplicate names when merging types.
 | 
						|
   - #1375: Validator: SPV_AMD_gpu_shaer_half_float implicitly allows declaration
 | 
						|
     of the 16-bit floating point type.
 | 
						|
   - #1376: Optimizer: Avoid folding half-precision float.
 | 
						|
 | 
						|
v2018.1 2018-03-02
 | 
						|
 - General:
 | 
						|
   - Support Visual Studio 2013 again. (Continue support for VS 2015 and VS 2017.)
 | 
						|
   - Support building SPIRV-Tools as a shared library.
 | 
						|
   - Improve the HLSL legalization optimization recipe. #1311
 | 
						|
 - Optimizer:
 | 
						|
   - General speedups.
 | 
						|
   - Remove generic dead code elimination functionality from transforms:
 | 
						|
       --eliminate-local-single-block
 | 
						|
       --eliminate-local-single-store
 | 
						|
       --eliminate-local-multi-store
 | 
						|
     To recover the previous behaviour, a recipe using those transforms should now
 | 
						|
     also invoke the --eliminate-dead-code-aggressive transform.
 | 
						|
   - Improve folding, including coverage for floating point, OpSelect, and arithmetic
 | 
						|
     with non-trivial constant operands.
 | 
						|
   - Add loop-invariant code motion pass.
 | 
						|
   - Add loop-unrolling pass, for honouring unroll hits.
 | 
						|
   - Add loop-unswitch pass.
 | 
						|
   - Add instruction simplification pass.
 | 
						|
   - Aggressive dead code elimination: Understands capability hierarchy when finding
 | 
						|
     instructions it can eliminate (combinators). (PR #1268)
 | 
						|
   - CCP can now fold floating point arithmetic. #1311
 | 
						|
 - Validator:
 | 
						|
   - Validate barrier instructions.
 | 
						|
   - Check Vulkan-specific rules for atomics.
 | 
						|
   - Check Vulkan prohibition of Location or Component decorations on BuiltIn variables.
 | 
						|
 - Linker:
 | 
						|
   - Add --verify-ids option
 | 
						|
   - Add option to allow a resulting module to be partially linked.
 | 
						|
   - Handle OpModuleProcessed (instructions in SPIR-V layout section 7c)
 | 
						|
 - Fixes:
 | 
						|
   - #1265: Optimizer: Fix use-after free bug in if-conversion. (Fix object lifecycle bug
 | 
						|
     in type manager.)
 | 
						|
   - #1282: Fix new warnings found by GCC 8.0.1.
 | 
						|
   - #1285: Optimizer: Fix random failures during inlining.  (Dangling references in DefUseManager)
 | 
						|
   - #1295: Optimizer: Fix incorrect handling of Phi nodes in CCP.
 | 
						|
   - #1300: Fix CCP: avoid bad CCP transitions and unsettled values.
 | 
						|
   - #1304: Avoid static-duration variables of class type (with constructors).
 | 
						|
   - #1323: Fix folding of an insert composite feeding a composite extract.
 | 
						|
   - #1339: Fix CCP: Handle OpConstantNull boolean values as conditions.
 | 
						|
   - #1341: DCEInst: Keep atomic instructions (and some others with side effects).
 | 
						|
   - #1354: Don't fold integer division.
 | 
						|
   - #1357: Support OpConstantNull in folding.
 | 
						|
   - #1361: CCP: Fix handling of non-constant module-scope values
 | 
						|
 | 
						|
v2018.0 2018-02-02
 | 
						|
 - General
 | 
						|
   - VisualStudio 2013 is no longer supported.  VisualStudio 2015 is supported.
 | 
						|
   - Use "include/unified1" directory from SPIRV-Headers.  Requires recent SPIRV-Headers source.
 | 
						|
 - Disassembler: spirv-dis adds --color option to force color disassembly.
 | 
						|
 - Optimizer:
 | 
						|
   - Add pass to eliminate dead insertions.
 | 
						|
   - Aggressive dead code elimination now removes OpSwitch constructs.
 | 
						|
   - Block merging occurs in more cases.
 | 
						|
   - Add driver workaround transform: replace OpUnreachable with harmless branch to merge.
 | 
						|
   - Improve instruction folding framework.
 | 
						|
   - Add loop analysis.
 | 
						|
   - Add scalar replacement of aggregates to size-optimization recipe.
 | 
						|
   - Add pass to replace instructions invalid for a shader stage, with a harmless value.
 | 
						|
     This changes the semantics of the program!  Not for general use!
 | 
						|
   - Rearragne and add passes to performance-optimization recipe, to produce better results.
 | 
						|
 - Validator:
 | 
						|
   - Validate OpenCL extended instructions.
 | 
						|
   - Shaders can't perform atomics on floats.
 | 
						|
   - Validate memory semantics values in atomics.
 | 
						|
   - Validate instruction-adjacency constraints, e.g. OpPhi predecessors, merge instructions
 | 
						|
     immediately precede branches.
 | 
						|
 - Fixes:
 | 
						|
   - PR 1198: Optimizer: Fix CCP in presence of matrix constants.
 | 
						|
   - #1199: Optimizer: Fix CCP: don't propagate spec constants.
 | 
						|
   - #1203: Optimizer: Fix common uniform elim bug introduced by refactoring.
 | 
						|
   - #1210: Optimizer: Aggressive dead code elimination: Fix 'break' identification.
 | 
						|
   - #1212: Optimizer: Aggressive dead code elimination: Was skipping too many instructions.
 | 
						|
   - #1214: Optimizer: Aggressive dead code elimination: Fix infinite loop.
 | 
						|
   - #1228: Optimizer: Fix CCP: Handling of varying Phi nodes; was resulting in infinite loop.
 | 
						|
   - #1245: Optimizer: Dead branch elimination: Avoid a null pointer dereference.
 | 
						|
   - #1250: Optimizer: Dead branch elimination: Avoid spuriously reporting a change.
 | 
						|
 | 
						|
v2017.3 2018-01-12
 | 
						|
 - General:
 | 
						|
   - Support DebugInfo extended instruction set, targeted at OpenCL environments.
 | 
						|
     See the SPIR-V Registry.
 | 
						|
   - Generate a SPIRV-Tools.pc file for pkg-config.
 | 
						|
 - Optimizer:
 | 
						|
   - Progress for legalization of code generated from HLSL (issue #1118):
 | 
						|
     - Add --legalize-hlsl option to run transforms used to transform intermediate
 | 
						|
       code generated by HLSL to SPIR-V for Vulkan compilers.  Those compilers
 | 
						|
       normally run these transforms automatically.  This option is used for developing
 | 
						|
       those transforms.
 | 
						|
     - Add Private-to-Function variable conversion for modules with logical
 | 
						|
       addressing.
 | 
						|
   - Add --ccp: SSA Conditional Constant Propagation (CCP)
 | 
						|
   - Add --print-all to show disassembly for each optimization pass.
 | 
						|
   - Internal: Add loop descriptors and post-order tree iterator.
 | 
						|
   - Generalized dead branch elimination
 | 
						|
   - Aggressive dead code elimination (ADCE) now removes dead functions and
 | 
						|
     module-scope variables.
 | 
						|
   - Vector extract/insert elimination now optimizes through some cases of
 | 
						|
     VectorShuffle, and GLSL.std.450 Mix extended instruction.
 | 
						|
 - Validator:
 | 
						|
   - Add validation for GLSL.std.450 extended instruction set.
 | 
						|
   - Check out of bounds composite accesses, where that's statically computable.
 | 
						|
     Fixes #1112.
 | 
						|
   - Check upper bits of literal numbers that aren't a multiple of 32-bits wide.
 | 
						|
   - More validation of primitive instructions
 | 
						|
   - Add optional "relaxed" checking logical addressing mode to permit some
 | 
						|
     cases of pointer-to-pointer.  Contributes to HLSL legalization (issue #1118).
 | 
						|
 - Fixes:
 | 
						|
   #1100: Validator: Image operand Sample can be used with OpImageSparseFetch,
 | 
						|
     OpImageSparseRead.
 | 
						|
   #1108: Remove duplicates transform was incorrectly removing non-duplicate
 | 
						|
     decorations.
 | 
						|
   #1111: Optimizer's type manager could reference deleted memory.
 | 
						|
   #1112: Fix decoration equality check, e.g. it is now symmetric.
 | 
						|
   #1129: Validator now disallows Dim=SupbassData for OpImageSparseRead.
 | 
						|
   #1143: Fix CCP: Was generating incorrect code for loops.
 | 
						|
   #1153: Fix CCP crash.
 | 
						|
   #1154: Optimizer's internal instruction-to-block mappings were sometimes
 | 
						|
       inconsistent.
 | 
						|
   #1159: Fix CCP infinite loop.
 | 
						|
   #1168: Fix dead branch elimination intermittently generating incorrect code.
 | 
						|
       Fixes https://github.com/KhronosGroup/glslang/issues/1205
 | 
						|
   #1186: Fix validation of PackDouble2x32 and UnpackDouble2x32
 | 
						|
 | 
						|
v2017.2 2017-12-15
 | 
						|
 - General:
 | 
						|
   - Support OpenCL 1.2, 2.0 target environments, including embedded profiles
 | 
						|
   - Add CONTRIBUTING.md
 | 
						|
   - Fix exit status code for spirv-link
 | 
						|
   - Disassember: Enable emitting ANSI colour codes to a string
 | 
						|
   - Library avoids polluting global namespace.  The libraries can export C and C++
 | 
						|
     symbols starting with "spv", or in a C++ namespace.  Add a test for this.
 | 
						|
   - Linux release builds include debug information, for easier profiling
 | 
						|
   - Build bots no longer test VisualStudio 2013
 | 
						|
     - Testing dependency RE2 requires VisualStudio 2015 or later
 | 
						|
   - Build bots check code formatting
 | 
						|
 - Optimizer:
 | 
						|
   - Add --skip-validation to spirv-opt
 | 
						|
   - Add dominance tree analysis
 | 
						|
   - Add generic value propagation engine
 | 
						|
   - Add global redundancy elimination within a function
 | 
						|
   - Add scalar replacement of function-scope variables of composite type
 | 
						|
   - Aggressive dead code elimination: Remove empty loops
 | 
						|
   - Killing an instruction notifies the IRContext
 | 
						|
   - IRContext::KillInst deletes the instruction
 | 
						|
   - Move CFG analysis to IRContext
 | 
						|
   - Add constant manager
 | 
						|
   - Fix: Don't consider derivative instructions as combinators.
 | 
						|
   - Fix: Don't delete an instruction twice in local dead-code-elimination
 | 
						|
   - Fix: Don't consider derivative instructions as combinators.
 | 
						|
 - Validator:
 | 
						|
   - Finish checking of image instructions (Section 3.32.10)
 | 
						|
     - Check sparse image instructions
 | 
						|
     - Check OpTypeImage, OpTypeSampleImage
 | 
						|
   - Check composite instructions (Section 3.32.12)
 | 
						|
   - Check atomic instructions (Section 3.32.18)
 | 
						|
   - Check OpEmitStreamVertex, OpEndStreamPrimitive instructions
 | 
						|
   - Re-enable validation of OpCopyObject
 | 
						|
   - OpKill, image ImplicitLod and QueryLod instructions can only be used in Fragment
 | 
						|
     shaders.
 | 
						|
   - Fixes for image instruction validation:
 | 
						|
     - Lod image operand only usable with ExplicitLod and OpImageFetch
 | 
						|
     - ExplicitLod Lod image operand must be float scalar
 | 
						|
     - OpImageFectch Lod image operand must be int scalar
 | 
						|
     - OpImageGather component operand must be 32-bits (integer scalar)
 | 
						|
     - OpImageQuerySizeLod Lod must be integer scalar
 | 
						|
 - Fixes:
 | 
						|
   #622: Remove names and decorations when inlining
 | 
						|
   #989: Aggressive dead code elim: Don't optimize away live breaks from a loop
 | 
						|
   #991: Fix validation of SPV_AMD_shader_ballot
 | 
						|
   #1004: Use after free of an instruction, in remove-duplicates transform
 | 
						|
   #1007: OpImageRead not required to return 4-component vector
 | 
						|
   #1009: OpImageRead can return scalar int/float types
 | 
						|
   #1011: OpImageWrite should allow scalar int/float texel types
 | 
						|
   #1012: Fix validat Dref type check
 | 
						|
   #1017: Load-store elimination considers variable initializations
 | 
						|
   #1034: Fix Windows debug build: operator< should be a weak ordering
 | 
						|
   #1083: Inlining: Set parent (function) for each inlined basic block.
 | 
						|
   #1075: Aggressive dead code elimination: Was leaving dangling references to
 | 
						|
     removed blocks.
 | 
						|
 | 
						|
v2017.1 2017-11-23
 | 
						|
 - Update README with details on the public_spirv_tools_dev@khronos.org mailing list.
 | 
						|
 - General:
 | 
						|
   - Automatically deploy built artifacts to GitHub Releases
 | 
						|
   - Add a Linker (module combiner). Under development.
 | 
						|
   - Add Android.mk for Android NDK builds.
 | 
						|
   - Add the 'effcee' library as an optional dependency for use in tests.
 | 
						|
     Eventually it will be a required dependency, once downstream projects have
 | 
						|
     a chance to adjust.  Requires 're2' library.
 | 
						|
   - Avoid static-duration variables of class type (with constructors).
 | 
						|
   - Hack around bugs in gcc-4.8.1 template handling
 | 
						|
   - Faster opcode lookup
 | 
						|
 - Validator:
 | 
						|
   - Recognize extensions listed on SPIR-V registry,
 | 
						|
     through #25 SPV_AMD_shader_fragment_mask
 | 
						|
   - Validator issues an info message when it sees an unrecognized extension.
 | 
						|
   - Type check basic arithmetic operations
 | 
						|
   - Type check carry/extended arithmetic operations
 | 
						|
   - Type check vector arithmetic operations
 | 
						|
   - Type check Relational and Logical instructions
 | 
						|
   - Type check Bit instructions
 | 
						|
   - Check type uniqueness rules
 | 
						|
   - Check conversion instructions
 | 
						|
   - Check image instructions
 | 
						|
   - Check derivative instructions
 | 
						|
   - Check OpVectorShuffle
 | 
						|
   - Check OpBranchConditional
 | 
						|
   - OpModuleProcessed is only allowed after debug names section and before annotations
 | 
						|
     section.
 | 
						|
   - Checks the right kind of return is called for each function (void or non-void).
 | 
						|
   - Add option to relax type check when storing structs (--relax-store-struct)
 | 
						|
 - Optimizer:
 | 
						|
   - Refactoring internal representation of the module, including:
 | 
						|
     - IRContext: owns a module and manages analyses
 | 
						|
     - Instructions are owned by intrusive lists, and have unique IDs
 | 
						|
     - BasicBlock owns its instruction list.
 | 
						|
     - DefUseManager: change representation of uses, for faster processing
 | 
						|
       on large modules.
 | 
						|
   - Add high level recipes: -O, -Os, and -Oconfig
 | 
						|
     Recipes for -O and -Os are under development.
 | 
						|
   - Add eliminate-dead-function transform
 | 
						|
   - Add strength reduction transform: For now, convert multiply by power of 2
 | 
						|
     to a bit shift.
 | 
						|
   - Add CFG cleanup transform
 | 
						|
   - Add removal of dead module-scope variables
 | 
						|
   - Add merge-return transform for modules without structured control flow
 | 
						|
   - Add redundancy elimination within a basic block (local value numbering)
 | 
						|
   - Extract-insert elimination:
 | 
						|
     - Recognize the case where the first instruction in the sequence is an
 | 
						|
       OpCompositeConstruct or OpConstantComposite
 | 
						|
     - Handle some cases of nested structs
 | 
						|
   - Dead branch elimination now can eliminate entire selection constructs
 | 
						|
     when all arms are dead.
 | 
						|
 - Compressing codec:
 | 
						|
   - Updated algorithm to 1.01, 1.02, 1.03
 | 
						|
   - Not built by default.  Use -DSPIRV_BUILD_COMPRESSION=ON to build.
 | 
						|
   - Codec can be parameterized by a customized model.
 | 
						|
 - Fixes:
 | 
						|
   #728: Fix decoration of inlined functions
 | 
						|
   #798: spirv-as should fail when given unrecognized long option
 | 
						|
   #800: Inliner: Fix inlining function into header of multi-block loop
 | 
						|
   #824: Eliminate-local-multi-store: Fix a crash
 | 
						|
   #826: Elimiante-local-multi-store: Fix a crash
 | 
						|
   #827: Fix crash when compact-ids transform runs before another transform.
 | 
						|
   #834: Add Cmake option to build the compressing codec. Off by default.
 | 
						|
   #911: Fix classification of Line and NoLine instructions
 | 
						|
 | 
						|
v2017.0 2017-09-01
 | 
						|
 - Update README to describe that assembler, disassembler, and binary parser support
 | 
						|
   are based on grammar files from the SPIRV-Headers repository.
 | 
						|
 | 
						|
v2016.7 2017-09-01
 | 
						|
 - Add SPIR-V 1.2
 | 
						|
 - OpenCL 2.2 support is now based on SPIR-V 1.2
 | 
						|
 - Support AMD extensions in assembler, disassembler:
 | 
						|
    SPV_AMD_gcn_shader
 | 
						|
    SPV_AMD_shader_ballot
 | 
						|
    SPV_AMD_shader_explicit_vertex_parameter
 | 
						|
    SPV_AMD_shader_trinary_minmax
 | 
						|
    SPV_AMD_gpu_shader_half_float
 | 
						|
    SPV_AMD_texture_gather_bias_lod
 | 
						|
    SPV_AMD_gpu_shader_int16
 | 
						|
 - Optimizer: Add support for:
 | 
						|
   - Inline all function calls in entry points.
 | 
						|
   - Flatten decoration groups.  Fixes #602
 | 
						|
   - Id compaction (minimize Id bound).  Fixes #624
 | 
						|
   - Eliminate redundant composite insert followed by extract
 | 
						|
   - Simplify access chains to local variables
 | 
						|
   - Eliminate local variables with a single store, if possible
 | 
						|
   - Eliminate local variables with a several stores, if possible
 | 
						|
   - Eliminate loads and stores in same block to local variables
 | 
						|
   - Eliminate redundant insert/extract to composite values
 | 
						|
   - Aggressive dead instruction elimination
 | 
						|
   - Eliminate dead branches
 | 
						|
   - Merge blocks when the second can only be preceded by the first
 | 
						|
   - Eliminate ommon uniform loads
 | 
						|
 - Assembler: Add option to preserve numeric ids. Fixes #625
 | 
						|
 - Add build target spirv-tools-vimsyntax to generate spvasm.vim, a SPIR-V
 | 
						|
   assembly syntax file for Vim.
 | 
						|
 - Version string: Allow overriding of wall clock timestamp with contents
 | 
						|
   of environment variable SOURCE_DATE_EPOCH.
 | 
						|
 - Validator implements relaxed rules for SPV_KHR_16bit_storage.
 | 
						|
 - CMake installation rules use GNUInstallDirs.  For example, libraries
 | 
						|
   will be installed into a lib64 directory if that's the norm for the
 | 
						|
   current system.
 | 
						|
 - Fixes:
 | 
						|
   #500: Parameterize validator limit checks
 | 
						|
   #508: Support compilation under CYGWIN
 | 
						|
   #517: Fix validation when continue (or case) contstruct is also the head of a
 | 
						|
     nested control construct.
 | 
						|
   #551: If a merge block is reachable, it must be *strictly* dominated by its
 | 
						|
     header.
 | 
						|
   #548: Validator: Error when the reserved OpImageSparseSampleProj* opcodes
 | 
						|
     are used.
 | 
						|
   #611: spvtools::Optimizer was failing to save the module to the output
 | 
						|
     binary vector when all passes succeded without changes.
 | 
						|
   #629: The inline-entry-points-all optimization could generate invalidly
 | 
						|
     structured code when the inlined function had early returns.
 | 
						|
   #697: Optimizer's Instruction::ForEachInId method was skipping semantics-id
 | 
						|
     and scope-id.
 | 
						|
   #755: Inliner: Fix inlining of callee with single Return appearing before
 | 
						|
     the end of the function.
 | 
						|
   #776: Fix dead branch elimination in presence of complex but dead control
 | 
						|
     flow.
 | 
						|
   #781: SPV_KHR_variable_pointers allows duplicate pointer types
 | 
						|
   #782: Inliner: Fix remapping of non-label forward references in callee
 | 
						|
   #787: Inliner: Fix remapping of inlined entry block when called from
 | 
						|
     single block loop.
 | 
						|
   #790: Inliner: Fix remapping of inlined entry block when callee has
 | 
						|
     multiple returns.
 | 
						|
 | 
						|
v2016.6 2016-12-13
 | 
						|
 - Published the C++ interface for assembling, disassembling, validation, and
 | 
						|
   optimization.
 | 
						|
 - Support SPV_KHR_shader_draw_parameters in assembler, disassembler, parser.
 | 
						|
 - Validator:
 | 
						|
   - Add validator API accepting raw binary words
 | 
						|
   - Increased coverage:
 | 
						|
     - Checks "Data rules" in Universal Validation Rules, section 2.16.1
 | 
						|
     - WIP: Universal Limits.
 | 
						|
       - The minimum mandated upper bounds are checked.
 | 
						|
       - TODO: Parameterize the validator to allow larger limits accepted by
 | 
						|
         a more than minimally capable implementation.
 | 
						|
   - OpSampledImage checks
 | 
						|
   - OpConstantComposite checks
 | 
						|
   - Id bound check
 | 
						|
 - Disasssembler:
 | 
						|
   - Generates friendly GLSL-based names for more builtin variables
 | 
						|
   - Generates friendly names for numeric OpConstant values
 | 
						|
   - Vendor tool info extracted from SPIR-V XML registry file.
 | 
						|
 - Fixes issues:
 | 
						|
   #429: Validator: Allow OpTypeForwardPointer and OpTypeStruct to reference
 | 
						|
     undefined IDs
 | 
						|
   #482: Validator: OpVariable initializer can be an ID of a module-scope variable
 | 
						|
 | 
						|
v2016.5 2016-09-16
 | 
						|
 - Support SPV_KHR_shader_ballot in assembler, disassembler, parser.
 | 
						|
 - Disassembler: Generate friendly names for built-in variables.
 | 
						|
 - Partial fixes:
 | 
						|
   #359: Add Emacs helper for automatically diassembling/assembling a SPIR-V
 | 
						|
     binary on file load/save.
 | 
						|
 - Fixes:
 | 
						|
   #414: Validator: Allow OpUndef for composite constants
 | 
						|
   #415: Validator: Phi can use its own value in some cases.
 | 
						|
 | 
						|
v2016.4 2016-09-01
 | 
						|
 - Relicensed under Apache 2.0
 | 
						|
 - Add optimization passes (in API and spirv-opt command)
 | 
						|
   - Fold spec constants defined with OpSpecConstantOp and
 | 
						|
       OpSpecConstantComposite to normal constants with fixed value(s).
 | 
						|
 - Fixes issues:
 | 
						|
   #318: Relicensed under Apache 2.0
 | 
						|
 | 
						|
v2016.3 2016-08-24
 | 
						|
 - Add target environment enums for OpenCL 2.1, OpenCL 2.2,
 | 
						|
   OpenGL 4.0, OpenGL 4.1, OpenGL 4.2, OpenGL 4.3, OpenGL 4.5.
 | 
						|
 - Add spirv-cfg, an experimental tool to dump the control flow graph
 | 
						|
   as a GraphiViz "dot" graph
 | 
						|
 - Add optimization pass: Eliminate dead constants.
 | 
						|
 - Add spirv-lesspipe.sh filter utility
 | 
						|
 - Fixes issues:
 | 
						|
   #288: Check def-use dominance rules for OpPhi (variable,parent) operands
 | 
						|
   #339: Allow OpUndef in types-constants-global-vars section, as required
 | 
						|
     by SPIR-V 1.0 Rev7, 1.1 Rev 3.
 | 
						|
   #340: Avoid race on mkdir during build
 | 
						|
   #365: Relax PointSize, ClipDistance, CullDistance capability check in all
 | 
						|
     environments not just Vulkan 1.0.
 | 
						|
 | 
						|
v2016.2 2016-08-05
 | 
						|
 - Validator is incomplete
 | 
						|
   - Checks ID use block is dominated by definition block
 | 
						|
 - Add optimization passes (in API and spirv-opt command)
 | 
						|
   - Strip debug info instructions
 | 
						|
   - Freeze spec constant to their default values
 | 
						|
 - Allow INotEqual as operation for OpSpecConstantOp
 | 
						|
 - Fixes bugs:
 | 
						|
   #270: validator: crash when continue construct is unreachable
 | 
						|
   #279: validator: infinite loop when analyzing some degenerate control
 | 
						|
     flow graphs
 | 
						|
   #286: validator: don't incorrectly generate def-use error for
 | 
						|
         (variable,parent) parameters to OpPhi
 | 
						|
   #290: disassembler: never generate bare % for an identifier
 | 
						|
   #295: validator: def-use dominance check should ignore unreachable uses
 | 
						|
   #276: validator: allow unreachable continue constructs
 | 
						|
   #297: validator: allow an unreachable block to branch to a reachable
 | 
						|
         merge block
 | 
						|
 | 
						|
v2016.1 2016-07-19
 | 
						|
 - Fix https://github.com/KhronosGroup/SPIRV-Tools/issues/261
 | 
						|
   Turn off ClipDistance and CullDistance capability checks for Vulkan.
 | 
						|
 - The disassembler can emit friendly names based on debug info (OpName
 | 
						|
   instructions), and will infer somewhat friendly names for most types.
 | 
						|
   This is turned on by default for the spirv-dis command line tool.
 | 
						|
 - Updated to support SPIR-V 1.1 rev 2
 | 
						|
   - Input StorageClass, Sampled1D capability, and SampledBuffer capability
 | 
						|
     do not require Shader capability anymore.
 | 
						|
 | 
						|
v2016.0 2016-07-04
 | 
						|
 | 
						|
 - Adds v<year>.<index> versioning, with "-dev" indicating
 | 
						|
   work in progress.  The intent is to more easly report
 | 
						|
   and summarize functionality when SPIRV-Tools is incorporated
 | 
						|
   in downstream projects.
 | 
						|
 | 
						|
 - Summary of functionality (See the README.md for more):
 | 
						|
   - Supports SPIR-V 1.1 Rev 1
 | 
						|
   - Supports SPIR-V 1.0 Rev 5
 | 
						|
   - Supports GLSL std450 extended instructions 1.0 Rev 3
 | 
						|
   - Supports OpenCL extended instructions 1.0 Rev 2
 | 
						|
   - Assembler, disassembler are complete
 | 
						|
     - Supports floating point widths of 16, 32, 64 bits
 | 
						|
     - Supports integer widths up to 64 bits
 | 
						|
   - Validator is incomplete
 | 
						|
     - Checks capability requirements in most cases
 | 
						|
     - Checks module layout constraints
 | 
						|
     - Checks ID use-definition ordering constraints,
 | 
						|
       ignoring control flow
 | 
						|
     - Checks some control flow graph rules
 | 
						|
   - Optimizer is introduced, with few available transforms.
 | 
						|
   - Supported on Linux, OSX, Android, Windows
 | 
						|
 | 
						|
 - Fixes bugs:
 | 
						|
   - #143: OpenCL pow and pown arguments
 |