From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 596A03F5BD7 for ; Tue, 4 Aug 2026 20:35:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785875722; cv=none; b=jYPIALgAHysBcUtDFKaCcUQcKr5EIkJPTsrL05tqR3rJgbMpJBZAI+rlYBDCSrM9LxHgReF7lTcvlhP8nJsjHyls0MJEoG3ET6fIg+WvQy7RuzTvVjQiMOCpD/EJmuztsnpyC8VhsEH5Z6VimGemXQjbgudZcKYxnjiQs6PnULI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785875722; c=relaxed/simple; bh=uU3+iRkaPyUYF5gaVFlEHBvB7HR+TBFtzOa7Ivlw1Hk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=q338CJ2qech38UPKudEG0ezZqr7ZoVNzPVwaBWJBuNxksAhYo1+wHMTY+zIyzi2o+NDhCrXs7OnVSt/gKgGTMnHXphluHjxzc+HVUWeyGGpQHQflzDHTih7AaI4ZfZQvlRaLDLyjFrbOaxgLwLnNHTTxHaOTe60m9klsSTvY9Po= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=fxiFahnF; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="fxiFahnF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1785875719; bh=uU3+iRkaPyUYF5gaVFlEHBvB7HR+TBFtzOa7Ivlw1Hk=; h=From:To:Cc:Subject:Date:From; b=fxiFahnFTFU0u0S+aDFkIqlZwpI1Uo6cXLNC7srnqZp/8SGymTqifAPEgSS+0wDfK fu8vHJiOU66Eb4qk7jEKk3Fs4TWzW1EEb6DqKJjqQwpjFA03hdgHeWm0jYqAf6TLoB 6gL3nNNpbIPaz/SyKt5lxpYFq1tKEp6JFReiJoT+gPQFDCwLAm0ro+amp3nWLiiGpR nCncGcSFIdmign57tY2lKK5DisX8WprThbo/drt6WPdvCbGcxXABgVAlzOX1iunv5q PWZvGoVeZABF4IS1NUDAN0DmOHG6REgPaNkrEPcfSLvPJPNHcJ7ts7wCNn6dtwQzPY Myja8nRuF9hQA== Received: from archlinux (unknown [100.64.1.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: leandrohrb) by bali.collaboradmins.com (Postfix) with ESMTPSA id AE74917E0892; Tue, 04 Aug 2026 22:35:14 +0200 (CEST) From: Leandro Ribeiro To: louis.chauvet@bootlin.com Cc: airlied@gmail.com, alex.hung@amd.com, daniel@fooishbar.org, hamohammed.sa@gmail.com, harry.wentland@amd.com, maarten.lankhorst@linux.intel.com, melissa.srw@gmail.com, mripard@kernel.org, pekka.paalanen@collabora.com, robert.mader@collabora.com, simona@ffwll.ch, tzimmermann@suse.de, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 00/11] drm/vkms: improve color curve LUTs precision Date: Tue, 4 Aug 2026 17:33:40 -0300 Message-ID: <20260804203351.148521-1-leandro.ribeiro@collabora.com> X-Mailer: git-send-email 2.55.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Currently VKMS only supports uniform LUTs. Besides the userspace provided LUTs, it also represents color curves with LUTs, as it can't simply implement the continuous curve formulas (floating-point would be required). This adds support to represent color curves with non-uniform LUTs, improving the precision significantly. It also provides a script that was used to create these LUTs. The optimized LUTs use more samples in regions where the interpolation and quantization errors are higher (usually in regions with a steeper slope). The LUT generator script compares different strategies and uses greedy subdivision, which outperformed the other methods, to generate the optimized LUTs for VKMS. Leandro Ribeiro (11): drm/vkms: rename VKMS_LUT_SIZE to VKMS_GAMMA_LUT_SIZE drm/vkms: allow color curve LUTs to have different sizes drm/vkms: remove TEST_LUT_SIZE drm/vkms: remove linear_eotf drm/vkms: improve the way in which we access LUT member drm/vkms: rename struct vkms_color_lut::base to y drm/vkms: rename get_lut_index() to get_uniform_lut_index() drm/vkms: add support to non-uniform LUT for internal color curves drm/vkms: test sRGB and inverse sRGB LUTs using more samples drm/vkms: add script to create optimized LUTs for color curves drm/vkms: replace uniform sRGB LUT and its inverse with optimal ones .../gpu/drm/vkms/scripts/color-curve-lut.py | 561 +++++++ drivers/gpu/drm/vkms/tests/vkms_color_test.c | 46 +- drivers/gpu/drm/vkms/vkms_composer.c | 127 +- drivers/gpu/drm/vkms/vkms_composer.h | 2 +- drivers/gpu/drm/vkms/vkms_crtc.c | 4 +- drivers/gpu/drm/vkms/vkms_drv.c | 2 +- drivers/gpu/drm/vkms/vkms_drv.h | 13 +- drivers/gpu/drm/vkms/vkms_luts.c | 1469 ++++++++--------- drivers/gpu/drm/vkms/vkms_luts.h | 3 - 9 files changed, 1383 insertions(+), 844 deletions(-) create mode 100644 drivers/gpu/drm/vkms/scripts/color-curve-lut.py -- 2.55.0