How to handle colorspace aware output on Windows and Linux?

Started by
0 comments, last by fllwr0491 3 years ago

[1] mentions that Windows 10 introduced "advanced color" mode to DWM/DXGI/Windows.UI.Composition.
However it lacks detailed information.

[1] https://docs.microsoft.com/en-us/windows/win32/direct3darticles/high-dynamic-range

I am asking for desktop media (image/video) applications, and would like to know how things works first.

Assumes colorspace aware processing is done, the question is how to setup output and maybe apply final conversion+transfer function.

Since "advanced color" only cares for HDR, both with and without "advanced color" have to be considered.

1. Color profiles in Windows.

  • 1-A. How to query the color profile of a display monitor?
    I saw APIs in icm.h, but they looks verbose and confusing. I would appreciate some explanation or examples.
  • 1-B. How to map GPUs/display monitors between DXGI/VK and those ids used by icm.h?
  • 1-C. How to temporarily remove/change color profile of a display monitor?

2. About IDXGISwapChain3::SetColorSpace1(DXGI_COLOR_SPACE_TYPE), which seems to be the only API in DXGI to control output color:

  • 2-A. What actually does this API do?
    Does it mean "reinterpret as this colorspace", or "convert from this colorspace" by DWM or driver?
  • 2-B. If it means "convert", how to query "native" support?
  • 2-C. What does DXGI_COLOR_SPACE_TYPE enum values means? The enum names are difficult to understand.
  • 2-D. What is DXGI_COLOR_SPACE_TYPE::DXGI_COLOR_SPACE_CUSTOM? Is it possible to config a custom color space?

3. What is the best practice for handling output?

  • 3-A. Without "advanced color", is it better to apply custom gamma/transfer function than use DXGI gamma control?
  • 3-B. With "advanced color", is it better to apply color profile+transfer function than rely on DWM or driver?

4. VK, GL or vendor specific on Windows.

  • 4-A. Is there any standard way for set output or use DWM/driver transform in VK/GL?
  • 4-B. In case of fullscreen exclusive mode, is it possible to set output or use DWM/driver transform via vendor-specific APIs?

5. What about Linux?

  • 5-A. Beginning question: what is the most common used API for Linux games or heavy graphics applications?
  • 5-B. How does current Linux color management works?
  • 5-C. Are HDR on Linux ready, WIP or without a standard design?

This topic is closed to new replies.

Advertisement