• Home
  • Raw
  • Download

Lines Matching +full:opencl +full:- +full:spirv

1 Revision history for SPIRV-Tools
3 v2022.4 2022-10-12
4 - General
5 - Support Narrow Types in BitCast Folding Rule (#4941)
6 - spirv-diff: Allow no SpecId (#4904)
7 - build: cmake: Add support for GNU/Hurd (#4895)
8 - Implement tool changes for SPV_EXT_mesh_shader. (#4915)
9 - Validator
10 - spirv-val: Add SPV_ARM_core_builtins validation (#4958)
11 - spirv-val: Add an option to use friendly names or not (#4951)
12 - spirv-val: Consistently quote ids in messages (#4950)
13 - spirv-val: Add initial SPV_EXT_mesh_shader validation (#4924)
14 - spirv-val: Make it legal to use arrays of ray queries (#4938)
15 - spirv-val: Better message for using OpTypeBool in input/output (#4901)
16 - spirv-val: Add SPV_KHR_ray_tracing storage class (#4868)
17 - Optimizer
18 - spirv-opt: Fix stacked CompositeExtract constant folds (#4932)
19 - Improve time to build dominators (#4916)
20 - Fix ADCE to mark scope and inlined_at of line instructions as live. (#4910)
21 - Improve algorithm to reorder blocks in a function (#4911)
22 - Add structs to eliminate dead input components (#4894)
23 - spirv-opt: fix copy-propagate-arrays index opti on structs. (#4891)
24 - Fix ADCE to not eliminate top level DebugInfo instructions (#4889)
25 - Fix array copy propagation (#4890)
27 v2022.3 2022-08-08
28 - General
29 - Add SPV_KHR_fragment_shader_barycentric support (#4805)
30 - Add support for SPV_KHR_subgroup_rotate (#4786)
31 - use exec_tools instead of tools for better RBE compatibility (#4837)
32 - Write binary files to stdout in binary on windows. (#4834)
33 - Allow spirv-opt print-all to show pretty IDs (#4888)
34 - Validator
35 - spirv-val: Add PerVertexKHR (#4807)
36 - spirv-opt : Add FixFuncCallArgumentsPass (#4775)
37 - spirv-val: Add CullMaskKHR support (#4792)
38 - Require ColMajor or RowMajor for matrices (#4878)
39 - spirv-val: Add SPV_KHR_ray_query (#4848)
40 - spirv-val: Add SPV_KHR_ray_tracing instructions (#4871)
41 - Implement SPV_NV_bindless_texture related changes (#4847)
42 - spirv-val: Add OpConvertUToAccelerationStructureKHR (#4838)
43 - spirv-val: Add support for SPV_AMD_shader_early_and_late_fragment_tests (#4812)
44 - Optimizer
45 - Fold multiply and subtraction into FMA with negation (#4808)
46 - Add more folding for composite instructions (#4802)
47 - spirv-opt: add pass for interface variable scalar replacement (#4779)
48 - Don't try to unroll loop with step count 0. (#4769)
49 - spirv-opt: SPV_NV_bindless_texture related changes (#4870)
50 - Linker
51 - linker: Recalculate interface variables (#4784)
53 v2022.2 2022-04-07
54 - General
55 - Add OpModuleProcessed to debug opcode (#4694)
56 - Optimizer
57 - Complete handling of RayQueryKHR type (#4690)
58 - Have scalar replacement use undef instead of null (#4691)
59 - Optimize Instruction::Instruction (#4705)
60 - Handle propagation of arrays with decorations (#4717)
61 - spirv-opt: Add OpExecutionModeId support (#4719)
62 - Optimize Type::HashValue (#4707)
63 - Optimize DefUseManager allocations (#4709)
64 - Add pass to remove DontInline function control (#4747)
65 - Better handling of 0xFFFFFFFF when folding vector shuffle (#4743)
66 - Reset the id bound on the module in compact ids (#4744)
67 - spirv-opt: (WIP) Eliminate Dead Input Component Pass (#4720)
68 - Support SPV_KHR_uniform_group_instructions (#4734)
69 - Handle shaders without execution model in spread-volatile-semantics (#4766)
70 - Validator
71 - Fix handling of Nontemporal image operand (#4692)
72 - [spirv-val] Allow 0 Component Count for DebugTypeArray for Shader (#4706)
73 - spirv-val: Validate DebugTypeMatrix (#4732)
74 - spirv-val: Label Vulkan VUID 04734 (#4739)
75 - spirv-val: Label VUID 06491 (#4745)
76 - spirv-val: Disallow array of push constants (#4742)
77 - spirv-val: Label Vulkan RuntimeArray VUID (#4749)
78 - spirv-val: Add Vulkan Image VUID 06214 (#4750)
79 - spirv-val: Add Vulkan Dref not allowed 3D dim VUID (#4751)
80 - spirv-val: Label and add test for PSB Aligned (#4756)
81 - spirv-val: Add Vulkan 32-bit bit op Base (#4758)
82 - spirv-val: Add more Vulkan VUID labels (#4764)
83 - Diff
84 - Introduce spirv-diff (#4611)
85 - Stabilize the output of spirv-diff (#4698)
86 - spirv-diff: Handle OpSpecConstant array sizes (#4700)
87 - spirv-diff: Match OpSpecConstantComposite correctly (#4704)
88 - spirv-diff: Use GetSingleWord*Operand (#4768)
89 - spirv-diff: Basic support for OpTypeForwardPointer (#4761)
90 - spirv-diff: Fix OpTypeFunction matching w.r.t operand count (#4771)
92 v2022.1 2022-01-26
93 - General
94 - Add SPIR-V 1.6 support to wasm build (#4674)
95 - Improvements to disassembly within PassManager (#4677)
96 - Basic support for SPIR-V 1.6 (#4663)
97 - reflect debug (#4662)
98 - Fix endianness of string literals (#4622)
99 - Optimizer
100 - spirv-opt: add pass to Spread Volatile semantics (#4667)
101 - Fix constant propagation and folding of FClamp instructions (#4651)
102 - Manually fold floating point division by zero (#4637)
103 - Allow ADCE to remove dead inputs (#4629)
104 - Linker
105 - Linker improvements (#4679)
108 - Validator
109 - val: interface struct with builtins must be Block (#4665)
110 - Fuzzer
111 - Avoid id bound errors during opt fuzzing (#4658)
112 - Avoid uninitialised read when parsing hex float (#4646)
114 v2021.4 2021-11-11
115 - General
116 - Add a WebAssembly build (#3752)
117 - Make cxx exceptions controllable (#4591)
118 - Validator
119 - Improve decoration validation (#4490)
120 - Optimizer
121 - Add spirv-opt pass to replace descriptor accesses based on variable indices (#4574)
122 - Do not fold snegate feeding sdiv (#4600)
123 - Handle overflowing id in merge return (#4606)
124 - Fuzzer
125 - Add libFuzzer target for spirv-fuzz (#4434)
126 - Linter
128 v2021.3 2021-08-24
129 - General
130 - Initial support for SPV_KHR_integer_dot_product (#4327)
131 - Add non-semantic vulkan extended instruction set (#4362)
132 - Add common enum for debug info instructions from either opencl or vulkan (#4377)
133 - Validator
134 - Add validation for SPV_EXT_shader_atomic_float16_add (#4325)
135 - Disallow loading a runtime-sized array (#4473)
136 - spirv-val: Validate vulkan debug info similarly to opencl debug info (#4466)
137 - Optimizer
138 - spirv-opt: support SPV_EXT_shader_image_int64 (#4379)
139 - spirv-opt: Add dataflow analysis framework (#4402)
140 - Add control dependence analysis to opt (#4380)
141 - Add spirv-opt convert-to-sampled-image pass (#4340)
142 - spirv-opt: Add handling of vulkan debug info to DebugInfoManager (#4423)
143 - Fuzz
144 - spirv-fuzz: support AtomicLoad (#4330)
145 - spirv-fuzz: Support AtomicStore (#4440)
146- spirv-fuzz: TransformationWrapVectorSynonym that rewrites scalar operations using vectors (#4376)
147 - spirv-fuzz: Add minimal SPIR-V example to test shaders (#4415)
148 - spirv-fuzz: support building using gn (#4365)
149 - Linter
150 - Add new target for spirv-lint (#4446)
151 - spirv-lint: add basic CLI argument handling (#4478)
152 - Add divergence analysis to linter (#4465)
154 v2021.2 2021-06-18
155 - General
156 - Support SPV_KHR_subgroup_uniform_control_flow (#4318)
157 - Support Intel extensions for fixed point and hls-float (#4321)
158 - Fix crash when optimizing shaders with DebugPrintf (#4280)
160 - Validator
161 - Support Vulkan Storage Class for Execution Model (#4212)
163 - Optimizer
164 - Handle SPV_KHR_vulkan_memory_model in dead-code elimination (#4320)
165 - Support folding OpBitcast with numeric constants (#4247)
167 - Fuzz
168 - Add tests for MaybeGet* functions in fuzzerutil (#4284)
169 - Fix OutlineFunction in presence of unreachable blocks (#4308)
170 - Fix def-use update in PermutePhiOperands (#4309)
171 - Swap positions of two functions in a module (#4236)
173 v2021.1 2021-04-19
174 - General
175 - Support SPV_KHR_linkonce_odr, SPV_KHR_expect_assume (#4161)
176 - Fixes for the vscode language server extension (#4150)
177 - Validator
178 - Add validation for SPV_EXT_shader_atomic_float_min_max (#4105)
179 - Add Vulkan Execution Scope checks (#4183)
180 - Vulkan 64-bit OpAtomicStore check (#4163)
181 - Optimizer
182 - Add interpolate legalization pass (#4220)
183 - Fuzz
184 - Various performance optimizations
185 - Do not add too many dead blocks (#4217)
186 - Add WGSL compatibility flag to context (#4193)
187 - Add persistent state to the fuzzer (#4137)
189 v2020.7 2021-02-16
190 - General
191 - Support pending Intel extensions (#4116)
192 - Remove WebGPU support (#4108)
193 - Validator
194 - Vulkan image gather constant component (#4133)
195 - Add Vulkan PSB64 convert VUID (#4122)
196 - Validate SPV_KHR_workgroup_memory_explicit_layout (#4128)
197 - Validate VK_KHR_zero_initialize_workgroup_memory (#4124)
198 - Add Vulkan image gather offset VUID (#4118)
199 - Label Vulkan atomic semantics VUIDs (#4120)
200 - Label VUID 04662 (#4123)
201 - Label VUID 04683 (#4121)
202 - Add Vulkan EXT builtins (#4115)
203 - Validate Sampled=1 for Vulkan ImageQuerySizeLod, ImageQueryLevels, ImageQueryLod (#4103)
204 - Add Vulkan Memory Scope VUs (#4106)
205 - Add Vulkan Addressing Model check (#4107)
206 - Vulkan atomic storage class (#4079)
207 - Label standalone Vulkan VUID (#4091)
208 - Add Vulkan decroation VUID (#4090)
209 - Add Vulkan FP Mode VUID (#4088)
210 - Fix Vulkan image sampled check (#4085)
211 - Add Vulkan ForwardPointer VUID (#4089)
212 - Add Vulkan ImageTexelPointer format check (#4087)
213 - Add Vulkan Group Operation VUID (#4086)
214 - Add first StandAlone VUID 04633 (#4077)
215 - Add Subgroup VUIDs (#4074)
216 - validate return type of OpImageRead (#4072)
217 - tighter validation of multisampled images (#4059)
218 - validate OpTypeImage Sampled values for environemnts (#4064)
219 - validate StorageImageMultisampled capability (#4062)
220 - Add last TessLevelOuter and TessLevelInner VUID (#4055)
221 - Add last ClipDistance and CullDistance VUID (#4054)
222 - Add last ViewportIndex and Layer VUID (#4053)
223 - Add last Position VUID (#4052)
224 - Allow forward pointer to be used in types generally (#4044)
225 - Optimizer
226 - Mark module as modified if convert-to-half removes decorations (#4127)
227 - Fix binding number calculation in desc sroa (#4095)
228 - Run DCE when SPV_KHR_shader_clock is used (#4049)
229 - Debug Info
230 - Set correct scope and line info for DebugValue (#4125)
231 - Avoid integrity check failures caused by propagating line instructions (#4096)
232 - Linker
233 - Linker usability improvements (#4084)
234 - Instrumentation
235 - Generate differentiated error codes for buffer oob checking (#4097)
236 - Fuzz
237 - Fix OpPhi handling in DuplicateRegionWithSelection (#4065)
239 v2020.6 2020-12-07
240 - General
242 - Disassembler
244 - Optimizer
245 - Take new (raytracing) termination instructions into account. (#4050)
246 - Do run DCE if SPV_KHR_ray_query is used. (#4047)
247 - Handle 8-bit index in elim dead member (#4043)
248 - Add texel buffer out-of-bounds checking instrumentation (#4038)
249 - Update MeshShadingNV dependencies (and land Ray tracing updates) (#4028)
250 - Fix buffer oob instrumentation for matrix refs (#4025)
251 - Fix SSA re-writing in the presence of variable pointers. (#4010)
252 - Add support to prevent functions from being inlined if they have
254 - Add SPV_EXT_shader_image_int64 (#3852)
255 - Support SPV_KHR_fragment_shading_rate (#3943)
256 - Fix use-after-move in val/validate.cpp (#3848)
257 - Debug Info
258 - properly preserve DebugValue indexes operand (#4022)
259 - Add DebugValue for invisible store in single_store_elim (#4002)
260 - Propagate OpLine to all applied instructions in spirv-opt (#3951)
261 - Add DebugValue for DebugDecl invisible to value assignment (#3973)
262 - Add DebugValue for function param regardless of scope (#3923)
263 - Debug info preservation in convert-local-access-chains pass (#3835)
264 - Debug info preservation in redundancy-elimination pass (#3839)
265 - Debug info preservation in if-conversion pass (#3861)
266 - Validator
267 - Add validation support for the ray tracing built-in variables (#4041)
268 - Use less stack space when validating Vulkan builtins (#4019)
269 - Fix SPV_KHR_fragment_shading_rate VUID label (#4014)
270 - Label Layer and ViewportIndex VUIDs (#4013)
271 - Allow the ViewportIndex and Layer built-ins on SPIR-V 1.5 (#3986)
272 - Fix validation of OpPhi instructions (#3919)
273 - Fuzz
274 - Fix facts arising from CompositeConstruct (#4034)
275 - Do not flatten conditionals that create synonyms (#4030)
276 - Add support for reining in rogue fuzzer passes (#3987)
277 - Fix assertion failure in FuzzerPassAddCompositeExtract (#3995)
278 - Fix invalid equation facts (#4009)
279 - Fix bugs in TransformationFlattenConditionalBranch (#4006)
280 - Fix bug related to transformation applicability (#3990)
281 - Add expand vector reduction transformation (#3869)
282 - Add FuzzerPassAddCompositeExtract (#3904)
283 - Fix mismatch with shrinker step limit (#3985)
284 - Fix off-by-one error in replayer (#3982)
285 - Get order right for OpSelect arguments (#3974)
286 - Do not add synonym-creating loops in dead blocks (#3975)
287 - Skip OpTypeSampledImage when propagating up (#3976)
288 - Pass OpUndef in function call if needed (#3978)
289 - Fix off-by-one in TransformationCompositeConstruct (#3979)
290 - Tolerate absent ids in data synonym fact management (#3966)
291 - Fix to id availability (#3971)
292 - Fix operand types (#3962)
293 - Don't flatten conditional if condition is irrelevant (#3944)
294 - Do not produce OpPhis of type OpTypeSampledImage (#3964)
295 - Restrict fuzzer pass to reachable blocks (#3970)
296 - Handle more types when extending OpPhi instructions (#3969)
297 - Skip early terminator wrappers when merging returns (#3968)
298 - Avoid irrelevant constants in synonym-creating loops (#3967)
299 - Skip dead blocks in FuzzerPassAddOpPhiSynonyms (#3965)
300 - Avoid the type manager when looking for struct types (#3963)
301 - Fix to TransformationDuplicateRegionWithSelection (#3941)
302 - Skip OpFunction when replacing irrelevant ids (#3932)
303 - Use component-wise selectors when flattening conditional branches (#3921)
304 - Avoid void struct member when outlining functions (#3936)
305 - Do not allow Block-decorated structs when adding parameters (#3931)
306 - Fix to operand id type (#3937)
307 - Handle dead blocks in TransformationEquationInstruction (#3933)
308 - Do not allow sampled image load when flattening conditionals (#3930)
309 - Take care of OpPhi instructions when inlining (#3939)
310 - Fix to TransformationInlineFunction (#3913)
311 - Wrap early terminators before merging returns (#3925)
312 - Lower probability of adding bit instruction synonyms (#3917)
313 - Fix handling of OpPhi in FlattenConditionalBranch (#3916)
314 - Avoid creating blocks without parents (#3908)
315 - Do not allow creation of constants of block-decorated structs (#3903)
316 - Fixes related to irrelevant ids (#3901)
317 - Fix to transformation that adds a synonym via a loop (#3898)
318 - Fix to duplicate region with selection (#3896)
319 - Do not expose synonym facts for non-existent ids (#3891)
320 - Do not add synonyms involving irrelevant ids (#3890)
321 - Do not replace irrelevant ids that are not in blocks (#3892)
322 - Wrap OpKill and similar in function calls (#3884)
323 - Integrate spirv-reduce with shrinker (#3849)
324 - Report fresh ids in transformations (#3856)
325 - Support OpNot bit instruction case (#3841)
326 - Return IR and transformation context after replay (#3846)
328 v2020.5 2020-09-22
329 - General
330 - Enable building with BUILD_SHARED_LIBS=1 (#3490)
331 - Avoid using /MP4 for clang on windows. (#3662)
332 - Fix compiler error on macOS with XCode12. (#3836)
333 - Optimizer
334 - Preserve OpenCL.DebugInfo.100 through private-to-local pass (#3571)
335 - Preserve debug info in scalar replacement pass (#3461)
336 - Debug info preservation in loop-unroll pass (#3548)
337 - Preserve debug info in dead-insert-elim pass (#3652)
338 - Improve non-semantic instruction handling in the optimizer (#3693)
339 - Let ADCE pass check DebugScope (#3703)
340 - Add undef for inlined void function (#3720)
341 - Fix SSA-rewrite to remove DebugDeclare for variables without loads (#3719)
342 - Handle DebugScope in compact-ids pass (#3724)
343 - Add buffer oob check to bindless instrumentation (#3800)
344 - Validator
345 - Update OpenCL capabilities validation (#3149)
346 - Validator support for non-semantic clspv reflection (#3618)
347 - OpenCL.DebugInfo.100 DebugTypeArray with variable size (#3549)
348 - Only validation locations for appropriate execution models (#3656)
349 - Validate more OpenCL.DebugInfo.100 instructions (#3684)
350 - Allow DebugTypeTemplate for Type operand (#3702)
351 - spirv-val: Add Vulkan VUID labels to BuiltIn (#3756)
352 - Allow SPV_KHR_8bit_storage extension. (#3780)
353 - Validate SPIRV Version number when parsing binary header (#3834)
354 - Reduce
355 - Support reducing a specific function (#3774)
356 - Fuzz
357 - adds TransformationReplaceCopyObjectWithStoreLoad (#3567)
358 - adds TransformationReplaceCopyMemoryWithLoadStore (#3575)
359 - adds TransformationReplaceLoadStoreWithCopyMemory (#3586)
360 - Implement the OpOuterProduct linear algebra case (#3617)
361 - Pass to replace int operands with ints of opposite signedness (#3612)
362 - TransformationMoveInstructionDown (#3477)
363 - Add TransformationMakeVectorOperationDynamic (#3597)
364 - TransformationReplaceAddSubMulWithCarryingExtended (#3598)
365 - FuzzerPassPropagateInstructionsUp (#3478)
366 - add FuzzerPassAddCompositeInserts (#3606)
367 - Add inline function transformation (#3517)
368 - Transformation to replace the use of an irrelevant id (#3697)
369 - Add SPIRV_FUZZ_PROTOC_COMMAND (#3789)
370 - Add TransformationDuplicateRegionWithSelection (#3773)
371 - Transformation to flatten conditional branch (#3667)
372 - Handle OpPhis in TransformationInlineFunction (#3833)
373 - Create synonym of int constant using a loop (#3790)
374 - Support dead blocks in TransformationAddSynonym (#3832)
375 - Linker
377 v2020.4 2020-07-22
378 - General
379 - Changed variable names to be more descriptive (#3433)
380 - Add support to GPU-AV instrumentation for Task and Mesh shaders (#3512)
381 - Permit Simple and GLSL450 memory model in WEBGPU_0 (#3463)
382 - Support SPV_KHR_terminate_invocation (#3568)
383 - Optimizer
384 - Preserving debug information in optimizations
386 - Eliminate branches with condition of OpConstantNull (#3438)
387 - Use structured order to unroll loops. (#3443)
388 - Updated desc_sroa to support flattening structures (#3448)
389 - Support OpCompositeExtract pattern in desc_sroa (#3456)
390 - Fix ADCE pass bug for mulitple entries (#3470)
391 - Sink pointer instructions in merge return (#3569)
392 - Validator
393 - Validate location assignments (#3308)
394 - Fix reachability in the validator (#3541)
395 - Reduce
396 - Fuzz
397 - Add support for OpSpecConstant* (#3373)
398 - Add replace linear algebra instruction transformation (#3402)
399 - Implement vector shuffle fuzzer pass (#3412)
400 - Swap operands in OpBranchConditional (#3423)
401 - Permute OpPhi instruction operands (#3421)
402 - Add FuzzerPassAddCopyMemoryInstructions (#3391)
403 - TransformationInvertComparisonOperator (#3475)
404 - Add variables with workgroup storage class (#3485)
405 - Add image sample unused components transformation (#3439)
406 - TransformationReplaceParameterWithGlobal (#3434)
407 - Support adding dead break from back-edge block (#3519)
408 - Fuzzer pass to interchange zero-like constants (#3524)
409 - Linker
411 v2020.3 2020-05-27
412 - General
413 - Prevent Effcee from installing things when building spirv-tools with testing enabled (#3256)
414 - Update acorn version (#3294)
415 - If SPIRV-Headers is in our tree, include it as subproject (#3299)
416 - allow cross compiling for Windows Store, UWP, etc. (#3330)
417 - Optimizer
418 - Remove deprecated interfaces from instrument passes (#3361)
419 - Preserve debug info in inline pass (#3349)
420 - Handle more cases in dead member elim (#3289)
421 - Preserve debug info in eliminate-dead-functions (#3251)
422 - Fix Struct CFG analysis for single block loop (#3293)
423 - Add tests for recently added command line option (#3297)
424 - Consider sampled images as read-only storage (#3295)
425 - Allow various validation options to be passed to spirv-opt (#3314)
426 - Add debug information analysis (#3305)
427 - Preserve debug info for wrap-opkill (#3331)
428 - refactor inlining pass (#3328)
429 - Add unrolling to performance passes (#3082)
430 - Validator
431 - Add validation support for ImageGatherBiasLodAMD (#3363)
432 - Validate ShaderCallKHR memory scope (#3332)
433 - Validate Buffer and BufferBlock apply only to struct types (#3259)
434 - Reduce
435 - increase default step limit (#3327)
436 - Remove unused uniforms and similar (#3321)
437 - Fuzz
438 - Add support for StorageBuffer (#3348)
439 - Add validator options (#3254)
440 - Limit adding of new variables to 'basic' types (#3257)
441 - Transformation to add OpConstantNull (#3273)
442 - Handling of more fuzzing opportunities (#3277, #3280, #3281, #3290, #3292)
443 - Respect rules for OpSampledImage (#3287)
444 - Do not outline regions that produce pointer outputs (#3291)
445 - Linker
447 v2020.2 2020-03-26
448 - General:
449 - Support extended instructions in the vscode language server
450 - Make spvOpcodeString part of the public API (#3174)
451 - Added guide to writing a spirv-fuzz fuzzer pass (#3190)
452 - Add support for KHR_ray_{query,tracing} extensions (#3235)
453 - Optimizer
454 - Debug Printf support (#3215)
455 - Add data structure for DebugScope, DebugDeclare in spirv-opt (#3183)
456 - Fix identification of Vulkan images and buffers (#3253)
457 - Validator
458 - Add support for SPV_AMD_shader_image_load_store_lod (#3186)
459 - Add validation rules for OpenCL.DebugInfo.100 extension (#3133)
460 - Adding WebGPU specific Workgroup scope rule (#3204)
461 - Disallow phis of images, samplers and sampled images (#3246)
462 - Reduce
463 - Fuzz
464 - Fuzzer passes to add local and global variables (#3175)
465 - Add fuzzer passes to add loads/stores (#3176)
466 - Fuzzer pass to add function calls (#3178)
467 - Fuzzer pass that adds access chains (#3182)
468 - Fuzzer pass to add equation instructions (#3202)
469 - Add swap commutable operands transformation (#3205)
470 - Add fuzzer pass to permute function parameters (#3212)
471 - Allow OpPhi operand to be replaced with a composite synonym (#3221)
472 - Linker
474 v2020.1 2020-02-03
475 - General:
476 - Add support for SPV_KHR_non_semantic_info (#3110)
477 - Support OpenCL.DebugInfo.100 extended instruction set (#3080)
478 - Added support for Vulkan 1.2
479 - Add API function to better handle getting the necessary environment (#3142)
480 - Clarify mapping of target env to SPIR-V version (#3150)
481 - Implement constant folding for many transcendentals (#3166)
482 - Optimizer
483 - Change default version for CreatInstBindlessCheckPass to 2 (#3096, #3119)
484 - Better handling of OpLine on merge blocks (#3130)
485 - Use placeholder switch instead of placeholder loop in MergeReturn pass. (#3151)
486 - Handle TimeAMD in AmdExtensionToKhrPass. (#3168)
487 - Validator
488 - Fix structured exit validation (#3141)
489 - Reduce
490 - Fuzz
491 - Fuzzer pass to merge blocks (#3097)
492 - Transformation to add a new function to a module (#3114)
493 - Add fuzzer pass to perform module donation (#3117)
494 - Fuzzer passes to create and branch to new dead blocks (#3135)
495 - Fuzzer pass to add composite types (#3171)
496 - Linker:
497 - Remove names and decorations of imported symbols (#3081)
499 v2019.5 2019-12-11
500 - General:
501 - Export SPIRV-Tools targets on installation
502 - SPIRV-Tools support for SPIR-V 1.5 (#2865)
503 - Add WebGPU SPIR-V Assembler in JavaScript. (#2876)
504 - Add Bazel build configuration. (#2891)
505 - Add support for building with emscripten (#2948)
506 - Update SPIR-V binary header test for SPIR-V 1.5 (#2967)
507 - Add fuzzer for spirv-as call path (#2976)
508 - Improved CMake install step. (#2963)
509 - Add fuzzer for spirv-dis call path (#2977)
510 - Ensure timestamp does not vary with timezone. (#2982)
511 - Add a vscode extension for SPIR-V disassembly files (#2987)
512 - Add iOS as a supported platform (#3001)
513 - utils/vscode: Add SPIR-V language server support
514 - Respect CMAKE_INSTALL_LIBDIR in installed CMake files (#3054)
515 - Permit the debug instructions in WebGPU SPIR-V (#3063)
516 - Add support for Fuchsia. (#3062)
517 - Optimizer
518 - Add descriptor array scalar replacement (#2742)
519 - Add pass to wrap OpKill in a function call (#2790)
520 - Fold FMix during constant folding. (#2818)
521 - Add pass to replace AMD shader ballot extension (#2811)
522 - Add pass to make Float32 operation relax precision (#2808)
523 - Add pass to make relax precision operation Float16 (#2808)
524 - Add pass to replace uses of 3 AMD extensions (#2814)
525 - Fold Min, Max, and Clamp instructions. (#2836)
526 - Better handling of OpKill in continues (#2842,#2922,#2933)
527 - Enable OpTypeCooperativeMatrix specialization (#2927)
528 - Support constant-folding UConvert and SConvert (#2960)
529 - Update Offset to ConstOffset bitmask if operand is constant. (#3024)
530 - Improve RegisterSizePasses (#3059)
531 - Folding: perform add and sub on mismatched integer types (#3084)
532 - Graphics robust access: use signed clamp (#3073)
534 - Instrument: Fix version 2 output record write for tess eval shaders. (#2782)
535 - Instrument: Add support for Buffer Device Address extension (#2792)
536 - Fix check for changed binary in API call. (#2798)
537 - For WebGPU<->Vulkan optimization, set correct execution environment (#2834)
538 - Handle OpConstantNull in copy-prop-arrays. (#2870)
539 - Use OpReturn* in wrap-opkill (#2886)
540 - Validator
541 - Add generic builtin validation of target (#2843)
542 - Extra resource interface validation (#2864)
543 - Adding valilidation checks for OpEntryPoint duplicate names and execution mode (#2862)
544 - Relaxed bitcast with pointers (#2878)
545 - Validate physical storage buffer restrictions (#2930)
546 - Add SPV_KHR_shader_clock validation (#2879, #3013)
547 - Validate that selections are structured (#2962)
548 - Disallow use of OpCompositeExtract/OpCompositeInsert with no indices (#2980)
549 - Check that derivatives operate on 32-bit values (#2983)
550 - Validate array stride does not cause overlap (#3028)
551 - Validate nested constructs (#3068)
553 - Fix validation of constant matrices (#2794)
554 - Update "remquor" validation
555 - Only allow previously declared forward refs in structs (#2920)
556 - Reduce
557 - Remove relaxed precision decorations (#2797)
558 - Reduce/fuzz: improve command line args (#2932)
559 - Improve remove unref instr pass (#2945)
561 - Fuzz
562 - Fix add-dead-break and add-dead-continue passes to respect dominance (#2838)
563 - Add fuzzer pass to copy objects (#2853)
564 - Add fuzzer pass to replace ids with synonyms (#2857)
565 - Allow validation during spirv-fuzz replay (#2873)
566 - Employ the "swarm testing" idea in spirv-fuzz (#2890)
567 - reduce/fuzz: improve command line args (#2932)
568 - option to convert shader into a form that renders red (#2934)
569 - Add fuzzer pass to change selection controls (#2944)
570 - add transformation and pass to construct composites (#2941)
571 - Add fuzzer pass to change loop controls (#2949)
572 - Add fuzzer pass to change function controls (#2951)
573 - Add fuzzer pass to add NoContraction decorations (#2950)
574 - Add missing functionality for matrix composites (#2974)
575 - Fuzzer pass to adjust memory access operands (#2968)
576 - Transformation to extract from a composite object (#2991)
577 - Vector shuffle transformation (#3015)
578 - Improve debugging facilities (#3074)
579 - Function outlining fuzzer pass (#3078)
582 v2019.4 2019-08-08
583 - General:
584 - Memory model support for SPIR-V 1.4
585 - Add new spirv-fuzz tool
586 - Add option for base branch in check_code_format.sh
587 - Removed MarkV and Stats code. (#2576)
588 - Instrument: Add version 2 of record formats (#2630)
589 - Linker: Better type comparison for OpTypeArray and OpTypeForwardPointer (#2580)
590 - Optimizer
591 - Bindless Validation: Instrument descriptor-based loads and stores (#2583)
592 - Better folding for OpSpecConstantOp (#2585, #2614)
593 - Add in individual flags for Vulkan <-> WebGPU passes (#2615)
594 - Handle nested breaks from switches. (#2624)
595 - Optimizer: Handle array type with OpSpecConstantOp length (#2652)
596 - Perform merge return with single return in loop. (#2714)
597 - Add --preserve-bindings and --preserve-spec-constants (#2693)
598 - Remove Common Uniform Elimination Pass (#2731)
599 - Allow ray tracing shaders in inst bindle check pass. (#2733)
600 - Add pass to inject code for robust-buffer-access semantics (#2771)
601 - Treat access chain indexes as signed in SROA (#2776)
602 - Handle RelaxedPrecision in SROA (#2788)
603 - Add descriptor array scalar replacement (#2742)
605 - Handle decorations better in some optimizations (#2716)
606 - Change the order branches are simplified in dead branch elim (#2728)
607 - Fix bug in merge return (#2734)
608 - SSA rewriter: Don't use trivial phis (#2757)
609 - Record correct dominators in merge return (#2760)
610 - Process OpDecorateId in ADCE (#2761)
611 - Fix check for unreachable blocks in merge-return (#2762)
612 - Handle out-of-bounds scalar replacements. (#2767)
613 - Don't move debug or decorations when folding (#2772)
614 - Protect against out-of-bounds references when folding OpCompositeExtract (#2774)
615 - Validator
616 - Validate loop merge (#2579)
617 - Validate construct exits (#2459)
618 - Validate OpenCL memory and addressing model environment rules (#2589)
619 - Validate OpenCL environment rules for OpTypeImage (#2606)
620 - Allow breaks to switch merge from nested construct (#2604)
621 - Validate OpenCL environment rules for OpImageWrite (#2619)
622 - Allow arrays of out per-primitive builtins for mesh shaders (#2617)
623 - Validate OpenCL rules for ImageRead and OpImageSampleExplicitLod (#2643)
624 - Add validation for SPV_EXT_fragment_shader_interlock (#2650)
625 - Add builtin validation for SPV_NV_shader_sm_builtins (#2656)
626 - Add validation for Subgroup builtins (#2637)
627 - Validate variable initializer type (#2668)
628 - Disallow stores to UBOs (#2651)A
629 - Validate Volatile memory semantics bit (#2672)
630 - Basic validation for Component decorations (#2679)
631 - Validate that in OpenGL env block variables have Binding (#2685)
632 - Validate usage of 8- and 16-bit types with only storage capabilities (#2704)
633 - Add validation for SPV_EXT_demote_to_helper_invocation (#2707)
634 - Extra small storage validation (#2732)
635 - For Vulkan, disallow structures containing opaque types (#2546)
636 - Validate storage class OpenCL environment rules for atomics (#2750)
637 - Update OpControlBarriers rules for WebGPU (#2769)
638 - Update OpMemoryBarriers rules for WebGPU (#2775)
639 - Update WebGPU validation rules of OpAtomic*s (#2777)
641 - Disallow merge targeting block with OpLoopMerge (#2610)
642 - Update vloadn and vstoren validation to match the OpenCL Extended
644 - Update memory scope rules for WebGPU (#2725)
645 - Allow LOD ops in compute shaders with derivative group execution modes (#2752)
646 - Reduce
649 v2019.3 2019-05-14
650 - General:
651 - Require Python 3 since Python 2 will out of service soon.
652 - Add a continuous test that does memory checks using the address sanitizer.
653 - Fix the build files so the SPIRV_USE_SANITIZER=address build works.
654 - Packaging top of tree build artifacts again.
655 - Added support for SPIR-V 1.4. (#2550)
656 - Optimizer
657 - Remove duplicates from list of interface IDs in OpEntryPoint instruction (#2449)
658 - Bindless Validation: Descriptor Initialization Check (#2419)
659 - Add option to validate after each pass (#2462)
660 - Add legalization pass to fix mismatched pointer (#2430, #2535)
661 - Add error messages when the input contains unknown instructions. (#2487)
662 - Add pass to convert from WebGPU Spir-V to Vulkan Spir-V and back. (#2495)
664 - #2412: Dead memeber elimination should not change input and output variables.
665 - #2405: Fix OpDot folding of half float vectors.
666 - #2391: Dead branch elim should not fold away back edges.
667 - #2441: Removing decorations when doing constant propagation.
668 - #2455: Maintain inst to block mapping in merge return.
669 - #2453: Fix merge return in the face of breaks.
670 - #2456: Handle dead infinite loops in DCE.
671 - #2458: Handle variable pointer in some optimizations.
672 - #2452: Fix dead branch elimination to handle unreachable blocks better.
673 - #2528: Fix undefined bit shift in sroa.
674 - #2539: Change implementation of post order CFG traversal.
675 - Validator
676 - Add validation of storage classes for WebGPU (#2446)
677 - Add validation for ExecutionMode in WebGPU (#2443)
678 - Implement WebGPU specific CFG validation (#2386)
679 - Allow NonWritable to target struct members. (#2420)
680 - Allow storage type mismatch for parameter in relaxed addressing mode.
681 - Allow non memory objects as parameter in relaxed addressing mode.
682 - Disallow nested Blocks and buffer blocks (#2410).
683 - Add validation for SPV_NV_cooperative_matrix (#2404)
684 - Add --strip-atomic-counter-memory (#2413)
685 - Check OpSampledImage is only passed into valid instructions (#2467)
686 - Handle function decls in Structured CFG analysis (#2474)
687 - Validate that OpUnreacahble is not statically reachable (#2473)
688 - Add pass to generate needed initializers for WebGPU (#2481)
689 - Allow images without format for OpenCL. (#2470)
690 - Remove unreachable block validation (#2525)
691 - Reduce runtime of array layout checks (#2534)
692 - Add validation specific to OpExecutionModeId (#2536)
693 - Validate sign of int types. (#2549)
694 - VK_KHR_uniform_buffer_standard_layout validation (#2562)
696 - #2439: Add missing DepthGreater case to Fragment only check.
697 - #2168: Disallow BufferBlock on StorageBuffer variables for Vulkan.
698 - #2408: Restrict and Aliased decorations cannot be applied to the same id.
699 - #2447: Improve function call parameter check.
700 - Reduce
701 - Add Pass to remove unreferenced blocks. (#2398)
702 - Allows passing options to the validator. (#2401)
703 - Improve reducer algorithm and other changes (#2472)
704 - Add Pass to remove selections (#2485)
705 - Add passes to simplify branches (#2507)
707 - #2478: fix loop to selection pass for loops with combined header/continue block
709 v2019.2 2019-02-20
710 - General:
711 - Support SPV_EXT_physical_storage_buffer
712 - A number of memory leak have been fixed.
713 - Removed use of deprecated Google test macro:
714 - Changed the BUILD.gn to only build tests in Chromium.
715 - Optimizer
716 - Upgrade memory model improvments for modf and frexp.
717 - Add a new pass to move loads closer to their uses: code sinking.
718 - Invalidating the type manager now invalidates the constnat manager.
719 - Expand instrumentation pass for bindless bounds checking to runtime-sized descriptor arrays.
720 - Add a new pass that removes members from structs that are not used: dead member elimination.
722 - #2292: Remove undefined behaviour when folding bit shifts.
723 - #2294: Fixes for instrumentation code.
724 - #2293: Fix overflow when folding -INT_MIN.
725 - #2374: Don't merge unreachable blocks when merging blocks.
726 - Validator
727 - Support SPV_KHR_no_integer_wrap and related decorations.
728 - Validate Vulkan rules for OpTypeRuntimeArray.
729 - Validate NonWritable decoration.
730 - Many WebGPU specific validation rules were added.
731 - Validate variable pointer related function call rules.
732 - Better error messages.
734 - #2307: Check forwards references in OpTypeArray.
735 - #2315, #2303: Fixed the layout check for relaxed layout.
736 - #1628: Emit an error when an OpSwitch target is not an OpLabel.
737 - Reduce
738 - Added more documentation for spirv-reduce.
739 - Add ability to remove OpPhi instructions.
740 - Add ability to merge two basic blocks.
741 - Add ability to remove unused functions and unused basic blocks.
744 v2019.1 2019-01-07
745 - General:
746 - Created a new tool called spirv-reduce.
747 - Add cmake option to turn off SPIRV_TIMER_ENABLED (#2103)
748 - New optimization pass to update the memory model from GLSL450 to VulkanKHR.
749 - Recognize OpTypeAccelerationStructureNV as a type instruction and ray tracing storage classes.
750 - Fix GCC8 build.
751 - Add --target-env flag to spirv-opt.
752 - Add --webgpu-mode flag to run optimizations for webgpu.
753 - The output disassembled line number stead of byte offset in validation errors. (#2091)
754 - Optimizer
755 - Added the instrumentation passes for bindless validation.
756 - Added passes to help preserve OpLine information (#2027)
757 - Add basic support for EXT_fragment_invocation_density (#2100)
758 - Fix invalid OpPhi generated by merge-return. (#2172)
759 - Constant and type manager have been turned into analysies. (#2251)
761 - #2018: Don't inline functions with a return in a structured CFG contstruct.
762 - #2047: Fix bug in folding when volatile stores are present.
763 - #2053: Fix check for when folding floating pointer values is allowed.
764 - #2130: Don't inline recursive functions.
765 - #2202: Handle multiple edges between two basic blocks in SSA-rewriter.
766 - #2205: Don't unswitch a latch condition during loop unswitch.
767 - #2245: Don't fold branch in loop unswitch. Run dead branch elimination to fold them.
768 - #2204: Fix eliminate common uniform to place OpPhi instructions correctly.
769 - #2247: Fix type mismatches caused by scalar replacement.
770 - #2248: Fix missing OpPhi after merge return.
771 - #2211: After merge return, fix invalid continue target.
772 - #2210: Fix loop invariant code motion to not place code between merge instruction and branch.
773 - #2258: Handle CompositeInsert with no indices in VDCE.
774 - #2261: Have replace load size handle extact with no index.
775 - Validator
776 - Changed the naming convention of outputing ids with names in diagnostic messages.
777 - Added validation rules for UniformConstant variables in Vulkan.
778 - #1949: Validate uniform variable type in Vulkan
779 - Ensure for OpVariable that result type and storage class operand agree (#2052)
780 - Validator: Support VK_EXT_scalar_block_layout
781 - Added Vulkan memory model semantics validation
782 - Added validation checkes spefic to WebGPU environment.
783 - Add support for VK_EXT_Transform_feedback capabilities (#2088)
784 - Add validation for OpArrayLength. (#2117)
785 - Ensure that function parameter's type is not void (#2118)
786 - Validate pointer variables (#2111)
787 - Add check for QueueFamilyKHMR memory scope (#2144)
788 - Validate PushConstants annotation and type (#2140)
789 - Allow Float16/Int8 for Vulkan 1.0 (#2153)
790 - Check binding annotations in resource variables (#2151, #2167)
791 - Validate OpForwardPointer (#2156)
792 - Validate operation for OpSpecConstantOp (#2260)
794 - #2049: Allow InstanceId for NV ray tracing
795 - Reduce
796 - Initial commit wit a few passes to reduce test cases.
797 - Validation is run after each reduction step.
801 v2018.6 2018-11-07
802 - General:
803 - Added support for the Nvidia Turing and ray tracing extensions.
804 - Make C++11 the CXX standard in CMakeLists.txt.
805 - Enabled a parallel build for MSVC.
806 - Enable pre-compiled headers for MSVC.
807 - Added a code of conduct.
808 - EFFCEE and RE2 are now required when build the tests.
809 - Optimizer
810 - Unrolling loops marked for unrolling in the legalization passes.
811 - Improved the compile time of loop unrolling.
812 - Changee merge-return to create a placeholder loop around the function.
813 - Small improvement to merge-blocks to allow it to merge more often.
814 - Enforce an upper bound for the ids, and add option to set it.
815 - #1966: Report error if there are unreachable block before running merge return
817 - #1917: Allow 0 (meaning unlimited) as a parameter to --scalar-replacement
818 - #1915: Improve handling of group decorations.
819 - #1942: Fix incorrect uses of the constant manager. Avoids type mismatches in generated code.
820 - #1997: Fix dead branch elimination when there is a loop in folded selection.
821 - #1991: Fixes legality check in if-conversion.
822 - #1987: Add nullptr check to array copy propagation.
823 - #1984: Better handling of OpUnreachable in ADCE.
824 - #1983: Run merge return on reachable functions only.
825 - #1956: Handled atomic operations in ADCE.
826 - #1963: Fold integer divisions by 0 to 0.
827 - #2019: Handle MemberDecorateStringGOOGLE in ADCE and strip reflect.
828 - Validator
829 - Added validation for OpGroupNonUniformBallotBitCount.
830 - Added validation for the Vulkan memory model.
831 - Added support for VK_KHR_shader_atddomic_int64.
832 - Added validation for execution modes.
833 - Added validation for runtime array layouts.
834 - Added validation for 8-bit storage.
835 - Added validation of OpPhi instructions with pointer result type.
836 - Added checks for the Vulkan memory model.
837 - Validate MakeTexelAvailableKHR and MakeTexelVisibleKHR
838 - Allow atomic function pointer for OpenCL.
839 - FPRounding mode checks were implemented.
840 - Added validation for the id bound with an option to set the max id bound.
842 - #1882: Improve the validation of decorations to reduce memory usage.
843 - #1891: Fix an potential infinite loop in dead-branch-elimination.
844 - #1405: Validate the storage class of boolean objects.
845 - #1880: Identify arrays of type void as invalid.
846 - #487: Validate OpImageTexelPointer.
847 - #1922: Validate OpPhi instructions are at the start of a block correctly.
848 - #1923: Validate function scope variable are at the start of the entry block.
850 v2018.5 2018-09-07
851 - General:
852 - Support SPV_KHR_vulkan_memory_model
853 - Update Dim capabilities, to match SPIR-V 1.3 Rev 4
854 - Automated build bots no run tests for the VS2013 case
855 - Support Chromium GN build
856 - Use Kokoro bots:
857 - Disable Travis-CI bots
858 - Disable AppVeyor VisualStudio Release builds. Keep VS 2017 Debug build
859 - Don't check export symbols on OSX (Darwin): some installations don't have 'objdump'
860 - Reorganize source files and namespaces
861 - Fixes for ClangTidy, and whitespace (passes 'git cl presumit --all -uf')
862 - Fix unused param compile warnings/errors when Effcee not present
863 - Avoid including time headers when timer functionality is disabled
864 - Avoid too-stringent warnings flags for Clang on Windows
865 - Internal refactoring
866 - Add hooks for automated fuzzing
867 - Add testing of command line executables
868 - #1688: Use binary mode on stdin; fixes "spirv-dis <foo.spv" on Windows
869 - Optimizer
870 - The optimizer validates the module before it begins
871 - Add API to register passes by string name
872 - Fold a vector shuffle feeding a vector shuffle
873 - Add -combine-access-chains transform
874 - Refactor how IRContext is handled by passes
875 - Improve bookkeeping for instruction result type and result id
876 - Fix over-duplication of decorations
877 - Fix handling of exits from selections in dead-branch elimination, and dead code
879 - Fix handling of certain kinds of flow control in merge-return
881 - #1721: Fix size bug when folding vector shuffles
882 - #1722: Fix size infinite loop when folding vector shuffles
883 - #1724: Fix finding a constant of a specific type
884 - #1727: Dead branch elim: Reorder blocks if needed to satisfy dominance rule
885 - #1729: Handle VariablePointers cases in various optimizations
886 - #1731: Fix vector shuffle with literal id indicating undef value
887 - #1736: Fix handling of decorations and phis in merge-return
888 - #1787: Fix handling of decorations related to access chains
889 - #1865: Avoid leaking memory for SPIR-V constant values
890 - Validator
891 - Improve error messages
892 - Avoid platform-dependent traversal ordering, to ensure consistent messages
893 - Use libspirv::Instruction where possible
894 - Add option to skip all block layout checks
895 - Validate all type IDs
896 - Validate uses of OpFunction
897 - Validate uses of OpTypeFunction
898 - Disallow a struct containing its own type https://crbug.com/874372
899 - #1685: Vulkan permits non-monotonic offsets for block members
900 - #1697: Enforce block layout rules even when using relaxed block layout option
901 - #1719: Fix line number for vector shuffle valiation error
902 - #1789: Avoid assertion failure when validating some functions
903 - #1800: Fix validation of OpCopyMemorySized
904 - #1822: Stop enforcing struct member offset montonicity
905 - #1831: Disallow void members in structs
907 v2018.4 2018-07-08
908 - General:
909 - Support SPV_KHR_8bit_storage
910 - Add gclient and presubmit configurations
911 - Enable Kokoro build bots (#1625)
912 - Group tests into fewer executables, reduces load on CI
913 - Port test script to Python 3
914 - Symbol export tests respect SPIRV_SKIP_TESTS
915 - #1596: Operand lookup succeeds if enabled by a capability
916 - #1624: Instruction lookup succeeds if enabled by a capability
917 - Refactoring namespaces:
918 - #1678: Change libspirv to spvtools
919 - Code in source/utils moved into spvtools::utils
920 - Code in source/comp moved into spvtools::comp
921 - Optimizer:
922 - Remove insert-extract-elim pass. Use simplification pass instead.
923 - Preserve instruction-to-block mapping in most passes, to reduce runtime.
924 - Small vector optimization for operands
925 - Add pass to move Private variables to Function. Increase opportunity to optimize.
926 - Fixes:
930 #1578: Fix handling of forward-pointer types, and types embedding pointers
934 #1649: Fix assert in compact-ids pass
937 - Validator
938 - Add work-in-progress WebGPU environment. Disallows OpUndef
939 - #670, #1581: Improve error messages; disassemble instruction
940 - #491: Check structured switches
941 - #937: Check layout rules for Block and BufferBlock in Uniform, StorageBuffer, PushConstant
942 - #1281: Check invalid branches into structured constructs
943 - #1522: Disallow array-of-arrays with DescriptorSets
944 - #1577: Allow duplicate pointer types.
945 - #1581: Better messages: output ID names along with numbers in more cases.
946 - #1597: Check Vulkan 1.1 capabilities
947 - #1618: Check invalid exit from structured case construct
948 - #1622: Run IdPass before DataRulesPass
949 - #1632: Reduce test time by artificially lowering limits in limit test
950 - #1638: Block-decorated structs member order must respect offset order
951 - #1657: Improve CFG validation diagnostics
952 - Khronos SPIR-V #337: GLSL.std.450 Refract instruction Eta param can be any float scalar.
953 - #1606: PushConstant Blocks follow storage-buffer layout rules
954 - #1664: Check layout of StorageBuffer variables with Block decoration, using storage buffer
956 - #1666: Layout validation should permit {vec3; float} packing
957 - #1637, #1668: Layout validation uses RowMajor, ArrayStride, MatrixStride properly
958 - Linker
959 - Avoid buffer overrun when creating OpModuleProcessed
961 v2018.3 2018-05-25
962 - General:
963 - Support SPV_EXT_descriptor_indexing
964 - Support SPV_GOOGLE_decorate_string
965 - Support SPV_GOOGLE_hlsl_functionality1
966 - Support SPV_NV_shader_subgroup_partitioned
967 - Use "unified1" grammar from SPIRV-Headers
968 - Simplify support for new extensions. Assembler, disassembler, and simple validation
970 attributes in the "unified1" SPIR-V core grammar.
971 - Disassembler: Emit more digits on floating point, to reliably reproduce all
973 - Fix compilation for old XCode versions: Explicit construction required for std::set.
974 - Optimizer:
975 - Add --strip-reflect
976 - Add --time-report
977 - Add --loop-fission
978 - Add lop fusion.
979 - Add loop peeling pass and internal utility.
980 - Improve optimizer runtime.
981 - Merge-return now works with structured control flow.
982 - New (faster) SSA rewriter to convert local loads and stores to SSA IDs and phis.
984 - Fix instruction folding case: insertion that feeds and extract, when the extract
986 - Fold OpDot.
987 - Fold OpFNegate.
988 - Fold multply and divide of same value.
989 - Fold FClamp feeding a compare.
990 - Fold OpLoad feeding an extract, to reduce excessive copying. (#1547)
991 - Fold Fmix feeding an extract.
992 - Use simplification pass instead of insert-extract elimination.
993 - Constant fold OpVectorTimesScalar.
994 - Copy propagate arrays, in simple cases.
995 - Aggressive dead code elimination: Can remove more instructions, e.g. derivatives.
996 - Aggressive dead code elimination: Remove Workgroup variables that are written but not read.
997 - Better handling of OpImageTexelPointer
998 - Initial utilities for scalar evolution.
999 - Add Vector dead code elimination.
1000 - Each pass can only run once.
1001 - Allow code hosting in if-conversion.
1002 - Add external interface for adding a PassToken, so external code can make their own
1004 - Fixes:
1011 #1559: Fix assert failure in reduce-load-size pass.
1013 - Validator:
1014 - Check Vulkan built-in variables
1015 - Check Vulkan-specific atomic result type rule.
1016 - Relax control barrier check for SPIR-V 1.3. Fixes #1427
1017 - Check OpPhi.
1018 - Check OpMemoryModel.
1019 - Stop checking sizes derived from spec-constants.
1020 - Re-enable checks for OpUConvert.
1021 - Vulkan: Fix check for PrimitiveId: Permit as Input in fragment shader.
1022 - Validate binary version for the given target environment.
1023 - Add tests for OpBranch checks.
1024 - Vulkan 1.1: Check scope for non-uniform subgroup operations.
1025 - Fix checks for SPV_AMD_gpu_shader_int16.
1026 - Fix logical layout check for OpDecorateId.
1027 - Fix checks for ViewportIndex & Layer for Vulkan and SPV_EXT_shader_viewport_index_layer.
1028 - Fixes:
1031 #1472: Per-vertex variable validation fixes.
1033 - Fixes:
1037 v2018.2 2018-03-07
1038 - General:
1039 - Support SPIR-V 1.3 and Vulkan 1.1.
1040 - Default target environment is now SPIR-V 1.3. For command-line tools,
1041 use the --target-env option to override the default. Examples:
1042 # Generate a SPIR-V 1.0 binary instead of SPIR-V 1.3
1043 spirv-as --target-env spv1.0 a.spvasm -o a.spv
1044 spirv-as --target-env vulkan1.0 a.spvasm -o a.spv
1046 spirv-val --target-env vulkan1.0 a.spv
1047 - Support SPV_GOOGLE_decorate_string and SPV_GOOGLE_hlsl_functionality1
1048 - Fixes:
1049 - Fix Android.mk build. Compilation was failing due to missing definitions of
1051 - Optimizer: Avoid generating duplicate names when merging types.
1052 - #1375: Validator: SPV_AMD_gpu_shaer_half_float implicitly allows declaration
1053 of the 16-bit floating point type.
1054 - #1376: Optimizer: Avoid folding half-precision float.
1056 v2018.1 2018-03-02
1057 - General:
1058 - Support Visual Studio 2013 again. (Continue support for VS 2015 and VS 2017.)
1059 - Support building SPIRV-Tools as a shared library.
1060 - Improve the HLSL legalization optimization recipe. #1311
1061 - Optimizer:
1062 - General speedups.
1063 - Remove generic dead code elimination functionality from transforms:
1064 --eliminate-local-single-block
1065 --eliminate-local-single-store
1066 --eliminate-local-multi-store
1068 also invoke the --eliminate-dead-code-aggressive transform.
1069 - Improve folding, including coverage for floating point, OpSelect, and arithmetic
1070 with non-trivial constant operands.
1071 - Add loop-invariant code motion pass.
1072 - Add loop-unrolling pass, for honouring unroll hits.
1073 - Add loop-unswitch pass.
1074 - Add instruction simplification pass.
1075 - Aggressive dead code elimination: Understands capability hierarchy when finding
1077 - CCP can now fold floating point arithmetic. #1311
1078 - Validator:
1079 - Validate barrier instructions.
1080 - Check Vulkan-specific rules for atomics.
1081 - Check Vulkan prohibition of Location or Component decorations on BuiltIn variables.
1082 - Linker:
1083 - Add --verify-ids option
1084 - Add option to allow a resulting module to be partially linked.
1085 - Handle OpModuleProcessed (instructions in SPIR-V layout section 7c)
1086 - Fixes:
1087 - #1265: Optimizer: Fix use-after free bug in if-conversion. (Fix object lifecycle bug
1089 - #1282: Fix new warnings found by GCC 8.0.1.
1090 - #1285: Optimizer: Fix random failures during inlining. (Dangling references in DefUseManager)
1091 - #1295: Optimizer: Fix incorrect handling of Phi nodes in CCP.
1092 - #1300: Fix CCP: avoid bad CCP transitions and unsettled values.
1093 - #1304: Avoid static-duration variables of class type (with constructors).
1094 - #1323: Fix folding of an insert composite feeding a composite extract.
1095 - #1339: Fix CCP: Handle OpConstantNull boolean values as conditions.
1096 - #1341: DCEInst: Keep atomic instructions (and some others with side effects).
1097 - #1354: Don't fold integer division.
1098 - #1357: Support OpConstantNull in folding.
1099 - #1361: CCP: Fix handling of non-constant module-scope values
1101 v2018.0 2018-02-02
1102 - General
1103 - VisualStudio 2013 is no longer supported. VisualStudio 2015 is supported.
1104 - Use "include/unified1" directory from SPIRV-Headers. Requires recent SPIRV-Headers source.
1105 - Disassembler: spirv-dis adds --color option to force color disassembly.
1106 - Optimizer:
1107 - Add pass to eliminate dead insertions.
1108 - Aggressive dead code elimination now removes OpSwitch constructs.
1109 - Block merging occurs in more cases.
1110 - Add driver workaround transform: replace OpUnreachable with harmless branch to merge.
1111 - Improve instruction folding framework.
1112 - Add loop analysis.
1113 - Add scalar replacement of aggregates to size-optimization recipe.
1114 - Add pass to replace instructions invalid for a shader stage, with a harmless value.
1116 - Rearragne and add passes to performance-optimization recipe, to produce better results.
1117 - Validator:
1118 - Validate OpenCL extended instructions.
1119 - Shaders can't perform atomics on floats.
1120 - Validate memory semantics values in atomics.
1121 - Validate instruction-adjacency constraints, e.g. OpPhi predecessors, merge instructions
1123 - Fixes:
1124 - PR 1198: Optimizer: Fix CCP in presence of matrix constants.
1125 - #1199: Optimizer: Fix CCP: don't propagate spec constants.
1126 - #1203: Optimizer: Fix common uniform elim bug introduced by refactoring.
1127 - #1210: Optimizer: Aggressive dead code elimination: Fix 'break' identification.
1128 - #1212: Optimizer: Aggressive dead code elimination: Was skipping too many instructions.
1129 - #1214: Optimizer: Aggressive dead code elimination: Fix infinite loop.
1130 - #1228: Optimizer: Fix CCP: Handling of varying Phi nodes; was resulting in infinite loop.
1131 - #1245: Optimizer: Dead branch elimination: Avoid a null pointer dereference.
1132 - #1250: Optimizer: Dead branch elimination: Avoid spuriously reporting a change.
1134 v2017.3 2018-01-12
1135 - General:
1136 - Support DebugInfo extended instruction set, targeted at OpenCL environments.
1137 See the SPIR-V Registry.
1138 - Generate a SPIRV-Tools.pc file for pkg-config.
1139 - Optimizer:
1140 - Progress for legalization of code generated from HLSL (issue #1118):
1141 - Add --legalize-hlsl option to run transforms used to transform intermediate
1142 code generated by HLSL to SPIR-V for Vulkan compilers. Those compilers
1145 - Add Private-to-Function variable conversion for modules with logical
1147 - Add --ccp: SSA Conditional Constant Propagation (CCP)
1148 - Add --print-all to show disassembly for each optimization pass.
1149 - Internal: Add loop descriptors and post-order tree iterator.
1150 - Generalized dead branch elimination
1151 - Aggressive dead code elimination (ADCE) now removes dead functions and
1152 module-scope variables.
1153 - Vector extract/insert elimination now optimizes through some cases of
1155 - Validator:
1156 - Add validation for GLSL.std.450 extended instruction set.
1157 - Check out of bounds composite accesses, where that's statically computable.
1159 - Check upper bits of literal numbers that aren't a multiple of 32-bits wide.
1160 - More validation of primitive instructions
1161 - Add optional "relaxed" checking logical addressing mode to permit some
1162 cases of pointer-to-pointer. Contributes to HLSL legalization (issue #1118).
1163 - Fixes:
1166 #1108: Remove duplicates transform was incorrectly removing non-duplicate
1173 #1154: Optimizer's internal instruction-to-block mappings were sometimes
1180 v2017.2 2017-12-15
1181 - General:
1182 - Support OpenCL 1.2, 2.0 target environments, including embedded profiles
1183 - Add CONTRIBUTING.md
1184 - Fix exit status code for spirv-link
1185 - Disassember: Enable emitting ANSI colour codes to a string
1186 - Library avoids polluting global namespace. The libraries can export C and C++
1188 - Linux release builds include debug information, for easier profiling
1189 - Build bots no longer test VisualStudio 2013
1190 - Testing dependency RE2 requires VisualStudio 2015 or later
1191 - Build bots check code formatting
1192 - Optimizer:
1193 - Add --skip-validation to spirv-opt
1194 - Add dominance tree analysis
1195 - Add generic value propagation engine
1196 - Add global redundancy elimination within a function
1197 - Add scalar replacement of function-scope variables of composite type
1198 - Aggressive dead code elimination: Remove empty loops
1199 - Killing an instruction notifies the IRContext
1200 - IRContext::KillInst deletes the instruction
1201 - Move CFG analysis to IRContext
1202 - Add constant manager
1203 - Fix: Don't consider derivative instructions as combinators.
1204 - Fix: Don't delete an instruction twice in local dead-code-elimination
1205 - Fix: Don't consider derivative instructions as combinators.
1206 - Validator:
1207 - Finish checking of image instructions (Section 3.32.10)
1208 - Check sparse image instructions
1209 - Check OpTypeImage, OpTypeSampleImage
1210 - Check composite instructions (Section 3.32.12)
1211 - Check atomic instructions (Section 3.32.18)
1212 - Check OpEmitStreamVertex, OpEndStreamPrimitive instructions
1213 - Re-enable validation of OpCopyObject
1214 - OpKill, image ImplicitLod and QueryLod instructions can only be used in Fragment
1216 - Fixes for image instruction validation:
1217 - Lod image operand only usable with ExplicitLod and OpImageFetch
1218 - ExplicitLod Lod image operand must be float scalar
1219 - OpImageFectch Lod image operand must be int scalar
1220 - OpImageGather component operand must be 32-bits (integer scalar)
1221 - OpImageQuerySizeLod Lod must be integer scalar
1222 - Fixes:
1226 #1004: Use after free of an instruction, in remove-duplicates transform
1227 #1007: OpImageRead not required to return 4-component vector
1231 #1017: Load-store elimination considers variable initializations
1237 v2017.1 2017-11-23
1238 - Update README with details on the public_spirv_tools_dev@khronos.org mailing list.
1239 - General:
1240 - Automatically deploy built artifacts to GitHub Releases
1241 - Add a Linker (module combiner). Under development.
1242 - Add Android.mk for Android NDK builds.
1243 - Add the 'effcee' library as an optional dependency for use in tests.
1246 - Avoid static-duration variables of class type (with constructors).
1247 - Hack around bugs in gcc-4.8.1 template handling
1248 - Faster opcode lookup
1249 - Validator:
1250 - Recognize extensions listed on SPIR-V registry,
1252 - Validator issues an info message when it sees an unrecognized extension.
1253 - Type check basic arithmetic operations
1254 - Type check carry/extended arithmetic operations
1255 - Type check vector arithmetic operations
1256 - Type check Relational and Logical instructions
1257 - Type check Bit instructions
1258 - Check type uniqueness rules
1259 - Check conversion instructions
1260 - Check image instructions
1261 - Check derivative instructions
1262 - Check OpVectorShuffle
1263 - Check OpBranchConditional
1264 - OpModuleProcessed is only allowed after debug names section and before annotations
1266 - Checks the right kind of return is called for each function (void or non-void).
1267 - Add option to relax type check when storing structs (--relax-store-struct)
1268 - Optimizer:
1269 - Refactoring internal representation of the module, including:
1270 - IRContext: owns a module and manages analyses
1271 - Instructions are owned by intrusive lists, and have unique IDs
1272 - BasicBlock owns its instruction list.
1273 - DefUseManager: change representation of uses, for faster processing
1275 - Add high level recipes: -O, -Os, and -Oconfig
1276 Recipes for -O and -Os are under development.
1277 - Add eliminate-dead-function transform
1278 - Add strength reduction transform: For now, convert multiply by power of 2
1280 - Add CFG cleanup transform
1281 - Add removal of dead module-scope variables
1282 - Add merge-return transform for modules without structured control flow
1283 - Add redundancy elimination within a basic block (local value numbering)
1284 - Extract-insert elimination:
1285 - Recognize the case where the first instruction in the sequence is an
1287 - Handle some cases of nested structs
1288 - Dead branch elimination now can eliminate entire selection constructs
1290 - Compressing codec:
1291 - Updated algorithm to 1.01, 1.02, 1.03
1292 - Not built by default. Use -DSPIRV_BUILD_COMPRESSION=ON to build.
1293 - Codec can be parameterized by a customized model.
1294 - Fixes:
1296 #798: spirv-as should fail when given unrecognized long option
1297 #800: Inliner: Fix inlining function into header of multi-block loop
1298 #824: Eliminate-local-multi-store: Fix a crash
1299 #826: Elimiante-local-multi-store: Fix a crash
1300 #827: Fix crash when compact-ids transform runs before another transform.
1304 v2017.0 2017-09-01
1305 - Update README to describe that assembler, disassembler, and binary parser support
1306 are based on grammar files from the SPIRV-Headers repository.
1308 v2016.7 2017-09-01
1309 - Add SPIR-V 1.2
1310 - OpenCL 2.2 support is now based on SPIR-V 1.2
1311 - Support AMD extensions in assembler, disassembler:
1319 - Optimizer: Add support for:
1320 - Inline all function calls in entry points.
1321 - Flatten decoration groups. Fixes #602
1322 - Id compaction (minimize Id bound). Fixes #624
1323 - Eliminate redundant composite insert followed by extract
1324 - Simplify access chains to local variables
1325 - Eliminate local variables with a single store, if possible
1326 - Eliminate local variables with a several stores, if possible
1327 - Eliminate loads and stores in same block to local variables
1328 - Eliminate redundant insert/extract to composite values
1329 - Aggressive dead instruction elimination
1330 - Eliminate dead branches
1331 - Merge blocks when the second can only be preceded by the first
1332 - Eliminate ommon uniform loads
1333 - Assembler: Add option to preserve numeric ids. Fixes #625
1334 - Add build target spirv-tools-vimsyntax to generate spvasm.vim, a SPIR-V
1336 - Version string: Allow overriding of wall clock timestamp with contents
1338 - Validator implements relaxed rules for SPV_KHR_16bit_storage.
1339 - CMake installation rules use GNUInstallDirs. For example, libraries
1342 - Fixes:
1353 #629: The inline-entry-points-all optimization could generate invalidly
1355 #697: Optimizer's Instruction::ForEachInId method was skipping semantics-id
1356 and scope-id.
1362 #782: Inliner: Fix remapping of non-label forward references in callee
1368 v2016.6 2016-12-13
1369 - Published the C++ interface for assembling, disassembling, validation, and
1371 - Support SPV_KHR_shader_draw_parameters in assembler, disassembler, parser.
1372 - Validator:
1373 - Add validator API accepting raw binary words
1374 - Increased coverage:
1375 - Checks "Data rules" in Universal Validation Rules, section 2.16.1
1376 - WIP: Universal Limits.
1377 - The minimum mandated upper bounds are checked.
1378 - TODO: Parameterize the validator to allow larger limits accepted by
1380 - OpSampledImage checks
1381 - OpConstantComposite checks
1382 - Id bound check
1383 - Disasssembler:
1384 - Generates friendly GLSL-based names for more builtin variables
1385 - Generates friendly names for numeric OpConstant values
1386 - Vendor tool info extracted from SPIR-V XML registry file.
1387 - Fixes issues:
1390 #482: Validator: OpVariable initializer can be an ID of a module-scope variable
1392 v2016.5 2016-09-16
1393 - Support SPV_KHR_shader_ballot in assembler, disassembler, parser.
1394 - Disassembler: Generate friendly names for built-in variables.
1395 - Partial fixes:
1396 #359: Add Emacs helper for automatically diassembling/assembling a SPIR-V
1398 - Fixes:
1402 v2016.4 2016-09-01
1403 - Relicensed under Apache 2.0
1404 - Add optimization passes (in API and spirv-opt command)
1405 - Fold spec constants defined with OpSpecConstantOp and
1407 - Fixes issues:
1410 v2016.3 2016-08-24
1411 - Add target environment enums for OpenCL 2.1, OpenCL 2.2,
1413 - Add spirv-cfg, an experimental tool to dump the control flow graph
1415 - Add optimization pass: Eliminate dead constants.
1416 - Add spirv-lesspipe.sh filter utility
1417 - Fixes issues:
1418 #288: Check def-use dominance rules for OpPhi (variable,parent) operands
1419 #339: Allow OpUndef in types-constants-global-vars section, as required
1420 by SPIR-V 1.0 Rev7, 1.1 Rev 3.
1425 v2016.2 2016-08-05
1426 - Validator is incomplete
1427 - Checks ID use block is dominated by definition block
1428 - Add optimization passes (in API and spirv-opt command)
1429 - Strip debug info instructions
1430 - Freeze spec constant to their default values
1431 - Allow INotEqual as operation for OpSpecConstantOp
1432 - Fixes bugs:
1436 #286: validator: don't incorrectly generate def-use error for
1439 #295: validator: def-use dominance check should ignore unreachable uses
1444 v2016.1 2016-07-19
1445 - Fix https://github.com/KhronosGroup/SPIRV-Tools/issues/261
1447 - The disassembler can emit friendly names based on debug info (OpName
1449 This is turned on by default for the spirv-dis command line tool.
1450 - Updated to support SPIR-V 1.1 rev 2
1451 - Input StorageClass, Sampled1D capability, and SampledBuffer capability
1454 v2016.0 2016-07-04
1456 - Adds v<year>.<index> versioning, with "-dev" indicating
1458 and summarize functionality when SPIRV-Tools is incorporated
1461 - Summary of functionality (See the README.md for more):
1462 - Supports SPIR-V 1.1 Rev 1
1463 - Supports SPIR-V 1.0 Rev 5
1464 - Supports GLSL std450 extended instructions 1.0 Rev 3
1465 - Supports OpenCL extended instructions 1.0 Rev 2
1466 - Assembler, disassembler are complete
1467 - Supports floating point widths of 16, 32, 64 bits
1468 - Supports integer widths up to 64 bits
1469 - Validator is incomplete
1470 - Checks capability requirements in most cases
1471 - Checks module layout constraints
1472 - Checks ID use-definition ordering constraints,
1474 - Checks some control flow graph rules
1475 - Optimizer is introduced, with few available transforms.
1476 - Supported on Linux, OSX, Android, Windows
1478 - Fixes bugs:
1479 - #143: OpenCL pow and pown arguments