9beb54513c
* Reimplement LCS used by spirv-diff Two improvements are made to the LCS algorithm: - The LCS algorithm is reimplemented to use a std::stack instead of being recursive. This prevents stack overflow in the LCSTest.Large test. - The LCS algorithm uses an NxM table. Previously, entries of this table were {size_t, bool, bool}, which is now packed in 32 bits. The first entry can assume a maximum value of min(N, M), which realistically for SPIR-V diff will not be larger than 1 billion instructions. This reduces memory usage of LCS by 75%. This partially reverts |
||
---|---|---|
.. | ||
.gitignore | ||
basic_autogen.cpp | ||
basic_dst.spvasm | ||
basic_src.spvasm | ||
diff_test_files_autogen.cmake | ||
different_decorations_fragment_autogen.cpp | ||
different_decorations_fragment_dst.spvasm | ||
different_decorations_fragment_src.spvasm | ||
different_decorations_vertex_autogen.cpp | ||
different_decorations_vertex_dst.spvasm | ||
different_decorations_vertex_src.spvasm | ||
extra_if_block_autogen.cpp | ||
extra_if_block_dst.spvasm | ||
extra_if_block_src.spvasm | ||
generate_tests.py | ||
index_signedness_autogen.cpp | ||
index_signedness_dst.spvasm | ||
index_signedness_src.spvasm | ||
int_vs_uint_constants_autogen.cpp | ||
int_vs_uint_constants_dst.spvasm | ||
int_vs_uint_constants_src.spvasm | ||
large_functions_large_diffs_autogen.cpp | ||
large_functions_large_diffs_dst.spvasm | ||
large_functions_large_diffs_src.spvasm | ||
large_functions_small_diffs_autogen.cpp | ||
large_functions_small_diffs_dst.spvasm | ||
large_functions_small_diffs_src.spvasm | ||
multiple_different_entry_points_autogen.cpp | ||
multiple_different_entry_points_dst.spvasm | ||
multiple_different_entry_points_src.spvasm | ||
multiple_same_entry_points_autogen.cpp | ||
multiple_same_entry_points_dst.spvasm | ||
multiple_same_entry_points_src.spvasm | ||
OpExtInst_in_dst_only_autogen.cpp | ||
OpExtInst_in_dst_only_dst.spvasm | ||
OpExtInst_in_dst_only_src.spvasm | ||
OpExtInst_in_src_only_autogen.cpp | ||
OpExtInst_in_src_only_dst.spvasm | ||
OpExtInst_in_src_only_src.spvasm | ||
README.md | ||
reordered_if_blocks_autogen.cpp | ||
reordered_if_blocks_dst.spvasm | ||
reordered_if_blocks_src.spvasm | ||
reordered_switch_blocks_autogen.cpp | ||
reordered_switch_blocks_dst.spvasm | ||
reordered_switch_blocks_src.spvasm | ||
small_functions_small_diffs_autogen.cpp | ||
small_functions_small_diffs_dst.spvasm | ||
small_functions_small_diffs_src.spvasm | ||
unrelated_shaders_autogen.cpp | ||
unrelated_shaders_dst.spvasm | ||
unrelated_shaders_src.spvasm |
Diff tests
This directory contains files used to ensure correctness of the spirv-diff
implementation. The
generate_tests.py
script takes name_src.spvasm
and name_dst.spvasm
(for each name
) and
produces unit test files in the form of name_autogen.cpp
.
The unit test files test the diff between the src and dst inputs, as well as between debug-stripped
versions of those. Additionally, based on the {variant}_TESTS
lists defined in
generate_tests.py
, extra unit tests are added to exercise different options of spirv-diff.
New tests are added simply by placing a new name_src.spvasm
and name_dst.spvasm
pair in this
directory and running generate_tests.py
. Note that this script needs the path to the spirv-diff
executable that is built.
The generate_tests.py
script additionally expects name_src.spvasm
to include a heading where the
purpose of the test is explained. This heading is parsed as a block of lines starting with ;;
at
the top of the file.