[RFC PATCH v2 00/17] Color Pipeline API w/ VKMS
Harry Wentland
harry.wentland at amd.com
Thu Oct 19 21:21:16 UTC 2023
This is an early RFC set for a color pipeline API, along with a
sample implementation in VKMS. All the key API bits are here.
VKMS now supports two named transfer function colorops and we
have an IGT test that confirms that sRGB EOTF, followed by its
inverse gives us expected results within +/- 1 8 bpc codepoint
value.
This patchset is grouped as follows:
- Patches 1-2: couple general patches/fixes
- Patches 3-5: introduce kunit to VKMS
- Patch 6: description of motivation and details behind the
Color Pipeline API. If you're reading nothing else
but are interested in the topic I highly recommend
you take a look at this.
- Patches 7-15: Add core DRM API bits
- Patches 15-17: VKMS implementation
There are plenty of things that I would like to see here but
haven't had a chance to look at. These will (hopefully) be
addressed in future iterations:
- Abandon IOCTLs and discover colorops as clients iterate the pipeline
- Add color_pipeline client cap and deprecate existing color encoding and
color range properties.
See https://lists.freedesktop.org/archives/dri-devel/2023-September/422643.html
- Add CTM colorop to VKMS
- Add custom LUT colorops to VKMS
- Add pre-blending 3DLUT with tetrahedral interpolation to VKMS
- How to support HW which can't bypass entire pipeline?
- Add ability to create colorops that don't have BYPASS
- Can we do a LOAD / COMMIT model for LUTs (and other properties)?
IGT tests can be found at
https://gitlab.freedesktop.org/hwentland/igt-gpu-tools/-/merge_requests/1
IGT patches are also being sent to the igt-dev mailing list.
libdrm changes to support the new IOCTLs are at
https://gitlab.freedesktop.org/hwentland/drm/-/merge_requests/1
If you prefer a gitlab MR for review you can find it at
https://gitlab.freedesktop.org/hwentland/linux/-/merge_requests/5
A slightly different approach for a Color Pipeline API was sent by
Uma Shankar and can be found at
https://patchwork.freedesktop.org/series/123024/
The main difference is that his approach is not introducing a new DRM
core object but instead exposes color pipelines via blob properties.
There are pros and cons to both approaches.
v2:
- Rebased on drm-misc-next
- Introduce a VKMS Kunit so we can test LUT functionality in vkms_composer
- Incorporate feedback in color_pipeline.rst doc
- Add support for sRGB inverse EOTF
- Add 2nd enumerated TF colorop to VKMS
- Fix LUTs and some issues with applying LUTs in VKMS
Cc: Ville Syrjala <ville.syrjala at linux.intel.com>
Cc: Pekka Paalanen <pekka.paalanen at collabora.com>
Cc: Simon Ser <contact at emersion.fr>
Cc: Harry Wentland <harry.wentland at amd.com>
Cc: Melissa Wen <mwen at igalia.com>
Cc: Jonas Ådahl <jadahl at redhat.com>
Cc: Sebastian Wick <sebastian.wick at redhat.com>
Cc: Shashank Sharma <shashank.sharma at amd.com>
Cc: Alexander Goins <agoins at nvidia.com>
Cc: Joshua Ashton <joshua at froggi.es>
Cc: Michel Dänzer <mdaenzer at redhat.com>
Cc: Aleix Pol <aleixpol at kde.org>
Cc: Xaver Hugl <xaver.hugl at gmail.com>
Cc: Victoria Brekenfeld <victoria at system76.com>
Cc: Sima <daniel at ffwll.ch>
Cc: Uma Shankar <uma.shankar at intel.com>
Cc: Naseer Ahmed <quic_naseer at quicinc.com>
Cc: Christopher Braga <quic_cbraga at quicinc.com>
Cc: Abhinav Kumar <quic_abhinavk at quicinc.com>
Cc: Arthur Grillo <arthurgrillo at riseup.net>
Cc: Hector Martin <marcan at marcan.st>
Cc: Liviu Dudau <Liviu.Dudau at arm.com>
Cc: Sasha McIntosh <sashamcintosh at google.com>
Harry Wentland (17):
drm/atomic: Allow get_value for immutable properties on atomic drivers
drm: Don't treat 0 as -1 in drm_fixp2int_ceil
drm/vkms: Create separate Kconfig file for VKMS
drm/vkms: Add kunit tests for VKMS LUT handling
drm/vkms: Avoid reading beyond LUT array
drm/doc/rfc: Describe why prescriptive color pipeline is needed
drm/colorop: Introduce new drm_colorop mode object
drm/colorop: Add TYPE property
drm/color: Add 1D Curve subtype
drm/colorop: Add BYPASS property
drm/colorop: Add NEXT property
drm/colorop: Add atomic state print for drm_colorop
drm/colorop: Add new IOCTLs to retrieve drm_colorop objects
drm/plane: Add COLOR PIPELINE property
drm/colorop: Add NEXT to colorop state print
drm/vkms: Add enumerated 1D curve colorop
drm/vkms: Add kunit tests for linear and sRGB LUTs
Documentation/gpu/rfc/color_pipeline.rst | 347 ++++++++
drivers/gpu/drm/Kconfig | 14 +-
drivers/gpu/drm/Makefile | 1 +
drivers/gpu/drm/drm_atomic.c | 155 ++++
drivers/gpu/drm/drm_atomic_helper.c | 12 +
drivers/gpu/drm/drm_atomic_state_helper.c | 5 +
drivers/gpu/drm/drm_atomic_uapi.c | 110 +++
drivers/gpu/drm/drm_colorop.c | 384 +++++++++
drivers/gpu/drm/drm_crtc_internal.h | 4 +
drivers/gpu/drm/drm_ioctl.c | 5 +
drivers/gpu/drm/drm_mode_config.c | 7 +
drivers/gpu/drm/drm_mode_object.c | 3 +-
drivers/gpu/drm/drm_plane_helper.c | 2 +-
drivers/gpu/drm/vkms/Kconfig | 20 +
drivers/gpu/drm/vkms/Makefile | 6 +-
drivers/gpu/drm/vkms/tests/.kunitconfig | 4 +
drivers/gpu/drm/vkms/tests/Makefile | 4 +
drivers/gpu/drm/vkms/tests/vkms_color_tests.c | 100 +++
drivers/gpu/drm/vkms/vkms_colorop.c | 85 ++
drivers/gpu/drm/vkms/vkms_composer.c | 77 +-
drivers/gpu/drm/vkms/vkms_composer.h | 25 +
drivers/gpu/drm/vkms/vkms_drv.h | 4 +
drivers/gpu/drm/vkms/vkms_luts.c | 802 ++++++++++++++++++
drivers/gpu/drm/vkms/vkms_luts.h | 12 +
drivers/gpu/drm/vkms/vkms_plane.c | 2 +
include/drm/drm_atomic.h | 82 ++
include/drm/drm_atomic_uapi.h | 3 +
include/drm/drm_colorop.h | 235 +++++
include/drm/drm_fixed.h | 2 +-
include/drm/drm_mode_config.h | 18 +
include/drm/drm_plane.h | 10 +
include/uapi/drm/drm.h | 3 +
include/uapi/drm/drm_mode.h | 22 +
33 files changed, 2530 insertions(+), 35 deletions(-)
create mode 100644 Documentation/gpu/rfc/color_pipeline.rst
create mode 100644 drivers/gpu/drm/drm_colorop.c
create mode 100644 drivers/gpu/drm/vkms/Kconfig
create mode 100644 drivers/gpu/drm/vkms/tests/.kunitconfig
create mode 100644 drivers/gpu/drm/vkms/tests/Makefile
create mode 100644 drivers/gpu/drm/vkms/tests/vkms_color_tests.c
create mode 100644 drivers/gpu/drm/vkms/vkms_colorop.c
create mode 100644 drivers/gpu/drm/vkms/vkms_composer.h
create mode 100644 drivers/gpu/drm/vkms/vkms_luts.c
create mode 100644 drivers/gpu/drm/vkms/vkms_luts.h
create mode 100644 include/drm/drm_colorop.h
--
2.42.0
More information about the wayland-devel
mailing list