buffer: Only include linux/dma-heap.h where available

This unbreaks the build on FreeBSD.
master
Andri Yngvason 2024-03-30 16:59:04 +00:00
parent 333381326d
commit 56c38af25f
2 changed files with 15 additions and 1 deletions

View File

@ -144,6 +144,10 @@ if host_system == 'linux' and get_option('systemtap') and cc.has_header('sys/sdt
config.set('HAVE_USDT', true) config.set('HAVE_USDT', true)
endif endif
if cc.has_header('linux/dma-heap.h') and cc.has_header('linux/dma-buf.h')
config.set('HAVE_LINUX_DMA_HEAP', true)
endif
if cc.has_function('memfd_create') if cc.has_function('memfd_create')
config.set('HAVE_MEMFD', true) config.set('HAVE_MEMFD', true)
config.set('HAVE_MEMFD_CREATE', true) config.set('HAVE_MEMFD_CREATE', true)

View File

@ -37,11 +37,14 @@
#include <gbm.h> #include <gbm.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <fcntl.h> #include <fcntl.h>
#ifdef HAVE_LINUX_DMA_HEAP
#include <linux/dma-buf.h> #include <linux/dma-buf.h>
#include <linux/dma-heap.h> #include <linux/dma-heap.h>
#define LINUX_CMA_PATH "/dev/dma_heap/linux,cma" #define LINUX_CMA_PATH "/dev/dma_heap/linux,cma"
#endif #endif // HAVE_LINUX_DMA_HEAP
#endif // ENABLE_SCREENCOPY_DMABUF
extern struct wl_shm* wl_shm; extern struct wl_shm* wl_shm;
extern struct zwp_linux_dmabuf_v1* zwp_linux_dmabuf; extern struct zwp_linux_dmabuf_v1* zwp_linux_dmabuf;
@ -125,6 +128,7 @@ failure:
} }
#ifdef ENABLE_SCREENCOPY_DMABUF #ifdef ENABLE_SCREENCOPY_DMABUF
#ifdef HAVE_LINUX_DMA_HEAP
static bool have_linux_cma(void) static bool have_linux_cma(void)
{ {
return access(LINUX_CMA_PATH, R_OK | W_OK) == 0; return access(LINUX_CMA_PATH, R_OK | W_OK) == 0;
@ -197,6 +201,7 @@ static struct gbm_bo* create_cma_gbm_bo(int width, int height, uint32_t fourcc)
return bo; return bo;
} }
#endif // HAVE_LINUX_DMA_HEAP
static struct wv_buffer* wv_buffer_create_dmabuf(int width, int height, static struct wv_buffer* wv_buffer_create_dmabuf(int width, int height,
uint32_t fourcc) uint32_t fourcc)
@ -213,10 +218,15 @@ static struct wv_buffer* wv_buffer_create_dmabuf(int width, int height,
self->height = height; self->height = height;
self->format = fourcc; self->format = fourcc;
#ifdef HAVE_LINUX_DMA_HEAP
self->bo = have_linux_cma() ? self->bo = have_linux_cma() ?
create_cma_gbm_bo(width, height, fourcc) : create_cma_gbm_bo(width, height, fourcc) :
gbm_bo_create(gbm_device, width, height, fourcc, gbm_bo_create(gbm_device, width, height, fourcc,
GBM_BO_USE_RENDERING); GBM_BO_USE_RENDERING);
#endif
self->bo = gbm_bo_create(gbm_device, width, height, fourcc,
GBM_BO_USE_RENDERING);
if (!self->bo) if (!self->bo)
goto bo_failure; goto bo_failure;