aboutsummaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
Diffstat (limited to 'render')
-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
4 files changed, 30 insertions, 7 deletions
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')