Start v2017.2-dev
[platform/upstream/SPIRV-Tools.git] / CHANGES
1 Revision history for SPIRV-Tools
2
3 v2017.2-dev 2017-11-23
4  - Start v2017.2-dev
5
6 v2017.1 2017-11-23
7  - Update README with details on the public_spirv_tools_dev@khronos.org mailing list.
8  - General:
9    - Automatically deploy built artifacts to GitHub Releases
10    - Add a Linker (module combiner). Under development.
11    - Add Android.mk for Android NDK builds.
12    - Add the 'effcee' library as an optional dependency for use in tests.
13      Eventually it will be a required dependency, once downstream projects have
14      a chance to adjust.  Requires 're2' library.
15    - Avoid static-duration variables of class type (with constructors).
16    - Hack around bugs in gcc-4.8.1 template handling
17    - Faster opcode lookup
18  - Validator:
19    - Recognize extensions listed on SPIR-V registry,
20      through #25 SPV_AMD_shader_fragment_mask
21    - Validator issues an info message when it sees an unrecognized extension.
22    - Type check basic arithmetic operations
23    - Type check carry/extended arithmetic operations
24    - Type check vector arithmetic operations
25    - Type check Relational and Logical instructions
26    - Type check Bit instructions
27    - Check type uniqueness rules
28    - Check conversion instructions
29    - Check image instructions
30    - Check derivative instructions
31    - Check OpVectorShuffle
32    - Check OpBranchConditional
33    - OpModuleProcessed is only allowed after debug names section and before annotations
34      section.
35    - Checks the right kind of return is called for each function (void or non-void).
36    - Add option to relax type check when storing structs (--relax-store-struct)
37  - Optimizer:
38    - Refactoring internal representation of the module, including:
39      - IRContext: owns a module and manages analyses
40      - Instructions are owned by intrusive lists, and have unique IDs
41      - BasicBlock owns its instruction list.
42      - DefUseManager: change representation of uses, for faster processing
43        on large modules.
44    - Add high level recipes: -O, -Os, and -Oconfig
45      Recipes for -O and -Os are under development.
46    - Add eliminate-dead-function transform
47    - Add strength reduction transform: For now, convert multiply by power of 2
48      to a bit shift.
49    - Add CFG cleanup transform
50    - Add removal of dead module-scope variables
51    - Add merge-return transform for modules without structured control flow
52    - Add redundancy elimination within a basic block (local value numbering)
53    - Extract-insert elimination:
54      - Recognize the case where the first instruction in the sequence is an
55        OpCompositeConstruct or OpConstantComposite
56      - Handle some cases of nested structs
57    - Dead branch elimination now can eliminate entire selection constructs
58      when all arms are dead.
59  - Compressing codec:
60    - Updated algorithm to 1.01, 1.02, 1.03
61    - Not built by default.  Use -DSPIRV_BUILD_COMPRESSION=ON to build.
62    - Codec can be parameterized by a customized model.
63  - Fixes:
64    #728: Fix decoration of inlined functions
65    #798: spirv-as should fail when given unrecognized long option
66    #800: Inliner: Fix inlining function into header of multi-block loop
67    #824: Eliminate-local-multi-store: Fix a crash
68    #826: Elimiante-local-multi-store: Fix a crash
69    #827: Fix crash when compact-ids transform runs before another transform.
70    #834: Add Cmake option to build the compressing codec. Off by default.
71    #911: Fix classification of Line and NoLine instructions
72
73 v2017.0 2017-09-01
74  - Update README to describe that assembler, disassembler, and binary parser support
75    are based on grammar files from the SPIRV-Headers repository.
76
77 v2016.7 2017-09-01
78  - Add SPIR-V 1.2
79  - OpenCL 2.2 support is now based on SPIR-V 1.2
80  - Support AMD extensions in assembler, disassembler:
81     SPV_AMD_gcn_shader
82     SPV_AMD_shader_ballot
83     SPV_AMD_shader_explicit_vertex_parameter
84     SPV_AMD_shader_trinary_minmax
85     SPV_AMD_gpu_shader_half_float
86     SPV_AMD_texture_gather_bias_lod
87     SPV_AMD_gpu_shader_int16
88  - Optimizer: Add support for:
89    - Inline all function calls in entry points.
90    - Flatten decoration groups.  Fixes #602
91    - Id compaction (minimize Id bound).  Fixes #624
92    - Eliminate redundant composite insert followed by extract
93    - Simplify access chains to local variables
94    - Eliminate local variables with a single store, if possible
95    - Eliminate local variables with a several stores, if possible
96    - Eliminate loads and stores in same block to local variables
97    - Eliminate redundant insert/extract to composite values
98    - Aggressive dead instruction elimination
99    - Eliminate dead branches
100    - Merge blocks when the second can only be preceded by the first
101    - Eliminate ommon uniform loads
102  - Assembler: Add option to preserve numeric ids. Fixes #625
103  - Add build target spirv-tools-vimsyntax to generate spvasm.vim, a SPIR-V
104    assembly syntax file for Vim.
105  - Version string: Allow overriding of wall clock timestamp with contents
106    of environment variable SOURCE_DATE_EPOCH.
107  - Validator implements relaxed rules for SPV_KHR_16bit_storage.
108  - CMake installation rules use GNUInstallDirs.  For example, libraries
109    will be installed into a lib64 directory if that's the norm for the
110    current system.
111  - Fixes:
112    #500: Parameterize validator limit checks
113    #508: Support compilation under CYGWIN
114    #517: Fix validation when continue (or case) contstruct is also the head of a
115      nested control construct.
116    #551: If a merge block is reachable, it must be *strictly* dominated by its
117      header.
118    #548: Validator: Error when the reserved OpImageSparseSampleProj* opcodes
119      are used.
120    #611: spvtools::Optimizer was failing to save the module to the output
121      binary vector when all passes succeded without changes.
122    #629: The inline-entry-points-all optimization could generate invalidly
123      structured code when the inlined function had early returns.
124    #697: Optimizer's Instruction::ForEachInId method was skipping semantics-id
125      and scope-id.
126    #755: Inliner: Fix inlining of callee with single Return appearing before
127      the end of the function.
128    #776: Fix dead branch elimination in presence of complex but dead control
129      flow.
130    #781: SPV_KHR_variable_pointers allows duplicate pointer types
131    #782: Inliner: Fix remapping of non-label forward references in callee
132    #787: Inliner: Fix remapping of inlined entry block when called from
133      single block loop.
134    #790: Inliner: Fix remapping of inlined entry block when callee has
135      multiple returns.
136
137 v2016.6 2016-12-13
138  - Published the C++ interface for assembling, disassembling, validation, and
139    optimization.
140  - Support SPV_KHR_shader_draw_parameters in assembler, disassembler, parser.
141  - Validator:
142    - Add validator API accepting raw binary words
143    - Increased coverage:
144      - Checks "Data rules" in Universal Validation Rules, section 2.16.1
145      - WIP: Universal Limits.
146        - The minimum mandated upper bounds are checked.
147        - TODO: Parameterize the validator to allow larger limits accepted by
148          a more than minimally capable implementation.
149    - OpSampledImage checks
150    - OpConstantComposite checks
151    - Id bound check
152  - Disasssembler:
153    - Generates friendly GLSL-based names for more builtin variables
154    - Generates friendly names for numeric OpConstant values
155    - Vendor tool info extracted from SPIR-V XML registry file.
156  - Fixes issues:
157    #429: Validator: Allow OpTypeForwardPointer and OpTypeStruct to reference
158      undefined IDs
159    #482: Validator: OpVariable initializer can be an ID of a module-scope variable
160
161 v2016.5 2016-09-16
162  - Support SPV_KHR_shader_ballot in assembler, disassembler, parser.
163  - Disassembler: Generate friendly names for built-in variables.
164  - Partial fixes:
165    #359: Add Emacs helper for automatically diassembling/assembling a SPIR-V
166      binary on file load/save.
167  - Fixes:
168    #414: Validator: Allow OpUndef for composite constants
169    #415: Validator: Phi can use its own value in some cases.
170
171 v2016.4 2016-09-01
172  - Relicensed under Apache 2.0
173  - Add optimization passes (in API and spirv-opt command)
174    - Fold spec constants defined with OpSpecConstantOp and
175        OpSpecConstantComposite to normal constants with fixed value(s).
176  - Fixes issues:
177    #318: Relicensed under Apache 2.0
178
179 v2016.3 2016-08-24
180  - Add target environment enums for OpenCL 2.1, OpenCL 2.2,
181    OpenGL 4.0, OpenGL 4.1, OpenGL 4.2, OpenGL 4.3, OpenGL 4.5.
182  - Add spirv-cfg, an experimental tool to dump the control flow graph
183    as a GraphiViz "dot" graph
184  - Add optimization pass: Eliminate dead constants.
185  - Add spirv-lesspipe.sh filter utility
186  - Fixes issues:
187    #288: Check def-use dominance rules for OpPhi (variable,parent) operands
188    #339: Allow OpUndef in types-constants-global-vars section, as required
189      by SPIR-V 1.0 Rev7, 1.1 Rev 3.
190    #340: Avoid race on mkdir during build
191    #365: Relax PointSize, ClipDistance, CullDistance capability check in all
192      environments not just Vulkan 1.0.
193
194 v2016.2 2016-08-05
195  - Validator is incomplete
196    - Checks ID use block is dominated by definition block
197  - Add optimization passes (in API and spirv-opt command)
198    - Strip debug info instructions
199    - Freeze spec constant to their default values
200  - Allow INotEqual as operation for OpSpecConstantOp
201  - Fixes bugs:
202    #270: validator: crash when continue construct is unreachable
203    #279: validator: infinite loop when analyzing some degenerate control
204      flow graphs
205    #286: validator: don't incorrectly generate def-use error for
206          (variable,parent) parameters to OpPhi
207    #290: disassembler: never generate bare % for an identifier
208    #295: validator: def-use dominance check should ignore unreachable uses
209    #276: validator: allow unreachable continue constructs
210    #297: validator: allow an unreachable block to branch to a reachable
211          merge block
212
213 v2016.1 2016-07-19
214  - Fix https://github.com/KhronosGroup/SPIRV-Tools/issues/261
215    Turn off ClipDistance and CullDistance capability checks for Vulkan.
216  - The disassembler can emit friendly names based on debug info (OpName
217    instructions), and will infer somewhat friendly names for most types.
218    This is turned on by default for the spirv-dis command line tool.
219  - Updated to support SPIR-V 1.1 rev 2
220    - Input StorageClass, Sampled1D capability, and SampledBuffer capability
221      do not require Shader capability anymore.
222
223 v2016.0 2016-07-04
224
225  - Adds v<year>.<index> versioning, with "-dev" indicating
226    work in progress.  The intent is to more easly report
227    and summarize functionality when SPIRV-Tools is incorporated
228    in downstream projects.
229
230  - Summary of functionality (See the README.md for more):
231    - Supports SPIR-V 1.1 Rev 1
232    - Supports SPIR-V 1.0 Rev 5
233    - Supports GLSL std450 extended instructions 1.0 Rev 3
234    - Supports OpenCL extended instructions 1.0 Rev 2
235    - Assembler, disassembler are complete
236      - Supports floating point widths of 16, 32, 64 bits
237      - Supports integer widths up to 64 bits
238    - Validator is incomplete
239      - Checks capability requirements in most cases
240      - Checks module layout constraints
241      - Checks ID use-definition ordering constraints,
242        ignoring control flow
243      - Checks some control flow graph rules
244    - Optimizer is introduced, with few available transforms.
245    - Supported on Linux, OSX, Android, Windows
246
247  - Fixes bugs:
248    - #143: OpenCL pow and pown arguments