Implement Color Pipeline API for amdgpu
This issue will track development in amdgpu to implement the Color Pipeline API.
Prerequisites:
- amdgpu writeback patches https://patchwork.freedesktop.org/series/122537/
- Needed for testing with IGT writeback-based tests, such as kms_colorop
- AMD driver private color properties https://patchwork.freedesktop.org/series/116862/
- Needed for the pieces in amdgpu_dm and DC that hook up the color management operations
- We'll throw away the AMD-specific properties once the Color Pipeline API supports equivalent functionality entirely
- Color Pipeline API RFC https://patchwork.freedesktop.org/series/123446/
- This provides the core functionality in DRM for Color Pipelines
Guidelines:
- All color ops shall be covered by some IGT test that tests the property via writeback and pixel-value comparison with an expected reference (SW computed or static)
- Primary focus is on colorops that support gamescope. Once other compositors bring HDR to live we'll expand support to colorops required by those compositors.
Goal:
An upstreamable implementation of this, which includes:
- IGT tests
- backing by a canonical upstream userspace project (currently targetting gamescope)
1st subgoal:
AMD color pipeline, mirroring the AMD private API created by Melissa. All elements tested via IGT using writeback tests.
2nd subgoal:
Use color pipeline in gamescope as a drop-in replacement of gamescope color management.
Things To Do:
Doc:
-
doc with work outline and dev environment description ( @hwentland)
DRM:
-
get rid of ioctls -
DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE ( @hwentland) -
how will drivers ignore legacy props? -
pass client cap to atomic check/commit? -
or set something on atomic state or plane state?
-
-
better client transitions to/from color pipeline ??? -
reset properties deprecated by DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE when atomic commit comes from client with DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE? -
reset color pipeline when atomic commit comes from client without DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE?
-
-
TYPE doesn't need to be enum; convert -
kunit for drm_fixed.h -
create separate init helpers for each colorop type ( @alex.hung ) -
pass supported curves to helper for initializing 1d curve colorop ( @alex.hung ) -
how to let driver map colorop with internal SW/HW concepts for programming? -
create properties in drm_mode_info? -
informational scaling element -
input/output range for colorops (see Uma's drm_color_lut_range struct) -
"heavy operation" flag or something like it
VKMS:
-
3x4 ctm -
address all comments -
kunit for apply_3x4_matrix -
support pq ??? -
modify composition pipeline to work with 32 UNORM (otherwise PQ loses detail in blacks) -
add high-precision PQ EOTF (basic drm_color_lut entries don't have enough precision) -
add high-precision PQ Inverse EOTF
-
-
custom luts -
3d lut?
IGT:
-
address swick's comments -
address all comments -
bypass color pipeline test -
add 10 bpc support to kms_colorop ( @hwentland) -
update igt_copy_fb to handle 10 fbc (or any format?) ( @hwentland) -
kms_colorop: rework fixtures to handle setup/cleanup cleanly ( @hwentland)
-
-
support 10-bpc SW transforms ( @hwentland) -
test PQ ( @hwentland) -
PQ [0.0, 1.0] ( @hwentland) -
PQ [0.0, 125.0] ( @hwentland)
-
-
two-plane tests -
consolidate igt_color and kms_color_helper??
AMDGPU:
-
branch with amdgpu writeback + melissa's patches + color pipeline patches ( @hwentland) -
Fix client cap (failing kms_properties) ( @hwentland) -
pass plane-XR30-XR30-bypass (expose color pipeline with only bypass pipeline) ( @hwentland) -
pass plane-XR30-XR30-srgb_eotf ( @alex.hung ) -
ignore amd private color when client cap set(we'll instead only create color pipeline if -DAMD_PRIVATE_COLOR is not set) -
mirror AMD Driver Private API for PQ, sRGB, custom for functionality used by gamescope -
degamma -
srgb ( @alex.hung ) -
pq
-
-
3x4 matrix -
HDR multiplier -
shaper -
srgb ( @alex.hung ) -
pq -
custom -
program linear if 3dlut provided but no shaper
-
-
3dlut -
custom 17^3
-
-
blnd -
srgb -
pq
-
-
Dev Environment:
A bunch of patchsets are required for work on this. Development will happen on these branches:
kernel: https://gitlab.freedesktop.org/hwentland/linux/-/commits/amd-color-pipeline
IGT: https://gitlab.freedesktop.org/hwentland/igt-gpu-tools/-/commits/amd-color-pipeline