Merge branch 'color-pipeline' into 'master'

Draft: Apply output color transform in KMS

See merge request wlroots/wlroots!5083
This commit is contained in:
Simon Ser 2026-02-01 18:07:12 +00:00
commit 7b02490f00
12 changed files with 290 additions and 20 deletions

View file

@ -0,0 +1,25 @@
#ifndef BACKEND_DRN_COLOR_H
#define BACKEND_DRN_COLOR_H
#include <wlr/util/addon.h>
struct wlr_drm_backend;
struct wlr_drm_crtc;
struct wlr_color_transform;
struct wlr_drm_crtc_color_transform {
struct wlr_color_transform *base;
struct wlr_addon addon; // wlr_color_transform.addons
bool failed;
struct wlr_color_transform_lut_3x1d *lut_3x1d;
float matrix[9];
bool has_matrix;
};
struct wlr_drm_crtc_color_transform *drm_crtc_color_transform_import(
struct wlr_drm_backend *backend, struct wlr_drm_crtc *crtc,
struct wlr_color_transform *base);
void drm_crtc_color_transform_unref(struct wlr_drm_crtc_color_transform *tr);
#endif

View file

@ -15,6 +15,8 @@
#include "backend/drm/properties.h"
#include "backend/drm/renderer.h"
struct wlr_drm_crtc_color_transform;
struct wlr_drm_viewport {
struct wlr_fbox src_box;
struct wlr_box dst_box;
@ -74,6 +76,7 @@ struct wlr_drm_crtc {
bool own_mode_id;
uint32_t mode_id;
uint32_t gamma_lut;
uint32_t ctm;
// Legacy only
int legacy_gamma_size;
@ -152,9 +155,12 @@ struct wlr_drm_connector_state {
struct wlr_drm_syncobj_timeline *wait_timeline;
uint64_t wait_point;
struct wlr_drm_crtc_color_transform *crtc_color_transform;
// used by atomic
uint32_t mode_id;
uint32_t gamma_lut;
uint32_t ctm;
uint32_t fb_damage_clips;
int primary_in_fence_fd, out_fence_fd;
bool vrr_enabled;

View file

@ -35,6 +35,7 @@ struct wlr_drm_crtc_props {
uint32_t vrr_enabled;
uint32_t gamma_lut;
uint32_t gamma_lut_size;
uint32_t ctm;
// atomic-modesetting only

View file

@ -108,4 +108,9 @@ void wlr_color_primaries_to_xyz(const struct wlr_color_primaries *primaries, flo
void wlr_color_transfer_function_get_default_luminance(enum wlr_color_transfer_function tf,
struct wlr_color_luminances *lum);
/**
* Apply a color transfer function's EOTF¹ operation.
*/
float wlr_color_transfer_function_eval_inverse_eotf(enum wlr_color_transfer_function tf, float x);
#endif