From de52bc70b9ed6dcb51db1c06888b694d084bbba7 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 26 Jun 2025 13:39:40 +0200 Subject: [PATCH] render, render/vulkan: add wlr_buffer_pass_options.luminances Allows callers to customized the target luminances. --- include/render/vulkan.h | 3 +++ include/wlr/render/pass.h | 2 ++ render/vulkan/pass.c | 10 +++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/render/vulkan.h b/include/render/vulkan.h index deff0eac3..8a1e820fa 100644 --- a/include/render/vulkan.h +++ b/include/render/vulkan.h @@ -407,6 +407,9 @@ struct wlr_vk_render_pass { bool has_primaries; struct wlr_color_primaries primaries; + bool has_luminances; + struct wlr_color_luminances luminances; + struct wlr_drm_syncobj_timeline *signal_timeline; uint64_t signal_point; diff --git a/include/wlr/render/pass.h b/include/wlr/render/pass.h index 8e22bdf8f..c1d92fe12 100644 --- a/include/wlr/render/pass.h +++ b/include/wlr/render/pass.h @@ -36,6 +36,8 @@ struct wlr_buffer_pass_options { struct wlr_color_transform *color_transform; /** Primaries describing the color volume of the destination buffer */ const struct wlr_color_primaries *primaries; + /** Luminances for the destination buffer */ + const struct wlr_color_luminances *luminances; /* Signal a timeline synchronization point when the render pass completes. * diff --git a/render/vulkan/pass.c b/render/vulkan/pass.c index 4fd357113..ec0f46460 100644 --- a/render/vulkan/pass.c +++ b/render/vulkan/pass.c @@ -251,7 +251,11 @@ static bool render_pass_submit(struct wlr_render_pass *wlr_pass) { struct wlr_color_luminances srgb_lum, dst_lum; wlr_color_transfer_function_get_default_luminance( WLR_COLOR_TRANSFER_FUNCTION_SRGB, &srgb_lum); - wlr_color_transfer_function_get_default_luminance(tf, &dst_lum); + if (pass->has_luminances) { + dst_lum = pass->luminances; + } else { + wlr_color_transfer_function_get_default_luminance(tf, &dst_lum); + } frag_pcr_data.luminance_multiplier = get_luminance_multiplier(&srgb_lum, &dst_lum); } bind_pipeline(pass, pipeline); @@ -1221,6 +1225,10 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend pass->has_primaries = true; pass->primaries = *options->primaries; } + if (options != NULL && options->luminances != NULL) { + pass->has_luminances = true; + pass->luminances = *options->luminances; + } rect_union_init(&pass->updated_region);