From 979c124e57278c6f62301c7aa495f103cafa18ce Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 8 Jan 2022 16:39:36 +0000 Subject: [PATCH] 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. Resolves: https://gitlab.gnome.org/GNOME/gtk/-/issues/4616 Signed-off-by: Simon McVittie --- gdk/loaders/gdkpng.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/gdk/loaders/gdkpng.c b/gdk/loaders/gdkpng.c index b998deb144..20711210d0 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;