mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-23 12:10:06 +00:00
1075 lines
52 KiB
Plaintext
1075 lines
52 KiB
Plaintext
Revision history for SPIRV-Tools
|
|
|
|
v2020.4-dev 2020-05-27
|
|
- Start v2020.4-dev
|
|
|
|
v2020.3 2020-05-27
|
|
- General
|
|
- Prevent Effcee install his things when build spirv-tools with testing enabled (#3256)
|
|
- Update acorn version (#3294)
|
|
- If SPIRV-Headers is in our tree, include it as subproject (#3299)
|
|
- allow cross compiling for Windows Store, UWP, etc. (#3330)
|
|
- Optimizer
|
|
- Remove deprecated interfaces from instrument passes (#3361)
|
|
- Preserve debug info in inline pass (#3349)
|
|
- Handle more cases in dead member elim (#3289)
|
|
- Preserve debug info in eliminate-dead-functions (#3251)
|
|
- Fix Struct CFG analysis for single block loop (#3293)
|
|
- Add tests for recently added command line option (#3297)
|
|
- Consider sampled images as read-only storage (#3295)
|
|
- Allow various validation options to be passed to spirv-opt (#3314)
|
|
- Add debug information analysis (#3305)
|
|
- Preserve debug info for wrap-opkill (#3331)
|
|
- refactor inlining pass (#3328)
|
|
- Add unrolling to performance passes (#3082)
|
|
- Validator
|
|
- Add validation support for ImageGatherBiasLodAMD (#3363)
|
|
- Validate ShaderCallKHR memory scope (#3332)
|
|
- Validate Buffer and BufferBlock apply only to struct types (#3259)
|
|
- Reduce
|
|
- increase default step limit (#3327)
|
|
- Remove unused uniforms and similar (#3321)
|
|
- Fuzz
|
|
- Add support for StorageBuffer (#3348)
|
|
- Add validator options (#3254)
|
|
- Limit adding of new variables to 'basic' types (#3257)
|
|
- Transformation to add OpConstantNull (#3273)
|
|
- Handling of more fuzzing opportunities (#3277, #3280, #3281, #3290, #3292)
|
|
- Respect rules for OpSampledImage (#3287)
|
|
- Do not outline regions that produce pointer outputs (#3291)
|
|
- Linker
|
|
|
|
v2020.2 2020-03-26
|
|
- General:
|
|
- Support extended instructions in the vscode language server
|
|
- Make spvOpcodeString part of the public API (#3174)
|
|
- Added guide to writing a spirv-fuzz fuzzer pass (#3190)
|
|
- Add support for KHR_ray_{query,tracing} extensions (#3235)
|
|
- Optimizer
|
|
- Debug Printf support (#3215)
|
|
- Add data structure for DebugScope, DebugDeclare in spirv-opt (#3183)
|
|
- Fix identification of Vulkan images and buffers (#3253)
|
|
- Validator
|
|
- Add support for SPV_AMD_shader_image_load_store_lod (#3186)
|
|
- Add validation rules for OpenCL.DebugInfo.100 extension (#3133)
|
|
- Adding WebGPU specific Workgroup scope rule (#3204)
|
|
- Disallow phis of images, samplers and sampled images (#3246)
|
|
- Reduce
|
|
- Fuzz
|
|
- Fuzzer passes to add local and global variables (#3175)
|
|
- Add fuzzer passes to add loads/stores (#3176)
|
|
- Fuzzer pass to add function calls (#3178)
|
|
- Fuzzer pass that adds access chains (#3182)
|
|
- Fuzzer pass to add equation instructions (#3202)
|
|
- Add swap commutable operands transformation (#3205)
|
|
- Add fuzzer pass to permute function parameters (#3212)
|
|
- Allow OpPhi operand to be replaced with a composite synonym (#3221)
|
|
- Linker
|
|
|
|
v2020.1 2020-02-03
|
|
- General:
|
|
- Add support for SPV_KHR_non_semantic_info (#3110)
|
|
- Support OpenCL.DebugInfo.100 extended instruction set (#3080)
|
|
- Added support for Vulkan 1.2
|
|
- Add API function to better handle getting the necessary environment (#3142)
|
|
- Clarify mapping of target env to SPIR-V version (#3150)
|
|
- Implement constant folding for many transcendentals (#3166)
|
|
- Optimizer
|
|
- Change default version for CreatInstBindlessCheckPass to 2 (#3096, #3119)
|
|
- Better handling of OpLine on merge blocks (#3130)
|
|
- Use dummy switch instead of dummy loop in MergeReturn pass. (#3151)
|
|
- Handle TimeAMD in AmdExtensionToKhrPass. (#3168)
|
|
- Validator
|
|
- Fix structured exit validation (#3141)
|
|
- Reduce
|
|
- Fuzz
|
|
- Fuzzer pass to merge blocks (#3097)
|
|
- Transformation to add a new function to a module (#3114)
|
|
- Add fuzzer pass to perform module donation (#3117)
|
|
- Fuzzer passes to create and branch to new dead blocks (#3135)
|
|
- Fuzzer pass to add composite types (#3171)
|
|
- Linker:
|
|
- Remove names and decorations of imported symbols (#3081)
|
|
|
|
v2019.5 2019-12-11
|
|
- General:
|
|
- Export SPIRV-Tools targets on installation
|
|
- SPIRV-Tools support for SPIR-V 1.5 (#2865)
|
|
- Add WebGPU SPIR-V Assembler in JavaScript. (#2876)
|
|
- Add Bazel build configuration. (#2891)
|
|
- Add support for building with emscripten (#2948)
|
|
- Update SPIR-V binary header test for SPIR-V 1.5 (#2967)
|
|
- Add fuzzer for spirv-as call path (#2976)
|
|
- Improved CMake install step. (#2963)
|
|
- Add fuzzer for spirv-dis call path (#2977)
|
|
- Ensure timestamp does not vary with timezone. (#2982)
|
|
- Add a vscode extension for SPIR-V disassembly files (#2987)
|
|
- Add iOS as a supported platform (#3001)
|
|
- utils/vscode: Add SPIR-V language server support
|
|
- Respect CMAKE_INSTALL_LIBDIR in installed CMake files (#3054)
|
|
- Permit the debug instructions in WebGPU SPIR-V (#3063)
|
|
- Add support for Fuchsia. (#3062)
|
|
- Optimizer
|
|
- Add descriptor array scalar replacement (#2742)
|
|
- Add pass to wrap OpKill in a function call (#2790)
|
|
- Fold FMix during constant folding. (#2818)
|
|
- Add pass to replace AMD shader ballot extension (#2811)
|
|
- Add pass to make Float32 operation relax precision (#2808)
|
|
- Add pass to make relax precision operation Float16 (#2808)
|
|
- Add pass to replace uses of 3 AMD extensions (#2814)
|
|
- Fold Min, Max, and Clamp instructions. (#2836)
|
|
- Better handling of OpKill in continues (#2842,#2922,#2933)
|
|
- Enable OpTypeCooperativeMatrix specialization (#2927)
|
|
- Support constant-folding UConvert and SConvert (#2960)
|
|
- Update Offset to ConstOffset bitmask if operand is constant. (#3024)
|
|
- Improve RegisterSizePasses (#3059)
|
|
- Folding: perform add and sub on mismatched integer types (#3084)
|
|
- Graphics robust access: use signed clamp (#3073)
|
|
Fixes:
|
|
- Instrument: Fix version 2 output record write for tess eval shaders. (#2782)
|
|
- Instrument: Add support for Buffer Device Address extension (#2792)
|
|
- Fix check for changed binary in API call. (#2798)
|
|
- For WebGPU<->Vulkan optimization, set correct execution environment (#2834)
|
|
- Handle OpConstantNull in copy-prop-arrays. (#2870)
|
|
- Use OpReturn* in wrap-opkill (#2886)
|
|
- Validator
|
|
- Add generic builtin validation of target (#2843)
|
|
- Extra resource interface validation (#2864)
|
|
- Adding valilidation checks for OpEntryPoint duplicate names and execution mode (#2862)
|
|
- Relaxed bitcast with pointers (#2878)
|
|
- Validate physical storage buffer restrictions (#2930)
|
|
- Add SPV_KHR_shader_clock validation (#2879, #3013)
|
|
- Validate that selections are structured (#2962)
|
|
- Disallow use of OpCompositeExtract/OpCompositeInsert with no indices (#2980)
|
|
- Check that derivatives operate on 32-bit values (#2983)
|
|
- Validate array stride does not cause overlap (#3028)
|
|
- Validate nested constructs (#3068)
|
|
Fixes:
|
|
- Fix validation of constant matrices (#2794)
|
|
- Update "remquor" validation
|
|
- Only allow previously declared forward refs in structs (#2920)
|
|
- Reduce
|
|
- Remove relaxed precision decorations (#2797)
|
|
- Reduce/fuzz: improve command line args (#2932)
|
|
- Improve remove unref instr pass (#2945)
|
|
Fixes:
|
|
- Fuzz
|
|
- Fix add-dead-break and add-dead-continue passes to respect dominance (#2838)
|
|
- Add fuzzer pass to copy objects (#2853)
|
|
- Add fuzzer pass to replace ids with synonyms (#2857)
|
|
- Allow validation during spirv-fuzz replay (#2873)
|
|
- Employ the "swarm testing" idea in spirv-fuzz (#2890)
|
|
- reduce/fuzz: improve command line args (#2932)
|
|
- option to convert shader into a form that renders red (#2934)
|
|
- Add fuzzer pass to change selection controls (#2944)
|
|
- add transformation and pass to construct composites (#2941)
|
|
- Add fuzzer pass to change loop controls (#2949)
|
|
- Add fuzzer pass to change function controls (#2951)
|
|
- Add fuzzer pass to add NoContraction decorations (#2950)
|
|
- Add missing functionality for matrix composites (#2974)
|
|
- Fuzzer pass to adjust memory access operands (#2968)
|
|
- Transformation to extract from a composite object (#2991)
|
|
- Vector shuffle transformation (#3015)
|
|
- Improve debugging facilities (#3074)
|
|
- Function outlining fuzzer pass (#3078)
|
|
|
|
|
|
v2019.4 2019-08-08
|
|
- General:
|
|
- Memory model support for SPIR-V 1.4
|
|
- Add new spirv-fuzz tool
|
|
- Add option for base branch in check_code_format.sh
|
|
- Removed MarkV and Stats code. (#2576)
|
|
- Instrument: Add version 2 of record formats (#2630)
|
|
- Linker: Better type comparison for OpTypeArray and OpTypeForwardPointer (#2580)
|
|
- Optimizer
|
|
- Bindless Validation: Instrument descriptor-based loads and stores (#2583)
|
|
- Better folding for OpSpecConstantOp (#2585, #2614)
|
|
- Add in individual flags for Vulkan <-> WebGPU passes (#2615)
|
|
- Handle nested breaks from switches. (#2624)
|
|
- Optimizer: Handle array type with OpSpecConstantOp length (#2652)
|
|
- Perform merge return with single return in loop. (#2714)
|
|
- Add --preserve-bindings and --preserve-spec-constants (#2693)
|
|
- Remove Common Uniform Elimination Pass (#2731)
|
|
- Allow ray tracing shaders in inst bindle check pass. (#2733)
|
|
- Add pass to inject code for robust-buffer-access semantics (#2771)
|
|
- Treat access chain indexes as signed in SROA (#2776)
|
|
- Handle RelaxedPrecision in SROA (#2788)
|
|
- Add descriptor array scalar replacement (#2742)
|
|
Fixes:
|
|
- Handle decorations better in some optimizations (#2716)
|
|
- Change the order branches are simplified in dead branch elim (#2728)
|
|
- Fix bug in merge return (#2734)
|
|
- SSA rewriter: Don't use trivial phis (#2757)
|
|
- Record correct dominators in merge return (#2760)
|
|
- Process OpDecorateId in ADCE (#2761)
|
|
- Fix check for unreachable blocks in merge-return (#2762)
|
|
- Handle out-of-bounds scalar replacements. (#2767)
|
|
- Don't move debug or decorations when folding (#2772)
|
|
- Protect against out-of-bounds references when folding OpCompositeExtract (#2774)
|
|
- Validator
|
|
- Validate loop merge (#2579)
|
|
- Validate construct exits (#2459)
|
|
- Validate OpenCL memory and addressing model environment rules (#2589)
|
|
- Validate OpenCL environment rules for OpTypeImage (#2606)
|
|
- Allow breaks to switch merge from nested construct (#2604)
|
|
- Validate OpenCL environment rules for OpImageWrite (#2619)
|
|
- Allow arrays of out per-primitive builtins for mesh shaders (#2617)
|
|
- Validate OpenCL rules for ImageRead and OpImageSampleExplicitLod (#2643)
|
|
- Add validation for SPV_EXT_fragment_shader_interlock (#2650)
|
|
- Add builtin validation for SPV_NV_shader_sm_builtins (#2656)
|
|
- Add validation for Subgroup builtins (#2637)
|
|
- Validate variable initializer type (#2668)
|
|
- Disallow stores to UBOs (#2651)A
|
|
- Validate Volatile memory semantics bit (#2672)
|
|
- Basic validation for Component decorations (#2679)
|
|
- Validate that in OpenGL env block variables have Binding (#2685)
|
|
- Validate usage of 8- and 16-bit types with only storage capabilities (#2704)
|
|
- Add validation for SPV_EXT_demote_to_helper_invocation (#2707)
|
|
- Extra small storage validation (#2732)
|
|
- For Vulkan, disallow structures containing opaque types (#2546)
|
|
- Validate storage class OpenCL environment rules for atomics (#2750)
|
|
- Update OpControlBarriers rules for WebGPU (#2769)
|
|
- Update OpMemoryBarriers rules for WebGPU (#2775)
|
|
- Update WebGPU validation rules of OpAtomic*s (#2777)
|
|
Fixes:
|
|
- Disallow merge targeting block with OpLoopMerge (#2610)
|
|
- Update vloadn and vstoren validation to match the OpenCL Extended
|
|
Instruction Set Specification (#2599)
|
|
- Update memory scope rules for WebGPU (#2725)
|
|
- Allow LOD ops in compute shaders with derivative group execution modes (#2752)
|
|
- Reduce
|
|
Fixes:
|
|
|
|
v2019.3 2019-05-14
|
|
- General:
|
|
- Require Python 3 since Python 2 will out of service soon.
|
|
- Add a continuous test that does memory checks using the address sanitizer.
|
|
- Fix the build files so the SPIRV_USE_SANITIZER=address build works.
|
|
- Packaging top of tree build artifacts again.
|
|
- Added support for SPIR-V 1.4. (#2550)
|
|
- 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)
|
|
- Add legalization pass to fix mismatched pointer (#2430, #2535)
|
|
- Add error messages when the input contains unknown instructions. (#2487)
|
|
- Add pass to convert from WebGPU Spir-V to Vulkan Spir-V and back. (#2495)
|
|
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.
|
|
- #2528: Fix undefined bit shift in sroa.
|
|
- #2539: Change implementation of post order CFG traversal.
|
|
- 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)
|
|
- Allow images without format for OpenCL. (#2470)
|
|
- Remove unreachable block validation (#2525)
|
|
- Reduce runtime of array layout checks (#2534)
|
|
- Add validation specific to OpExecutionModeId (#2536)
|
|
- Validate sign of int types. (#2549)
|
|
- VK_KHR_uniform_buffer_standard_layout validation (#2562)
|
|
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)
|
|
- Add passes to simplify branches (#2507)
|
|
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
|