[18/30] libcamera: software_isp: egl: Use Texture Unit 3 for final output texture
diff mbox series

Message ID 20260618122245.946138-19-bryan.odonoghue@linaro.org
State RFC
Headers show
Series
  • RFC/RFT: gpuisp: Multipass with speed optimisations on top
Related show

Commit Message

Bryan O'Donoghue June 18, 2026, 12:22 p.m. UTC
We will use ping/pong buffers as intermediary steps in the GPUISP pipeline.
The last texture should logically be texture unit #3.

TEXTURE0 = Input
TEXTURE1 = Ping
TEXTURE2 = Pong
TEXTURE3 = Output

We don't have ping/pong yet but in preparation make the small change to
TEXTURE3 for the existing output framebuffer.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 src/libcamera/software_isp/software_isp_pipeline_gpu.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Milan Zamazal June 23, 2026, 2:02 p.m. UTC | #1
Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes:

> We will use ping/pong buffers as intermediary steps in the GPUISP pipeline.
> The last texture should logically be texture unit #3.

I don't mind either way.

Reviewed-by: Milan Zamazal <mzamazal@redhat.com>

>
> TEXTURE0 = Input
> TEXTURE1 = Ping
> TEXTURE2 = Pong
> TEXTURE3 = Output
>
> We don't have ping/pong yet but in preparation make the small change to
> TEXTURE3 for the existing output framebuffer.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>  src/libcamera/software_isp/software_isp_pipeline_gpu.cpp | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
> index 8bafd70f8..458b65854 100644
> --- a/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
> +++ b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
> @@ -336,7 +336,7 @@ int SoftwareIspPipelineGpu::start()
>  	eglImageBayerIn_ = std::make_unique<eGLImage>(gpuIspShaderPassDemosiac_.glFormat_, inputConfig_.stride / gpuIspShaderPassDemosiac_.getBytesPerPixel(), height_, inputConfig_.stride, GL_TEXTURE0, 0);
>  
>  	/* Texture we will render to */
> -	eglImageRGBAOut_ = std::make_unique<eGLImage>(GL_RGBA, outputSize_.width, outputSize_.height, outputConfig_.stride, GL_TEXTURE1, 1);
> +	eglImageRGBAOut_ = std::make_unique<eGLImage>(GL_RGBA, outputSize_.width, outputSize_.height, outputConfig_.stride, GL_TEXTURE3, 3);
>  
>  	return 0;
>  }

Patch
diff mbox series

diff --git a/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
index 8bafd70f8..458b65854 100644
--- a/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
+++ b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
@@ -336,7 +336,7 @@  int SoftwareIspPipelineGpu::start()
 	eglImageBayerIn_ = std::make_unique<eGLImage>(gpuIspShaderPassDemosiac_.glFormat_, inputConfig_.stride / gpuIspShaderPassDemosiac_.getBytesPerPixel(), height_, inputConfig_.stride, GL_TEXTURE0, 0);
 
 	/* Texture we will render to */
-	eglImageRGBAOut_ = std::make_unique<eGLImage>(GL_RGBA, outputSize_.width, outputSize_.height, outputConfig_.stride, GL_TEXTURE1, 1);
+	eglImageRGBAOut_ = std::make_unique<eGLImage>(GL_RGBA, outputSize_.width, outputSize_.height, outputConfig_.stride, GL_TEXTURE3, 3);
 
 	return 0;
 }