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