123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777 |
- Revision history for SPIRV-Tools
- 2019.3-dev 2019-02-20
- - Start 2019.3-dev
- v2019.2 2019-02-20
- - General:
- - Support SPV_EXT_physical_storage_buffer
- - A number of memory leak have been fixed.
- - Removed use of deprecated Google test macro:
- - Changed the BUILD.gn to only build tests in Chromium.
- - Optimizer
- - Upgrade memory model improvments for modf and frexp.
- - Add a new pass to move loads closer to their uses: code sinking.
- - Invalidating the type manager now invalidates the constnat manager.
- - Expand instrumentation pass for bindless bounds checking to runtime-sized descriptor arrays.
- - Add a new pass that removes members from structs that are not used: dead member elimination.
- Fixes:
- - #2292: Remove undefined behaviour when folding bit shifts.
- - #2294: Fixes for instrumentation code.
- - #2293: Fix overflow when folding -INT_MIN.
- - #2374: Don't merge unreachable blocks when merging blocks.
- - Validator
- - Support SPV_KHR_no_integer_wrap and related decorations.
- - Validate Vulkan rules for OpTypeRuntimeArray.
- - Validate NonWritable decoration.
- - Many WebGPU specific validation rules were added.
- - Validate variable pointer related function call rules.
- - Better error messages.
- Fixes:
- - #2307: Check forwards references in OpTypeArray.
- - #2315, #2303: Fixed the layout check for relaxed layout.
- - #1628: Emit an error when an OpSwitch target is not an OpLabel.
- - Reduce
- - Added more documentation for spirv-reduce.
- - Add ability to remove OpPhi instructions.
- - Add ability to merge two basic blocks.
- - Add ability to remove unused functions and unused basic blocks.
- Fixes:
- v2019.1 2019-01-07
- - General:
- - Created a new tool called spirv-reduce.
- - Add cmake option to turn off SPIRV_TIMER_ENABLED (#2103)
- - New optimization pass to update the memory model from GLSL450 to VulkanKHR.
- - Recognize OpTypeAccelerationStructureNV as a type instruction and ray tracing storage classes.
- - Fix GCC8 build.
- - Add --target-env flag to spirv-opt.
- - Add --webgpu-mode flag to run optimizations for webgpu.
- - The output disassembled line number stead of byte offset in validation errors. (#2091)
- - Optimizer
- - Added the instrumentation passes for bindless validation.
- - Added passes to help preserve OpLine information (#2027)
- - Add basic support for EXT_fragment_invocation_density (#2100)
- - Fix invalid OpPhi generated by merge-return. (#2172)
- - Constant and type manager have been turned into analysies. (#2251)
- Fixes:
- - #2018: Don't inline functions with a return in a structured CFG contstruct.
- - #2047: Fix bug in folding when volatile stores are present.
- - #2053: Fix check for when folding floating pointer values is allowed.
- - #2130: Don't inline recursive functions.
- - #2202: Handle multiple edges between two basic blocks in SSA-rewriter.
- - #2205: Don't unswitch a latch condition during loop unswitch.
- - #2245: Don't fold branch in loop unswitch. Run dead branch elimination to fold them.
- - #2204: Fix eliminate common uniform to place OpPhi instructions correctly.
- - #2247: Fix type mismatches caused by scalar replacement.
- - #2248: Fix missing OpPhi after merge return.
- - #2211: After merge return, fix invalid continue target.
- - #2210: Fix loop invariant code motion to not place code between merge instruction and branch.
- - #2258: Handle CompositeInsert with no indices in VDCE.
- - #2261: Have replace load size handle extact with no index.
- - Validator
- - Changed the naming convention of outputing ids with names in diagnostic messages.
- - Added validation rules for UniformConstant variables in Vulkan.
- - #1949: Validate uniform variable type in Vulkan
- - Ensure for OpVariable that result type and storage class operand agree (#2052)
- - Validator: Support VK_EXT_scalar_block_layout
- - Added Vulkan memory model semantics validation
- - Added validation checkes spefic to WebGPU environment.
- - Add support for VK_EXT_Transform_feedback capabilities (#2088)
- - Add validation for OpArrayLength. (#2117)
- - Ensure that function parameter's type is not void (#2118)
- - Validate pointer variables (#2111)
- - Add check for QueueFamilyKHMR memory scope (#2144)
- - Validate PushConstants annotation and type (#2140)
- - Allow Float16/Int8 for Vulkan 1.0 (#2153)
- - Check binding annotations in resource variables (#2151, #2167)
- - Validate OpForwardPointer (#2156)
- - Validate operation for OpSpecConstantOp (#2260)
- Fixes:
- - #2049: Allow InstanceId for NV ray tracing
- - Reduce
- - Initial commit wit a few passes to reduce test cases.
- - Validation is run after each reduction step.
- Fixes:
- v2018.6 2018-11-07
- - General:
- - Added support for the Nvidia Turing and ray tracing extensions.
- - Make C++11 the CXX standard in CMakeLists.txt.
- - Enabled a parallel build for MSVC.
- - Enable pre-compiled headers for MSVC.
- - Added a code of conduct.
- - EFFCEE and RE2 are now required when build the tests.
- - Optimizer
- - Unrolling loops marked for unrolling in the legalization passes.
- - Improved the compile time of loop unrolling.
- - Changee merge-return to create a dummy loop around the function.
- - Small improvement to merge-blocks to allow it to merge more often.
- - Enforce an upper bound for the ids, and add option to set it.
- - #1966: Report error if there are unreachable block before running merge return
- Fixes:
- - #1917: Allow 0 (meaning unlimited) as a parameter to --scalar-replacement
- - #1915: Improve handling of group decorations.
- - #1942: Fix incorrect uses of the constant manager. Avoids type mismatches in generated code.
- - #1997: Fix dead branch elimination when there is a loop in folded selection.
- - #1991: Fixes legality check in if-conversion.
- - #1987: Add nullptr check to array copy propagation.
- - #1984: Better handling of OpUnreachable in ADCE.
- - #1983: Run merge return on reachable functions only.
- - #1956: Handled atomic operations in ADCE.
- - #1963: Fold integer divisions by 0 to 0.
- - #2019: Handle MemberDecorateStringGOOGLE in ADCE and strip reflect.
- - Validator
- - Added validation for OpGroupNonUniformBallotBitCount.
- - Added validation for the Vulkan memory model.
- - Added support for VK_KHR_shader_atddomic_int64.
- - Added validation for execution modes.
- - Added validation for runtime array layouts.
- - Added validation for 8-bit storage.
- - Added validation of OpPhi instructions with pointer result type.
- - Added checks for the Vulkan memory model.
- - Validate MakeTexelAvailableKHR and MakeTexelVisibleKHR
- - Allow atomic function pointer for OpenCL.
- - FPRounding mode checks were implemented.
- - Added validation for the id bound with an option to set the max id bound.
- Fixes:
- - #1882: Improve the validation of decorations to reduce memory usage.
- - #1891: Fix an potential infinite loop in dead-branch-elimination.
- - #1405: Validate the storage class of boolean objects.
- - #1880: Identify arrays of type void as invalid.
- - #487: Validate OpImageTexelPointer.
- - #1922: Validate OpPhi instructions are at the start of a block correctly.
- - #1923: Validate function scope variable are at the start of the entry block.
- v2018.5 2018-09-07
- - General:
- - Support SPV_KHR_vulkan_memory_model
- - Update Dim capabilities, to match SPIR-V 1.3 Rev 4
- - Automated build bots no run tests for the VS2013 case
- - Support Chromium GN build
- - Use Kokoro bots:
- - Disable Travis-CI bots
- - Disable AppVeyor VisualStudio Release builds. Keep VS 2017 Debug build
- - Don't check export symbols on OSX (Darwin): some installations don't have 'objdump'
- - Reorganize source files and namespaces
- - Fixes for ClangTidy, and whitespace (passes 'git cl presumit --all -uf')
- - Fix unused param compile warnings/errors when Effcee not present
- - Avoid including time headers when timer functionality is disabled
- - Avoid too-stringent warnings flags for Clang on Windows
- - Internal refactoring
- - Add hooks for automated fuzzing
- - Add testing of command line executables
- - #1688: Use binary mode on stdin; fixes "spirv-dis <foo.spv" on Windows
- - Optimizer
- - The optimizer validates the module before it begins
- - Add API to register passes by string name
- - Fold a vector shuffle feeding a vector shuffle
- - Add -combine-access-chains transform
- - Refactor how IRContext is handled by passes
- - Improve bookkeeping for instruction result type and result id
- - Fix over-duplication of decorations
- - Fix handling of exits from selections in dead-branch elimination, and dead code
- elimination.
- - Fix handling of certain kinds of flow control in merge-return
- Fixes:
- - #1721: Fix size bug when folding vector shuffles
- - #1722: Fix size infinite loop when folding vector shuffles
- - #1724: Fix finding a constant of a specific type
- - #1727: Dead branch elim: Reorder blocks if needed to satisfy dominance rule
- - #1729: Handle VariablePointers cases in various optimizations
- - #1731: Fix vector shuffle with literal id indicating undef value
- - #1736: Fix handling of decorations and phis in merge-return
- - #1787: Fix handling of decorations related to access chains
- - #1865: Avoid leaking memory for SPIR-V constant values
- - Validator
- - Improve error messages
- - Avoid platform-dependent traversal ordering, to ensure consistent messages
- - Use libspirv::Instruction where possible
- - Add option to skip all block layout checks
- - Validate all type IDs
- - Validate uses of OpFunction
- - Validate uses of OpTypeFunction
- - Disallow a struct containing its own type https://crbug.com/874372
- - #1685: Vulkan permits non-monotonic offsets for block members
- - #1697: Enforce block layout rules even when using relaxed block layout option
- - #1719: Fix line number for vector shuffle valiation error
- - #1789: Avoid assertion failure when validating some functions
- - #1800: Fix validation of OpCopyMemorySized
- - #1822: Stop enforcing struct member offset montonicity
- - #1831: Disallow void members in structs
- v2018.4 2018-07-08
- - General:
- - Support SPV_KHR_8bit_storage
- - Add gclient and presubmit configurations
- - Enable Kokoro build bots (#1625)
- - Group tests into fewer executables, reduces load on CI
- - Port test script to Python 3
- - Symbol export tests respect SPIRV_SKIP_TESTS
- - #1596: Operand lookup succeeds if enabled by a capability
- - #1624: Instruction lookup succeeds if enabled by a capability
- - Refactoring namespaces:
- - #1678: Change libspirv to spvtools
- - Code in source/utils moved into spvtools::utils
- - Code in source/comp moved into spvtools::comp
- - Optimizer:
- - Remove insert-extract-elim pass. Use simplification pass instead.
- - Preserve instruction-to-block mapping in most passes, to reduce runtime.
- - Small vector optimization for operands
- - Add pass to move Private variables to Function. Increase opportunity to optimize.
- - Fixes:
- #1120: Check static uses of entry point interfaces
- #1372: Avoid merging some structs, to preserve names for reflection
- #1577: Scalar replacement uses only undecorated types.
- #1578: Fix handling of forward-pointer types, and types embedding pointers
- to themselves.
- #1591: Inliner: Callee variable with initializer should have a store at the call site.
- #1634: Fix crash: Use type id in vector type lookup
- #1649: Fix assert in compact-ids pass
- Fix constant folder: ensure it uses the right type
- #1659: Folding rules added to IRContext. Avoids leak.
- - Validator
- - Add work-in-progress WebGPU environment. Disallows OpUndef
- - #670, #1581: Improve error messages; disassemble instruction
- - #491: Check structured switches
- - #937: Check layout rules for Block and BufferBlock in Uniform, StorageBuffer, PushConstant
- - #1281: Check invalid branches into structured constructs
- - #1522: Disallow array-of-arrays with DescriptorSets
- - #1577: Allow duplicate pointer types.
- - #1581: Better messages: output ID names along with numbers in more cases.
- - #1597: Check Vulkan 1.1 capabilities
- - #1618: Check invalid exit from structured case construct
- - #1622: Run IdPass before DataRulesPass
- - #1632: Reduce test time by artificially lowering limits in limit test
- - #1638: Block-decorated structs member order must respect offset order
- - #1657: Improve CFG validation diagnostics
- - Khronos SPIR-V #337: GLSL.std.450 Refract instruction Eta param can be any float scalar.
- - #1606: PushConstant Blocks follow storage-buffer layout rules
- - #1664: Check layout of StorageBuffer variables with Block decoration, using storage buffer
- rules
- - #1666: Layout validation should permit {vec3; float} packing
- - #1637, #1668: Layout validation uses RowMajor, ArrayStride, MatrixStride properly
- - Linker
- - Avoid buffer overrun when creating OpModuleProcessed
- v2018.3 2018-05-25
- - General:
- - Support SPV_EXT_descriptor_indexing
- - Support SPV_GOOGLE_decorate_string
- - Support SPV_GOOGLE_hlsl_functionality1
- - Support SPV_NV_shader_subgroup_partitioned
- - Use "unified1" grammar from SPIRV-Headers
- - Simplify support for new extensions. Assembler, disassembler, and simple validation
- support is automatic if new tokens are introduced with appropriate extension
- attributes in the "unified1" SPIR-V core grammar.
- - Disassembler: Emit more digits on floating point, to reliably reproduce all
- significand bits. (Use std::max_digits10 instead of std::digits10)
- - Fix compilation for old XCode versions: Explicit construction required for std::set.
- - Optimizer:
- - Add --strip-reflect
- - Add --time-report
- - Add --loop-fission
- - Add lop fusion.
- - Add loop peeling pass and internal utility.
- - Improve optimizer runtime.
- - Merge-return now works with structured control flow.
- - New (faster) SSA rewriter to convert local loads and stores to SSA IDs and phis.
- Can replace load/store elimination passes.
- - Fix instruction folding case: insertion that feeds and extract, when the extract
- remains.
- - Fold OpDot.
- - Fold OpFNegate.
- - Fold multply and divide of same value.
- - Fold FClamp feeding a compare.
- - Fold OpLoad feeding an extract, to reduce excessive copying. (#1547)
- - Fold Fmix feeding an extract.
- - Use simplification pass instead of insert-extract elimination.
- - Constant fold OpVectorTimesScalar.
- - Copy propagate arrays, in simple cases.
- - Aggressive dead code elimination: Can remove more instructions, e.g. derivatives.
- - Aggressive dead code elimination: Remove Workgroup variables that are written but not read.
- - Better handling of OpImageTexelPointer
- - Initial utilities for scalar evolution.
- - Add Vector dead code elimination.
- - Each pass can only run once.
- - Allow code hosting in if-conversion.
- - Add external interface for adding a PassToken, so external code can make their own
- passes.
- - Fixes:
- #1404: Don't optimize away the compute compute workgroup size constant.
- #1407: Remove a bad assertion
- #1456: Fix bug in SSA rewriter related to variables updated in loops.
- #1487: Fix long runtime in Dead insertion elimination: Don't revist select phi nodes.
- #1492: Aggressive dead code elimination can remove OpDecorateStringGOOGLE.
- #1527: Fix inlining of functions having OpKill and OpUnreachable.
- #1559: Fix assert failure in reduce-load-size pass.
- #1556: Aggressive dead code elimination: Fix handling of OpCopyMemory.
- - Validator:
- - Check Vulkan built-in variables
- - Check Vulkan-specific atomic result type rule.
- - Relax control barrier check for SPIR-V 1.3. Fixes #1427
- - Check OpPhi.
- - Check OpMemoryModel.
- - Stop checking sizes derived from spec-constants.
- - Re-enable checks for OpUConvert.
- - Vulkan: Fix check for PrimitiveId: Permit as Input in fragment shader.
- - Validate binary version for the given target environment.
- - Add tests for OpBranch checks.
- - Vulkan 1.1: Check scope for non-uniform subgroup operations.
- - Fix checks for SPV_AMD_gpu_shader_int16.
- - Fix logical layout check for OpDecorateId.
- - Fix checks for ViewportIndex & Layer for Vulkan and SPV_EXT_shader_viewport_index_layer.
- - Fixes:
- #1470: Vulkan: Don't restrict WorkgroupSize to Input storage class.
- #1469: Vulkan: Permit Subgroup memory scope for Vulkan 1.1.
- #1472: Per-vertex variable validation fixes.
- #1483: Valdiate barrier execution scopes for Vulkan 1.1.
- - Fixes:
- #898: Linker properly removes FuncParamAttr from imported symbols.
- #924, #1174: Fix handling of decoration groups in optimizer, linker.
- v2018.2 2018-03-07
- - General:
- - Support SPIR-V 1.3 and Vulkan 1.1.
- - Default target environment is now SPIR-V 1.3. For command-line tools,
- use the --target-env option to override the default. Examples:
- # Generate a SPIR-V 1.0 binary instead of SPIR-V 1.3
- spirv-as --target-env spv1.0 a.spvasm -o a.spv
- spirv-as --target-env vulkan1.0 a.spvasm -o a.spv
- # Validate as Vulkan 1.0
- spirv-val --target-env vulkan1.0 a.spv
- - Support SPV_GOOGLE_decorate_string and SPV_GOOGLE_hlsl_functionality1
- - Fixes:
- - Fix Android.mk build. Compilation was failing due to missing definitions of
- SpvCapabilityFloat16ImageAMD and other enumerated values.
- - Optimizer: Avoid generating duplicate names when merging types.
- - #1375: Validator: SPV_AMD_gpu_shaer_half_float implicitly allows declaration
- of the 16-bit floating point type.
- - #1376: Optimizer: Avoid folding half-precision float.
- v2018.1 2018-03-02
- - General:
- - Support Visual Studio 2013 again. (Continue support for VS 2015 and VS 2017.)
- - Support building SPIRV-Tools as a shared library.
- - Improve the HLSL legalization optimization recipe. #1311
- - Optimizer:
- - General speedups.
- - Remove generic dead code elimination functionality from transforms:
- --eliminate-local-single-block
- --eliminate-local-single-store
- --eliminate-local-multi-store
- To recover the previous behaviour, a recipe using those transforms should now
- also invoke the --eliminate-dead-code-aggressive transform.
- - Improve folding, including coverage for floating point, OpSelect, and arithmetic
- with non-trivial constant operands.
- - Add loop-invariant code motion pass.
- - Add loop-unrolling pass, for honouring unroll hits.
- - Add loop-unswitch pass.
- - Add instruction simplification pass.
- - Aggressive dead code elimination: Understands capability hierarchy when finding
- instructions it can eliminate (combinators). (PR #1268)
- - CCP can now fold floating point arithmetic. #1311
- - Validator:
- - Validate barrier instructions.
- - Check Vulkan-specific rules for atomics.
- - Check Vulkan prohibition of Location or Component decorations on BuiltIn variables.
- - Linker:
- - Add --verify-ids option
- - Add option to allow a resulting module to be partially linked.
- - Handle OpModuleProcessed (instructions in SPIR-V layout section 7c)
- - Fixes:
- - #1265: Optimizer: Fix use-after free bug in if-conversion. (Fix object lifecycle bug
- in type manager.)
- - #1282: Fix new warnings found by GCC 8.0.1.
- - #1285: Optimizer: Fix random failures during inlining. (Dangling references in DefUseManager)
- - #1295: Optimizer: Fix incorrect handling of Phi nodes in CCP.
- - #1300: Fix CCP: avoid bad CCP transitions and unsettled values.
- - #1304: Avoid static-duration variables of class type (with constructors).
- - #1323: Fix folding of an insert composite feeding a composite extract.
- - #1339: Fix CCP: Handle OpConstantNull boolean values as conditions.
- - #1341: DCEInst: Keep atomic instructions (and some others with side effects).
- - #1354: Don't fold integer division.
- - #1357: Support OpConstantNull in folding.
- - #1361: CCP: Fix handling of non-constant module-scope values
- v2018.0 2018-02-02
- - General
- - VisualStudio 2013 is no longer supported. VisualStudio 2015 is supported.
- - Use "include/unified1" directory from SPIRV-Headers. Requires recent SPIRV-Headers source.
- - Disassembler: spirv-dis adds --color option to force color disassembly.
- - Optimizer:
- - Add pass to eliminate dead insertions.
- - Aggressive dead code elimination now removes OpSwitch constructs.
- - Block merging occurs in more cases.
- - Add driver workaround transform: replace OpUnreachable with harmless branch to merge.
- - Improve instruction folding framework.
- - Add loop analysis.
- - Add scalar replacement of aggregates to size-optimization recipe.
- - Add pass to replace instructions invalid for a shader stage, with a harmless value.
- This changes the semantics of the program! Not for general use!
- - Rearragne and add passes to performance-optimization recipe, to produce better results.
- - Validator:
- - Validate OpenCL extended instructions.
- - Shaders can't perform atomics on floats.
- - Validate memory semantics values in atomics.
- - Validate instruction-adjacency constraints, e.g. OpPhi predecessors, merge instructions
- immediately precede branches.
- - Fixes:
- - PR 1198: Optimizer: Fix CCP in presence of matrix constants.
- - #1199: Optimizer: Fix CCP: don't propagate spec constants.
- - #1203: Optimizer: Fix common uniform elim bug introduced by refactoring.
- - #1210: Optimizer: Aggressive dead code elimination: Fix 'break' identification.
- - #1212: Optimizer: Aggressive dead code elimination: Was skipping too many instructions.
- - #1214: Optimizer: Aggressive dead code elimination: Fix infinite loop.
- - #1228: Optimizer: Fix CCP: Handling of varying Phi nodes; was resulting in infinite loop.
- - #1245: Optimizer: Dead branch elimination: Avoid a null pointer dereference.
- - #1250: Optimizer: Dead branch elimination: Avoid spuriously reporting a change.
- v2017.3 2018-01-12
- - General:
- - Support DebugInfo extended instruction set, targeted at OpenCL environments.
- See the SPIR-V Registry.
- - Generate a SPIRV-Tools.pc file for pkg-config.
- - Optimizer:
- - Progress for legalization of code generated from HLSL (issue #1118):
- - Add --legalize-hlsl option to run transforms used to transform intermediate
- code generated by HLSL to SPIR-V for Vulkan compilers. Those compilers
- normally run these transforms automatically. This option is used for developing
- those transforms.
- - Add Private-to-Function variable conversion for modules with logical
- addressing.
- - Add --ccp: SSA Conditional Constant Propagation (CCP)
- - Add --print-all to show disassembly for each optimization pass.
- - Internal: Add loop descriptors and post-order tree iterator.
- - Generalized dead branch elimination
- - Aggressive dead code elimination (ADCE) now removes dead functions and
- module-scope variables.
- - Vector extract/insert elimination now optimizes through some cases of
- VectorShuffle, and GLSL.std.450 Mix extended instruction.
- - Validator:
- - Add validation for GLSL.std.450 extended instruction set.
- - Check out of bounds composite accesses, where that's statically computable.
- Fixes #1112.
- - Check upper bits of literal numbers that aren't a multiple of 32-bits wide.
- - More validation of primitive instructions
- - Add optional "relaxed" checking logical addressing mode to permit some
- cases of pointer-to-pointer. Contributes to HLSL legalization (issue #1118).
- - Fixes:
- #1100: Validator: Image operand Sample can be used with OpImageSparseFetch,
- OpImageSparseRead.
- #1108: Remove duplicates transform was incorrectly removing non-duplicate
- decorations.
- #1111: Optimizer's type manager could reference deleted memory.
- #1112: Fix decoration equality check, e.g. it is now symmetric.
- #1129: Validator now disallows Dim=SupbassData for OpImageSparseRead.
- #1143: Fix CCP: Was generating incorrect code for loops.
- #1153: Fix CCP crash.
- #1154: Optimizer's internal instruction-to-block mappings were sometimes
- inconsistent.
- #1159: Fix CCP infinite loop.
- #1168: Fix dead branch elimination intermittently generating incorrect code.
- Fixes https://github.com/KhronosGroup/glslang/issues/1205
- #1186: Fix validation of PackDouble2x32 and UnpackDouble2x32
- v2017.2 2017-12-15
- - General:
- - Support OpenCL 1.2, 2.0 target environments, including embedded profiles
- - Add CONTRIBUTING.md
- - Fix exit status code for spirv-link
- - Disassember: Enable emitting ANSI colour codes to a string
- - Library avoids polluting global namespace. The libraries can export C and C++
- symbols starting with "spv", or in a C++ namespace. Add a test for this.
- - Linux release builds include debug information, for easier profiling
- - Build bots no longer test VisualStudio 2013
- - Testing dependency RE2 requires VisualStudio 2015 or later
- - Build bots check code formatting
- - Optimizer:
- - Add --skip-validation to spirv-opt
- - Add dominance tree analysis
- - Add generic value propagation engine
- - Add global redundancy elimination within a function
- - Add scalar replacement of function-scope variables of composite type
- - Aggressive dead code elimination: Remove empty loops
- - Killing an instruction notifies the IRContext
- - IRContext::KillInst deletes the instruction
- - Move CFG analysis to IRContext
- - Add constant manager
- - Fix: Don't consider derivative instructions as combinators.
- - Fix: Don't delete an instruction twice in local dead-code-elimination
- - Fix: Don't consider derivative instructions as combinators.
- - Validator:
- - Finish checking of image instructions (Section 3.32.10)
- - Check sparse image instructions
- - Check OpTypeImage, OpTypeSampleImage
- - Check composite instructions (Section 3.32.12)
- - Check atomic instructions (Section 3.32.18)
- - Check OpEmitStreamVertex, OpEndStreamPrimitive instructions
- - Re-enable validation of OpCopyObject
- - OpKill, image ImplicitLod and QueryLod instructions can only be used in Fragment
- shaders.
- - Fixes for image instruction validation:
- - Lod image operand only usable with ExplicitLod and OpImageFetch
- - ExplicitLod Lod image operand must be float scalar
- - OpImageFectch Lod image operand must be int scalar
- - OpImageGather component operand must be 32-bits (integer scalar)
- - OpImageQuerySizeLod Lod must be integer scalar
- - Fixes:
- #622: Remove names and decorations when inlining
- #989: Aggressive dead code elim: Don't optimize away live breaks from a loop
- #991: Fix validation of SPV_AMD_shader_ballot
- #1004: Use after free of an instruction, in remove-duplicates transform
- #1007: OpImageRead not required to return 4-component vector
- #1009: OpImageRead can return scalar int/float types
- #1011: OpImageWrite should allow scalar int/float texel types
- #1012: Fix validat Dref type check
- #1017: Load-store elimination considers variable initializations
- #1034: Fix Windows debug build: operator< should be a weak ordering
- #1083: Inlining: Set parent (function) for each inlined basic block.
- #1075: Aggressive dead code elimination: Was leaving dangling references to
- removed blocks.
- v2017.1 2017-11-23
- - Update README with details on the public_spirv_tools_dev@khronos.org mailing list.
- - General:
- - Automatically deploy built artifacts to GitHub Releases
- - Add a Linker (module combiner). Under development.
- - Add Android.mk for Android NDK builds.
- - Add the 'effcee' library as an optional dependency for use in tests.
- Eventually it will be a required dependency, once downstream projects have
- a chance to adjust. Requires 're2' library.
- - Avoid static-duration variables of class type (with constructors).
- - Hack around bugs in gcc-4.8.1 template handling
- - Faster opcode lookup
- - Validator:
- - Recognize extensions listed on SPIR-V registry,
- through #25 SPV_AMD_shader_fragment_mask
- - Validator issues an info message when it sees an unrecognized extension.
- - Type check basic arithmetic operations
- - Type check carry/extended arithmetic operations
- - Type check vector arithmetic operations
- - Type check Relational and Logical instructions
- - Type check Bit instructions
- - Check type uniqueness rules
- - Check conversion instructions
- - Check image instructions
- - Check derivative instructions
- - Check OpVectorShuffle
- - Check OpBranchConditional
- - OpModuleProcessed is only allowed after debug names section and before annotations
- section.
- - Checks the right kind of return is called for each function (void or non-void).
- - Add option to relax type check when storing structs (--relax-store-struct)
- - Optimizer:
- - Refactoring internal representation of the module, including:
- - IRContext: owns a module and manages analyses
- - Instructions are owned by intrusive lists, and have unique IDs
- - BasicBlock owns its instruction list.
- - DefUseManager: change representation of uses, for faster processing
- on large modules.
- - Add high level recipes: -O, -Os, and -Oconfig
- Recipes for -O and -Os are under development.
- - Add eliminate-dead-function transform
- - Add strength reduction transform: For now, convert multiply by power of 2
- to a bit shift.
- - Add CFG cleanup transform
- - Add removal of dead module-scope variables
- - Add merge-return transform for modules without structured control flow
- - Add redundancy elimination within a basic block (local value numbering)
- - Extract-insert elimination:
- - Recognize the case where the first instruction in the sequence is an
- OpCompositeConstruct or OpConstantComposite
- - Handle some cases of nested structs
- - Dead branch elimination now can eliminate entire selection constructs
- when all arms are dead.
- - Compressing codec:
- - Updated algorithm to 1.01, 1.02, 1.03
- - Not built by default. Use -DSPIRV_BUILD_COMPRESSION=ON to build.
- - Codec can be parameterized by a customized model.
- - Fixes:
- #728: Fix decoration of inlined functions
- #798: spirv-as should fail when given unrecognized long option
- #800: Inliner: Fix inlining function into header of multi-block loop
- #824: Eliminate-local-multi-store: Fix a crash
- #826: Elimiante-local-multi-store: Fix a crash
- #827: Fix crash when compact-ids transform runs before another transform.
- #834: Add Cmake option to build the compressing codec. Off by default.
- #911: Fix classification of Line and NoLine instructions
- v2017.0 2017-09-01
- - Update README to describe that assembler, disassembler, and binary parser support
- are based on grammar files from the SPIRV-Headers repository.
- v2016.7 2017-09-01
- - Add SPIR-V 1.2
- - OpenCL 2.2 support is now based on SPIR-V 1.2
- - Support AMD extensions in assembler, disassembler:
- SPV_AMD_gcn_shader
- SPV_AMD_shader_ballot
- SPV_AMD_shader_explicit_vertex_parameter
- SPV_AMD_shader_trinary_minmax
- SPV_AMD_gpu_shader_half_float
- SPV_AMD_texture_gather_bias_lod
- SPV_AMD_gpu_shader_int16
- - Optimizer: Add support for:
- - Inline all function calls in entry points.
- - Flatten decoration groups. Fixes #602
- - Id compaction (minimize Id bound). Fixes #624
- - Eliminate redundant composite insert followed by extract
- - Simplify access chains to local variables
- - Eliminate local variables with a single store, if possible
- - Eliminate local variables with a several stores, if possible
- - Eliminate loads and stores in same block to local variables
- - Eliminate redundant insert/extract to composite values
- - Aggressive dead instruction elimination
- - Eliminate dead branches
- - Merge blocks when the second can only be preceded by the first
- - Eliminate ommon uniform loads
- - Assembler: Add option to preserve numeric ids. Fixes #625
- - Add build target spirv-tools-vimsyntax to generate spvasm.vim, a SPIR-V
- assembly syntax file for Vim.
- - Version string: Allow overriding of wall clock timestamp with contents
- of environment variable SOURCE_DATE_EPOCH.
- - Validator implements relaxed rules for SPV_KHR_16bit_storage.
- - CMake installation rules use GNUInstallDirs. For example, libraries
- will be installed into a lib64 directory if that's the norm for the
- current system.
- - Fixes:
- #500: Parameterize validator limit checks
- #508: Support compilation under CYGWIN
- #517: Fix validation when continue (or case) contstruct is also the head of a
- nested control construct.
- #551: If a merge block is reachable, it must be *strictly* dominated by its
- header.
- #548: Validator: Error when the reserved OpImageSparseSampleProj* opcodes
- are used.
- #611: spvtools::Optimizer was failing to save the module to the output
- binary vector when all passes succeded without changes.
- #629: The inline-entry-points-all optimization could generate invalidly
- structured code when the inlined function had early returns.
- #697: Optimizer's Instruction::ForEachInId method was skipping semantics-id
- and scope-id.
- #755: Inliner: Fix inlining of callee with single Return appearing before
- the end of the function.
- #776: Fix dead branch elimination in presence of complex but dead control
- flow.
- #781: SPV_KHR_variable_pointers allows duplicate pointer types
- #782: Inliner: Fix remapping of non-label forward references in callee
- #787: Inliner: Fix remapping of inlined entry block when called from
- single block loop.
- #790: Inliner: Fix remapping of inlined entry block when callee has
- multiple returns.
- v2016.6 2016-12-13
- - Published the C++ interface for assembling, disassembling, validation, and
- optimization.
- - Support SPV_KHR_shader_draw_parameters in assembler, disassembler, parser.
- - Validator:
- - Add validator API accepting raw binary words
- - Increased coverage:
- - Checks "Data rules" in Universal Validation Rules, section 2.16.1
- - WIP: Universal Limits.
- - The minimum mandated upper bounds are checked.
- - TODO: Parameterize the validator to allow larger limits accepted by
- a more than minimally capable implementation.
- - OpSampledImage checks
- - OpConstantComposite checks
- - Id bound check
- - Disasssembler:
- - Generates friendly GLSL-based names for more builtin variables
- - Generates friendly names for numeric OpConstant values
- - Vendor tool info extracted from SPIR-V XML registry file.
- - Fixes issues:
- #429: Validator: Allow OpTypeForwardPointer and OpTypeStruct to reference
- undefined IDs
- #482: Validator: OpVariable initializer can be an ID of a module-scope variable
- v2016.5 2016-09-16
- - Support SPV_KHR_shader_ballot in assembler, disassembler, parser.
- - Disassembler: Generate friendly names for built-in variables.
- - Partial fixes:
- #359: Add Emacs helper for automatically diassembling/assembling a SPIR-V
- binary on file load/save.
- - Fixes:
- #414: Validator: Allow OpUndef for composite constants
- #415: Validator: Phi can use its own value in some cases.
- v2016.4 2016-09-01
- - Relicensed under Apache 2.0
- - Add optimization passes (in API and spirv-opt command)
- - Fold spec constants defined with OpSpecConstantOp and
- OpSpecConstantComposite to normal constants with fixed value(s).
- - Fixes issues:
- #318: Relicensed under Apache 2.0
- v2016.3 2016-08-24
- - Add target environment enums for OpenCL 2.1, OpenCL 2.2,
- OpenGL 4.0, OpenGL 4.1, OpenGL 4.2, OpenGL 4.3, OpenGL 4.5.
- - Add spirv-cfg, an experimental tool to dump the control flow graph
- as a GraphiViz "dot" graph
- - Add optimization pass: Eliminate dead constants.
- - Add spirv-lesspipe.sh filter utility
- - Fixes issues:
- #288: Check def-use dominance rules for OpPhi (variable,parent) operands
- #339: Allow OpUndef in types-constants-global-vars section, as required
- by SPIR-V 1.0 Rev7, 1.1 Rev 3.
- #340: Avoid race on mkdir during build
- #365: Relax PointSize, ClipDistance, CullDistance capability check in all
- environments not just Vulkan 1.0.
- v2016.2 2016-08-05
- - Validator is incomplete
- - Checks ID use block is dominated by definition block
- - Add optimization passes (in API and spirv-opt command)
- - Strip debug info instructions
- - Freeze spec constant to their default values
- - Allow INotEqual as operation for OpSpecConstantOp
- - Fixes bugs:
- #270: validator: crash when continue construct is unreachable
- #279: validator: infinite loop when analyzing some degenerate control
- flow graphs
- #286: validator: don't incorrectly generate def-use error for
- (variable,parent) parameters to OpPhi
- #290: disassembler: never generate bare % for an identifier
- #295: validator: def-use dominance check should ignore unreachable uses
- #276: validator: allow unreachable continue constructs
- #297: validator: allow an unreachable block to branch to a reachable
- merge block
- v2016.1 2016-07-19
- - Fix https://github.com/KhronosGroup/SPIRV-Tools/issues/261
- Turn off ClipDistance and CullDistance capability checks for Vulkan.
- - The disassembler can emit friendly names based on debug info (OpName
- instructions), and will infer somewhat friendly names for most types.
- This is turned on by default for the spirv-dis command line tool.
- - Updated to support SPIR-V 1.1 rev 2
- - Input StorageClass, Sampled1D capability, and SampledBuffer capability
- do not require Shader capability anymore.
- v2016.0 2016-07-04
- - Adds v<year>.<index> versioning, with "-dev" indicating
- work in progress. The intent is to more easly report
- and summarize functionality when SPIRV-Tools is incorporated
- in downstream projects.
- - Summary of functionality (See the README.md for more):
- - Supports SPIR-V 1.1 Rev 1
- - Supports SPIR-V 1.0 Rev 5
- - Supports GLSL std450 extended instructions 1.0 Rev 3
- - Supports OpenCL extended instructions 1.0 Rev 2
- - Assembler, disassembler are complete
- - Supports floating point widths of 16, 32, 64 bits
- - Supports integer widths up to 64 bits
- - Validator is incomplete
- - Checks capability requirements in most cases
- - Checks module layout constraints
- - Checks ID use-definition ordering constraints,
- ignoring control flow
- - Checks some control flow graph rules
- - Optimizer is introduced, with few available transforms.
- - Supported on Linux, OSX, Android, Windows
- - Fixes bugs:
- - #143: OpenCL pow and pown arguments
|