tests/wayland-test-clients: Add gbm_device to WaylandDisplay

We'll use this later to allocate dma-bufs from.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
This commit is contained in:
Sebastian Wick 2023-12-12 16:38:15 +01:00 committed by Marge Bot
parent 8e7600322b
commit 24ef34f680
3 changed files with 28 additions and 4 deletions

View File

@ -20,10 +20,6 @@ wayland_test_clients = [
}, },
{ {
'name': 'dma-buf-scanout', 'name': 'dma-buf-scanout',
'extra_deps': [
libdrm_dep,
libgbm_dep,
],
}, },
{ {
'name': 'fractional-scale', 'name': 'fractional-scale',
@ -92,6 +88,8 @@ foreach test : wayland_test_clients
glib_dep, glib_dep,
gobject_dep, gobject_dep,
wayland_client_dep, wayland_client_dep,
libdrm_dep,
libgbm_dep,
m_dep, m_dep,
] ]
if test.has_key('extra_deps') if test.has_key('extra_deps')

View File

@ -107,6 +107,26 @@ create_anonymous_file (off_t size)
return fd; return fd;
} }
static struct gbm_device *
create_gbm_device (WaylandDisplay *display)
{
const char *gpu_path;
int fd;
gpu_path = lookup_property_value (display, "gpu-path");
if (!gpu_path)
return NULL;
fd = open (gpu_path, O_RDWR);
if (fd < 0)
{
g_error ("Failed to open drm render node %s: %s",
gpu_path, g_strerror (errno));
}
return gbm_create_device (fd);
}
static void static void
handle_xdg_wm_base_ping (void *user_data, handle_xdg_wm_base_ping (void *user_data,
struct xdg_wm_base *xdg_wm_base, struct xdg_wm_base *xdg_wm_base,
@ -261,6 +281,8 @@ wayland_display_new_full (WaylandDisplayCapabilities capabilities,
wl_display_roundtrip (display->display); wl_display_roundtrip (display->display);
display->gbm_device = create_gbm_device (display);
return display; return display;
} }

View File

@ -1,5 +1,7 @@
#pragma once #pragma once
#include <drm_fourcc.h>
#include <gbm.h>
#include <glib-object.h> #include <glib-object.h>
#include <stdio.h> #include <stdio.h>
#include <wayland-client.h> #include <wayland-client.h>
@ -37,6 +39,8 @@ typedef struct _WaylandDisplay
uint32_t sync_event_serial_next; uint32_t sync_event_serial_next;
GHashTable *properties; GHashTable *properties;
struct gbm_device *gbm_device;
} WaylandDisplay; } WaylandDisplay;
#define WAYLAND_TYPE_DISPLAY (wayland_display_get_type ()) #define WAYLAND_TYPE_DISPLAY (wayland_display_get_type ())