SPIRV-Tools/CHANGES

636 lines
31 KiB
Plaintext
Raw Normal View History

Revision history for SPIRV-Tools
2018-09-07 15:42:12 +00:00
v2018.6-dev 2018-09-07
- Start v2018.6-dev
2018-09-07 15:40:56 +00:00
v2018.5 2018-09-07
2018-07-11 17:51:01 +00:00
- General:
2018-09-07 15:37:54 +00:00
- 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
2018-08-01 14:29:43 +00:00
- 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'
2018-07-11 17:51:01 +00:00
- 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
2018-08-01 14:29:43 +00:00
- Avoid including time headers when timer functionality is disabled
2018-09-07 15:37:54 +00:00
- Avoid too-stringent warnings flags for Clang on Windows
- Internal refactoring
- Add hooks for automated fuzzing
- Add testing of command line executables
2018-07-11 17:51:01 +00:00
- #1688: Use binary mode on stdin; fixes "spirv-dis <foo.spv" on Windows
2018-07-18 14:58:22 +00:00
- Optimizer
2018-09-07 15:37:54 +00:00
- The optimizer validates the module before it begins
2018-08-01 14:29:43 +00:00
- Add API to register passes by string name
2018-07-18 14:58:22 +00:00
- Fold a vector shuffle feeding a vector shuffle
2018-08-01 14:29:43 +00:00
- Add -combine-access-chains transform
2018-07-18 14:58:22 +00:00
- Refactor how IRContext is handled by passes
2018-08-01 14:29:43 +00:00
- Improve bookkeeping for instruction result type and result id
2018-09-07 15:37:54 +00:00
- 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:
2018-07-18 14:58:22 +00:00
- #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
2018-08-01 14:29:43 +00:00
- #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
2018-09-07 15:37:54 +00:00
- #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
2018-07-11 17:51:01 +00:00
- Validator
2018-08-01 14:29:43 +00:00
- Improve error messages
2018-09-07 15:37:54 +00:00
- Avoid platform-dependent traversal ordering, to ensure consistent messages
2018-07-11 17:51:01 +00:00
- Use libspirv::Instruction where possible
2018-07-18 14:58:22 +00:00
- Add option to skip all block layout checks
2018-09-07 15:37:54 +00:00
- Validate all type IDs
- Validate uses of OpFunction
- Validate uses of OpTypeFunction
- Disallow a struct containing its own type https://crbug.com/874372
2018-07-11 17:51:01 +00:00
- #1685: Vulkan permits non-monotonic offsets for block members
- #1697: Enforce block layout rules even when using relaxed block layout option
2018-07-18 14:58:22 +00:00
- #1719: Fix line number for vector shuffle valiation error
2018-09-07 15:37:54 +00:00
- #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
2018-07-08 16:53:46 +00:00
2018-07-08 16:50:46 +00:00
v2018.4 2018-07-08
2018-06-11 15:08:52 +00:00
- General:
2018-07-08 16:49:51 +00:00
- 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
2018-06-11 15:08:52 +00:00
- Optimizer:
- Remove insert-extract-elim pass. Use simplification pass instead.
- Preserve instruction-to-block mapping in most passes, to reduce runtime.
2018-07-08 16:49:51 +00:00
- Small vector optimization for operands
- Add pass to move Private variables to Function. Increase opportunity to optimize.
2018-06-11 15:08:52 +00:00
- Fixes:
2018-07-08 16:49:51 +00:00
#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.
2018-06-11 15:08:52 +00:00
#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.
2018-07-08 16:49:51 +00:00
#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.
2018-06-11 15:08:52 +00:00
- Validator
2018-07-08 16:49:51 +00:00
- 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
2018-06-11 15:08:52 +00:00
- #1577: Allow duplicate pointer types.
- #1581: Better messages: output ID names along with numbers in more cases.
2018-07-08 16:49:51 +00:00
- #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
2018-05-26 02:14:30 +00:00
2018-05-26 02:12:25 +00:00
v2018.3 2018-05-25
2018-04-06 20:42:56 +00:00
- 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)
2018-05-26 01:58:26 +00:00
- Fix compilation for old XCode versions: Explicit construction required for std::set.
2018-04-06 20:42:56 +00:00
- Optimizer:
- Add --strip-reflect
- Add --time-report
2018-05-26 01:58:26 +00:00
- Add --loop-fission
- Add lop fusion.
- Add loop peeling pass and internal utility.
- Improve optimizer runtime.
2018-04-06 20:42:56 +00:00
- 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.
2018-05-26 01:58:26 +00:00
- 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.
2018-04-06 20:42:56 +00:00
- Copy propagate arrays, in simple cases.
2018-05-26 01:58:26 +00:00
- Aggressive dead code elimination: Can remove more instructions, e.g. derivatives.
- Aggressive dead code elimination: Remove Workgroup variables that are written but not read.
2018-04-06 20:42:56 +00:00
- Better handling of OpImageTexelPointer
- Initial utilities for scalar evolution.
2018-05-26 01:58:26 +00:00
- 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.
2018-04-06 20:42:56 +00:00
- 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.
2018-05-26 01:58:26 +00:00
- Check OpMemoryModel.
2018-04-06 20:42:56 +00:00
- Stop checking sizes derived from spec-constants.
- Re-enable checks for OpUConvert.
2018-05-26 01:58:26 +00:00
- 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.
2018-04-06 20:42:56 +00:00
- Fixes:
#898: Linker properly removes FuncParamAttr from imported symbols.
#924, #1174: Fix handling of decoration groups in optimizer, linker.
2018-03-07 22:13:18 +00:00
2018-03-07 22:11:50 +00:00
v2018.2 2018-03-07
2018-03-07 22:10:13 +00:00
- General:
2018-03-07 22:11:50 +00:00
- 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
2018-03-07 22:10:13 +00:00
- 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.
2018-03-02 19:11:58 +00:00
2018-03-02 19:10:43 +00:00
v2018.1 2018-03-02
2018-02-06 16:47:44 +00:00
- General:
- Support Visual Studio 2013 again. (Continue support for VS 2015 and VS 2017.)
2018-02-27 16:48:40 +00:00
- Support building SPIRV-Tools as a shared library.
- Improve the HLSL legalization optimization recipe. #1311
2018-02-06 16:47:44 +00:00
- Optimizer:
2018-02-27 16:48:40 +00:00
- General speedups.
2018-03-02 19:01:28 +00:00
- 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.
2018-02-27 16:48:40 +00:00
- Add loop-invariant code motion pass.
- Add loop-unrolling pass, for honouring unroll hits.
- Add loop-unswitch pass.
- Add instruction simplification pass.
2018-02-06 16:47:44 +00:00
- Aggressive dead code elimination: Understands capability hierarchy when finding
instructions it can eliminate (combinators). (PR #1268)
2018-02-27 16:48:40 +00:00
- CCP can now fold floating point arithmetic. #1311
2018-02-06 16:47:44 +00:00
- Validator:
- Validate barrier instructions.
2018-02-27 16:48:40 +00:00
- Check Vulkan-specific rules for atomics.
2018-03-02 19:01:28 +00:00
- 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)
2018-02-06 16:47:44 +00:00
- Fixes:
- #1265: Optimizer: Fix use-after free bug in if-conversion. (Fix object lifecycle bug
in type manager.)
2018-02-27 16:48:40 +00:00
- #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).
2018-03-02 19:01:28 +00:00
- #1354: Don't fold integer division.
- #1357: Support OpConstantNull in folding.
- #1361: CCP: Fix handling of non-constant module-scope values
2018-02-02 16:27:07 +00:00
2018-02-02 16:25:58 +00:00
v2018.0 2018-02-02
2018-02-02 16:23:33 +00:00
- General
- VisualStudio 2013 is no longer supported. VisualStudio 2015 is supported.
- Use "include/unified1" directory from SPIRV-Headers. Requires recent SPIRV-Headers source.
2018-01-30 22:47:00 +00:00
- Disassembler: spirv-dis adds --color option to force color disassembly.
- Optimizer:
2018-01-30 22:47:00 +00:00
- 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.
2018-02-02 16:23:33 +00:00
- 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.
2018-01-30 22:47:00 +00:00
- Validator:
2018-02-02 16:23:33 +00:00
- Validate OpenCL extended instructions.
2018-01-30 22:47:00 +00:00
- Shaders can't perform atomics on floats.
2018-02-02 16:23:33 +00:00
- Validate memory semantics values in atomics.
- Validate instruction-adjacency constraints, e.g. OpPhi predecessors, merge instructions
immediately precede branches.
2018-01-12 23:52:42 +00:00
- Fixes:
- PR 1198: Optimizer: Fix CCP in presence of matrix constants.
2018-01-17 03:52:39 +00:00
- #1199: Optimizer: Fix CCP: don't propagate spec constants.
- #1203: Optimizer: Fix common uniform elim bug introduced by refactoring.
2018-01-30 22:47:00 +00:00
- #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.
2018-01-12 18:33:43 +00:00
2018-01-12 18:32:04 +00:00
v2017.3 2018-01-12
2017-12-19 22:50:01 +00:00
- General:
2018-01-12 18:32:04 +00:00
- Support DebugInfo extended instruction set, targeted at OpenCL environments.
See the SPIR-V Registry.
- Generate a SPIRV-Tools.pc file for pkg-config.
2017-12-19 22:50:01 +00:00
- Optimizer:
2018-01-12 18:32:04 +00:00
- 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.
2017-12-19 22:50:01 +00:00
- Validator:
2018-01-12 18:32:04 +00:00
- Add validation for GLSL.std.450 extended instruction set.
- Check out of bounds composite accesses, where that's statically computable.
Fixes #1112.
2017-12-19 22:50:01 +00:00
- Check upper bits of literal numbers that aren't a multiple of 32-bits wide.
- More validation of primitive instructions
2018-01-12 18:32:04 +00:00
- Add optional "relaxed" checking logical addressing mode to permit some
cases of pointer-to-pointer. Contributes to HLSL legalization (issue #1118).
2017-12-19 22:50:01 +00:00
- Fixes:
#1100: Validator: Image operand Sample can be used with OpImageSparseFetch,
2018-01-12 18:32:04 +00:00
OpImageSparseRead.
2017-12-19 22:50:01 +00:00
#1108: Remove duplicates transform was incorrectly removing non-duplicate
decorations.
2018-01-12 18:32:04 +00:00
#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
2017-12-15 23:24:41 +00:00
2017-12-15 23:21:55 +00:00
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:
2017-12-15 23:21:55 +00:00
- 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:
2017-12-15 23:21:55 +00:00
#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
2017-12-15 23:21:55 +00:00
#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.
2017-11-23 23:16:41 +00:00
v2017.1 2017-11-23
- Update README with details on the public_spirv_tools_dev@khronos.org mailing list.
2017-09-26 15:30:57 +00:00
- 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.
2017-09-26 15:30:57 +00:00
- 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
2017-09-26 15:30:57 +00:00
- 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)
2017-09-26 15:30:57 +00:00
- 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
2017-09-26 15:30:57 +00:00
- 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
2017-09-26 15:30:57 +00:00
#824: Eliminate-local-multi-store: Fix a crash
#826: Elimiante-local-multi-store: Fix a crash
2017-09-27 14:03:20 +00:00
#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
2017-09-01 20:28:22 +00:00
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.
2017-09-01 20:14:25 +00:00
v2016.7 2017-09-01
2017-03-14 16:43:41 +00:00
- 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
2017-04-20 19:54:10 +00:00
- 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.
2017-05-12 21:35:18 +00:00
#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.
2017-08-30 18:25:23 +00:00
#776: Fix dead branch elimination in presence of complex but dead control
flow.
2017-09-01 14:15:42 +00:00
#781: SPV_KHR_variable_pointers allows duplicate pointer types
2017-08-30 03:22:07 +00:00
#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.
2016-12-13 16:49:50 +00:00
2016-12-13 16:49:09 +00:00
v2016.6 2016-12-13
2016-09-16 20:12:04 +00:00
- Published the C++ interface for assembling, disassembling, validation, and
optimization.
- Support SPV_KHR_shader_draw_parameters in assembler, disassembler, parser.
2016-12-13 16:49:09 +00:00
- 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
2016-12-13 16:49:09 +00:00
#482: Validator: OpVariable initializer can be an ID of a module-scope variable
2016-09-16 20:40:00 +00:00
2016-09-16 20:39:40 +00:00
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:
2016-09-14 19:22:47 +00:00
#414: Validator: Allow OpUndef for composite constants
#415: Validator: Phi can use its own value in some cases.
2016-09-01 19:38:53 +00:00
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
2016-08-24 15:18:16 +00:00
2016-08-24 15:17:07 +00:00
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
2016-08-24 15:17:07 +00:00
#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.
2016-08-05 21:10:36 +00:00
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
2016-07-19 19:04:43 +00:00
2016-07-19 19:03:52 +00:00
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.
2016-07-19 19:03:52 +00:00
- Updated to support SPIR-V 1.1 rev 2
- Input StorageClass, Sampled1D capability, and SampledBuffer capability
do not require Shader capability anymore.
2016-07-04 19:13:08 +00:00
2016-06-02 19:29:13 +00:00
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
2016-06-02 19:29:13 +00:00
- 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