From patchwork Tue Dec 2 13:45:44 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: 25333 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 A0DF7C3333 for ; Tue, 2 Dec 2025 13:46:35 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E4FF861009; Tue, 2 Dec 2025 14:46:34 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="c8cgNY2a"; dkim-atps=neutral Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9517760D36 for ; Tue, 2 Dec 2025 14:46:28 +0100 (CET) Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-477770019e4so46200895e9.3 for ; Tue, 02 Dec 2025 05:46:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1764683188; x=1765287988; 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=iKJW+qI1D70zuWFggqa2ta4Vy4rY99zX/Wr7gC8b7TM=; b=c8cgNY2aiE97JeKabvZquTpqaCc31i/DQ0tyUCEW9wIoIGiMmd3dBztYgoVdMAgUjb SmWsT2AUBdI2fa+8nwnTUxhBtRrr1Lsb8wGPOVVVrPKi3fTEsb896T2WWfWfdZRNm3C8 2dKb8GFsYPZV++d2YsFvO+f4IaFFmIyySxNf8gdciZ/yNzu5nI8w2FwCPTTSIKhhbjG6 x5bJqIMyKbqHJXmG/nQsF92zhpnP0pOTaostXXJq66n+Ze3CAUSWsiEuaptoLF3Xntq8 8vDDGTO+NThciLxBq0lmIJjUPmyjuO6C5vqPodB5gj0805u1xbPfOghz/r5WTBHnAsVs qwoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764683188; x=1765287988; 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=iKJW+qI1D70zuWFggqa2ta4Vy4rY99zX/Wr7gC8b7TM=; b=HKiACh76tc9PcdE1CQXqoojj4qD56Vodp4sCaSncd+ErpFtJlXezMcF7j3pXNBhZZM l0En7opFxc10PuJu4LUdJ+fZ7r8hhdk9ea9ONmr7uu5hr8VaBpMTQ360EUnE6HbX8ZAF XcICJOtsV+cstNbbG2JNWlOU5wYZhwz37QjmRy0VOE7g75V3LXcVff23yvREZV0nmsPT s1aNYyajZGNsaLeD1praT1+PMzxTxfD3AM9hMFk2KT8/bEn6qjKSajU6ac72LZix5jVA DHueK29Dc2iz2gnFpbtyLkIAF2Vt2Ov3cO3vvKmmR/2PbG0vJtOkH0O4cxuiDmGgXNgz DBYw== X-Gm-Message-State: AOJu0Yz4uSahjbd7EzeRerBD/2IFpsIjafRm5u5lzgMIPeqlwZ3mp+lV oIj1T8ZRAAumkmcyCrfG+B/Pnw+y6z5DRTsYt3R5fCf5omNKKgj8su238QTrPitUpe7632ZFyrz zc99L X-Gm-Gg: ASbGncv2VQwl+ztqHesG8tFhPRtbFn96ZwEcS0HBJ5RzeSoRRwuYv+FmgnVO320BY1R CizEwQELEFkyeIaRGFl++RE5dvMOZ7XLw5aFFkpxqKrkH4gD77rwL1lPRmXWYf2eKmRaSPF67H1 jwycBRT0/e8xk4xWHaXSEKz19GFMq1POdwv9zHCM5464ZILThun0ya+TrdHtY0B2al+xgTyayn1 q5mNbkcigaptcg5WNSP2m+dGOSZfclWkaIWG+VsfXps15fJZF/wi67WivqmXWXxnODnMyc5+J1N GUUSg0s9e4ZEle5DqNc4bwjbTW/ZJOQB8NvS+pLJNMcQouEtRYW2gmAv9g60V6Hi9v7LLvoykof hL4eCEHdciFX5xWJZ1BhyK22UDRrhprzj/zffDa0G5YpTln3NUEMCtBwLAQFHDRD35x5/tFrHJT o/I6OxrjwLJpz72IWNArvBQ3eiNRr3TSpbFIPs6bEx7Ji0FV6fO+NuKRPI4OzYdwiHHtc= X-Google-Smtp-Source: AGHT+IHz2/XT49PRMxU/vKG2gW16uJDgt0WfXXwcJ1HuEP2BZT7w6AX55MOMdUfuv9MEAgfqIdTGzQ== X-Received: by 2002:a05:600c:c48e:b0:477:58:7cf4 with SMTP id 5b1f17b1804b1-47904acef07mr289061985e9.4.1764683187777; Tue, 02 Dec 2025 05:46:27 -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-47926f0ec69sm19383375e9.1.2025.12.02.05.46.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 05:46:26 -0800 (PST) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: pavel@ucw.cz, Bryan O'Donoghue , Kieran Bingham Subject: [PATCH v6 24/24] libcamera: software_isp: Add a gpuisp todo list Date: Tue, 2 Dec 2025 13:45:44 +0000 Message-ID: <20251202134544.662446-25-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251202134544.662446-1-bryan.odonoghue@linaro.org> References: <20251202134544.662446-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" List the series of things to do in GPU ISP in perceived order of difficulty. Acked-by: Kieran Bingham Signed-off-by: Bryan O'Donoghue --- src/libcamera/software_isp/gpuisp-todo.txt | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/libcamera/software_isp/gpuisp-todo.txt diff --git a/src/libcamera/software_isp/gpuisp-todo.txt b/src/libcamera/software_isp/gpuisp-todo.txt new file mode 100644 index 000000000..768dcc320 --- /dev/null +++ b/src/libcamera/software_isp/gpuisp-todo.txt @@ -0,0 +1,83 @@ +List the TODOs in perceived order of ease. + +Version 3: +Use dma-buf handle to generate upload texture: + - eglCreateImageKHR can be used to generate the upload texture i.e. + to feed the bayer data into the GPU. + +Denoising: + - As below still TBD + +Dead pixel correction: + - As below still TBD + +Lense shading correction: + - This is WIP but as yet still TBD + +Lense flare correction: + - Not WIP still TBD + +processFrame() to run in its own thread: + - processFrame() runs in the context of the Debayer::process() + thread. Robert Mader suggested and it seems like a good + suggestion too to run processFrame() in its own thread. + +Version 2: +Make GPUISP default: + - Right now the environment variable allows over-riding to swtich + from CPU to GPU. + - Once we support 24 BPP output on GPUISP we will have the same + pixel format support as CPU and can set the default to GPU without + regressing functionality + +glTexture1D: + - Initial code was developed for < GLES 2.O but since we have fixed + on GLES >= 2.0 this means we can use glTexture1D + - Provided this is so amend the shaders to do val = texture(x, y, 0); + not texture(x, y, 0.5) the 0.5 is because of using glTexture2D + +Denoising: + - Run a denoise algorithm in the shaders + - Supply a control to influence the noise-floor ? + +Dead pixel correction: + - Add logic to correct dead pixels in the fragment shaders + +Version 1: +24 bit output support: + - Take the BPP we already capture and get a 24 bit GBM surface + - Pass a compile-time parameter to the shaders to tell them to do + gl_FragColor = rgb not gl_FragColor = rgba + - Version 2: + This is not possible. + gl_FragColor expects vec4 not vec3 on the output. + If you really want RGB888 run cpuisp. + +Surfaceless GBM: + - We get a GBM surface and then have to swap buffers + If we rework for surfaceless GBM and EGL then the swap buffer can + be dropped. + - Version 2: + Complete GBM surface removed, memcpy() phase removed also + +dma-buf texture upload: + - Currently we pass the input buffer to glCreateTexture2D. + We should be able to make the upload of the input buffer go faster + by using eglCreateImageKHR and enumerated the dma-buf contents. + - Version 2: + Complete sm8250 test platform shows 20x performance increase + with CCM. + +Render-to-texture: + - Right now we render to the GBM provided surface framebuffer + and then memcpy from that buffer to the target output buffer. + This necessitates flushing the cache on the target buffer in + addition to the memcpy(). + - Render-to-texture where we generate the target framebuffer + directly from a dma-buf handle will mitigate the memcpy() phase. + - It should be the case then that the consumer of the output buffer + i.e. the thing that's not libcamera is responsible to flush the cache + if-and-only-if that user writes to the buffer. + - We need to flush the cache on the buffer because we are memcpying() to it. + - Version 2: + Done in version 2