diff --git a/fix-i686-build.patch b/fix-i686-build.patch new file mode 100644 index 0000000..bf38049 --- /dev/null +++ b/fix-i686-build.patch @@ -0,0 +1,90 @@ +From cf685defcd0c0026fce7ef1fc3fb79a1f1a1edaa Mon Sep 17 00:00:00 2001 +From: Sebastian Wick +Date: Mon, 8 Jan 2024 15:52:09 +0100 +Subject: [PATCH 1/2] cogl/half-float: Include SSE intrinsics + +The intel intrinsics (including SSE) are only included in the header if +the arch is x86_64 which made the i686 build fail. + +Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3234 +Fixes: 568506ecb ("cogl: Add half float implementation") +--- + cogl/cogl/cogl-half-float.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/cogl/cogl/cogl-half-float.c b/cogl/cogl/cogl-half-float.c +index be2c48b815..ae0af0a6a2 100644 +--- a/cogl/cogl/cogl-half-float.c ++++ b/cogl/cogl/cogl-half-float.c +@@ -31,6 +31,13 @@ + + #include + ++#if defined(__SSE__) || \ ++ (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || \ ++ (defined(_M_X64) && !defined(_M_ARM64EC)) ++#include ++#include ++#endif ++ + #include "cogl/cogl-half-float.h" + #include "cogl/cogl-soft-float.h" + +@@ -262,3 +269,4 @@ uint16_t cogl_uint16_div_64k_to_half (uint16_t v) + + return (e << 10) | m; + } ++ +-- +2.43.0 + + +From 0096860d715e1842d755b1229b43e848c26fb0cb Mon Sep 17 00:00:00 2001 +From: Sebastian Wick +Date: Mon, 8 Jan 2024 16:08:37 +0100 +Subject: [PATCH 2/2] cogl/bitmap-conversion: Don't break strict-aliasing for + flt_pack/unpack + +Simply reinterpreting the bytes differently is a strict-aliasing +violation if the type of the object isn't char or the target type of the +reinterpretation. None of that is the case here, so we have to resort to +a memcpy. + +Fixes: 60c082caa ("cogl/bitmap-conversion: Support packing fp16 formats") +--- + cogl/cogl/cogl-bitmap-conversion.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/cogl/cogl/cogl-bitmap-conversion.c b/cogl/cogl/cogl-bitmap-conversion.c +index 76efbb9bb9..08ecce6a4d 100644 +--- a/cogl/cogl/cogl-bitmap-conversion.c ++++ b/cogl/cogl/cogl-bitmap-conversion.c +@@ -45,16 +45,23 @@ typedef enum + MEDIUM_TYPE_FLOAT, + } MediumType; + ++_Static_assert (sizeof (uint32_t) == sizeof (GLfloat), ++ "GLfloat doesn't have a size of 4 bytes"); ++ + inline static uint32_t + pack_flt (GLfloat b) + { +- return *(uint32_t *) &b; ++ uint32_t ret; ++ memcpy (&ret, &b, sizeof (uint32_t)); ++ return ret; + } + + inline static GLfloat + unpack_flt (uint32_t b) + { +- return *(GLfloat *) &b; ++ GLfloat ret; ++ memcpy (&ret, &b, sizeof (GLfloat)); ++ return ret; + } + + #define CLAMP_NORM(b) (MAX (MIN ((b), 1.0), 0.0)) +-- +2.43.0 + diff --git a/mutter.spec b/mutter.spec index 1580c0b..d9b18a6 100644 --- a/mutter.spec +++ b/mutter.spec @@ -44,6 +44,8 @@ Patch: 0001-Revert-x11-Use-input-region-from-frame-window-for-de.patch # which solves the problems reported with #3329 alone Patch: 0001-modified-3329.patch +Patch: fix-i686-build.patch + BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.41.0 BuildRequires: pkgconfig(sm) BuildRequires: pkgconfig(libwacom)