gdk: Split off dmabuf format tests

The dmabuf texture tests are failing, so we don't run them in
ci, but the format tests are perfectly fine, so split them off.

Add some tests for GdkDmabufFormatsBuilder and for the new
gdk_dmabuf_formats_equal(), too.
This commit is contained in:
Matthias Clasen
2024-02-07 12:44:19 +00:00
parent 8e4a235f56
commit a61c7f7871
3 changed files with 98 additions and 26 deletions

View File

@@ -0,0 +1,97 @@
#include "config.h"
#include <gtk/gtk.h>
#include <gdk/gdkdisplayprivate.h>
#include <gdk/gdkglcontextprivate.h>
#include <gdk/gdkdmabuftextureprivate.h>
#ifdef HAVE_DMABUF
#include <drm_fourcc.h>
#endif
static void
test_dmabuf_formats_basic (void)
{
GdkDisplay *display;
GdkDmabufFormats *formats;
display = gdk_display_get_default ();
formats = gdk_display_get_dmabuf_formats (display);
#ifdef HAVE_DMABUF
/* We always have basic linear formats */
g_assert_true (gdk_dmabuf_formats_get_n_formats (formats) >= 6);
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_BGRA8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_ABGR16161616F, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_RGB888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_BGR888, DRM_FORMAT_MOD_LINEAR));
#else
g_assert_true (gdk_dmabuf_formats_get_n_formats (formats) == 0);
#endif
}
static void
test_dmabuf_formats_builder (void)
{
GdkDmabufFormatsBuilder *builder;
GdkDmabufFormats *formats1, *formats2;
guint32 fourcc;
guint64 modifier;
builder = gdk_dmabuf_formats_builder_new ();
gdk_dmabuf_formats_builder_add_format (builder, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR);
gdk_dmabuf_formats_builder_add_format (builder, DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_LINEAR);
formats1 = gdk_dmabuf_formats_builder_free_to_formats (builder);
g_assert_true (gdk_dmabuf_formats_contains (formats1, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats1, DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_LINEAR));
g_assert_false (gdk_dmabuf_formats_contains (formats1, DRM_FORMAT_BGRA8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_get_n_formats (formats1) == 2);
gdk_dmabuf_formats_get_format (formats1, 0, &fourcc, &modifier);
g_assert_true (fourcc == DRM_FORMAT_ARGB8888 || fourcc == DRM_FORMAT_RGBA8888);
g_assert_true (modifier == DRM_FORMAT_MOD_LINEAR);
g_assert_false (gdk_dmabuf_formats_equal (formats1, NULL));
builder = gdk_dmabuf_formats_builder_new ();
gdk_dmabuf_formats_builder_add_formats (builder, formats1);
formats2 = gdk_dmabuf_formats_builder_free_to_formats (builder);
g_assert_true (gdk_dmabuf_formats_equal (formats1, formats2));
gdk_dmabuf_formats_unref (formats2);
builder = gdk_dmabuf_formats_builder_new ();
gdk_dmabuf_formats_builder_add_format (builder, DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_LINEAR);
gdk_dmabuf_formats_builder_add_format (builder, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR);
formats2 = gdk_dmabuf_formats_builder_free_to_formats (builder);
g_assert_true (gdk_dmabuf_formats_equal (formats1, formats2));
gdk_dmabuf_formats_unref (formats2);
builder = gdk_dmabuf_formats_builder_new ();
gdk_dmabuf_formats_builder_add_formats (builder, formats1);
gdk_dmabuf_formats_builder_add_format (builder, DRM_FORMAT_RGB888, DRM_FORMAT_MOD_LINEAR);
formats2 = gdk_dmabuf_formats_builder_free_to_formats (builder);
g_assert_false (gdk_dmabuf_formats_equal (formats1, formats2));
gdk_dmabuf_formats_unref (formats2);
gdk_dmabuf_formats_unref (formats1);
}
int
main (int argc, char *argv[])
{
gtk_test_init (&argc, &argv, NULL);
g_test_add_func ("/dmabuf/formats/basic", test_dmabuf_formats_basic);
g_test_add_func ("/dmabuf/formats/builder", test_dmabuf_formats_builder);
return g_test_run ();
}

View File

@@ -9,31 +9,6 @@
#include <drm_fourcc.h>
#endif
static void
test_dmabuf_formats (void)
{
GdkDisplay *display;
GdkDmabufFormats *formats;
display = gdk_display_get_default ();
formats = gdk_display_get_dmabuf_formats (display);
#ifdef HAVE_DMABUF
/* We always have basic linear formats */
g_assert_true (gdk_dmabuf_formats_get_n_formats (formats) >= 6);
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_BGRA8888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_ABGR16161616F, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_RGB888, DRM_FORMAT_MOD_LINEAR));
g_assert_true (gdk_dmabuf_formats_contains (formats, DRM_FORMAT_BGR888, DRM_FORMAT_MOD_LINEAR));
#else
g_assert_true (gdk_dmabuf_formats_get_n_formats (formats) == 0);
#endif
}
static cairo_surface_t *
make_surface (int width,
int height)
@@ -290,7 +265,6 @@ main (int argc, char *argv[])
{
gtk_test_init (&argc, &argv, NULL);
g_test_add_func ("/dmabuf/formats", test_dmabuf_formats);
g_test_add_func ("/dmabuf/export", test_dmabuf_export);
g_test_add_func ("/dmabuf/import", test_dmabuf_import);

View File

@@ -63,6 +63,7 @@ internal_tests = [
]
if host_machine.system() != 'windows'
internal_tests += { 'name': 'dmabufformats' }
internal_tests += { 'name': 'dmabuftexture', 'suites': 'failing' }
endif