Files
pmaports-rtwo/temp/libcamera/0004-egl-Remove-some-parameters-from-createTexture2D.patch
T
Robert Mader 093a6b017b temp/libcamera: update downstream patch to merged version
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>
2026-06-20 01:41:18 +00:00

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