Timo Aaltonen pushed to branch debian-unstable at X Strike Force / vulkan / spirv-tools
Commits: c9450135 by Shahbaz Youssefi at 2022-06-02T11:32:38-04:00 spirv-val: Optimize struct field decoration lookup (#4809) A std::set is used instead of std::vector, where the elements are ordered by member index first. Decorations for fields are now looked up by going over the range of decorations for the member only, instead of the whole set. In an ANGLE test that generates a struct with 4096 members, validation goes down from ~140ms to ~90ms. On debug builds, the difference is more pronounced, going down from ~2.5s to ~600ms. - - - - - 044ff1aa by Junda Liu at 2022-06-08T08:36:32-04:00 spirv-val: Add support for SPV_AMD_shader_early_and_late_fragment_tests (#4812) - Update SPIR-V headers. - Add validator support. - Add validator tests. - - - - - fad68a75 by strangewiz at 2022-06-08T19:49:46+00:00 Fix usage of sprintf. (#4811) - - - - - 8f7f5024 by David Neto at 2022-06-10T17:55:45-04:00 Simplify invocation of snprintf (#4815) - - - - - 76ebfb98 by Steven Perron at 2022-06-14T13:06:38-04:00 Avoid replacing access chain with OOB access (#4819) An access chain could have a constant index that is an out of bounds access. This is valid spir-v, even if it can cause problems at runtime. However, it is not valid to have an OpCompositeExtract with an out of bounds access. This means we have to stop local-access-chain-convert from making that change. Fixes #4605 - - - - - bfc611b0 by Spencer Fricke at 2022-06-15T11:25:16-04:00 spirv-val: Label 06807 and 06808 VUID (#4817) - - - - - fbcb6cf4 by manas-kulkarni at 2022-06-16T13:54:12-04:00 Ability to fold Constant Vector times Matrix and Matrix times vector instructions (#4818) - - - - - 2eff41e7 by David Neto at 2022-06-20T10:57:44-04:00 Remove stray output to stdout from tests (#4816) - - - - - 4f321f86 by Steven Perron at 2022-06-21T11:37:34-04:00 Avoid undefined divide-by-0 (#4821) The Reciprocal function expects a divide-by-0 to return nan,and then Reciprocal will return 0. Since the divide-by-0 is actually undefined, we will identify this case early, and return 0. No new tests are needed because we already tests folding divide-by-0. Fixes #4715 - - - - - 845d98d4 by Steven Perron at 2022-06-21T19:58:21+00:00 Do not check if the binary changed if encoding is different (#4824) There is an assert that verifies that the binary did not change when the optimizer said that it did not. However, if the input binary is in big endian format, the optimizer will encode the optimized binary in little endian. This causes the assert to fail. Since we do not believe that anybody cares about a big endien formate, we will disable the assert in that case. Fixes #4722 - - - - - 76fe3521 by Steven Perron at 2022-06-21T19:59:01+00:00 Fail validation when RelaxedPrecision is applied to a type. (#4823) * Fail validation when RelaxedPrecision is applied to a type. Fixes #4723 Fixes #4725 * Fixup invalid test - - - - - c4ed5157 by PENGUINLIONG at 2022-06-23T16:01:44-04:00 Fixed crash unrolling loops with residual iterations (#4820) - - - - - 3c9fd757 by Steven Perron at 2022-06-24T15:28:06+00:00 Avoid if-conversion if both predecessors are the same (#4826) If the predecessor blocks are the same, then there is only 1 value for the OpPhi. The simplition pass will simplify it, and it causes problems for if-conversion. In these cases, if-conversion can just punt. Fixes #3554. - - - - - 37d2396c by Steven Perron at 2022-06-24T12:33:45-04:00 Fix SplitLoopHeader to handle single block loop (#4829) The code in `CFG::SplitLoopHeader` assumes the loop header is not the latch. This leads to it not being able to find the latch block. This has been fixed, and a test added. Fixes #4527 - - - - - f2dfa53a by Alastair Donaldson at 2022-06-29T09:12:09-04:00 Avoid unrolling large loops while fuzzing (#4835) Uses a preprocessor macro to bail out of unrolling loops with large iteration counts during fuzzing, to reduce the number of timeouts/memouts that arise. Related issue: #4728. - - - - - 66d88508 by Steven Perron at 2022-06-29T09:53:26-04:00 Build struct order only for the section needed when unrolling. (#4830) We currently build the structured order for all nodes reachable from the loop header when unrolling a loop. However, unrolling only needs the nodes in the loop and possibly the merge node. To avoid needless computation, I have implemented a search that will stop at the merge node. Fixes #4827 - - - - - 0b824324 by Mike at 2022-06-29T12:05:00-04:00 Fix segfault in `SpirvTools::Disassemble` when printing (#4833) When the `SPV_BINARY_TO_TEXT_OPTION_PRINT` option is specified, `spvtext` will not be created (see https://github.com/KhronosGroup/SPIRV-Tools/blob/37d2396cabe56b29d37551ea55d0d745d5748ded/source/disassemble.cpp#L117), and the attempt to dereference into its members (`spvtext->str` and `spvtext->length`) results in segmentation fault. This is fixed by first checking if `spvtext` is nulll. Co-authored-by: Steven Perron <[email protected]> - - - - - 91572e76 by Steven Perron at 2022-06-29T15:40:29-04:00 Write binary files to stdout in binary on windows. (#4834) We currently do not set stdout to binary mode when writing a binary file on Windows. This cause some extra characters to be written that mess up the output. We try to fix that. Fixes #4793 - - - - - 286e9c11 by alan-baker at 2022-06-29T23:32:20-04:00 Use structural dominance to validate cfg (#4832) * Structural dominance introduced in SPIR-V 1.6 rev2 * Changes the structured cfg validation to use structural dominance * structural dominance is based on a cfg where merge and continue declarations are counted as graph edges * Basic blocks now track structural predecessors and structural successors * Add validation for entry into a loop * Fixed an issue with inlining a single block loop * The continue target needs to be moved to the latch block * Simplify the calculation of structured exits * no longer requires block depth * Update many invalid tests - - - - - 8ec4a077 by alan-baker at 2022-06-30T13:52:50-04:00 Fix unreachable loop increment (#4836) * ANGLE builds with -Werror,-Wunreachable-code-loop-increment which had a problem with grabbing the first construct in a loop * Change the code to just use begin instead - - - - - 32622ba7 by Steven Perron at 2022-07-05T12:23:32-04:00 DCE: clean up the cfg for all functions that were processed. (#4840) Which functions are processed is determined by which ones are on the call tree from the entry points before dead code is removed. So it is possible that a function is process because it is called from an entry point, but the CFG is not cleaned up because the call to the function was removed. The fix is to process and cleanup every function in the module. Since all of the dead functions would have already been removed in an earlier step of DCE, it should not make a different in compile time. Fixes #4731 - - - - - 6803cc51 by Kevin Lubick at 2022-07-05T13:54:59-04:00 use exec_tools instead of tools for better RBE compatibility (#4837) - - - - - d5a3bfcf by Steven Perron at 2022-07-05T14:14:29-04:00 Avoid undefined behaviour when getting debug opcode (#4842) If the `instruction` operand in an extended instruction instruction is too large, it causes undefined behaviour when that value is cast to the enum for the corresponding set. This is done with the NonSemanticDebug100 instruction set. We need to avoid the undefined behaviour. Fixes #4727 - - - - - 92fe420c by Steven Perron at 2022-07-05T16:16:50-04:00 Reduce load size does not work for array with spec const size (#4845) Arrays do not have to have a size that is known at compile time. It could be a spec constant. In these cases, treat the array as if it is arbitrarily long. This commit will treat it like it is an array of size UINT32_MAX. Fixes https://crbug.com/oss-fuzz/47397. - - - - - 5f4284aa by Steven Perron at 2022-07-05T20:12:58-04:00 Add limit for scalar replacment when fuzzing (#4843) The fuzzer cretes code with very large array, and scalar replacement times out. Adding a limit on the size of the composites that will be split when fuzzing. Fixes https://crbug.com/oss-fuzz/48630 - - - - - dcee3a5d by David Neto at 2022-07-06T15:10:29-04:00 Update validator diagnostics with "structurally dominated" (#4844) The updated rules in SPIR-V 1.6 Rev2 use structural dominance, so update the messages to match - - - - - 05de6503 by alan-baker at 2022-07-06T17:43:32-04:00 Use structural reachability in CFG checks (#4849) Fixes https://crbug.com/oss-fuzz48578 * Adds structural reachability to basic blocks * calculated in same manner as reachability, but using structural successors * Change structured CFG validation to use structural reachability instead of reachability * Fix some invalid reducer cases - - - - - bc5c8760 by Spencer Fricke at 2022-07-07T13:03:52-04:00 spirv-val: Add Vulkan decoration interface (#4831) - - - - - 69e1deab by Greg Fischer at 2022-07-08T13:11:22-04:00 Fix small bug traversing users in interface_var_sroa (#4850) Fix code that is traversing def-use user structure at the same time that it is changing it. This is dicey at best and error prone at worst. This was uncovered making a change to the id_to_user representation. - - - - - faa8d6a6 by Greg Fischer at 2022-07-12T13:14:47-06:00 Revert "Optimize DefUseManager allocations (#4709)" (#4846) This reverts commit d18d0d92e55f44da6af0dc87fb0e3c8034e9a3ac. This is reverted because it causes a 7X slowdown when legalizing SPIR-V with NonSemantic.Shader.DebugInfo.100 instructions. This is due to the creation of very large UseLists for several heavily used operands for this extension combined with the fact that the original commit changed the performance of Uselists to O(n). - - - - - e2cf7693 by Spencer Fricke at 2022-07-13T10:05:52-04:00 spirv-val: Label VUID 06925 (#4852) - - - - - 93ebf698 by Spencer Fricke at 2022-07-15T09:55:33-04:00 spirv-val: Add OpConvertUToAccelerationStructureKHR (#4838) - - - - - 60615b8e by Pankaj Mistry at 2022-07-19T14:41:19-04:00 Implement SPV_NV_bindless_texture related changes (#4847) * Add validation for SPV_NV_bindless_texture - - - - - e4cfa190 by Spencer Fricke at 2022-07-20T10:12:58-04:00 spirv-val: Add SPV_KHR_ray_query (#4848) - - - - - 388ce0ee by Alastair Donaldson at 2022-07-26T10:56:04-04:00 spirv-as: Avoid recursion when skipping whitespace (#4866) Excessive whitespace can lead to stack overflow during parsing as each character of skipped whitespace involves a recursive call. An iterative solution avoids this. Fixes #4729. - - - - - cc5fca05 by Spencer Fricke at 2022-07-26T15:14:21-04:00 spirv-val: Fix Vulkan memory scope (#4869) - - - - - 8dc0030e by David Neto at 2022-07-28T09:40:07-04:00 spirv-as: Avoid overflow when parsing exponents on hex floats (#4874) * spirv-as: Avoid overflow when parsing exponents on hex floats When an exponent is so large that it would overflow the int type in the parser, saturate the exponent. This allows extremely large exponents, and saturates to infinity when the exponent is positive, and zero when the exponent is negative. Fixes #4721. * Avoid unexpected narrowing conversions from arithmetic operations Co-authored-by: Alastair F. Donaldson <[email protected]> - - - - - 4773879b by alan-baker at 2022-07-29T10:16:54-04:00 Update structure layout validation (#4876) * Uniform block layout rules for matrices should use extended layouts by default - - - - - a90ccc24 by Jamie Madill at 2022-07-29T18:26:37+00:00 Remove default copy constructor in header. (#4879) A recent libc++ roll in Chrome warned of a deprecated copy. We're still looking if this is a bug in libc++ or a valid warning, but removing the redundant line is a safe workaround or fix in either case. See discussion in https://crrev.com/c/3791771 - - - - - b5d0bf28 by alan-baker at 2022-07-29T15:08:48-04:00 Require ColMajor or RowMajor for matrices (#4878) Fixes #4875 * Require that matrices in laid out structs have RowMajor or ColMajor set as per SPIR-V section 2.16.2 (shader validation) - - - - - 54cd5e19 by Pankaj Mistry at 2022-07-29T19:28:27+00:00 spirv-opt : SPV_NV_bindless_texture related changes (#4870) - - - - - 08c542d3 by Spencer Fricke at 2022-08-03T10:42:13-04:00 spirv-val: Label VUID 06997 (#4881) - - - - - b362d2b7 by jeremyg-lunarg at 2022-08-04T16:44:15+00:00 spirv-diff: Fix asserts in ComparePreambleInstructions() (#4872) These asserts are not valid for string literals, which may contain several words: assert(a_operand.words.size() == 1); assert(b_operand.words.size() == 1); It looks like they only make sense for the default case, which assumes that both operands contain a single word. Running a debug version of spirv-diff on any shader containing a string literal will hit the original asserts. - - - - - 5e61ea20 by Nathan Gauër at 2022-08-08T13:49:17-04:00 Update CHANGES (#4886) - - - - - f20e8d05 by Spencer Fricke at 2022-08-08T14:45:04-04:00 spirv-val: Add SPV_KHR_ray_tracing instructions (#4871) - - - - - ed3b9c83 by Steven Perron at 2022-08-09T17:33:04+00:00 Local access chain convert: check for negative indexes (#4884) An access chain instruction interpretes its index operands as signed. The composite insert and extract instruction interpret their index operands as unsigned, so it is not possible to represent a negative number. This commit adds a check to the local-access-chain-convert pass to check for a negative number in the access chain and to not do the conversion. Fixes #4856 - - - - - 0ebcdc4d by Nathan Gauër at 2022-08-09T14:10:36-04:00 Allow spirv-opt print-all to show pretty IDs (#4888) Disassembler was called with non-default params, loosing FRIENDLY_NAMES. This commit changes the call options to allow the spirv-opt to show friendly names instead of raw-ids. Might be more helpful when reading the SPIRV-opt output. Fixes #4882 Signed-off-by: Nathan Gauër <[email protected]> - - - - - 0a43a84e by Steven Perron at 2022-08-10T09:04:35-04:00 Fix shuffle feeding shuffle with undef literal (#4883) When folding a vector shuffle with an undef literal, it is possible that the literal is adjusted so that it will then be interpreted as an index into the input operands. This is fixed by special casing that case, and not adjusting those operands. Fixes #4859 - - - - - 409e1167 by Nathan Gauër at 2022-08-11T16:25:53+00:00 Finalize SPIRV-Tools v2022.3 The previous amend to the CHANGES file mentioned v2022.4. That was a mistake as v2022.3 was never released. Signed-off-by: Nathan Gauër <[email protected]> - - - - - 0e5b4d52 by Timo Aaltonen at 2022-08-25T18:18:12+03:00 Merge branch 'upstream-unstable' into debian-unstable - - - - - a3fede36 by Timo Aaltonen at 2022-08-25T18:19:27+03:00 version bump - - - - - 9cea05c1 by Timo Aaltonen at 2022-08-25T18:21:57+03:00 release to sid - - - - - 30 changed files: - Android.mk - BUILD.bazel - BUILD.gn - CHANGES - DEPS - build_defs.bzl - debian/changelog - source/CMakeLists.txt - source/cfa.h - source/diff/diff.cpp - source/disassemble.h - source/libspirv.cpp - source/opt/aggressive_dead_code_elim_pass.cpp - source/opt/cfg.cpp - source/opt/cfg.h - source/opt/const_folding_rules.cpp - source/opt/def_use_manager.cpp - source/opt/def_use_manager.h - source/opt/dominator_tree.cpp - source/opt/folding_rules.cpp - source/opt/if_conversion.cpp - source/opt/inline_pass.cpp - source/opt/inline_pass.h - source/opt/instruction.cpp - source/opt/interface_var_sroa.cpp - source/opt/ir_loader.cpp - source/opt/local_access_chain_convert_pass.cpp - source/opt/local_access_chain_convert_pass.h - source/opt/loop_descriptor.cpp - source/opt/loop_unroller.cpp The diff was not included because it is too large. View it on GitLab: https://salsa.debian.org/xorg-team/vulkan/spirv-tools/-/compare/f463375ce35534c3ae1db84a725b276f39cff02c...9cea05c1c9cd25dca8ffa7ed935c5a0dd3c29bf3 -- View it on GitLab: https://salsa.debian.org/xorg-team/vulkan/spirv-tools/-/compare/f463375ce35534c3ae1db84a725b276f39cff02c...9cea05c1c9cd25dca8ffa7ed935c5a0dd3c29bf3 You're receiving this email because of your account on salsa.debian.org.

