backend/drm: add support for LUMINANCE KMS property

References: https://lore.kernel.org/dri-devel/20260528054911.1513208-1-superm1@kernel.org/
This commit is contained in:
Simon Ser 2026-05-29 16:56:16 +02:00
parent 82d2cc7c23
commit 4f32a0b76f
5 changed files with 30 additions and 1 deletions

View file

@ -44,7 +44,8 @@ static const uint32_t COMMIT_OUTPUT_STATE =
WLR_OUTPUT_STATE_SIGNAL_TIMELINE |
WLR_OUTPUT_STATE_COLOR_TRANSFORM |
WLR_OUTPUT_STATE_IMAGE_DESCRIPTION |
WLR_OUTPUT_STATE_COLOR_REPRESENTATION;
WLR_OUTPUT_STATE_COLOR_REPRESENTATION |
WLR_OUTPUT_STATE_BRIGHTNESS;
static const uint32_t SUPPORTED_OUTPUT_STATE =
WLR_OUTPUT_STATE_BACKEND_OPTIONAL | COMMIT_OUTPUT_STATE;
@ -118,6 +119,12 @@ bool check_drm_features(struct wlr_drm_backend *drm) {
wlr_log(WLR_INFO, "DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT supported");
}
#endif
#define DRM_CLIENT_CAP_LUMINANCE 8
#ifdef DRM_CLIENT_CAP_LUMINANCE
if (drm->iface == &atomic_iface && drmSetClientCap(drm->fd, DRM_CLIENT_CAP_LUMINANCE, 1) == 0) {
wlr_log(WLR_INFO, "DRM_CLIENT_CAP_LUMINANCE supported");
}
#endif
if (drm->iface == &legacy_iface) {
drm->supports_tearing_page_flips = drmGetCap(drm->fd, DRM_CAP_ASYNC_PAGE_FLIP, &cap) == 0 && cap == 1;
@ -1736,6 +1743,15 @@ static bool connect_drm_connector(struct wlr_drm_connector *wlr_conn,
}
output->adaptive_sync_supported = vrr_capable;
if (wlr_conn->props.luminance != 0) {
if (introspect_drm_prop_range(drm->fd, wlr_conn->props.luminance,
&wlr_conn->luminance_bounds[0], &wlr_conn->luminance_bounds[1])) {
output->brightness_supported = true;
} else {
wlr_log(WLR_ERROR, "Failed to introspect 'LUMINANCE' property");
}
}
size_t edid_len = 0;
uint8_t *edid = get_drm_prop_blob(drm->fd,
wlr_conn->id, wlr_conn->props.edid, &edid_len);