From 21f1c575b3febdf14ec1f66084ade4a7058764f4 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Mon, 20 Oct 2025 13:22:48 -0500 Subject: [PATCH] tests: Add a semi-transparent single pixel buffer test Now that we have a glClear() region optimization for opaque solid surfaces, we should make sure we test transparent solid surfaces as well. Signed-off-by: Derek Foreman --- ...ingle-pixel-buffer-semi-transparent-00.png | Bin 0 -> 833 bytes tests/single-pixel-buffer-test.c | 40 ++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 tests/reference/single-pixel-buffer-semi-transparent-00.png diff --git a/tests/reference/single-pixel-buffer-semi-transparent-00.png b/tests/reference/single-pixel-buffer-semi-transparent-00.png new file mode 100644 index 0000000000000000000000000000000000000000..47fd365241eda57d79e5ec2a50c9903ba9f068c0 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX5Ps$$$P@Hb9Ck$=lt9;Xep2*t>i(0|V1H zPZ!6KiaBquI`ST35OHx-2yNi%32_L0z^Hz;X?fNGX4^k|O56^{#eMsC%g%hkOG8_R zAM+a&eGUkyC2$BEv~WrsV&O?-YBOMTo-v4pPk(9Hyzl+5D-;=8jEv+0%jvw@) sOTd9SGvx}d?UKJNoY2EQI1)--pe_62+wA?TfO&$!)78&qol`;+087m56aWAK literal 0 HcmV?d00001 diff --git a/tests/single-pixel-buffer-test.c b/tests/single-pixel-buffer-test.c index c1c296fd7..29fc71a08 100644 --- a/tests/single-pixel-buffer-test.c +++ b/tests/single-pixel-buffer-test.c @@ -111,6 +111,46 @@ TEST(solid_buffer_argb_u32) return RESULT_OK; } +TEST(solid_buffer_argb_u32_semi_transparent) +{ + struct client *client; + struct wp_viewport *viewport; + struct wl_buffer *buffer; + int done; + bool match; + + client = create_client(); + client->surface = create_test_surface(client); + viewport = client_create_viewport(client); + wp_viewport_set_destination(viewport, 128, 128); + + buffer = wp_single_pixel_buffer_manager_v1_create_u32_rgba_buffer(client->single_pixel_manager, + 0xcfffffff, /* r */ + 0x8fffffff, /* g */ + 0x4fffffff, /* b */ + 0x7fffffff /* a */); + test_assert_ptr_not_null(buffer); + + weston_test_move_surface(client->test->weston_test, + client->surface->wl_surface, + 64, 64); + wl_surface_attach(client->surface->wl_surface, buffer, 0, 0); + wl_surface_damage_buffer(client->surface->wl_surface, 0, 0, 1, 1); + frame_callback_set(client->surface->wl_surface, &done); + wl_surface_commit(client->surface->wl_surface); + frame_callback_wait(client, &done); + + match = verify_screen_content(client, "single-pixel-buffer-semi-transparent", 0, + NULL, 0, NULL, NO_DECORATIONS); + test_assert_true(match); + + wl_buffer_destroy(buffer); + wp_viewport_destroy(viewport); + client_destroy(client); + + return RESULT_OK; +} + TEST(solid_buffer_argb_u32_scaled) { struct client *client;