Replace the dmabuf import patch with the two series that it grow into during upstreaming, shipping in the next libcamera release. This will: 1. Improve performance for all devices using the GPU-ISP, including those not able to use dmabuf import. 2. Simplify debugging. 3. Ensure the patches get enough testing before the upstream release. While on it backport some additional patches: 1. A follow-up patch adding the last required step to allow dmabuf import for input buffers to work in almost all cases *if* the V4L2 driver handles custom bytesperline requests for bayer formats. 2. A small logging fix 3. A fix for bad bottom lines of pixels seen on some devices. This is the only patch with visual impact - and a quite desirable one. 4. A patch to log the used driver for easier debugging. This leaves us with only two downstream patches, both specific to the PinePhone (OG). Finally, add a "py3-$pkgname-pyc:pyc" subpackage in order to stay in sync with the upstream package. Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/8650>
93 lines
4.3 KiB
Diff
93 lines
4.3 KiB
Diff
From 97baff1439fe171fe80b081a021af71fb7617876 Mon Sep 17 00:00:00 2001
|
|
From: Robert Mader <robert.mader@collabora.com>
|
|
Date: Wed, 27 May 2026 10:15:31 +0200
|
|
Subject: [PATCH 04/13] egl: Remove some parameters from createTexture2D()
|
|
|
|
And use the values set in the constructor instead, bringing the
|
|
function in line with createInputDMABufTexture2D() and
|
|
createOutputDMABufTexture2D().
|
|
|
|
Adopt the value passed into the constructor accordingly, which
|
|
previously was never used.
|
|
|
|
Signed-off-by: Robert Mader <robert.mader@collabora.com>
|
|
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
|
|
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
(cherry picked from commit fb312741ed936c69d6a773323a2e76d8e645c077)
|
|
---
|
|
include/libcamera/internal/egl.h | 2 +-
|
|
src/libcamera/egl.cpp | 7 ++-----
|
|
src/libcamera/software_isp/debayer_egl.cpp | 4 ++--
|
|
3 files changed, 5 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h
|
|
index 825240dbb..bcf09b475 100644
|
|
--- a/include/libcamera/internal/egl.h
|
|
+++ b/include/libcamera/internal/egl.h
|
|
@@ -105,7 +105,7 @@ public:
|
|
|
|
int createInputDMABufTexture2D(eGLImage &eglImage, int fd);
|
|
int createOutputDMABufTexture2D(eGLImage &eglImage, int fd);
|
|
- void createTexture2D(eGLImage &eglImage, GLint format, uint32_t width, uint32_t height, void *data);
|
|
+ void createTexture2D(eGLImage &eglImage, void *data);
|
|
|
|
void pushEnv(std::vector<std::string> &shaderEnv, const char *str);
|
|
void makeCurrent();
|
|
diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp
|
|
index 882bfa656..789ffe2c1 100644
|
|
--- a/src/libcamera/egl.cpp
|
|
+++ b/src/libcamera/egl.cpp
|
|
@@ -241,9 +241,6 @@ int eGL::createOutputDMABufTexture2D(eGLImage &eglImage, int fd)
|
|
/**
|
|
* \brief Create a 2D texture from a memory buffer
|
|
* \param[in,out] eglImage EGL image to associate with the texture
|
|
- * \param[in] format OpenGL internal format (e.g., GL_RGB, GL_RGBA)
|
|
- * \param[in] width Texture width in pixels
|
|
- * \param[in] height Texture height in pixels
|
|
* \param[in] data Pointer to pixel data, or nullptr for uninitialised texture
|
|
*
|
|
* Creates a 2D texture from a CPU-accessible memory buffer. The texture
|
|
@@ -251,7 +248,7 @@ int eGL::createOutputDMABufTexture2D(eGLImage &eglImage, int fd)
|
|
* is useful for uploading static data like lookup tables or uniform color
|
|
* matrices to the GPU.
|
|
*/
|
|
-void eGL::createTexture2D(eGLImage &eglImage, GLint format, uint32_t width, uint32_t height, void *data)
|
|
+void eGL::createTexture2D(eGLImage &eglImage, void *data)
|
|
{
|
|
ASSERT(tid_ == Thread::currentId());
|
|
|
|
@@ -259,7 +256,7 @@ void eGL::createTexture2D(eGLImage &eglImage, GLint format, uint32_t width, uint
|
|
glBindTexture(GL_TEXTURE_2D, eglImage.texture_);
|
|
|
|
// Generate texture, bind, associate image to texture, configure, unbind
|
|
- glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
|
|
+ glTexImage2D(GL_TEXTURE_2D, 0, eglImage.format_, eglImage.width_, eglImage.height_, 0, eglImage.format_, GL_UNSIGNED_BYTE, data);
|
|
|
|
// Nearest filtering
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp
|
|
index 741d9d6f1..3606ec6eb 100644
|
|
--- a/src/libcamera/software_isp/debayer_egl.cpp
|
|
+++ b/src/libcamera/software_isp/debayer_egl.cpp
|
|
@@ -501,7 +501,7 @@ int DebayerEGL::debayerGPU(MappedFrameBuffer &in, int out_fd, const DebayerParam
|
|
egl_.makeCurrent();
|
|
|
|
/* Create a standard texture input */
|
|
- egl_.createTexture2D(*eglImageBayerIn_, glFormat_, inputConfig_.stride / bytesPerPixel_, height_, in.planes()[0].data());
|
|
+ egl_.createTexture2D(*eglImageBayerIn_, in.planes()[0].data());
|
|
|
|
/* Generate the output render framebuffer as render to texture */
|
|
egl_.createOutputDMABufTexture2D(*eglImageBayerOut_, out_fd);
|
|
@@ -582,7 +582,7 @@ int DebayerEGL::start()
|
|
return -EINVAL;
|
|
|
|
/* Raw bayer input as texture */
|
|
- eglImageBayerIn_ = std::make_unique<eGLImage>(glFormat_, width_, height_, inputConfig_.stride, GL_TEXTURE0, 0);
|
|
+ eglImageBayerIn_ = std::make_unique<eGLImage>(glFormat_, inputConfig_.stride / bytesPerPixel_, height_, inputConfig_.stride, GL_TEXTURE0, 0);
|
|
|
|
/* Texture we will render to */
|
|
eglImageBayerOut_ = std::make_unique<eGLImage>(GL_RGBA, outputSize_.width, outputSize_.height, outputConfig_.stride, GL_TEXTURE1, 1);
|
|
--
|
|
2.54.0
|
|
|