From eda5aea351abfb73d0b87c33f271a3d1ed2e508add2d806e9b696d7828b7c68f Mon Sep 17 00:00:00 2001 From: Petr Gajdos Date: Tue, 18 Jul 2023 11:22:51 +0000 Subject: [PATCH] Accepting request 1099245 from home:Guillaume_G:branches:graphics - Add patch to fix regression on non-SSE architectures https://github.com/AcademySoftwareFoundation/openexr/issues/1460: * 1488.patch - Also disable 'DWA[AB]Compression' test on aarch64 as the patch above fixes the issue for all targets, except aarch64 OBS-URL: https://build.opensuse.org/request/show/1099245 OBS-URL: https://build.opensuse.org/package/show/graphics/openexr?expand=0&rev=101 --- 1488.patch | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ openexr.changes | 9 ++++++ openexr.spec | 6 ++++ 3 files changed, 97 insertions(+) create mode 100644 1488.patch diff --git a/1488.patch b/1488.patch new file mode 100644 index 0000000..a6852fd --- /dev/null +++ b/1488.patch @@ -0,0 +1,82 @@ +From 1461a92d198a8d7586bbb7a5f1c99311a175a223 Mon Sep 17 00:00:00 2001 +From: Kimball Thurston +Date: Sat, 15 Jul 2023 10:38:22 +1200 +Subject: [PATCH] Revert pre-computed values + +It would appear the precomputed values cause differences from the +specific computed values on other architectures. + +Signed-off-by: Kimball Thurston +--- + src/lib/OpenEXRCore/internal_dwa_simd.h | 46 ++++++++++++------------- + 1 file changed, 23 insertions(+), 23 deletions(-) + +diff --git a/src/lib/OpenEXRCore/internal_dwa_simd.h b/src/lib/OpenEXRCore/internal_dwa_simd.h +index 6432c5fb3..64399ebf8 100644 +--- a/src/lib/OpenEXRCore/internal_dwa_simd.h ++++ b/src/lib/OpenEXRCore/internal_dwa_simd.h +@@ -871,13 +871,13 @@ dctInverse8x8DcOnly (float* data) + static inline void + dctInverse8x8_scalar (float* data, int zeroedRows) + { +- const float a = 0.35355362513961314f;//.5f * cosf (3.14159f / 4.0f); +- const float b = 0.4903926563794112f;//.5f * cosf (3.14159f / 16.0f); +- const float c = 0.4619398297234211f;//.5f * cosf (3.14159f / 8.0f); +- const float d = 0.4157349443626743f;//.5f * cosf (3.f * 3.14159f / 16.0f); +- const float e = 0.2777854612564676f;//.5f * cosf (5.f * 3.14159f / 16.0f); +- const float f = 0.19134217585694352f;//.5f * cosf (3.f * 3.14159f / 8.0f); +- const float g = 0.09754573032714427f;//.5f * cosf (7.f * 3.14159f / 16.0f); ++ const float a = .5f * cosf (3.14159f / 4.0f); ++ const float b = .5f * cosf (3.14159f / 16.0f); ++ const float c = .5f * cosf (3.14159f / 8.0f); ++ const float d = .5f * cosf (3.f * 3.14159f / 16.0f); ++ const float e = .5f * cosf (5.f * 3.14159f / 16.0f); ++ const float f = .5f * cosf (3.f * 3.14159f / 8.0f); ++ const float g = .5f * cosf (7.f * 3.14159f / 16.0f); + + float alpha[4], beta[4], theta[4], gamma[4]; + +@@ -1868,7 +1868,7 @@ dctInverse8x8_avx_7 (float* data) + // Default implementation + // + +-void ++static void + dctForward8x8 (float* data) + { + float A0, A1, A2, A3, A4, A5, A6, A7; +@@ -1877,20 +1877,20 @@ dctForward8x8 (float* data) + float* srcPtr = data; + float* dstPtr = data; + +- const float c1 = 0.9807853127588224f;//cosf (3.14159f * 1.0f / 16.0f); +- const float c2 = 0.9238796594468422f;//cosf (3.14159f * 2.0f / 16.0f); +- const float c3 = 0.8314698887253485f;//cosf (3.14159f * 3.0f / 16.0f); +- const float c4 = 0.7071072502792263f;//cosf (3.14159f * 4.0f / 16.0f); +- const float c5 = 0.5555709225129352f;//cosf (3.14159f * 5.0f / 16.0f); +- const float c6 = 0.38268435171388704f;//cosf (3.14159f * 6.0f / 16.0f); +- const float c7 = 0.19509146065428853f;//cosf (3.14159f * 7.0f / 16.0f); +- +- const float c1Half = 0.4903926563794112f;//.5f * c1; +- const float c2Half = 0.4619398297234211f;//.5f * c2; +- const float c3Half = 0.4157349443626743f;//.5f * c3; +- const float c5Half = 0.2777854612564676f;//.5f * c5; +- const float c6Half = 0.19134217585694352f;//.5f * c6; +- const float c7Half = 0.09754573032714427f;//.5f * c7; ++ const float c1 = cosf (3.14159f * 1.0f / 16.0f); ++ const float c2 = cosf (3.14159f * 2.0f / 16.0f); ++ const float c3 = cosf (3.14159f * 3.0f / 16.0f); ++ const float c4 = cosf (3.14159f * 4.0f / 16.0f); ++ const float c5 = cosf (3.14159f * 5.0f / 16.0f); ++ const float c6 = cosf (3.14159f * 6.0f / 16.0f); ++ const float c7 = cosf (3.14159f * 7.0f / 16.0f); ++ ++ const float c1Half = .5f * c1; ++ const float c2Half = .5f * c2; ++ const float c3Half = .5f * c3; ++ const float c5Half = .5f * c5; ++ const float c6Half = .5f * c6; ++ const float c7Half = .5f * c7; + + // + // First pass - do a 1D DCT over the rows and write the diff --git a/openexr.changes b/openexr.changes index 864ea66..97a6caf 100644 --- a/openexr.changes +++ b/openexr.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Tue Jul 18 08:08:13 UTC 2023 - Guillaume GARDET + +- Add patch to fix regression on non-SSE architectures + https://github.com/AcademySoftwareFoundation/openexr/issues/1460: + * 1488.patch +- Also disable 'DWA[AB]Compression' test on aarch64 as the patch + above fixes the issue for all targets, except aarch64 + ------------------------------------------------------------------- Tue Jun 27 11:38:56 UTC 2023 - pgajdos@suse.com diff --git a/openexr.spec b/openexr.spec index f2426bf..d09577e 100644 --- a/openexr.spec +++ b/openexr.spec @@ -30,6 +30,8 @@ Group: Development/Libraries/C and C++ URL: https://www.openexr.com/ Source0: https://github.com/openexr/openexr/archive/v%{version}.tar.gz Source2: baselibs.conf +# PATCH-FIX-UPSTREAM - https://github.com/AcademySoftwareFoundation/openexr/issues/1460 +Patch0: 1488.patch BuildRequires: cmake >= 3.12 BuildRequires: freeglut-devel BuildRequires: gcc-c++ @@ -172,6 +174,10 @@ export LD_LIBRARY_PATH="%{buildroot}/%{_libdir}" # bsc#1205885 EXCLUDE_REGEX='testMultiTiledPartThreading' %endif +%ifarch aarch64 +# https://github.com/AcademySoftwareFoundation/openexr/issues/1460 +EXCLUDE_REGEX='DWA[AB]Compression' +%endif %ctest --exclude-regex "$EXCLUDE_REGEX" --timeout 3600 %endif %endif