From patchwork Tue Jan 6 17:00:47 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bryan O'Donoghue X-Patchwork-Id: 25665 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 5284FBDCC0 for ; Tue, 6 Jan 2026 17:01:22 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CDE6062020; Tue, 6 Jan 2026 18:01:21 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="Cj6eSyyQ"; dkim-atps=neutral Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 99D7962000 for ; Tue, 6 Jan 2026 18:01:19 +0100 (CET) Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-43246af170aso21178f8f.0 for ; Tue, 06 Jan 2026 09:01:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1767718879; x=1768323679; 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=Cj6eSyyQTcA3G0N8aE1jc31EwvELltSe79uyDuTdj6/Q+lyWfCOIOpvguyCw1V5ThM E3amdzxhRXxxw3h3yJVVf+6awAtE7hnIb2UpjBzfUIdcMyoy3n1hT8gESsswz5QGPaVv pX+PZdoIs1mB1zveuVHKVLdzXQYZb8me7OrHV22fZP+tK7apGL4lLnZZVaRiECDyO7Y/ kyOfFWom5Yw4njDXUmbCb1vi9SjEPXguOgIX4ERKuMI5CpXOUTlM+ibow6eMlR6VyQ+z 8gajjbgwxDMP4gpSe8459jCyxkpIxmcQOtWVp9YahCAxP/6gyLcNIn2HXKgyJRpr9spP adNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767718879; x=1768323679; 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=Gs3x0jP15SOjT0y5tvBx3ZY8psYs/LLBbj6Cc7lEM8sINkKBlVVLdmkP4ABp2abipD fLNBXMZVK+X7uNxYga39jquvJ1nVFau5Ubrz6fBpyE5OQ6HAjMcy6cDGwmcUiA6IgiK6 8sd9X9Zwk9GWowNhkhvxoHuhuXsgoXARVIsH+Q7x1KXm4k9hpK6DPpCHJDaGXgvK0S0z cmUqr5Cs/7KKoZ2NbSU4jZZ8/7+gh0ygNhbE3lRF6EdgjVhUkulN8LZm+KFhFUFwHhAS pXMWGEjJWo5gpx/KyO9yjCKxuDRmNG28IUQAzDFCyECOwSlWvZ3YU5uDvueNyUyrl/jf e6tA== X-Gm-Message-State: AOJu0Yzmvv/NC1UJIp+RI6I3UT3cXUuXAsQwpQ4beACb0G8S9irVetq7 /OxipWmEilThalX70eVEcyr3rLxIyGe7crsyOJPNeG/nPIwCRqRz5YbRn5OmhjSrBunxx1wIppV K+5w6RhQ= X-Gm-Gg: AY/fxX6CZSPfhusEr4pNA5qU3ME8e2/xhj5al0FGoBSDKAV5NE49C5EO2t+FMicFuN6 mks2DLYD1S9gt5z++eJt5e/yfeqHl1d6B3OMcWzx/vv5Fepu7AHQ5fhfJsaFTYfpntJZFrH2kTr kok/s1ywmGlqmk0pGJhjS1xe83loWAM3hjKJJI10WmE6KMNP47nQbRMxVvdIyX1OH327E53rc0u NsVVwJwzW4fTGQLUU6phbMkzwmj2jeqn1kQtyhnLd5XzdiM3mj6u3hVGZNm1tV6jwNdDHABiaMk VwBZcgZ7gv91bONSHDugZl3SXMFVjLuAX5+yCpLTBZeq6xuMZXAGNy7Nf/SZDxVBBFw4Q9lVrO3 5SfBA+KIixFBaF5/jq6GXdmGsu3HXqLoSZs3Wd7GMmPkgT3ZgcCG8ZIHdum1mKOeTcXoBn4dLIP qdxTY0SvsBZyzPpOxrIC4nYFJHR7mx+XjThvglj3I6P+tHI4Tg0Id2yhhEEZ+vXyrmGXHWVBKwk RqVLw== X-Google-Smtp-Source: AGHT+IFFSjBWSiPnPvuCiBStC+Y7T1LagObIdM5dxP3tcDUZA9r60pb4D8NTxBLaDnxWh9vsZV8tBA== X-Received: by 2002:a5d:5a4f:0:b0:430:f2ee:b21f with SMTP id ffacd0b85a97d-432bcfc4689mr3196825f8f.22.1767718877380; Tue, 06 Jan 2026 09:01:17 -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 ffacd0b85a97d-432bd0dadcfsm5515322f8f.3.2026.01.06.09.01.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 09:01:16 -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 v11 12/24] libcamera: shaders: Fix input sampling when width != stride Date: Tue, 6 Jan 2026 17:00:47 +0000 Message-ID: <20260106170059.56193-13-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260106170059.56193-1-bryan.odonoghue@linaro.org> References: <20260106170059.56193-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,