From 4505f8111125f861d8e039f26a0f062ead4aa043 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Wed, 11 Mar 2020 17:43:44 +0200 Subject: [PATCH] tests: add viewport test for repeat mode This test ensures that "pixman-renderer: half-fix bilinear sampling on edges" keeps on working. Unlike in the original report https://gitlab.freedesktop.org/wayland/weston/issues/373, here we use buffer scale 2 instead of output scale 2 to trigger bilinear filter. The effect is the same, the actual resulting image in the failing case is just a little different. This is so that it will be easy to add more viewport screenshooting tests in this program in the future. Signed-off-by: Pekka Paalanen --- tests/meson.build | 1 + tests/reference/viewport_upscale_solid-00.png | Bin 0 -> 829 bytes tests/viewporter-shot-test.c | 89 ++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 tests/reference/viewport_upscale_solid-00.png create mode 100644 tests/viewporter-shot-test.c diff --git a/tests/meson.build b/tests/meson.build index 714903f2..231746c1 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -185,6 +185,7 @@ tests = [ 'dep_objs': dep_vertex_clipping, }, { 'name': 'viewporter', }, + { 'name': 'viewporter-shot', }, ] tests_standalone = [ diff --git a/tests/reference/viewport_upscale_solid-00.png b/tests/reference/viewport_upscale_solid-00.png new file mode 100644 index 0000000000000000000000000000000000000000..71f438e79b8d6e1d5a8b89013516a6173a4a7b81 GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX5Ps$$$P@Hb9Ck$=lt9;Xep2*t>i(0|V11 zPZ!6KiaBrZY~*YS5O8qx*Kt$M-dU#e;Fs~PvNsQvUo_9GNt}E%bFgnj@Q1m$Q*~61z7~+SUMIeqiu)^>bP0l+XkK&mQXW literal 0 HcmV?d00001 diff --git a/tests/viewporter-shot-test.c b/tests/viewporter-shot-test.c new file mode 100644 index 00000000..b4f389c6 --- /dev/null +++ b/tests/viewporter-shot-test.c @@ -0,0 +1,89 @@ +/* + * Copyright 2014, 2016, 2020 Collabora, Ltd. + * Copyright 2020 Zodiac Inflight Innovations + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "config.h" + +#include +#include +#include + +#include "weston-test-client-helper.h" +#include "weston-test-fixture-compositor.h" + +static const enum renderer_type renderers[] = { + RENDERER_PIXMAN, + RENDERER_GL, +}; + +static enum test_result_code +fixture_setup(struct weston_test_harness *harness, + const enum renderer_type *renderer) +{ + struct compositor_setup setup; + + compositor_setup_defaults(&setup); + setup.renderer = *renderer; + setup.shell = SHELL_TEST_DESKTOP; + + return weston_test_harness_execute_as_client(harness, &setup); +} +DECLARE_FIXTURE_SETUP_WITH_ARG(fixture_setup, renderers); + + +TEST(viewport_upscale_solid) +{ + struct client *client; + struct wp_viewport *viewport; + pixman_color_t color; + const int width = 256; + const int height = 100; + bool match; + + color_rgb888(&color, 255, 128, 0); + + client = create_client(); + client->surface = create_test_surface(client); + viewport = client_create_viewport(client); + + client->surface->buffer = create_shm_buffer_a8r8g8b8(client, 2, 2); + fill_image_with_color(client->surface->buffer->image, &color); + + /* Needs output scale != buffer scale to hit bilinear filter. */ + wl_surface_set_buffer_scale(client->surface->wl_surface, 2); + + wp_viewport_set_destination(viewport, width, height); + client->surface->width = width; + client->surface->height = height; + + move_client(client, 19, 19); + + match = verify_screen_content(client, "viewport_upscale_solid", 0, + NULL, 0); + assert(match); + + wp_viewport_destroy(viewport); + client_destroy(client); +}