[v2,2/2] Revert "libcamera: software_isp: gbm: Add a GBM helper class for GPU surface access"
diff mbox series

Message ID 20260119202835.372125-2-robert.mader@collabora.com
State New
Headers show
Series
  • [v2,1/2] egl: Use the Mesa surfaceless platform instead of GBM
Related show

Commit Message

Robert Mader Jan. 19, 2026, 8:28 p.m. UTC
GBM is not used any more - remove the helper class.

This results in egl.cpp getting build on some setups where it previously
didn't, notably Debian 11 on CI, triggering a build issues. Include a
workaround suggested by:
Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

This reverts commit c60b1ce8193841c2742b655097bb39ccbcb417c2.

Signed-off-by: Robert Mader <robert.mader@collabora.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sm8250/rb5, x1e/Dell Insprion14p
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

---

Changes in v2:
 - Added tags
 - Added build issue workaround - hope it's ok to keep the R-Bs.
---
 include/libcamera/internal/egl.h       |   5 ++
 include/libcamera/internal/gbm.h       |  55 -------------
 include/libcamera/internal/meson.build |   1 -
 src/libcamera/gbm.cpp                  | 107 -------------------------
 src/libcamera/meson.build              |  12 +--
 5 files changed, 6 insertions(+), 174 deletions(-)
 delete mode 100644 include/libcamera/internal/gbm.h
 delete mode 100644 src/libcamera/gbm.cpp

Comments

Laurent Pinchart Jan. 19, 2026, 8:37 p.m. UTC | #1
On Mon, Jan 19, 2026 at 09:28:35PM +0100, Robert Mader wrote:
> GBM is not used any more - remove the helper class.
> 
> This results in egl.cpp getting build on some setups where it previously
> didn't, notably Debian 11 on CI, triggering a build issues. Include a
> workaround suggested by:
> Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> 
> This reverts commit c60b1ce8193841c2742b655097bb39ccbcb417c2.
> 
> Signed-off-by: Robert Mader <robert.mader@collabora.com>
> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sm8250/rb5, x1e/Dell Insprion14p
> Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

