diff options
Diffstat (limited to 'render')
-rw-r--r-- | render/allocator/allocator.c | 9 | ||||
-rw-r--r-- | render/allocator/meson.build | 22 | ||||
-rw-r--r-- | render/gles2/renderer.c | 1 | ||||
-rw-r--r-- | render/meson.build | 5 |
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') |