From patchwork Tue Oct 27 12:28:33 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Remy Alipoursafari X-Patchwork-Id: 28647 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 97A0CC324C for ; Tue, 27 Oct 2026 12:30:49 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4EF906905A; Tue, 27 Oct 2026 13:30:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=collabora.com header.i=remy.alipoursafari@collabora.com header.b="An/9vOIV"; dkim-atps=neutral Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9CF8D69046 for ; Tue, 27 Oct 2026 13:30:47 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; t=1793104242; cv=none; d=zohomail.com; s=zohoarc; b=UJwil+4LXpK7DmNX78y67JXpb/g7KQ6xp7jH1uE5w6HJrZwM80WUacT9W5fhWyoK5GdCqBtESbkPkCXl3TU6KvfIu19vMXIgC2RV7Fub8acUG5SlHbBNO2TAkIg0DvFZJnMpZYMKqyoCGOV88WxVfh+u1S05oBuz17UQ3uRt7DU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793104242; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=hliVJPPJEhEoMnY/bxNdfqV4mjTsW3Of13AwFYwwVfs=; b=hM4P/H++KO3YoFbGLC1HzQG1fpYyzXooOZfEnRu0bKPY21Z3MUUprp1P6x6Jz/1dGmoUWx9uupDIR+NI6oI23jxgDIKb9E3bmbr/hsqJnm90aKuwrz7Y70K4Hs/toRDT7aCN0ppThrEvMHgNpU0RsoEHdR8xLSxopxLMXexybmI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=remy.alipoursafari@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1793104242; s=zohomail; d=collabora.com; i=remy.alipoursafari@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=hliVJPPJEhEoMnY/bxNdfqV4mjTsW3Of13AwFYwwVfs=; b=An/9vOIVgYUSdbyW1CjbxNX8TZTGopTxnxU/9VDK61rlp6ZMpHcU5mSpm63ZF8Bu YJcixWtG+ZZmoAMxhASrrYCLHch53Z1+imVJZ0eM49diWWkpNa76a5esHPlr2TCENZI fpXKxvT7938jQHnzx1M20/hmqYm62557aSzPd3K8= Received: by smtp.zohomail.com with SMTPS id 179310423759764.61029320206933; Tue, 27 Oct 2026 05:30:37 -0700 (PDT) From: Remy Alipoursafari To: libcamera-devel@lists.libcamera.org Cc: jacopo.mondi@ideasonboard.com, laurent.pinchart@ideasonboard.com, Remy Alipoursafari Subject: [PATCH v2 3/3] libcamera: software_isp: debayer_egl: Only assign static shader variables once Date: Wed, 28 Oct 2026 01:28:33 +1300 Message-ID: <20261027122844.56616-4-remy.alipoursafari@collabora.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261027122844.56616-1-remy.alipoursafari@collabora.com> References: <20261027122844.56616-1-remy.alipoursafari@collabora.com> MIME-Version: 1.0 X-ZohoMailClient: External X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Both uniforms and attributes in GLSL do not change from one shader invocation to another, allowing static value assignments to be moved out of the main loop, and only be assigned on start. This results in only a negligible performance increase. Signed-off-by: Remy Alipoursafari --- src/libcamera/software_isp/debayer_egl.cpp | 21 +++++++++++++-------- src/libcamera/software_isp/debayer_egl.h | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp index 5236e1f9..1386cb54 100644 --- a/src/libcamera/software_isp/debayer_egl.cpp +++ b/src/libcamera/software_isp/debayer_egl.cpp @@ -298,6 +298,8 @@ int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputForm return -ENODEV; } + setShaderUniformValues(); + return 0; } @@ -408,7 +410,7 @@ uint32_t DebayerEGL::preferredInputStride(const PixelFormat &inputFormat, const return info.stride(size.width, 0, 256); } -void DebayerEGL::setShaderVariableValues(eGLImage &eglImageIn, const DebayerParams ¶ms) +void DebayerEGL::setShaderUniformValues() { /* * Raw Bayer 8-bit, and packed raw Bayer 10-bit/12-bit formats @@ -459,13 +461,6 @@ void DebayerEGL::setShaderVariableValues(eGLImage &eglImageIn, const DebayerPara glVertexAttribPointer(attributeTexture_, 2, GL_FLOAT, GL_TRUE, 2 * sizeof(GLfloat), tcoordinates); - /* - * Set the sampler2D to the respective texture unit for each texutre - * To simultaneously sample multiple textures we need to use multiple - * texture units - */ - glUniform1i(textureUniformBayerDataIn_, eglImageIn.texture_unit_uniform_id_); - /* * These values are: * firstRed = tex_bayer_first_red - bayer_8.vert @@ -496,6 +491,16 @@ void DebayerEGL::setShaderVariableValues(eGLImage &eglImageIn, const DebayerPara << " textureUniformStep_.y " << Step[1] << " textureUniformStrideFactor_ " << Stride << " textureUniformProjMatrix_ " << textureUniformProjMatrix_; +} + +void DebayerEGL::setShaderVariableValues(eGLImage &eglImageIn, const DebayerParams ¶ms) +{ + /* + * Set the sampler2D to the respective texture unit for each texutre + * To simultaneously sample multiple textures we need to use multiple + * texture units + */ + glUniform1i(textureUniformBayerDataIn_, eglImageIn.texture_unit_uniform_id_); /* Pre-transpose matrix for GLES 2.0. */ Matrix ccm = params.combinedMatrix.transpose(); diff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/debayer_egl.h index cbbc6a45..45692aa4 100644 --- a/src/libcamera/software_isp/debayer_egl.h +++ b/src/libcamera/software_isp/debayer_egl.h @@ -66,6 +66,7 @@ private: static int getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config); int initBayerShaders(PixelFormat inputFormat, PixelFormat outputFormat); int getShaderVariableLocations(); + void setShaderUniformValues(); void setShaderVariableValues(eGLImage &eGLImageIn, const DebayerParams ¶ms); int debayerGPU(FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms, std::optional *mappedInputBuffer, std::optional *inputBufferDmaSyncer);