From 273c1224cf8a01be756800bde0a9af0c4e587529 Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Fri, 27 Jun 2025 11:22:02 +0200 Subject: [PATCH] output: Log output information when connected The only logging we currently provide about outputs is debug logging from wlroots about available modes, tested output states and errors applying it. Be more informative by logging some output details at INFO level when they pop up, including optional features like HDR and adaptive sync. This makes such output details more obvious from a quick glance, both for users and in case logs are shared for support. --- sway/desktop/output.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 7c725bcec..8a7669098 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -523,6 +523,39 @@ static void handle_request_state(struct wl_listener *listener, void *data) { force_modeset(); } +static void dump_output(struct wlr_output *output) { + bool supports_bt2020 = output->supported_primaries & + WLR_COLOR_NAMED_PRIMARIES_BT2020; + bool supports_pq = output->supported_transfer_functions & + WLR_COLOR_TRANSFER_FUNCTION_ST2084_PQ; + bool supports_color_transform = + server.renderer->features.output_color_transform; + + const char *hdr_support = "yes"; + if (!supports_bt2020 && !supports_pq) { + hdr_support = "no"; + } else if (supports_bt2020 && supports_pq && !supports_color_transform) { + hdr_support = "no (missing renderer color transform support)"; + } else if (!supports_bt2020) { + hdr_support = "no (missing BT2020 primaries)"; + } else if (!supports_pq) { + hdr_support = "no (missing PQ transfer function)"; + } + + char id[128]; + output_get_identifier(id, sizeof(id), output); + + sway_log(SWAY_INFO, "New output: %s", output->name); + sway_log(SWAY_INFO, " Identifier: %s", id); + sway_log(SWAY_INFO, " Dimensions: %dmm x %dmm", + output->phys_width, output->phys_height); + sway_log(SWAY_INFO, " Non-desktop: %s", + output->non_desktop ? "yes" : "no"); + sway_log(SWAY_INFO, " Adaptive sync support: %s", + output->adaptive_sync_supported ? "yes" : "no"); + sway_log(SWAY_INFO, " HDR support: %s", hdr_support); +} + static unsigned int last_headless_num = 0; void handle_new_output(struct wl_listener *listener, void *data) { @@ -539,8 +572,7 @@ void handle_new_output(struct wl_listener *listener, void *data) { wlr_output_set_name(wlr_output, name); } - sway_log(SWAY_DEBUG, "New output %p: %s (non-desktop: %d)", - wlr_output, wlr_output->name, wlr_output->non_desktop); + dump_output(wlr_output); if (wlr_output->non_desktop) { sway_log(SWAY_DEBUG, "Not configuring non-desktop output");