[gtk+/wip/baedert/gl: 137/146] testsuite: Add selected gl renderer test node files



commit 8312ee0ebea6fad22490fd3aef17132cc259ac25
Author: Timm Bäder <mail baedert org>
Date:   Mon Dec 25 12:56:21 2017 +0100

    testsuite: Add selected gl renderer test node files

 testsuite/gsk/compare-render.c                     |  137 ++++++++++++++++++++
 testsuite/gsk/meson.build                          |   37 ++++++
 testsuite/gsk/outset_shadow_blurred_offset.gl.png  |  Bin 0 -> 118 bytes
 testsuite/gsk/outset_shadow_blurred_offset.node    |  Bin 0 -> 208 bytes
 testsuite/gsk/outset_shadow_blurred_simple.gl.png  |  Bin 0 -> 1405 bytes
 testsuite/gsk/outset_shadow_blurred_simple.node    |  Bin 0 -> 208 bytes
 testsuite/gsk/outset_shadow_blurred_simple2.gl.png |  Bin 0 -> 344 bytes
 testsuite/gsk/outset_shadow_blurred_simple2.node   |  Bin 0 -> 208 bytes
 testsuite/gsk/outset_shadow_blurred_small.gl.png   |  Bin 0 -> 114 bytes
 testsuite/gsk/outset_shadow_blurred_small.node     |  Bin 0 -> 208 bytes
 testsuite/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
 testsuite/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(+), 0 deletions(-)
---
diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
new file mode 100644
index 0000000..f83e4e0
--- /dev/null
+++ b/testsuite/gsk/compare-render.c
@@ -0,0 +1,137 @@
+#include <string.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#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 65c065f..a2f6318 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 0000000..f4d0f4b
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_offset.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_blurred_offset.node b/testsuite/gsk/outset_shadow_blurred_offset.node
new file mode 100644
index 0000000..7d982d6
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_offset.node differ
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 0000000..bcd96d8
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_simple.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_blurred_simple.node b/testsuite/gsk/outset_shadow_blurred_simple.node
new file mode 100644
index 0000000..66b38b9
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_simple.node differ
diff --git a/testsuite/gsk/outset_shadow_blurred_simple2.gl.png 
b/testsuite/gsk/outset_shadow_blurred_simple2.gl.png
new file mode 100644
index 0000000..96a2ba7
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_simple2.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_blurred_simple2.node 
b/testsuite/gsk/outset_shadow_blurred_simple2.node
new file mode 100644
index 0000000..59f250c
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_simple2.node differ
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 0000000..880db76
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_small.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_blurred_small.node b/testsuite/gsk/outset_shadow_blurred_small.node
new file mode 100644
index 0000000..291389a
Binary files /dev/null and b/testsuite/gsk/outset_shadow_blurred_small.node differ
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 0000000..0b69710
Binary files /dev/null and b/testsuite/gsk/outset_shadow_offset_both.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_offset_both.node b/testsuite/gsk/outset_shadow_offset_both.node
new file mode 100644
index 0000000..014d8ce
Binary files /dev/null and b/testsuite/gsk/outset_shadow_offset_both.node differ
diff --git a/testsuite/gsk/outset_shadow_offsetx.gl.png b/testsuite/gsk/outset_shadow_offsetx.gl.png
new file mode 100644
index 0000000..7ae6367
Binary files /dev/null and b/testsuite/gsk/outset_shadow_offsetx.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_offsetx.node b/testsuite/gsk/outset_shadow_offsetx.node
new file mode 100644
index 0000000..f88bee5
Binary files /dev/null and b/testsuite/gsk/outset_shadow_offsetx.node differ
diff --git a/testsuite/gsk/outset_shadow_offsety.gl.png b/testsuite/gsk/outset_shadow_offsety.gl.png
new file mode 100644
index 0000000..c54898f
Binary files /dev/null and b/testsuite/gsk/outset_shadow_offsety.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_offsety.node b/testsuite/gsk/outset_shadow_offsety.node
new file mode 100644
index 0000000..3b0af62
Binary files /dev/null and b/testsuite/gsk/outset_shadow_offsety.node differ
diff --git a/testsuite/gsk/outset_shadow_rounded1.gl.png b/testsuite/gsk/outset_shadow_rounded1.gl.png
new file mode 100644
index 0000000..8c04949
Binary files /dev/null and b/testsuite/gsk/outset_shadow_rounded1.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_rounded1.node b/testsuite/gsk/outset_shadow_rounded1.node
new file mode 100644
index 0000000..956f79b
Binary files /dev/null and b/testsuite/gsk/outset_shadow_rounded1.node differ
diff --git a/testsuite/gsk/outset_shadow_rounded2.gl.png b/testsuite/gsk/outset_shadow_rounded2.gl.png
new file mode 100644
index 0000000..8c04949
Binary files /dev/null and b/testsuite/gsk/outset_shadow_rounded2.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_rounded2.node b/testsuite/gsk/outset_shadow_rounded2.node
new file mode 100644
index 0000000..8b8be01
Binary files /dev/null and b/testsuite/gsk/outset_shadow_rounded2.node differ
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 0000000..d448d84
Binary files /dev/null and b/testsuite/gsk/outset_shadow_rounded_top.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_rounded_top.node b/testsuite/gsk/outset_shadow_rounded_top.node
new file mode 100644
index 0000000..ea9dee5
Binary files /dev/null and b/testsuite/gsk/outset_shadow_rounded_top.node differ
diff --git a/testsuite/gsk/outset_shadow_simple.gl.png b/testsuite/gsk/outset_shadow_simple.gl.png
new file mode 100644
index 0000000..87c691c
Binary files /dev/null and b/testsuite/gsk/outset_shadow_simple.gl.png differ
diff --git a/testsuite/gsk/outset_shadow_simple.node b/testsuite/gsk/outset_shadow_simple.node
new file mode 100644
index 0000000..65adef7
Binary files /dev/null and b/testsuite/gsk/outset_shadow_simple.node differ


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]