| Revision history for SPIRV-Tools |
| |
| v2019.3-dev 2019-04-03 |
| - General: |
| - Updated Python scripts to work for both Python 2 and Python 3. |
| - Add a continuous test that does memory checks using the address sanitizer. |
| - Optimizer |
| - Remove duplicates from list of interface IDs in OpEntryPoint instruction (#2449) |
| - Bindless Validation: Descriptor Initialization Check (#2419) |
| - Add option to validate after each pass (#2462) |
| Fixes: |
| - #2412: Dead memeber elimination should not change input and output variables. |
| - #2405: Fix OpDot folding of half float vectors. |
| - #2391: Dead branch elim should not fold away back edges. |
| - #2441: Removing decorations when doing constant propagation. |
| - #2455: Maintain inst to block mapping in merge return. |
| - #2453: Fix merge return in the face of breaks. |
| - #2456: Handle dead infinite loops in DCE. |
| - #2458: Handle variable pointer in some optimizations. |
| - #2452: Fix dead branch elimination to handle unreachable blocks better. |
| - Validator |
| - Add validation of storage classes for WebGPU (#2446) |
| - Add validation for ExecutionMode in WebGPU (#2443) |
| - Implement WebGPU specific CFG validation (#2386) |
| - Allow NonWritable to target struct members. (#2420) |
| - Allow storage type mismatch for parameter in relaxed addressing mode. |
| - Allow non memory objects as parameter in relaxed addressing mode. |
| - Disallow nested Blocks and buffer blocks (#2410). |
| - Add validation for SPV_NV_cooperative_matrix (#2404) |
| - Add --strip-atomic-counter-memory (#2413) |
| - Check OpSampledImage is only passed into valid instructions (#2467) |
| - Handle function decls in Structured CFG analysis (#2474) |
| - Validate that OpUnreacahble is not statically reachable (#2473) |
| - Add pass to generate needed initializers for WebGPU (#2481) |
| Fixes: |
| - #2439: Add missing DepthGreater case to Fragment only check. |
| - #2168: Disallow BufferBlock on StorageBuffer variables for Vulkan. |
| - #2408: Restrict and Aliased decorations cannot be applied to the same id. |
| - #2447: Improve function call parameter check. |
| - Reduce |
| - Add Pass to remove unreferenced blocks. (#2398) |
| - Allows passing options to the validator. (#2401) |
| - Improve reducer algorithm and other changes (#2472) |
| - Add Pass to remove selections (#2485) |
| Fixes: |
| - #2478: fix loop to selection pass for loops with combined header/continue block |
| |
| v2019.2 2019-02-20 |
| - General: |
| - Support SPV_EXT_physical_storage_buffer |
| - A number of memory leak have been fixed. |
| - Removed use of deprecated Google test macro: |
| - Changed the BUILD.gn to only build tests in Chromium. |
| - Optimizer |
| - Upgrade memory model improvments for modf and frexp. |
| - Add a new pass to move loads closer to their uses: code sinking. |
| - Invalidating the type manager now invalidates the constnat manager. |
| - Expand instrumentation pass for bindless bounds checking to runtime-sized descriptor arrays. |
| - Add a new pass that removes members from structs that are not used: dead member elimination. |
| Fixes: |
| - #2292: Remove undefined behaviour when folding bit shifts. |
| - #2294: Fixes for instrumentation code. |
| - #2293: Fix overflow when folding -INT_MIN. |
| - #2374: Don't merge unreachable blocks when merging blocks. |
| - Validator |
| - Support SPV_KHR_no_integer_wrap and related decorations. |
| - Validate Vulkan rules for OpTypeRuntimeArray. |
| - Validate NonWritable decoration. |
| - Many WebGPU specific validation rules were added. |
| - Validate variable pointer related function call rules. |
| - Better error messages. |
| Fixes: |
| - #2307: Check forwards references in OpTypeArray. |
| - #2315, #2303: Fixed the layout check for relaxed layout. |
| - #1628: Emit an error when an OpSwitch target is not an OpLabel. |
| - Reduce |
| - Added more documentation for spirv-reduce. |
| - Add ability to remove OpPhi instructions. |
| - Add ability to merge two basic blocks. |
| - Add ability to remove unused functions and unused basic blocks. |
| Fixes: |
| |
| v2019.1 2019-01-07 |
| - General: |
| - Created a new tool called spirv-reduce. |
| - Add cmake option to turn off SPIRV_TIMER_ENABLED (#2103) |
| - New optimization pass to update the memory model from GLSL450 to VulkanKHR. |
| - Recognize OpTypeAccelerationStructureNV as a type instruction and ray tracing storage classes. |
| - Fix GCC8 build. |
| - Add --target-env flag to spirv-opt. |
| - Add --webgpu-mode flag to run optimizations for webgpu. |
| - The output disassembled line number stead of byte offset in validation errors. (#2091) |
| - Optimizer |
| - Added the instrumentation passes for bindless validation. |
| - Added passes to help preserve OpLine information (#2027) |
| - Add basic support for EXT_fragment_invocation_density (#2100) |
| - Fix invalid OpPhi generated by merge-return. (#2172) |
| - Constant and type manager have been turned into analysies. (#2251) |
| Fixes: |
| - #2018: Don't inline functions with a return in a structured CFG contstruct. |
| - #2047: Fix bug in folding when volatile stores are present. |
| - #2053: Fix check for when folding floating pointer values is allowed. |
| - #2130: Don't inline recursive functions. |
| - #2202: Handle multiple edges between two basic blocks in SSA-rewriter. |
| - #2205: Don't unswitch a latch condition during loop unswitch. |
| - #2245: Don't fold branch in loop unswitch. Run dead branch elimination to fold them. |
| - #2204: Fix eliminate common uniform to place OpPhi instructions correctly. |
| - #2247: Fix type mismatches caused by scalar replacement. |
| - #2248: Fix missing OpPhi after merge return. |
| - #2211: After merge return, fix invalid continue target. |
| - #2210: Fix loop invariant code motion to not place code between merge instruction and branch. |
| - #2258: Handle CompositeInsert with no indices in VDCE. |
| - #2261: Have replace load size handle extact with no index. |
| - Validator |
| - Changed the naming convention of outputing ids with names in diagnostic messages. |
| - Added validation rules for UniformConstant variables in Vulkan. |
| - #1949: Validate uniform variable type in Vulkan |
| - Ensure for OpVariable that result type and storage class operand agree (#2052) |
| - Validator: Support VK_EXT_scalar_block_layout |
| - Added Vulkan memory model semantics validation |
| - Added validation checkes spefic to WebGPU environment. |
| - Add support for VK_EXT_Transform_feedback capabilities (#2088) |
| - Add validation for OpArrayLength. (#2117) |
| - Ensure that function parameter's type is not void (#2118) |
| - Validate pointer variables (#2111) |
| - Add check for QueueFamilyKHMR memory scope (#2144) |
| - Validate PushConstants annotation and type (#2140) |
| - Allow Float16/Int8 for Vulkan 1.0 (#2153) |
| - Check binding annotations in resource variables (#2151, #2167) |
| - Validate OpForwardPointer (#2156) |
| - Validate operation for OpSpecConstantOp (#2260) |
| Fixes: |
| - #2049: Allow InstanceId for NV ray tracing |
| - Reduce |
| - Initial commit wit a few passes to reduce test cases. |
| - Validation is run after each reduction step. |
| Fixes: |
| |
| |
| v2018.6 2018-11-07 |
| - General: |
| - Added support for the Nvidia Turing and ray tracing extensions. |
| - Make C++11 the CXX standard in CMakeLists.txt. |
| - Enabled a parallel build for MSVC. |
| - Enable pre-compiled headers for MSVC. |
| - Added a code of conduct. |
| - EFFCEE and RE2 are now required when build the tests. |
| - Optimizer |
| - Unrolling loops marked for unrolling in the legalization passes. |
| - Improved the compile time of loop unrolling. |
| - Changee merge-return to create a 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 |