This is an easy one, once 1/2 is ready,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
> 
> Changes in v2:
>  - Added tags
>  - Added build issue workaround - hope it's ok to keep the R-Bs.
> ---
>  include/libcamera/internal/egl.h       |   5 ++
>  include/libcamera/internal/gbm.h       |  55 -------------
>  include/libcamera/internal/meson.build |   1 -
>  src/libcamera/gbm.cpp                  | 107 -------------------------
>  src/libcamera/meson.build              |  12 +--
>  5 files changed, 6 insertions(+), 174 deletions(-)
>  delete mode 100644 include/libcamera/internal/gbm.h
>  delete mode 100644 src/libcamera/gbm.cpp
> 
> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h
> index 630345ea7..ce386554f 100644
> --- a/include/libcamera/internal/egl.h
> +++ b/include/libcamera/internal/egl.h
> @@ -16,6 +16,11 @@
>  #include <libcamera/base/span.h>
>  #include <libcamera/base/utils.h>
>  
> +/* Workaround for build issues on Mesa < 23.3, see
> + * https://github.com/KhronosGroup/EGL-Registry/pull/130
> + */
> +#define EGL_NO_X11
> +
>  #define EGL_EGLEXT_PROTOTYPES
>  #include <EGL/egl.h>
>  #include <EGL/eglext.h>
> diff --git a/include/libcamera/internal/gbm.h b/include/libcamera/internal/gbm.h
> deleted file mode 100644
> index c10be06c1..000000000
> --- a/include/libcamera/internal/gbm.h
> +++ /dev/null
> @@ -1,55 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Linaro Ltd.
> - *
> - * Authors:
> - * Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> - *
> - * Helper class for managing GBM interactions
> - */
> -
> -#pragma once
> -
> -#include <gbm.h>
> -
> -#include <libcamera/base/log.h>
> -#include <libcamera/base/unique_fd.h>
> -
> -#include <libcamera/formats.h>
> -
> -namespace libcamera {
> -
> -LOG_DECLARE_CATEGORY(GBM)
> -
> -class GBM
> -{
> -public:
> -	GBM();
> -	~GBM();
> -
> -	int createDevice();
> -
> -	/**
> -	 * \brief Retrieve the GBM device handle
> -	 *
> -	 * \return Pointer to the gbm_device structure, or nullptr if the device
> -	 * has not been created
> -	 */
> -	struct gbm_device *device() const { return gbmDevice_; }
> -
> -	/**
> -	 * \brief Retrieve the pixel format
> -	 *
> -	 * \return The PixelFormat used by this GBM instance (ARGB8888)
> -	 */
> -	PixelFormat format() const { return format_; }
> -
> -private:
> -	LIBCAMERA_DISABLE_COPY_AND_MOVE(GBM)
> -
> -	UniqueFD fd_;
> -	struct gbm_device *gbmDevice_ = nullptr;
> -	PixelFormat format_;
> -};
> -
> -} /* namespace libcamera */
> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
> index dc48619e5..4d2a09bd7 100644
> --- a/include/libcamera/internal/meson.build
> +++ b/include/libcamera/internal/meson.build
> @@ -24,7 +24,6 @@ libcamera_internal_headers = files([
>      'formats.h',
>      'framebuffer.h',
>      'egl.h',
> -    'gbm.h',
>      'global_configuration.h',
>      'ipa_data_serializer.h',
>      'ipa_manager.h',
> diff --git a/src/libcamera/gbm.cpp b/src/libcamera/gbm.cpp
> deleted file mode 100644
> index d37808b0c..000000000
> --- a/src/libcamera/gbm.cpp
> +++ /dev/null
> @@ -1,107 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Linaro Ltd.
> - *
> - * Authors:
> - * Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> - *
> - * Helper class for managing GBM interactions
> - */
> -
> -#include "libcamera/internal/gbm.h"
> -
> -#include <errno.h>
> -#include <fcntl.h>
> -#include <sys/ioctl.h>
> -#include <sys/mman.h>
> -#include <unistd.h>
> -
> -#include <linux/dma-buf.h>
> -#include <linux/dma-heap.h>
> -
> -namespace libcamera {
> -
> -LOG_DEFINE_CATEGORY(GBM)
> -
> -/**
> - * \class GBM
> - * \brief Helper class for managing GBM interactions
> - *
> - * The GBM class provides a simplified interface for creating and managing
> - * GBM devices. It handles the initialization and teardown of GBM devices
> - * used for buffer allocation in graphics and camera pipelines.
> - *
> - * This class is responsible for opening a DRI render node, creating a GBM
> - * device, and providing access to the device and its associated pixel format.
> - */
> -
> -/**
> - *\var GBM::fd_
> - *\brief file descriptor to DRI device
> - */
> -
> -/**
> - *\var GBM::gbmDevice_
> - *\brief Pointer to GBM device structure derived from fd_
> - */
> -
> -/**
> - *\var GBM::format_
> - *\brief Pixel format the GBM surface was created in
> - */
> -
> -/**
> - *\brief GBM constructor.
> - *
> - * Creates a GBM instance with uninitialised state.
> - */
> -GBM::GBM()
> -{
> -}
> -
> -/**
> - *\brief GBM destructor
> - *
> - * Cleans up the GBM device if it was successfully created, and closes
> - * the associated file descriptor.
> - */
> -GBM::~GBM()
> -{
> -	if (gbmDevice_)
> -		gbm_device_destroy(gbmDevice_);
> -}
> -
> -/**
> - * \brief Create and initialize a GBM device
> - *
> - * \todo Get dri device name from envOption setting
> - *
> - * Opens the DRI render node (/dev/dri/renderD128) and creates a GBM
> - * device using the libgbm library. Sets the default pixel format to
> - * ARGB8888.
> - *
> - * \return 0 on success, or a negative error code on failure
> - */
> -int GBM::createDevice()
> -{
> -	const char dri_node[] = "/dev/dri/renderD128";
> -
> -	int fd = open(dri_node, O_RDWR | O_CLOEXEC | O_NOCTTY);
> -	if (fd < 0) {
> -		LOG(GBM, Error) << "Open " << dri_node << " fail " << strerror(errno);
> -		return -errno;
> -	}
> -	fd_ = UniqueFD(fd);
> -
> -	gbmDevice_ = gbm_create_device(fd_.get());
> -	if (!gbmDevice_) {
> -		LOG(GBM, Error) << "gbm_create_device fail" << strerror(errno);
> -		return -errno;
> -	}
> -
> -	format_ = libcamera::formats::ARGB8888;
> -
> -	return 0;
> -}
> -
> -} /* namespace libcamera */
> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> index 6f952bd98..d15943586 100644
> --- a/src/libcamera/meson.build
> +++ b/src/libcamera/meson.build
> @@ -70,15 +70,6 @@ libcamera_deps = []
>  libatomic = cc.find_library('atomic', required : false)
>  libthreads = dependency('threads')
>  
> -libgbm = dependency('gbm', required : false)
> -gbm_works = cc.check_header('gbm.h', required: false)
> -
> -if libgbm.found() and gbm_works
> -    libcamera_internal_sources += files([
> -        'gbm.cpp',
> -    ])
> -endif
> -
>  mesa_works = cc.check_header('EGL/egl.h', required: false)
>  libegl = dependency('egl', required : false)
>  libglesv2 = dependency('glesv2', required : false)
> @@ -91,7 +82,7 @@ if libglesv2.found()
>      config_h.set('HAVE_GLESV2', 1)
>  endif
>  
> -if mesa_works and gbm_works
> +if mesa_works
>      libcamera_internal_sources += files([
>          'egl.cpp',
>      ])
> @@ -209,7 +200,6 @@ libcamera_deps += [
>      libcrypto,
>      libdl,
>      libegl,
> -    libgbm,
>      libglesv2,
>      liblttng,
>      libudev,

Patch
diff mbox series

diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h
index 630345ea7..ce386554f 100644
--- a/include/libcamera/internal/egl.h
+++ b/include/libcamera/internal/egl.h
@@ -16,6 +16,11 @@ 
 #include <libcamera/base/span.h>
 #include <libcamera/base/utils.h>
 
+/* Workaround for build issues on Mesa < 23.3, see
+ * https://github.com/KhronosGroup/EGL-Registry/pull/130
+ */
+#define EGL_NO_X11
+
 #define EGL_EGLEXT_PROTOTYPES
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
diff --git a/include/libcamera/internal/gbm.h b/include/libcamera/internal/gbm.h
deleted file mode 100644
index c10be06c1..000000000
--- a/include/libcamera/internal/gbm.h
+++ /dev/null
@@ -1,55 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Linaro Ltd.
- *
- * Authors:
- * Bryan O'Donoghue <bryan.odonoghue@linaro.org>
- *
- * Helper class for managing GBM interactions
- */
-
-#pragma once
-
-#include <gbm.h>
-
-#include <libcamera/base/log.h>
-#include <libcamera/base/unique_fd.h>
-
-#include <libcamera/formats.h>
-
-namespace libcamera {
-
-LOG_DECLARE_CATEGORY(GBM)
-
-class GBM
-{
-public:
-	GBM();
-	~GBM();
-
-	int createDevice();
-
-	/**
-	 * \brief Retrieve the GBM device handle
-	 *
-	 * \return Pointer to the gbm_device structure, or nullptr if the device
-	 * has not been created
-	 */
-	struct gbm_device *device() const { return gbmDevice_; }
-
-	/**
-	 * \brief Retrieve the pixel format
-	 *
-	 * \return The PixelFormat used by this GBM instance (ARGB8888)
-	 */
-	PixelFormat format() const { return format_; }
-
-private:
-	LIBCAMERA_DISABLE_COPY_AND_MOVE(GBM)
-
-	UniqueFD fd_;
-	struct gbm_device *gbmDevice_ = nullptr;
-	PixelFormat format_;
-};
-
-} /* namespace libcamera */
diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
index dc48619e5..4d2a09bd7 100644
--- a/include/libcamera/internal/meson.build
+++ b/include/libcamera/internal/meson.build
@@ -24,7 +24,6 @@  libcamera_internal_headers = files([
     'formats.h',
     'framebuffer.h',
     'egl.h',
-    'gbm.h',
     'global_configuration.h',
     'ipa_data_serializer.h',
     'ipa_manager.h',
diff --git a/src/libcamera/gbm.cpp b/src/libcamera/gbm.cpp
deleted file mode 100644
index d37808b0c..000000000
--- a/src/libcamera/gbm.cpp
+++ /dev/null
@@ -1,107 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Linaro Ltd.
- *
- * Authors:
- * Bryan O'Donoghue <bryan.odonoghue@linaro.org>
- *
- * Helper class for managing GBM interactions
- */
-
-#include "libcamera/internal/gbm.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-#include <unistd.h>
-
-#include <linux/dma-buf.h>
-#include <linux/dma-heap.h>
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(GBM)
-
-/**
- * \class GBM
- * \brief Helper class for managing GBM interactions
- *
- * The GBM class provides a simplified interface for creating and managing
- * GBM devices. It handles the initialization and teardown of GBM devices
- * used for buffer allocation in graphics and camera pipelines.
- *
- * This class is responsible for opening a DRI render node, creating a GBM
- * device, and providing access to the device and its associated pixel format.
- */
-
-/**
- *\var GBM::fd_
- *\brief file descriptor to DRI device
- */
-
-/**
- *\var GBM::gbmDevice_
- *\brief Pointer to GBM device structure derived from fd_
- */
-
-/**
- *\var GBM::format_
- *\brief Pixel format the GBM surface was created in
- */
-
-/**
- *\brief GBM constructor.
- *
- * Creates a GBM instance with uninitialised state.
- */
-GBM::GBM()
-{
-}
-
-/**
- *\brief GBM destructor
- *
- * Cleans up the GBM device if it was successfully created, and closes
- * the associated file descriptor.
- */
-GBM::~GBM()
-{
-	if (gbmDevice_)
-		gbm_device_destroy(gbmDevice_);
-}
-
-/**
- * \brief Create and initialize a GBM device
- *
- * \todo Get dri device name from envOption setting
- *
- * Opens the DRI render node (/dev/dri/renderD128) and creates a GBM
- * device using the libgbm library. Sets the default pixel format to
- * ARGB8888.
- *
- * \return 0 on success, or a negative error code on failure
- */
-int GBM::createDevice()
-{
-	const char dri_node[] = "/dev/dri/renderD128";
-
-	int fd = open(dri_node, O_RDWR | O_CLOEXEC | O_NOCTTY);
-	if (fd < 0) {
-		LOG(GBM, Error) << "Open " << dri_node << " fail " << strerror(errno);
-		return -errno;
-	}
-	fd_ = UniqueFD(fd);
-
-	gbmDevice_ = gbm_create_device(fd_.get());
-	if (!gbmDevice_) {
-		LOG(GBM, Error) << "gbm_create_device fail" << strerror(errno);
-		return -errno;
-	}
-
-	format_ = libcamera::formats::ARGB8888;
-
-	return 0;
-}
-
-} /* namespace libcamera */
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 6f952bd98..d15943586 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -70,15 +70,6 @@  libcamera_deps = []
 libatomic = cc.find_library('atomic', required : false)
 libthreads = dependency('threads')
 
-libgbm = dependency('gbm', required : false)
-gbm_works = cc.check_header('gbm.h', required: false)
-
-if libgbm.found() and gbm_works
-    libcamera_internal_sources += files([
-        'gbm.cpp',
-    ])
-endif
-
 mesa_works = cc.check_header('EGL/egl.h', required: false)
 libegl = dependency('egl', required : false)
 libglesv2 = dependency('glesv2', required : false)
@@ -91,7 +82,7 @@  if libglesv2.found()
     config_h.set('HAVE_GLESV2', 1)
 endif
 
-if mesa_works and gbm_works
+if mesa_works
     libcamera_internal_sources += files([
         'egl.cpp',
     ])
@@ -209,7 +200,6 @@  libcamera_deps += [
     libcrypto,
     libdl,
     libegl,
-    libgbm,
     libglesv2,
     liblttng,
     libudev,