--- /dev/null
+From: Simon McVittie <smcv@debian.org>
+Date: Sat, 8 Jan 2022 16:39:36 +0000
+Subject: png: Correct endianness for big-endian machines
+
+libpng wants to receive samples in either RGB or RGBA order, whether
+each sample is big-endian or not. This resolves test failures in
+testsuite/gdk/memorytexture.c (and a lot of reftests) on s390x, and
+probably the PowerPC family too.
+
+Modifying the test to show the color in use and write out the PNG bytes
+to a file, and running the memorytexture test on s390x, produces a PNG
+that loads with the correct color values in GIMP (on an x86_64 machine),
+which seems like evidence that this is the correct change and not just
+compensating errors.
+
+Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/4616
+Signed-off-by: Simon McVittie <smcv@debian.org>
+Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4357
+---
+ gdk/loaders/gdkpng.c | 16 ----------------
+ 1 file changed, 16 deletions(-)
+
+diff --git a/gdk/loaders/gdkpng.c b/gdk/loaders/gdkpng.c
+index b998deb..2071121 100644
+--- a/gdk/loaders/gdkpng.c
++++ b/gdk/loaders/gdkpng.c
+@@ -222,11 +222,7 @@ gdk_load_png (GBytes *bytes,
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ if (depth == 8)
+ {
+-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ format = GDK_MEMORY_R8G8B8A8;
+-#elif G_BYTE_ORDER == G_BIG_ENDIAN
+- format = GDK_MEMORY_A8B8G8R8;
+-#endif
+ }
+ else
+ {
+@@ -236,11 +232,7 @@ gdk_load_png (GBytes *bytes,
+ case PNG_COLOR_TYPE_RGB:
+ if (depth == 8)
+ {
+-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ format = GDK_MEMORY_R8G8B8;
+-#elif G_BYTE_ORDER == G_BIG_ENDIAN
+- format = GDK_MEMORY_B8G8R8;
+-#endif
+ }
+ else if (depth == 16)
+ {
+@@ -325,22 +317,14 @@ gdk_save_png (GdkTexture *texture)
+ case GDK_MEMORY_A8R8G8B8:
+ case GDK_MEMORY_R8G8B8A8:
+ case GDK_MEMORY_A8B8G8R8:
+-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ format = GDK_MEMORY_R8G8B8A8;
+-#elif G_BYTE_ORDER == G_BIG_ENDIAN
+- format = GDK_MEMORY_A8B8G8R8;
+-#endif
+ png_format = PNG_COLOR_TYPE_RGB_ALPHA;
+ depth = 8;
+ break;
+
+ case GDK_MEMORY_R8G8B8:
+ case GDK_MEMORY_B8G8R8:
+-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ format = GDK_MEMORY_R8G8B8;
+-#elif G_BYTE_ORDER == G_BIG_ENDIAN
+- format = GDK_MEMORY_B8G8R8;
+-#endif
+ png_format = PNG_COLOR_TYPE_RGB;
+ depth = 8;
+ break;