From patchwork Wed Dec 17 10:01:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bryan O'Donoghue X-Patchwork-Id: 25584 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 2F8D6C32DE for ; Wed, 17 Dec 2025 10:02:10 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6C5D561EA7; Wed, 17 Dec 2025 11:02:09 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="NKsBSjra"; dkim-atps=neutral Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 28C8261A37 for ; Wed, 17 Dec 2025 11:01:56 +0100 (CET) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-47798ded6fcso36048175e9.1 for ; Wed, 17 Dec 2025 02:01:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1765965715; x=1766570515; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YOU8yzvJmLe2CYSAv2DGpWHlxVqrCoB7v5e5gKZ8hTI=; b=NKsBSjra9upLRoisqleuGpQA7xkdqUTLqtRWKV7rejY8XrcDK91vZhjjl9GbEtQOUg dNsmtXdXvAhQO4peryfc0Wm7nnOvU2H4DO9vendEsOh1pBqj6Sl53aHGrjKwN//ho8eG AYNE9bKT/gdwJY/hHGgsFoyHS8VBxFe1bIbWELvATn0IZ3JQsv9G9RZb6iN9QW+L6ZnG 43o1OTEiBMJBKfkLl53WqFMbGMTcLgdX6LGAOl4TjnEtAcddGolM2nMM3QqzyaCWl9YX xKQt21SHVe5xekdnXsgn0/5QBct3HtnbHOe4uPrLLknEUPLSyfPw7I1weiiZqQJSQCgR aXLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765965715; x=1766570515; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=YOU8yzvJmLe2CYSAv2DGpWHlxVqrCoB7v5e5gKZ8hTI=; b=scPfkMuUe95USywphR/YocdHzGaVbMiS+7YSm2T1MiAs8ocTK4ZPDQq8SZgjSZdchQ 2MFWH5+Laf9J/2jOjDRfygLAWN/w+TMcmvBDLVQXfe//tSkuheZKxnT8FmeR4oqdLBpX WuTnttNHXMf23hqTX7ByJu2woUlj7qsxyXv+DfwZ2LUei1GOpNHCHJ87e6pJ33I0clQz B/u8MGSGUZZBc+fXYUNg3vISRZuiee8RXTivkMdKHa8n30aJuITy9/8FQRFfSW/1ZH+P h1a9wPc3mC5resi6dM5a0khUNI6yzj9wKeAGiAijPiqgVx+wAmsMf2vrjnXGJ8FKphEY WjVQ== X-Gm-Message-State: AOJu0Yy57cJcvinKMCQICS8cA8o4FZIxfiyvws+4bmuXEN5kGDUr7sNS fmoLmQM3Olh+z6lriV5+ixox8AtuUQE6Zni+ktUR9lItp4i8CQzywx8MMZorMaNuxgvk+8KUIqE HrNLj X-Gm-Gg: AY/fxX5DAUZuauP6tId5Yyt90YQ0w4/8XUFK089b1CwfeVz1/wu9i+oX/Q7VunvBk2Q Uti8FsozYyQvOc1oOAoEYeMZEGS8HbHcEOsQ7U7WXi5cAFfqzIRKMPJ9Z+fs5PxddvuDoO7mJaf YEYOgomWOj807SELz9CxKB4Wt4QrptXwBmqq/tCkC0zDboZ8qGrS4VZAFaL1XZlP8IZHuYpRadt Ybudzc5zEdM9R6FKEYEkj8bnAtNQ+LMn1LrwaOVznK6AYPLxcm6vh0+iLsmO3+//vI1tkoW826s 9MrwNASzB5/Ny00pAZPSKcS5LGlPrvKKGHVtW+UgFpE48HEcJWPRhYRYlrIesDlLe52qWvGU2s4 Uw/5h+nV+Q0KMgqak1LDG1w43LnYnQCDcBLvO+B+jO+ewNkqoYwgS9zOYrMOrsuVoQ0hRkxRMrA aeVh4G7v5m+I0x1vzajFNGy2VDqw+mTsb6t0xVeJPzEIaZ/t2A+GQksQvKvJfUYD60V8g= X-Google-Smtp-Source: AGHT+IGJMDKNayySZ0lAQu9EnYgnZ4Jrj3BMc07TyFmYyzc+DA4wyXGS7AunMx+kZzMnwcx4i3ID5w== X-Received: by 2002:a05:600c:608d:b0:477:632a:fd67 with SMTP id 5b1f17b1804b1-47a8f8c16bfmr194666445e9.12.1765965715380; Wed, 17 Dec 2025 02:01:55 -0800 (PST) Received: from inspiron14p-linux.ht.home (188-141-3-146.dynamic.upc.ie. [188.141.3.146]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47bdc1583fbsm32292585e9.0.2025.12.17.02.01.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Dec 2025 02:01:54 -0800 (PST) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: pavel@ucw.cz, Hans de Goede , Milan Zamazal , Bryan O'Donoghue Subject: [PATCH v9 11/26] libcamera: shaders: Fix input sampling when width != stride Date: Wed, 17 Dec 2025 10:01:23 +0000 Message-ID: <20251217100138.82525-12-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251217100138.82525-1-bryan.odonoghue@linaro.org> References: <20251217100138.82525-1-bryan.odonoghue@linaro.org> MIME-Version: 1.0 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" From: Hans de Goede When bayer_unpacked.vert is calculating the center and x/yCoord values stride != width is taken into account for x/yCoord deltas since it is taken into account by debayer_egl when setting the x part of tex_step uniform. But it is not taken into account for the center.x which is just directly copied from textureIn, leading to the input width sampling covering the entire input stride instead of just covering the input width. Use the existing and currently unused stride_factor uniform to pass the width/stride ratio and correct center.x for this. This fixes the misrendering seen on x86 laptops which is caused by the CSI2 receiver there requiring a stride which is a multiple of 32 often leading to stride != width. Signed-off-by: Hans de Goede Reviewed-by: Milan Zamazal Signed-off-by: Bryan O'Donoghue --- src/libcamera/shaders/bayer_unpacked.vert | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libcamera/shaders/bayer_unpacked.vert b/src/libcamera/shaders/bayer_unpacked.vert index fb5109eee..423dde0fa 100644 --- a/src/libcamera/shaders/bayer_unpacked.vert +++ b/src/libcamera/shaders/bayer_unpacked.vert @@ -21,7 +21,7 @@ attribute vec2 textureIn; uniform mat4 proj_matrix; -uniform vec2 tex_size; /* The texture size in pixels */ +uniform vec2 tex_size; /* The texture size in pixels */ uniform vec2 tex_step; /** Pixel position of the first red pixel in the */ @@ -40,8 +40,10 @@ varying vec4 xCoord; /** of the adjacent pixels.*/ varying vec4 yCoord; +uniform float stride_factor; + void main(void) { - center.xy = textureIn; + center.xy = vec2(textureIn.x * stride_factor, textureIn.y); center.zw = textureIn * tex_size + tex_bayer_first_red; xCoord = center.x + vec4(-2.0 * tex_step.x,