diff --git a/backend/drm/atomic.c b/backend/drm/atomic.c index 534879143..03a3a963b 100644 --- a/backend/drm/atomic.c +++ b/backend/drm/atomic.c @@ -6,6 +6,11 @@ #include "backend/drm/iface.h" #include "backend/drm/util.h" +// connection property "Broadcast RGB" = "Full" +#ifndef DRM_MODE_COLOR_RANGE_FULL +#define DRM_MODE_COLOR_RANGE_FULL 1 +#endif + struct atomic { drmModeAtomicReq *req; bool failed; @@ -231,6 +236,10 @@ static bool atomic_crtc_commit(struct wlr_drm_connector *conn, struct atomic atom; atomic_begin(&atom); + if (conn->props.broadcast_rgb) { + atomic_add(&atom, conn->id, conn->props.broadcast_rgb, + DRM_MODE_COLOR_RANGE_FULL); + } atomic_add(&atom, conn->id, conn->props.crtc_id, active ? crtc->id : 0); if (modeset && active && conn->props.link_status != 0) { atomic_add(&atom, conn->id, conn->props.link_status, diff --git a/backend/drm/properties.c b/backend/drm/properties.c index f26965933..f4b37821b 100644 --- a/backend/drm/properties.c +++ b/backend/drm/properties.c @@ -20,6 +20,7 @@ struct prop_info { static const struct prop_info connector_info[] = { #define INDEX(name) (offsetof(union wlr_drm_connector_props, name) / sizeof(uint32_t)) + { "Broadcast RGB", INDEX(broadcast_rgb) }, { "CRTC_ID", INDEX(crtc_id) }, { "DPMS", INDEX(dpms) }, { "EDID", INDEX(edid) }, diff --git a/include/backend/drm/properties.h b/include/backend/drm/properties.h index 10c1ccd09..00b77ca70 100644 --- a/include/backend/drm/properties.h +++ b/include/backend/drm/properties.h @@ -17,6 +17,7 @@ union wlr_drm_connector_props { uint32_t link_status; // not guaranteed to exist uint32_t path; uint32_t vrr_capable; // not guaranteed to exist + uint32_t broadcast_rgb; // not guaranteed to exist uint32_t subconnector; // not guaranteed to exist uint32_t non_desktop; uint32_t panel_orientation; // not guaranteed to exist