From 8312ee0ebea6fad22490fd3aef17132cc259ac25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Mon, 25 Dec 2017 12:56:21 +0100 Subject: [PATCH] testsuite: Add selected gl renderer test node files --- testsuite/gsk/compare-render.c | 137 ++++++++++++++++++ testsuite/gsk/meson.build | 37 +++++ .../gsk/outset_shadow_blurred_offset.gl.png | Bin 0 -> 118 bytes .../gsk/outset_shadow_blurred_offset.node | Bin 0 -> 208 bytes .../gsk/outset_shadow_blurred_simple.gl.png | Bin 0 -> 1405 bytes .../gsk/outset_shadow_blurred_simple.node | Bin 0 -> 208 bytes .../gsk/outset_shadow_blurred_simple2.gl.png | Bin 0 -> 344 bytes .../gsk/outset_shadow_blurred_simple2.node | Bin 0 -> 208 bytes .../gsk/outset_shadow_blurred_small.gl.png | Bin 0 -> 114 bytes .../gsk/outset_shadow_blurred_small.node | Bin 0 -> 208 bytes .../gsk/outset_shadow_offset_both.gl.png | Bin 0 -> 712 bytes testsuite/gsk/outset_shadow_offset_both.node | Bin 0 -> 208 bytes testsuite/gsk/outset_shadow_offsetx.gl.png | Bin 0 -> 391 bytes testsuite/gsk/outset_shadow_offsetx.node | Bin 0 -> 208 bytes testsuite/gsk/outset_shadow_offsety.gl.png | Bin 0 -> 385 bytes testsuite/gsk/outset_shadow_offsety.node | Bin 0 -> 208 bytes testsuite/gsk/outset_shadow_rounded1.gl.png | Bin 0 -> 360 bytes testsuite/gsk/outset_shadow_rounded1.node | Bin 0 -> 208 bytes testsuite/gsk/outset_shadow_rounded2.gl.png | Bin 0 -> 360 bytes testsuite/gsk/outset_shadow_rounded2.node | Bin 0 -> 208 bytes .../gsk/outset_shadow_rounded_top.gl.png | Bin 0 -> 256 bytes testsuite/gsk/outset_shadow_rounded_top.node | Bin 0 -> 208 bytes testsuite/gsk/outset_shadow_simple.gl.png | Bin 0 -> 396 bytes testsuite/gsk/outset_shadow_simple.node | Bin 0 -> 208 bytes 24 files changed, 174 insertions(+) create mode 100644 testsuite/gsk/compare-render.c create mode 100644 testsuite/gsk/outset_shadow_blurred_offset.gl.png create mode 100644 testsuite/gsk/outset_shadow_blurred_offset.node create mode 100644 testsuite/gsk/outset_shadow_blurred_simple.gl.png create mode 100644 testsuite/gsk/outset_shadow_blurred_simple.node create mode 100644 testsuite/gsk/outset_shadow_blurred_simple2.gl.png create mode 100644 testsuite/gsk/outset_shadow_blurred_simple2.node create mode 100644 testsuite/gsk/outset_shadow_blurred_small.gl.png create mode 100644 testsuite/gsk/outset_shadow_blurred_small.node create mode 100644 testsuite/gsk/outset_shadow_offset_both.gl.png create mode 100644 testsuite/gsk/outset_shadow_offset_both.node create mode 100644 testsuite/gsk/outset_shadow_offsetx.gl.png create mode 100644 testsuite/gsk/outset_shadow_offsetx.node create mode 100644 testsuite/gsk/outset_shadow_offsety.gl.png create mode 100644 testsuite/gsk/outset_shadow_offsety.node create mode 100644 testsuite/gsk/outset_shadow_rounded1.gl.png create mode 100644 testsuite/gsk/outset_shadow_rounded1.node create mode 100644 testsuite/gsk/outset_shadow_rounded2.gl.png create mode 100644 testsuite/gsk/outset_shadow_rounded2.node create mode 100644 testsuite/gsk/outset_shadow_rounded_top.gl.png create mode 100644 testsuite/gsk/outset_shadow_rounded_top.node create mode 100644 testsuite/gsk/outset_shadow_simple.gl.png create mode 100644 testsuite/gsk/outset_shadow_simple.node diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c new file mode 100644 index 0000000000..f83e4e0650 --- /dev/null +++ b/testsuite/gsk/compare-render.c @@ -0,0 +1,137 @@ +#include +#include +#include +#include +#include "reftest-compare.h" + +char * +file_replace_extension (const char *old_file, + const char *old_ext, + const char *new_ext) +{ + GString *file = g_string_new (NULL); + + if (g_str_has_suffix (old_file, old_ext)) + g_string_append_len (file, old_file, strlen (old_file) - strlen (old_ext)); + else + g_string_append (file, old_file); + + g_string_append (file, new_ext); + + return g_string_free (file, FALSE); +} + +static char * +get_output_file (const char *file, + const char *orig_ext, + const char *new_ext) +{ + const char *dir; + char *result, *base; + char *name; + + dir = g_get_tmp_dir (); + base = g_path_get_basename (file); + name = file_replace_extension (base, orig_ext, new_ext); + + result = g_strconcat (dir, G_DIR_SEPARATOR_S, name, NULL); + + g_free (base); + g_free (name); + + return result; +} + +static void +save_image (cairo_surface_t *surface, + const char *test_name, + const char *extension) +{ + char *filename = get_output_file (test_name, ".node", extension); + + g_test_message ("Storing test result image at %s", filename); + g_assert (cairo_surface_write_to_png (surface, filename) == CAIRO_STATUS_SUCCESS); + g_free (filename); +} + +/* + * Arguments: + * 1) .node file to compare + * 2) .png file to compare the rendered .node file to + */ +int +main (int argc, char **argv) +{ + cairo_surface_t *reference_surface = NULL; + cairo_surface_t *rendered_surface = NULL; + cairo_surface_t *diff_surface = NULL; + GdkTexture *texture; + GskRenderer *renderer; + GdkWindow *window; + GskRenderNode *node; + const char *node_file; + const char *png_file; + + g_assert (argc == 3); + + gtk_init (); + + node_file = argv[1]; + png_file = argv[2]; + + window = gdk_window_new_toplevel (gdk_display_get_default(), 10 , 10); + renderer = gsk_renderer_new_for_window (window); + + g_test_message ("Node file: '%s'\n", node_file); + g_test_message ("PNG file: '%s'\n", png_file); + + /* Load the render node from the given .node file */ + { + GBytes *bytes; + GError *error = NULL; + gsize len; + char *contents; + + if (!g_file_get_contents (node_file, &contents, &len, &error)) + { + g_test_message ("Could not open node file: %s\n", error->message); + g_clear_error (&error); + g_test_fail (); + return -1; + } + + bytes = g_bytes_new_take (contents, len); + node = gsk_render_node_deserialize (bytes, &error); + g_bytes_unref (bytes); + + g_assert (node != NULL); + } + + /* Render the .node file and download to cairo surface */ + texture = gsk_renderer_render_texture (renderer, node, NULL); + g_assert (texture != NULL); + + rendered_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, + gdk_texture_get_width (texture), + gdk_texture_get_height (texture)); + gdk_texture_download (texture, + cairo_image_surface_get_data (rendered_surface), + cairo_image_surface_get_stride (rendered_surface)); + cairo_surface_mark_dirty (rendered_surface); + + /* Load the given reference png file */ + reference_surface = cairo_image_surface_create_from_png (png_file); + g_assert (reference_surface != NULL); + + /* Now compare the two */ + diff_surface = reftest_compare_surfaces (rendered_surface, reference_surface); + + save_image (rendered_surface, node_file, ".out.png"); + + if (diff_surface) + save_image (diff_surface, node_file, ".diff.png"); + + g_assert (diff_surface == NULL); + + return 0; +} diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build index 65c065f061..a2f6318082 100644 --- a/testsuite/gsk/meson.build +++ b/testsuite/gsk/meson.build @@ -10,6 +10,14 @@ test_render_nodes = executable( install_dir: testexecdir ) +compare_render = executable( + 'compare-render', + ['compare-render.c', 'reftest-compare.c'], + dependencies: libgtk_dep, + install: get_option('install-tests'), + install_dir: testexecdir +) + test('nodes (cairo)', test_render_nodes, args: [ '--tap', '-k' ], env: [ 'GIO_USE_VOLUME_MONITOR=unix', @@ -22,6 +30,35 @@ test('nodes (cairo)', test_render_nodes, ], suite: 'gsk') +# Interesting render nodes proven to be rendered 'correctly' by the GL renderer. +gl_tests = [ + ['outset shadow simple', 'outset_shadow_simple.node', 'outset_shadow_simple.gl.png'], + ['outset shadow offset x', 'outset_shadow_offsetx.node', 'outset_shadow_offsetx.gl.png'], + ['outset shadow offset y', 'outset_shadow_offsety.node', 'outset_shadow_offsety.gl.png'], + ['outset shadow offset both', 'outset_shadow_offset_both.node', 'outset_shadow_offset_both.gl.png'], + ['outset shadow rounded1', 'outset_shadow_rounded1.node', 'outset_shadow_rounded1.gl.png'], + ['outset shadow rounded2', 'outset_shadow_rounded2.node', 'outset_shadow_rounded2.gl.png'], + ['outset shadow rounded top', 'outset_shadow_rounded_top.node', 'outset_shadow_rounded_top.gl.png'], + ['outset shadow blurred simple', 'outset_shadow_blurred_simple.node', 'outset_shadow_blurred_simple.gl.png'], + ['outset shadow blurred small', 'outset_shadow_blurred_small.node', 'outset_shadow_blurred_small.gl.png'], + ['outset shadow blurred offset', 'outset_shadow_blurred_offset.node', 'outset_shadow_blurred_offset.gl.png'], +] + +foreach gl_test : gl_tests + test(gl_test[0], compare_render, + args: [join_paths(meson.current_source_dir(), gl_test[1]), + join_paths(meson.current_source_dir(), gl_test[2])], + env: [ 'GIO_USE_VOLUME_MONITOR=unix', + 'GSETTINGS_BACKEND=memory', + 'GTK_CSD=1', + 'G_ENABLE_DIAGNOSTIC=0', + 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), + 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), + 'GSK_RENDERER=opengl' + ], + suite: 'gsk') +endforeach + if have_vulkan test('nodes (vulkan)', test_render_nodes, args: [ '--tap', '-k' ], diff --git a/testsuite/gsk/outset_shadow_blurred_offset.gl.png b/testsuite/gsk/outset_shadow_blurred_offset.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..f4d0f4b67de4934775680dd636e3df95e983167a GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt`Io-U3d t6?5JmWaI_%4lVfZpUY>y0La7uc07R|42&|{7(aldJYD@<);T3K0RR@~8ae;~ literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_blurred_offset.node b/testsuite/gsk/outset_shadow_blurred_offset.node new file mode 100644 index 0000000000000000000000000000000000000000..7d982d688e2f5ea72eee7e7e8f175356f23f6957 GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Aa#t7bqW0AIQBe2I3>pY*0R!PMD-(2;#$N ipgJ?CJeUSb;Q|lrAu=WosPqS@xPSwLMhX_7$p-+J`Xpum literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_blurred_simple.gl.png b/testsuite/gsk/outset_shadow_blurred_simple.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd96d894b347700df6066a8d9f44efb7a74281d GIT binary patch literal 1405 zcmeAS@N?(olHy`uVBq!ia0y~yU|a>l9Be?5sD6fTK#DEN+ueoXKL{?^yL>VO1FMmz zi(^Q|oVPa}^KKgmI9v>z9H;QzJ~>}tHTP|Y2fo6~S?#;OGdO+9GdrTbRuX8$5CRQX z`>ry7$UJ_SXB vhE&XXd(e;(D1T_dSN~jI{slnh2m}>|4>K7Uk1moH1bN=m)z4*}Q$iB}@nalN literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_blurred_simple2.node b/testsuite/gsk/outset_shadow_blurred_simple2.node new file mode 100644 index 0000000000000000000000000000000000000000..59f250c002b956456aab4efe87720674c2c334ef GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Aa%DOeh~l%Ru?KXozmo$p`kRdQ_nHe1M88 MIWTCXU;&zZ07-uoOaK4? literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_blurred_small.gl.png b/testsuite/gsk/outset_shadow_blurred_small.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..880db76f3b6b71d56ad5d73fb84fc2e22c123278 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt`Yo-U3d u6?5JmWaI_%4lVfZpUY>y0LVlJ4du)Z4h)R_pH2pXggssTT-G@yGywqQ!yCH* literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_blurred_small.node b/testsuite/gsk/outset_shadow_blurred_small.node new file mode 100644 index 0000000000000000000000000000000000000000..291389a5e8e53c98997d4a3b8a23aa256c2e9e5e GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Aa#t7bqW0AIQBe2I3>pY*0R!PMD-(2;#$N epgJ?CJeUSb;Q|lrvCDjbiVHX}Xry2PntT9m$|HUN literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_offset_both.gl.png b/testsuite/gsk/outset_shadow_offset_both.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..0b69710dc5c514fed8c9e71105dce79a8e6cddb3 GIT binary patch literal 712 zcmeAS@N?(olHy`uVBq!ia0vp^mq3_<4M^J0oaY3j*pj^6T^Rm@;DWu&Co?cG)q1)( zhE&XXd&iKk*@1__G5*N^{XY8|5*Srytz2KQxu|f`^)qjnV?I?@GyGt8YHFCEprFFR z!O1j2n73~;7u>S?k+;8;EA5zDQwvt_ACR)YUof+mg;CMb!9zemh@}OEX)axN{o-t1 jn*(kmF8J`Lk{U*KDVAmb4>~RfCQSxUS3j3^P6y;R>nD_+SsU_W+c3fY2&X8pzW~!2&e- E0F&7g?EnA( literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_offsetx.gl.png b/testsuite/gsk/outset_shadow_offsetx.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae63679158a50b269940606a8695069a1e30149 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^bwj^(N7l!{JxM1({$qWpPHl8ky zAr*7p-Z;p4z<`Iv(em&2HzE`AdlF}^e2{R_Jv;5&gs*qx4n#5?=af+|m~)^I&UpQe z!LIJF&aMX*jgMLSgf0ArB_rB+bAJB=8F4hvgF@juQ*to#>-4y;R>nD_+Sq)P{je&U?jdq3KpQr2LM|~$*3JH6T*x)GJ992J)1Xo^PP{qq1#`-760S?z@qUnOP{cX c-$-Z3F-0=HuhN+!3Jg;QPgg&ebxsLQ099y|-T(jq literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_offsety.node b/testsuite/gsk/outset_shadow_offsety.node new file mode 100644 index 0000000000000000000000000000000000000000..3b0af6268943ef037c0d34536ee2ce57571a68e2 GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Ab>y;R>nD_+XD}po#;852JxRjT9_ElMet@ C1reVB literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_rounded1.gl.png b/testsuite/gsk/outset_shadow_rounded1.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0494958cc2ab6bfffd3fc86c2204a5b3f55dee GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0y~yU}OPd4mP03ISwz71Y44~y9>jA5L~c#`DCE9tfz}( vNX4AD2Mrm4@`o0D^?#eswgAW+1q>C;iVX~mv2s&uL4o1v>gTe~DWM4fX7d?p literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_rounded1.node b/testsuite/gsk/outset_shadow_rounded1.node new file mode 100644 index 0000000000000000000000000000000000000000..956f79bae40d9eeee77c95a18fd0a588101b681f GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Aa%DOeh~ldqVjz8loCO!o*=TLIywUfjvZC S#Q~MJgYto*8Yx(SCLaKZs1#8E literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_rounded2.gl.png b/testsuite/gsk/outset_shadow_rounded2.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0494958cc2ab6bfffd3fc86c2204a5b3f55dee GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0y~yU}OPd4mP03ISwz71Y44~y9>jA5L~c#`DCE9tfz}( vNX4AD2Mrm4@`o0D^?#eswgAW+1q>C;iVX~mv2s&uL4o1v>gTe~DWM4fX7d?p literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_rounded2.node b/testsuite/gsk/outset_shadow_rounded2.node new file mode 100644 index 0000000000000000000000000000000000000000..8b8be016c6b90cf597a38ab4e6210464392157cb GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Aa%DOeh~l!xcgqFm*7RRC$>C2lfz_iUTTb O2jv4rHBztuO+EmD=oFCv literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_rounded_top.gl.png b/testsuite/gsk/outset_shadow_rounded_top.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..d448d8459d630e1bf731a97843d6ed9aaca0e9df GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^r$Cs44M;voy}trTu_bxCyDx?^>lFz ushIQjpdllWcWA*^|6FeU1wiH?20tX~Di|2c*%p2QInvYB&t;ucLK6T&lpW;& literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_rounded_top.node b/testsuite/gsk/outset_shadow_rounded_top.node new file mode 100644 index 0000000000000000000000000000000000000000..ea9dee50e866d9b6ed3d82c3c3e4dba88d83d76c GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Aa%DOeh~l%Ru?KXozmo$q)9}^&p9Bq+kJ> Fd;l{;6P5q~ literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_simple.gl.png b/testsuite/gsk/outset_shadow_simple.gl.png new file mode 100644 index 0000000000000000000000000000000000000000..87c691cdb80c1d2e62e22b472c802bb5fd1f8b51 GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^bwj^(N7l!{JxM1({$qWpPj-D=# zAr*7p-f-kgTe~DWM4ff@G5j literal 0 HcmV?d00001 diff --git a/testsuite/gsk/outset_shadow_simple.node b/testsuite/gsk/outset_shadow_simple.node new file mode 100644 index 0000000000000000000000000000000000000000..65adef7642306186174464fc4907b6bcb0d25283 GIT binary patch literal 208 zcmZ=S&JIe=OGz#A%TGyVfB;S?&A<@p0Ab>y;R>nD_+XFSKotkLxJC*VpveaSMBNcP literal 0 HcmV?d00001