Revision history for SPIRV-Tools 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 . 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