[Intel-gfx] [RFC v2 00/22] Add Support for Plane Color Lut and CSC features

Uma Shankar
2021-09-06T21:01:10Z

This is how a typical display color hardware pipeline looks like:
+-------------------------------------------+
| RAM |
| +------+ +---------+ +---------+ |
| | FB 1 | | FB 2 | | FB N | |
| +------+ +---------+ +---------+ |
+-------------------------------------------+
| Plane Color Hardware Block |
+--------------------------------------------+
| +---v-----+ +---v-------+ +---v------+ |
| | Plane A | | Plane B | | Plane N | |
| | DeGamma | | Degamma | | Degamma | |
| +---+-----+ +---+-------+ +---+------+ |
| | | | |
| +---v-----+ +---v-------+ +---v------+ |
| |Plane A | | Plane B | | Plane N | |
| |CSC/CTM | | CSC/CTM | | CSC/CTM | |
| +---+-----+ +----+------+ +----+-----+ |
| | | | |
| +---v-----+ +----v------+ +----v-----+ |
| | Plane A | | Plane B | | Plane N | |
| | Gamma | | Gamma | | Gamma | |
| +---+-----+ +----+------+ +----+-----+ |
| | | | |
+--------------------------------------------+
+------v--------------v---------------v-------|
|| ||
|| Pipe Blender ||
+--------------------+------------------------+
| | |
| +-----------v----------+ |
| | Pipe DeGamma | |
| | | |
| +-----------+----------+ |
| | Pipe Color |
| +-----------v----------+ Hardware |
| | Pipe CSC/CTM | |
| | | |
| +-----------+----------+ |
| | |
| +-----------v----------+ |
| | Pipe Gamma | |
| | | |
| +-----------+----------+ |
| | |
+---------------------------------------------+
|
v
Pipe Output

This patch series adds properties for plane color features. It adds
properties for degamma used to linearize data and CSC used for gamut
conversion. It also includes Gamma support used to again non-linearize
data as per panel supported color space. These can be utilize by user
space to convert planes from one format to another, one color space to
another etc.

Userspace can take smart blending decisions and utilize these hardware
supported plane color features to get accurate color profile. The same
can help in consistent color quality from source to panel taking
advantage of advanced color features in hardware.

These patches add the property interfaces and enable helper functions.
This series adds Intel's XE_LPD hw specific plane gamma feature. We
can build up and add other platform/hardware specific implementation
on top of this series.

Credits: Special mention and credits to Ville Syrjala for coming up
with a design for this feature and inputs. This series is based on
his original design and idea.

Note: Userspace support for this new UAPI will be done on Chrome in
alignment with weston and general opensource community.
Discussion ongoing with Harry Wentland, Pekka and community on color
pipeline and UAPI design. Harry's RFC below:
https://patchwork.freedesktop.org/series/89506/
We need to converge on a common UAPI interface which caters to
all the modern color hardware pipelines.

ToDo: State readout for this feature will be added next.

v2: Added UAPI description and added change in the rfc section of
kernel Documentation folder

Uma Shankar (22):
drm: RFC for Plane Color Hardware Pipeline
drm: Add Enhanced Gamma and color lut range attributes
drm: Add Plane Degamma Mode property
drm: Add Plane Degamma Lut property
drm/i915/xelpd: Define Degamma Lut range struct for HDR planes
drm/i915/xelpd: Add register definitions for Plane Degamma
drm/i915/xelpd: Enable plane color features
drm/i915/xelpd: Add color capabilities of SDR planes
drm/i915/xelpd: Program Plane Degamma Registers
drm/i915/xelpd: Add plane color check to glk_plane_color_ctl
drm/i915/xelpd: Initialize plane color features
drm/i915/xelpd: Load plane color luts from atomic flip
drm: Add Plane CTM property
drm: Add helper to attach Plane ctm property
drm/i915/xelpd: Define Plane CSC Registers
drm/i915/xelpd: Enable Plane CSC
drm: Add Plane Gamma Mode property
drm: Add Plane Gamma Lut property
drm/i915/xelpd: Define and Initialize Plane Gamma Lut range
drm/i915/xelpd: Add register definitions for Plane Gamma
drm/i915/xelpd: Program Plane Gamma Registers
drm/i915/xelpd: Enable plane gamma

Documentation/gpu/drm-kms.rst | 90 +++
Documentation/gpu/rfc/drm_color_pipeline.rst | 167 ++++++
drivers/gpu/drm/drm_atomic.c | 1 +
drivers/gpu/drm/drm_atomic_state_helper.c | 12 +
drivers/gpu/drm/drm_atomic_uapi.c | 38 ++
drivers/gpu/drm/drm_color_mgmt.c | 177 +++++-
.../gpu/drm/i915/display/intel_atomic_plane.c | 6 +
.../gpu/drm/i915/display/intel_atomic_plane.h | 2 +
drivers/gpu/drm/i915/display/intel_color.c | 513 ++++++++++++++++++
drivers/gpu/drm/i915/display/intel_color.h | 2 +
.../drm/i915/display/skl_universal_plane.c | 15 +-
drivers/gpu/drm/i915/i915_drv.h | 3 +
drivers/gpu/drm/i915/i915_reg.h | 176 +++++-
include/drm/drm_mode_object.h | 2 +-
include/drm/drm_plane.h | 81 +++
include/uapi/drm/drm_mode.h | 58 ++
16 files changed, 1337 insertions(+), 6 deletions(-)
create mode 100644 Documentation/gpu/rfc/drm_color_pipeline.rst

--
2.26.2