10bit display output?

Hi, @cgidesign!

Windows supports three output modes for graphics data:

  1. sRGB 8-bit

  2. scRGB 16-bit (we call that “Rec. 709 Linear (16 bit)”). This is a widely hated colorspace, which is probably the best choice for you task. You can read about that here: scRGB - Wikipedia

  3. Rec 2020 PQ 10-bit, which is a color space, specifically designed for HDR output. If you use it for normal SDR data, you will lose some precision in comparison to scRGB 16-bit. You can read about that here: Rec. 2100 - Wikipedia

Example: I set the image color space to sRGB and the bit depth to 16 in Krita.
In that case I have the RGB primaries as defined in the sRGB spec. and a bit depth of 16. Now I choose Rec. 709 Linear (16 bit) in Display settings.
What happens with the image data when sent to the monitor?

There is a bit of an issue with how all these HDR modes are defined in Windows:

  • if you have the new Windows 10 advanced color management feature enabled, and have a specifically crafted ICC MHC profile generated (I know no tools that are capable of that, btw), then Windows will apply this calibration and profiling data to the output data and send it to the display. Mind you, that color proofing feature of Krita will not work in this case.

  • if you don’t have the new color management feature enabled, then the data of your image will be delinearized with srgb-trc, downsampled to 8/10-bits (depending on the driver implementation) and sent to the display directly without any color management (that is how HDR functionality is currently supposed to work, I’m afraid). If you have legacy vcgt tag loaded into GPU, then this trc will also be applied in the process. What happens in this case is basically a mess, not standardized and should be tested on specific hardware/driver combination individually.

If you don’t have any HDR features enabled in Krita or Windows, don’t have Advanced Color Mnaagement feature enabled, and have “sRGB 8-bit” selected, then Krita performs the entire color management itself: converts the image data to the monitor profile selected in Krita and sends this data directly to Windows (in 8-bits), where Windows passes this data directly to the display (applying vcgt, if present)

6 Likes