aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--examples/meson.build1
-rw-r--r--include/wlr/config.h.in3
-rw-r--r--meson.build3
-rw-r--r--meson_options.txt2
-rw-r--r--render/allocator/allocator.c9
-rw-r--r--render/allocator/meson.build22
-rw-r--r--render/gles2/renderer.c1
-rw-r--r--render/meson.build5
9 files changed, 37 insertions, 11 deletions
diff --git a/README.md b/README.md
index 418aab94..7fbd691a 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ Install dependencies:
* EGL and GLESv2 (optional, for the GLES2 renderer)
* Vulkan loader, headers and glslang (optional, for the Vulkan renderer)
* libdrm
-* GBM
+* GBM (optional, for the GBM allocator)
* libinput (optional, for the libinput backend)
* xkbcommon
* udev
diff --git a/examples/meson.build b/examples/meson.build
index 26d103bb..51e7d311 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -5,6 +5,7 @@ wayland_client = dependency('wayland-client')
libpng = dependency('libpng', required: false, disabler: true)
egl = dependency('egl', required: false, disabler: true)
glesv2 = dependency('glesv2', required: false, disabler: true)
+gbm = dependency('gbm', required: false, disabler: true)
# These versions correspond to ffmpeg 4.0
libavutil = dependency('libavutil', version: '>=56.14.100', required: false, disabler: true)
libavcodec = dependency('libavcodec', version: '>=58.18.100', required: false, disabler: true)
diff --git a/include/wlr/config.h.in b/include/wlr/config.h.in
index 71868a34..0b612271 100644
--- a/include/wlr/config.h.in
+++ b/include/wlr/config.h.in
@@ -6,9 +6,10 @@
#mesondefine WLR_HAS_X11_BACKEND
#mesondefine WLR_HAS_GLES2_RENDERER
-
#mesondefine WLR_HAS_VULKAN_RENDERER
+#mesondefine WLR_HAS_GBM_ALLOCATOR
+
#mesondefine WLR_HAS_XWAYLAND
#endif
diff --git a/meson.build b/meson.build
index 5d45073d..971be7e6 100644
--- a/meson.build
+++ b/meson.build
@@ -92,6 +92,7 @@ features = {
'xwayland': false,
'gles2-renderer': false,
'vulkan-renderer': false,
+ 'gbm-allocator': false,
}
internal_features = {
'xcb-errors': false,
@@ -125,7 +126,6 @@ drm = dependency('libdrm',
'valgrind=false',
],
)
-gbm = dependency('gbm', version: '>=17.1.0')
xkbcommon = dependency('xkbcommon')
udev = dependency('libudev')
pixman = dependency('pixman-1')
@@ -136,7 +136,6 @@ wlr_files = []
wlr_deps = [
wayland_server,
drm,
- gbm,
xkbcommon,
udev,
pixman,
diff --git a/meson_options.txt b/meson_options.txt
index 550acbe6..1a439a4d 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -4,3 +4,5 @@ option('examples', type: 'boolean', value: true, description: 'Build example app
option('icon_directory', description: 'Location used to look for cursors (default: ${datadir}/icons)', type: 'string', value: '')
option('renderers', type: 'array', choices: ['auto', 'gles2', 'vulkan'], value: ['auto'], description: 'Select built-in renderers')
option('backends', type: 'array', choices: ['auto', 'drm', 'libinput', 'x11'], value: ['auto'], description: 'Select built-in backends')
+option('allocators', type: 'array', choices: ['auto', 'gbm'], value: ['auto'],
+ description: 'Select built-in allocators')
diff --git a/render/allocator/allocator.c b/render/allocator/allocator.c
index 83e836ae..6b96e023 100644
--- a/render/allocator/allocator.c
+++ b/render/allocator/allocator.c
@@ -3,6 +3,7 @@
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
+#include <wlr/config.h>
#include <wlr/interfaces/wlr_buffer.h>
#include <wlr/render/allocator.h>
#include <wlr/util/log.h>
@@ -11,10 +12,13 @@
#include "backend/backend.h"
#include "render/allocator/allocator.h"
#include "render/allocator/drm_dumb.h"
-#include "render/allocator/gbm.h"
#include "render/allocator/shm.h"
#include "render/wlr_renderer.h"
+#if WLR_HAS_GBM_ALLOCATOR
+#include "render/allocator/gbm.h"
+#endif
+
void wlr_allocator_init(struct wlr_allocator *alloc,
const struct wlr_allocator_interface *impl, uint32_t buffer_caps) {
assert(impl && impl->destroy && impl->create_buffer);
@@ -94,6 +98,8 @@ struct wlr_allocator *allocator_autocreate_with_drm_fd(
uint32_t renderer_caps = renderer_get_render_buffer_caps(renderer);
struct wlr_allocator *alloc = NULL;
+
+#if WLR_HAS_GBM_ALLOCATOR
uint32_t gbm_caps = WLR_BUFFER_CAP_DMABUF;
if ((backend_caps & gbm_caps) && (renderer_caps & gbm_caps)
&& drm_fd >= 0) {
@@ -108,6 +114,7 @@ struct wlr_allocator *allocator_autocreate_with_drm_fd(
close(gbm_fd);
wlr_log(WLR_DEBUG, "Failed to create gbm allocator");
}
+#endif
uint32_t shm_caps = WLR_BUFFER_CAP_SHM | WLR_BUFFER_CAP_DATA_PTR;
if ((backend_caps & shm_caps) && (renderer_caps & shm_caps)) {
diff --git a/render/allocator/meson.build b/render/allocator/meson.build
index db17ccb2..f8e452df 100644
--- a/render/allocator/meson.build
+++ b/render/allocator/meson.build
@@ -1,9 +1,25 @@
+allocators = get_option('allocators')
+if 'auto' in allocators and get_option('auto_features').enabled()
+ allocators = ['gbm']
+elif 'auto' in renderers and get_option('auto_features').disabled()
+ allocators = []
+endif
+
wlr_files += files(
'allocator.c',
- 'gbm.c',
'shm.c',
'drm_dumb.c',
)
-has = cc.has_function('gbm_bo_get_fd_for_plane', dependencies: [gbm])
-add_project_arguments('-DHAS_GBM_BO_GET_FD_FOR_PLANE=@0@'.format(has.to_int()), language: 'c')
+gbm = disabler()
+if 'gbm' in allocators or 'auto' in allocators
+ gbm = dependency('gbm', version: '>=17.1.0', required: 'gbm' in allocators)
+endif
+if gbm.found()
+ wlr_files += files('gbm.c')
+ wlr_deps += gbm
+ features += { 'gbm-allocator': true }
+
+ has = cc.has_function('gbm_bo_get_fd_for_plane', dependencies: [gbm])
+ add_project_arguments('-DHAS_GBM_BO_GET_FD_FOR_PLANE=@0@'.format(has.to_int()), language: 'c')
+endif
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
index 5ffd6f85..e7bfe0e0 100644
--- a/render/gles2/renderer.c
+++ b/render/gles2/renderer.c
@@ -1,6 +1,5 @@
#include <assert.h>
#include <drm_fourcc.h>
-#include <gbm.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <stdint.h>
diff --git a/render/meson.build b/render/meson.build
index a1289ede..2bdcced8 100644
--- a/render/meson.build
+++ b/render/meson.build
@@ -16,8 +16,9 @@ wlr_files += files(
if 'gles2' in renderers or 'auto' in renderers
egl = dependency('egl', required: 'gles2' in renderers)
- if egl.found()
- wlr_deps += egl
+ gbm = dependency('gbm', required: 'gles2' in renderers)
+ if egl.found() and gbm.found()
+ wlr_deps += [egl, gbm]
wlr_files += files('egl.c')
endif
subdir('gles2')