From 76980e10a0dd5b69dba41eaa5a6d2acc6bc3cef1 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 2 Oct 2024 00:24:09 +0200 Subject: [PATCH 1/3] Revert "tools: Drop support for the gl renderer" This reverts commit fd02afa2e4458e64e689f74364123ac13e4752b6. We don't want to remove the GL renderer from our tools yet, because we use those tools for manual testing and having it available is useful. In particular, reinstate the GL renderer for rendernode-tool benchmark. --- tools/gtk-rendernode-tool-utils.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/gtk-rendernode-tool-utils.c b/tools/gtk-rendernode-tool-utils.c index 9e8da7f2ef..deab3e36fc 100644 --- a/tools/gtk-rendernode-tool-utils.c +++ b/tools/gtk-rendernode-tool-utils.c @@ -89,6 +89,9 @@ get_renderer_for_name (const char *renderer_name) #endif else if (g_ascii_strcasecmp (renderer_name, "cairo") == 0) return gsk_cairo_renderer_new (); + else if (g_ascii_strcasecmp (renderer_name, "opengl") == 0 || + g_ascii_strcasecmp (renderer_name, "gl") == 0) + return gsk_gl_renderer_new (); else if (g_ascii_strcasecmp (renderer_name, "ngl") == 0) return gsk_ngl_renderer_new (); #ifdef GDK_RENDERING_VULKAN From 7a1e5b4418bfaa7ffdb1de7bdd2a3a386d8a0457 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 2 Oct 2024 01:15:35 +0200 Subject: [PATCH 2/3] compare-render: Add a KEEP_BOUNDS flag If that flag is set, we keep the bounds of the original node when rendering the modified node. Gets around the replay test having to draw a transparent color node to ensure the same bounds. --- testsuite/gsk/compare-render.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c index 2d1aa25e62..5efa30550c 100644 --- a/testsuite/gsk/compare-render.c +++ b/testsuite/gsk/compare-render.c @@ -459,18 +459,6 @@ replay_create_test (GskRenderNode *node, /* Check that the node didn't grow. */ if (!graphene_rect_contains_rect (&node_bounds, &result_bounds)) g_test_fail_printf ("Node bounds grew"); - else if (!graphene_rect_equal (&node_bounds, &result_bounds)) - { - GskRenderNode *nodes[2]; - - /* Add a transparent color node to pad the bounds */ - nodes[0] = gsk_color_node_new (&(GdkRGBA) { 0,0,0,0 }, - &node_bounds); - nodes[1] = result; - result = gsk_container_node_new (nodes, 2); - gsk_render_node_unref (nodes[0]); - gsk_render_node_unref (nodes[1]); - } return result; } @@ -583,11 +571,17 @@ colorflip_create_reference (GskRenderer *renderer, return result; } +typedef enum +{ + KEEP_BOUNDS = (1 << 0), +} TestFlags; + typedef struct _TestSetup TestSetup; struct _TestSetup { const char *name; const char *description; + TestFlags flags; gpointer (* setup) (GskRenderNode *node); void (* free) (gpointer data); GskRenderNode * (* create_test) (GskRenderNode *node, @@ -631,6 +625,7 @@ static const TestSetup test_setups[] = { { .name = "replay", .description = "Do replay test", + .flags = KEEP_BOUNDS, .create_test = replay_create_test, .create_reference = NULL, }, @@ -659,8 +654,17 @@ run_single_test (const TestSetup *setup, { GskRenderNode *test; GdkTexture *reference, *rendered, *diff; + graphene_rect_t test_bounds, *render_bounds; gpointer test_data; + if (setup->flags & KEEP_BOUNDS) + { + gsk_render_node_get_bounds (org_test, &test_bounds); + render_bounds = &test_bounds; + } + else + render_bounds = NULL; + if (setup->setup) test_data = setup->setup (org_test); else @@ -674,7 +678,7 @@ run_single_test (const TestSetup *setup, else test = gsk_render_node_ref (org_test); - rendered = gsk_renderer_render_texture (renderer, test, NULL); + rendered = gsk_renderer_render_texture (renderer, test, render_bounds); save_image (rendered, file_name, setup->name, ".out.png"); if (setup->create_reference) From 6847c3469d70cd1cb783585d11a4d5fa8872737e Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 2 Oct 2024 01:24:29 +0200 Subject: [PATCH 3/3] testsuite: Keep bounds for clip tests The hope here is that it makes clip tests more reproducible because the coordinates in device pixels are still the same as before. --- testsuite/gsk/compare-render.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c index 5efa30550c..3ab9cc0ebe 100644 --- a/testsuite/gsk/compare-render.c +++ b/testsuite/gsk/compare-render.c @@ -505,20 +505,18 @@ clip_create_reference (GskRenderer *renderer, { const cairo_rectangle_int_t *int_clip = data; GskRenderNode *texture_node, *reference_node; - graphene_rect_t clip_rect; + graphene_rect_t texture_bounds, clip_rect; GdkTexture *result; gsk_rect_from_cairo (&clip_rect, int_clip); + texture_bounds = GRAPHENE_RECT_INIT (0, + 0, + gdk_texture_get_width (texture), + gdk_texture_get_height (texture)); - texture_node = gsk_texture_node_new (texture, - &GRAPHENE_RECT_INIT ( - 0, - 0, - gdk_texture_get_width (texture), - gdk_texture_get_height (texture) - )); + texture_node = gsk_texture_node_new (texture, &texture_bounds); reference_node = gsk_clip_node_new (texture_node, &clip_rect); - result = gsk_renderer_render_texture (renderer, reference_node, NULL); + result = gsk_renderer_render_texture (renderer, reference_node, &texture_bounds); gsk_render_node_unref (reference_node); gsk_render_node_unref (texture_node); @@ -632,6 +630,7 @@ static const TestSetup test_setups[] = { { .name = "clip", .description = "Do clip test", + .flags = KEEP_BOUNDS, .setup = clip_setup, .free = g_free, .create_test = clip_create_test,