Many compositors are going to receive color management features very soon, which will break Krita's own color management. This task is supposed to gather all information about these changes and invite for discussion on how to do color management in the future.
Windows 11
Windows 11 implement (currently optional) feature called "Auto Color Management":
- blog post and how to activate it: https://devblogs.microsoft.com/directx/auto-color-management/
- pipeline and the usage through DirectX: https://learn.microsoft.com/en-us/windows/win32/direct3darticles/high-dynamic-range
- display calibration (at least how Microsoft sees that): https://learn.microsoft.com/en-us/windows/win32/wcs/display-calibration-mhc
- ICC profiles behavior and legacy compatibility option (doesn't work with Krita): https://learn.microsoft.com/en-us/windows/win32/wcs/advanced-color-icc-profiles
Bascially, Windows 11 implements a color management at the GPU level. The user should provide a custom made ICC profile with non-standard tags, which describes the display with the following traits [see question 1]:
- color primaries (standard tags)
- white point (standard tags)
- XYZ white point adaptation matrix (non-standard tag)
- custom LUT for the final (delinearized) color (non-standard tag)
There is an application that can convert normal ICC profiles generated with DispCAL into the new MHC2 format: https://github.com/dantmnf/MHC2/tree/master
With these changes, the client application (e.g. Krita) loses all access to the display pixel values and cannot control it anymore. The application can create a surface of any of the following types:
- sRGB 8-bit
- scRGB 16-bit FP (with extra range available via negative values) [see question 2]
- Rec. 2020 PQ 10bit
This surface will later be converted into the "canonical composition color space (CCCS)", which is scRGB with negative values, composed with other windows/applications and then fed to the display calibration pipeline. All the conversions are performed with Absolute colorimetric intent, that is, all the values outside the destination range are just clipped [see questions 3, 4, 5]
Questions:
- Is this format enough to do proper color management for a display? (should we ask people from DispCAL for that?)
- Does LCMS actually support this extra range of scRGB available with negative values?
- Can we actually do any color proofing with this pipeline? How should we do that? Will it involve extra color conversions and how many?
- Will we lose any precision because of the clipping in the "calibration pipeline"? I guess we are now locked in "Absolute colorimetric" intent (unless the user adjusts that via a different king of profile, though I have no Idea how)
Wayland
Wayland is going to do something like that, except they plan to pull the entire LCMS into the pipeline and allow ICC-tags for the surfaces (I have no idea who needs that actually).
- Wayland protocol proposal: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/14
- KWin discussion: https://invent.kde.org/plasma/kwin/-/issues/11#note_671440
They both plan to do the same thing and none of them plan to allow any kind of pass-through or raw surface modes, which will cause exactly the same problems and with Windows 11 (and the same troubles)