From 9b454a762c188abb4a191ded6f95e6afc7411d74 Mon Sep 17 00:00:00 2001 From: Sam Lantinga 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 9c24d559a4..4d21bade89 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 0b85cfd3b8..25572ee001 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 &&