12 files changed, 353 insertions(+), 43 deletions(-)
diff --git a/meson.build b/meson.build
-index 2e6cb1e..0a4b1ef 100644
+index 0c42d4c..05c71bf 100644
--- a/meson.build
+++ b/meson.build
-@@ -924,6 +924,7 @@ summary('Documentation', get_option('documentation'), section: 'Build')
+@@ -921,6 +921,7 @@ summary('Documentation', get_option('documentation'), section: 'Build')
summary('Man pages', get_option('man-pages'), section: 'Build')
summary('Testsuite', get_option('build-testsuite'), section: 'Build')
summary('Tests', get_option('build-tests'), section: 'Build')
+ install_subdir('image-data', install_dir: testexecdir)
+endif
diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build
-index e48e9a3..8ba45b8 100644
+index 7c7e3e9..77cbe47 100644
--- a/testsuite/gsk/meson.build
+++ b/testsuite/gsk/meson.build
@@ -1,12 +1,22 @@
)
compare_render_tests = [
-@@ -370,9 +380,11 @@ foreach t : tests
+@@ -380,9 +390,11 @@ foreach t : tests
test_extra_ldflags = t.get(3, [])
test_exe = executable(test_name, test_srcs,
)
test(test_name, test_exe,
-@@ -401,11 +413,12 @@ foreach t : internal_tests
+@@ -411,11 +423,12 @@ foreach t : internal_tests
test_extra_cargs = t.get(2, [])
test_extra_ldflags = t.get(3, [])
--- /dev/null
+From: Simon McVittie <smcv@debian.org>
+Date: Fri, 8 Dec 2023 16:42:56 +0000
+Subject: gsk: Always use RGBA on big-endian architectures
+
+The memorytexture test started failing on big-endian CPUs while using
+"desktop" GL (not GLES) in commit b0e26873 "gsk: Use has_bgra in more
+places". The subsequent commit f5812808 "gsk: Restore bigendian support"
+was meant to fix this, but it seems it did not.
+
+Always taking the RGBA code-path on big-endian might not be optimal,
+but it seems to result in the test passing again.
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/6260
+Bug-Debian: https://bugs.debian.org/1057782
+Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6653
+---
+ gsk/gl/gskglglyphlibrary.c | 16 +++++++++++-----
+ gsk/gl/gskgliconlibrary.c | 16 +++++++++++-----
+ 2 files changed, 22 insertions(+), 10 deletions(-)
+
+diff --git a/gsk/gl/gskglglyphlibrary.c b/gsk/gl/gskglglyphlibrary.c
+index 2e6d4da..981a5f8 100644
+--- a/gsk/gl/gskglglyphlibrary.c
++++ b/gsk/gl/gskglglyphlibrary.c
+@@ -95,6 +95,16 @@ gsk_gl_glyph_library_clear_cache (GskGLTextureLibrary *library)
+ memset (self->front, 0, sizeof self->front);
+ }
+
++static gboolean
++can_use_bgra (void)
++{
++#if G_BYTE_ORDER == G_BIG_ENDIAN
++ return FALSE;
++#else
++ return gdk_gl_context_has_bgra (gdk_gl_context_get_current ());
++#endif
++}
++
+ static void
+ gsk_gl_glyph_library_init_atlas (GskGLTextureLibrary *self,
+ GskGLTextureAtlas *atlas)
+@@ -119,11 +129,7 @@ gsk_gl_glyph_library_init_atlas (GskGLTextureLibrary *self,
+
+ memset (pixel_data, 255, sizeof pixel_data);
+
+- if (!gdk_gl_context_has_bgra (gdk_gl_context_get_current ())
+-#if G_BYTE_ORDER == G_BIG_ENDIAN
+- || gdk_gl_context_get_use_es (gdk_gl_context_get_current ())
+-#endif
+- )
++ if (!can_use_bgra ())
+ {
+ gl_format = GL_RGBA;
+ gl_type = GL_UNSIGNED_BYTE;
+diff --git a/gsk/gl/gskgliconlibrary.c b/gsk/gl/gskgliconlibrary.c
+index 9040d8e..9ea87da 100644
+--- a/gsk/gl/gskgliconlibrary.c
++++ b/gsk/gl/gskgliconlibrary.c
+@@ -71,6 +71,16 @@ gsk_gl_icon_library_init (GskGLIconLibrary *self)
+ gsk_gl_icon_data_free);
+ }
+
++static gboolean
++can_use_bgra (void)
++{
++#if G_BYTE_ORDER == G_BIG_ENDIAN
++ return FALSE;
++#else
++ return gdk_gl_context_has_bgra (gdk_gl_context_get_current ());
++#endif
++}
++
+ void
+ gsk_gl_icon_library_add (GskGLIconLibrary *self,
+ GdkTexture *key,
+@@ -111,11 +121,7 @@ gsk_gl_icon_library_add (GskGLIconLibrary *self,
+ gdk_gl_context_push_debug_group_printf (gdk_gl_context_get_current (),
+ "Uploading texture");
+
+- if (!gdk_gl_context_has_bgra (gdk_gl_context_get_current ())
+-#if G_BYTE_ORDER == G_BIG_ENDIAN
+- || gdk_gl_context_get_use_es (gdk_gl_context_get_current ())
+-#endif
+- )
++ if (!can_use_bgra ())
+ {
+ pixel_data = free_data = g_malloc (width * height * 4);
+ gdk_memory_convert (pixel_data, width * 4,