SDL: Revert "testautomation: don't validate alpha values on XRGB formats"

From 9b454a762c188abb4a191ded6f95e6afc7411d74 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 20 Jan 2025 11:40:04 -0800
Subject: [PATCH] Revert "testautomation: don't validate alpha values on XRGB
 formats"

This reverts commit 759e01bd649ed60e1fd4f801b23d37a0a915fbae.

It's better to return the expected format from SDL_RenderReadPixels() than skip alpha testing.
---
 src/render/SDL_render.c      | 18 ++++++++++++++++--
 test/testautomation_render.c |  7 +------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 9c24d559a4c59..4d21bade893d2 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -5006,8 +5006,22 @@ SDL_Surface *SDL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect)
         SDL_PropertiesID props = SDL_GetSurfaceProperties(surface);
 
         if (renderer->target) {
-            SDL_SetFloatProperty(props, SDL_PROP_SURFACE_SDR_WHITE_POINT_FLOAT, renderer->target->SDR_white_point);
-            SDL_SetFloatProperty(props, SDL_PROP_SURFACE_HDR_HEADROOM_FLOAT, renderer->target->HDR_headroom);
+            SDL_Texture *target = renderer->target;
+            SDL_Texture *parent = SDL_GetPointerProperty(SDL_GetTextureProperties(target), SDL_PROP_TEXTURE_PARENT_POINTER, NULL);
+            SDL_PixelFormat expected_format = (parent ? parent->format : target->format);
+
+            SDL_SetFloatProperty(props, SDL_PROP_SURFACE_SDR_WHITE_POINT_FLOAT, target->SDR_white_point);
+            SDL_SetFloatProperty(props, SDL_PROP_SURFACE_HDR_HEADROOM_FLOAT, target->HDR_headroom);
+
+            // Set the expected surface format
+            if ((surface->format == SDL_PIXELFORMAT_ARGB8888 && expected_format == SDL_PIXELFORMAT_XRGB8888) ||
+                (surface->format == SDL_PIXELFORMAT_RGBA8888 && expected_format == SDL_PIXELFORMAT_RGBX8888) ||
+                (surface->format == SDL_PIXELFORMAT_ABGR8888 && expected_format == SDL_PIXELFORMAT_XBGR8888) ||
+                (surface->format == SDL_PIXELFORMAT_BGRA8888 && expected_format == SDL_PIXELFORMAT_BGRX8888)) {
+printf("changing format\n");
+                surface->format = expected_format;
+                surface->fmt = SDL_GetPixelFormatDetails(expected_format);
+            }
         } else {
             SDL_SetFloatProperty(props, SDL_PROP_SURFACE_SDR_WHITE_POINT_FLOAT, renderer->SDR_white_point);
             SDL_SetFloatProperty(props, SDL_PROP_SURFACE_HDR_HEADROOM_FLOAT, renderer->HDR_headroom);
diff --git a/test/testautomation_render.c b/test/testautomation_render.c
index 0b85cfd3b89e7..25572ee001a6c 100644
--- a/test/testautomation_render.c
+++ b/test/testautomation_render.c
@@ -897,12 +897,7 @@ static void testBlendModeOperation(TestRenderOperation op, int mode, SDL_PixelFo
     deltaR = SDL_abs((int)actualR - expectedR);
     deltaG = SDL_abs((int)actualG - expectedG);
     deltaB = SDL_abs((int)actualB - expectedB);
-    if (SDL_ISPIXELFORMAT_ALPHA(dst_format)) {
-        deltaA = SDL_abs((int)actualA - expectedA);
-    } else {
-        // The alpha channel is ignored in non-alpha formats, so don't validate it
-        deltaA = 0;
-    }
+    deltaA = SDL_abs((int)actualA - expectedA);
     SDLTest_AssertCheck(
         deltaR <= MAXIMUM_ERROR &&
         deltaG <= MAXIMUM_ERROR &&