diff --git a/0001-optimizer-restore-previous-ABI.patch b/0001-optimizer-restore-previous-ABI.patch new file mode 100644 index 0000000..41b9c17 --- /dev/null +++ b/0001-optimizer-restore-previous-ABI.patch @@ -0,0 +1,85 @@ +From 76e9ab018c24eaed0bc83c83cf72bc4542e5f1ad Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 6 Dec 2021 13:49:10 +1000 +Subject: [PATCH] optimizer: restore previous ABI. + +The change in +commit 4ac8e5e541ea992dc6f44a4d4eb065a8fe0888ec +Author: Greg Fischer +Date: Wed Sep 15 12:38:34 2021 -0600 + + Add preserve_interface mode to aggressive_dead_code_elim (#4520) + +Broke the C++ ABI for spirv-tools shared libraries on Linux, for not a great reason. + +Restore the previous ABI. +--- + include/spirv-tools/optimizer.hpp | 3 ++- + source/opt/optimizer.cpp | 17 +++++++++++------ + 2 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/include/spirv-tools/optimizer.hpp b/include/spirv-tools/optimizer.hpp +index 21059cbe..a0314b5f 100644 +--- a/include/spirv-tools/optimizer.hpp ++++ b/include/spirv-tools/optimizer.hpp +@@ -519,7 +519,8 @@ Optimizer::PassToken CreateDeadInsertElimPass(); + // interface are considered live and are not eliminated. This mode is needed + // by GPU-Assisted validation instrumentation, where a change in the interface + // is not allowed. +-Optimizer::PassToken CreateAggressiveDCEPass(bool preserve_interface = false); ++Optimizer::PassToken CreateAggressiveDCEPass(); ++Optimizer::PassToken CreateAggressiveDCEPassPreserveInterface(); + + // Creates a remove-unused-interface-variables pass. + // Removes variables referenced on the |OpEntryPoint| instruction that are not +diff --git a/source/opt/optimizer.cpp b/source/opt/optimizer.cpp +index e74db26f..d5534d08 100644 +--- a/source/opt/optimizer.cpp ++++ b/source/opt/optimizer.cpp +@@ -419,22 +419,22 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { + RegisterPass(CreateSimplificationPass()); + RegisterPass(CreateDeadBranchElimPass()); + RegisterPass(CreateBlockMergePass()); +- RegisterPass(CreateAggressiveDCEPass(true)); ++ RegisterPass(CreateAggressiveDCEPassPreserveInterface()); + } else if (pass_name == "inst-desc-idx-check") { + RegisterPass(CreateInstBindlessCheckPass(7, 23, true, true)); + RegisterPass(CreateSimplificationPass()); + RegisterPass(CreateDeadBranchElimPass()); + RegisterPass(CreateBlockMergePass()); +- RegisterPass(CreateAggressiveDCEPass(true)); ++ RegisterPass(CreateAggressiveDCEPassPreserveInterface()); + } else if (pass_name == "inst-buff-oob-check") { + RegisterPass(CreateInstBindlessCheckPass(7, 23, false, false, true, true)); + RegisterPass(CreateSimplificationPass()); + RegisterPass(CreateDeadBranchElimPass()); + RegisterPass(CreateBlockMergePass()); +- RegisterPass(CreateAggressiveDCEPass(true)); ++ RegisterPass(CreateAggressiveDCEPassPreserveInterface()); + } else if (pass_name == "inst-buff-addr-check") { + RegisterPass(CreateInstBuffAddrCheckPass(7, 23)); +- RegisterPass(CreateAggressiveDCEPass(true)); ++ RegisterPass(CreateAggressiveDCEPassPreserveInterface()); + } else if (pass_name == "convert-relaxed-to-half") { + RegisterPass(CreateConvertRelaxedToHalfPass()); + } else if (pass_name == "relax-float-ops") { +@@ -764,9 +764,14 @@ Optimizer::PassToken CreateLocalMultiStoreElimPass() { + MakeUnique()); + } + +-Optimizer::PassToken CreateAggressiveDCEPass(bool preserve_interface) { ++Optimizer::PassToken CreateAggressiveDCEPass() { + return MakeUnique( +- MakeUnique(preserve_interface)); ++ MakeUnique(false)); ++} ++ ++Optimizer::PassToken CreateAggressiveDCEPassPreserveInterface() { ++ return MakeUnique( ++ MakeUnique(true)); + } + + Optimizer::PassToken CreateRemoveUnusedInterfaceVariablesPass() { +-- +2.33.1 + diff --git a/spirv-tools.spec b/spirv-tools.spec index 6fb1e1c..7d06578 100644 --- a/spirv-tools.spec +++ b/spirv-tools.spec @@ -7,13 +7,14 @@ Name: spirv-tools Version: 2021.4 -Release: 1%{?gitrel}%{?dist} +Release: 2%{?gitrel}%{?dist} Summary: API and commands for processing SPIR-V modules License: ASL 2.0 URL: https://github.com/KhronosGroup/SPIRV-Tools Source0: %url/archive/%{commit}.tar.gz#/%{name}-%{commit}.tar.gz +Patch0: 0001-optimizer-restore-previous-ABI.patch BuildRequires: cmake3 BuildRequires: gcc-c++ BuildRequires: ninja-build @@ -89,6 +90,9 @@ Development files for %{name} %{_libdir}/pkgconfig/SPIRV-Tools.pc %changelog +* Mon Dec 06 2021 Dave Airlie - 2021.4-2.20211110.git21e3f68 +- Restore previous ABI + * Tue Nov 23 2021 Dave Airlie - 2021.4-1.20211110.git21e3f68 - Update to 1.2.198.0 SDK Version