Wayland on FreeBSD

Jan Beich jbeich at FreeBSD.org
Mon Apr 20 12:53:19 UTC 2020


Tomasz CEDRO <tomek at cedro.info> writes:

> Enlightenment has and needs new Wayland support that is based on
> ecore_wl2 from EFL. Someone hardcoded Linux DMA code into
> src/lib/ecore_wl2/ecore_wl2_buffer.c and that part of EFL does not
> build anymore on FreeBSD (not mandatory to run on Xorg). The good news
> is that EFL builds with both old Wayland support (wl-deprecated
> switch) and new one required for Enlightenment (wl switch) when all
> linuxisms are commented out from ecore_wl2_buffer.c. This means if we
> find a FreeBSD specific replacement for those DMA transfers all should
> work fine..?
>
> https://github.com/Enlightenment/efl/blob/master/src/lib/ecore_wl2/ecore_wl2_buffer.c

Only graphics/drm-legacy-kmod doesn't support DMABUF. On X11 it is used
by multimedia/libva-intel-driver and DRI3 in graphics/mesa-dri.

Why Enlightment implements zwp_linux_dmabuf_v1 for each GPU vendor separately
instead of using GBM? How does it work on AMD GPUs? Maybe try

--8<---------------cut here---------------start------------->8---
--- src/lib/ecore_wl2/ecore_wl2_buffer.c.orig	2019-11-27 18:27:01 UTC
+++ src/lib/ecore_wl2/ecore_wl2_buffer.c
@@ -17,7 +17,20 @@
 #include <sys/mman.h>
 #include <sys/ioctl.h>
 
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+/* kms-drm doesn't install any headers */
+#define DMA_BUF_SYNC_READ      (1 << 0)
+#define DMA_BUF_SYNC_WRITE     (2 << 0)
+#define DMA_BUF_SYNC_RW        (DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE)
+#define DMA_BUF_SYNC_START     (0 << 2)
+#define DMA_BUF_SYNC_END       (1 << 2)
+#define DMA_BUF_IOCTL_SYNC     _IOW('b', 0, struct dma_buf_sync)
+struct dma_buf_sync {
+	uint64_t flags;
+};
+#else
 #include <linux/dma-buf.h>
+#endif
 #include "linux-dmabuf-unstable-v1-client-protocol.h"
 
 #define SYM(lib, xx)               \
@@ -592,7 +605,12 @@ ecore_wl2_buffer_init(Ecore_Wl2_Display *ewd, Ecore_Wl
    buffer_manager = calloc(1, sizeof(Buffer_Manager));
    if (!buffer_manager) goto err_alloc;
 
+#if defined(__DragonFly__) || defined(__FreeBSD__)
+/* Disable by default due to https://github.com/FreeBSDDesktop/kms-drm/issues/156 */
+   if (getenv("EVAS_WAYLAND_SHM_ENABLE_DMABUF") && !getenv("EVAS_WAYLAND_SHM_DISABLE_DMABUF") && dmabuf)
+#else
    if (!getenv("EVAS_WAYLAND_SHM_DISABLE_DMABUF") && dmabuf)
+#endif
      {
         fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC);
         if (fd < 0)
--8<---------------cut here---------------end--------------->8---


More information about the freebsd-x11 mailing list