From 65c163afc5ef84631b3a835711ee3740026c0240 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 27 Jan 2025 21:00:54 +0100 Subject: [PATCH 1/2] Add support for BT2020 primaries References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4976 --- sway/commands/output/color_profile.c | 2 +- sway/config/output.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sway/commands/output/color_profile.c b/sway/commands/output/color_profile.c index 98481329b6..e81bb03838 100644 --- a/sway/commands/output/color_profile.c +++ b/sway/commands/output/color_profile.c @@ -90,7 +90,7 @@ struct cmd_results *output_cmd_color_profile(int argc, char **argv) { free(icc_path); struct wlr_color_transform *tmp = - wlr_color_transform_init_linear_to_icc(data, size); + wlr_color_transform_init_linear_to_icc(WLR_COLOR_NAMED_PRIMARIES_SRGB, data, size); if (!tmp) { free(data); return cmd_results_new(CMD_FAILURE, diff --git a/sway/config/output.c b/sway/config/output.c index 4d4a47b466..5ea9204030 100644 --- a/sway/config/output.c +++ b/sway/config/output.c @@ -490,6 +490,17 @@ static void queue_output_config(struct output_config *oc, } else { wlr_output_state_set_render_format(pending, DRM_FORMAT_XRGB8888); } + + if (oc && oc->color_transform == NULL && oc->render_bit_depth == RENDER_BIT_DEPTH_10 && + (wlr_output->supported_primaries & WLR_COLOR_NAMED_PRIMARIES_BT2020) && + server.renderer->features.output_color_transform) { + const struct wlr_output_image_description image_desc = { + .primaries = WLR_COLOR_NAMED_PRIMARIES_BT2020, + }; + wlr_output_state_set_image_description(pending, &image_desc); + } else if (wlr_output->supported_primaries != 0) { + wlr_output_state_set_image_description(pending, NULL); + } } static bool finalize_output_config(struct output_config *oc, struct sway_output *output) { @@ -549,6 +560,12 @@ static bool finalize_output_config(struct output_config *oc, struct sway_output output->color_transform = NULL; } + if (output->color_transform == NULL && oc && oc->render_bit_depth == RENDER_BIT_DEPTH_10 && + (wlr_output->supported_primaries & WLR_COLOR_NAMED_PRIMARIES_BT2020) && + server.renderer->features.output_color_transform) { + output->color_transform = wlr_color_transform_init_srgb(WLR_COLOR_NAMED_PRIMARIES_BT2020); + } + output->max_render_time = oc && oc->max_render_time > 0 ? oc->max_render_time : 0; output->allow_tearing = oc && oc->allow_tearing > 0; From c7fc7d1769f6353bd1b37ddb87b4685d384a2792 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 8 Mar 2025 14:35:01 +0100 Subject: [PATCH 2/2] wip! Log when enabling HDR --- sway/config/output.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sway/config/output.c b/sway/config/output.c index 5ea9204030..71e3f4c111 100644 --- a/sway/config/output.c +++ b/sway/config/output.c @@ -563,6 +563,7 @@ static bool finalize_output_config(struct output_config *oc, struct sway_output if (output->color_transform == NULL && oc && oc->render_bit_depth == RENDER_BIT_DEPTH_10 && (wlr_output->supported_primaries & WLR_COLOR_NAMED_PRIMARIES_BT2020) && server.renderer->features.output_color_transform) { + sway_log(SWAY_INFO, "ENABLING HDR ON %s", wlr_output->name); output->color_transform = wlr_color_transform_init_srgb(WLR_COLOR_NAMED_PRIMARIES_BT2020); }