[libcamera-devel] [PATCH 2/7] qcam: viewfinder_gl: Keep fragment shader when format doesn't change

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri Nov 6 01:37:05 CET 2020


Hi Laurent,

Thanks for your work.

On 2020-11-03 17:50:20 +0200, Laurent Pinchart wrote:
> When ViewFinderGL::setFormat() is called, the fragment shader is deleted
> and recreated for the new format. This results in unnecessary shader
> recompilation if only the size is changed and the pixel format remains
> the same. Keep the existing shader in that case.
> 
> The null test for fragmentShader_ can be removed, as if the shader
> program is linked, the fragment shader is guaranteed to exist.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> ---
>  src/qcam/viewfinder_gl.cpp | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qcam/viewfinder_gl.cpp b/src/qcam/viewfinder_gl.cpp
> index 03a576ba89d2..c07292523504 100644
> --- a/src/qcam/viewfinder_gl.cpp
> +++ b/src/qcam/viewfinder_gl.cpp
> @@ -53,19 +53,23 @@ const QList<libcamera::PixelFormat> &ViewFinderGL::nativeFormats() const
>  int ViewFinderGL::setFormat(const libcamera::PixelFormat &format,
>  			    const QSize &size)
>  {
> -	/* If the fragment is created remove it and create a new one. */
> -	if (fragmentShader_) {
> +	if (format != format_) {
> +		/*
> +		 * If the fragment already exists, remove it and create a new
> +		 * one for the new format.
> +		 */
>  		if (shaderProgram_.isLinked()) {
>  			shaderProgram_.release();
>  			shaderProgram_.removeShader(fragmentShader_.get());
>  			fragmentShader_.reset();
>  		}
> +
> +		if (!selectFormat(format))
> +			return -1;
> +
> +		format_ = format;
>  	}
>  
> -	if (!selectFormat(format))
> -		return -1;
> -
> -	format_ = format;
>  	size_ = size;
>  
>  	updateGeometry();
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list