From c7b65c330fd6ede0c82d3e2f2907e5a3ae864788 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Tue, 24 Oct 2017 17:14:20 +0100 Subject: [PATCH] wayland-drm: static inline wayland_drm_buffer_get The function is effectively a direct function call into libwayland-server.so. Thus GBM no longer depends on the wayland-drm static library, making the build more straight forward. And the resulting binary is a bit smaller. Note: we need to move struct wayland_drm_callbacks further up, otherwise we'll get an error since the type is incomplete. v2: Rebase, beef-up commit message, update meson, move struct wayland_drm_callbacks. Signed-off-by: Emil Velikov Reviewed-by: Daniel Stone (v1) Reviewed-by: Eric Engestrom # meson bit only Acked-by: Eric Engestrom # for the rest Reviewed-by: Dylan Baker # meson --- src/Makefile.am | 2 +- src/egl/wayland/wayland-drm/wayland-drm.c | 26 ------------ src/egl/wayland/wayland-drm/wayland-drm.h | 48 +++++++++++++++++------ src/gbm/Makefile.am | 2 +- src/gbm/meson.build | 4 +- 5 files changed, 39 insertions(+), 43 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 22973b14bc7..ea530eca7d6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -57,7 +57,7 @@ endif # include only conditionally ? SUBDIRS += compiler -## Optionally required by GBM, EGL +## Optionally required by EGL if HAVE_PLATFORM_WAYLAND SUBDIRS += egl/wayland/wayland-drm endif diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c index 73dfba9600e..81f6f528527 100644 --- a/src/egl/wayland/wayland-drm/wayland-drm.c +++ b/src/egl/wayland/wayland-drm/wayland-drm.c @@ -39,19 +39,6 @@ #define MIN(x,y) (((x)<(y))?(x):(y)) -struct wl_drm { - struct wl_display *display; - struct wl_global *wl_drm_global; - - void *user_data; - char *device_name; - uint32_t flags; - - struct wayland_drm_callbacks callbacks; - - struct wl_buffer_interface buffer_interface; -}; - static void destroy_buffer(struct wl_resource *resource) { @@ -244,19 +231,6 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id) wl_resource_post_event(resource, WL_DRM_CAPABILITIES, capabilities); } -struct wl_drm_buffer * -wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource) -{ - if (resource == NULL) - return NULL; - - if (wl_resource_instance_of(resource, &wl_buffer_interface, - &drm->buffer_interface)) - return wl_resource_get_user_data(resource); - else - return NULL; -} - struct wl_drm * wayland_drm_init(struct wl_display *display, char *device_name, const struct wayland_drm_callbacks *callbacks, void *user_data, diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h b/src/egl/wayland/wayland-drm/wayland-drm.h index 111383ff1d6..36e5bf042a7 100644 --- a/src/egl/wayland/wayland-drm/wayland-drm.h +++ b/src/egl/wayland/wayland-drm/wayland-drm.h @@ -4,8 +4,31 @@ #include struct wl_display; -struct wl_drm; struct wl_resource; +struct wl_drm_buffer; + +struct wayland_drm_callbacks { + int (*authenticate)(void *user_data, uint32_t id); + + void (*reference_buffer)(void *user_data, uint32_t name, int fd, + struct wl_drm_buffer *buffer); + + void (*release_buffer)(void *user_data, struct wl_drm_buffer *buffer); +}; + + +struct wl_drm { + struct wl_display *display; + struct wl_global *wl_drm_global; + + void *user_data; + char *device_name; + uint32_t flags; + + struct wayland_drm_callbacks callbacks; + + struct wl_buffer_interface buffer_interface; +}; struct wl_drm_buffer { struct wl_resource *resource; @@ -18,19 +41,20 @@ struct wl_drm_buffer { void *driver_buffer; }; -struct wayland_drm_callbacks { - int (*authenticate)(void *user_data, uint32_t id); - - void (*reference_buffer)(void *user_data, uint32_t name, int fd, - struct wl_drm_buffer *buffer); - - void (*release_buffer)(void *user_data, struct wl_drm_buffer *buffer); -}; - enum { WAYLAND_DRM_PRIME = 0x01 }; -struct wl_drm_buffer * -wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource); +static inline struct wl_drm_buffer * +wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource) +{ + if (resource == NULL) + return NULL; + + if (wl_resource_instance_of(resource, &wl_buffer_interface, + &drm->buffer_interface)) + return wl_resource_get_user_data(resource); + else + return NULL; +} struct wl_drm * wayland_drm_init(struct wl_display *display, char *device_name, diff --git a/src/gbm/Makefile.am b/src/gbm/Makefile.am index 05d861ff999..682c4281f4c 100644 --- a/src/gbm/Makefile.am +++ b/src/gbm/Makefile.am @@ -34,7 +34,7 @@ if HAVE_PLATFORM_WAYLAND AM_CFLAGS += \ $(WAYLAND_SERVER_CFLAGS) \ -I$(top_srcdir)/src/egl/wayland/wayland-drm/ -libgbm_la_LIBADD += $(top_builddir)/src/egl/wayland/wayland-drm/libwayland-drm.la $(WAYLAND_SERVER_LIBS) +libgbm_la_LIBADD += $(WAYLAND_SERVER_LIBS) endif if HAVE_DRI2 diff --git a/src/gbm/meson.build b/src/gbm/meson.build index f25f3172027..4b550e06f27 100644 --- a/src/gbm/meson.build +++ b/src/gbm/meson.build @@ -29,7 +29,6 @@ files_gbm = files( ) deps_gbm = [] args_gbm = [] -links_gbm = [] deps_gbm = [] incs_gbm = [ include_directories('main'), inc_include, inc_src, inc_loader, @@ -43,7 +42,6 @@ if with_dri2 endif if with_platform_wayland deps_gbm += dep_wayland_server - links_gbm += libwayland_drm incs_gbm += inc_wayland_drm endif @@ -55,7 +53,7 @@ libgbm = shared_library( include_directories : incs_gbm, c_args : [c_vis_args, args_gbm], link_args : [ld_args_gc_sections], - link_with : [links_gbm, libloader, libmesa_util, libxmlconfig], + link_with : [libloader, libmesa_util, libxmlconfig], dependencies : [deps_gbm, dep_dl], version : '1.0.0', install : true, -- 2.30.2