render, render/vulkan: add wlr_buffer_pass_options.luminances

Allows callers to customized the target luminances.
This commit is contained in:
Simon Ser 2025-06-26 13:39:40 +02:00
parent 7b91939d9e
commit de52bc70b9
3 changed files with 14 additions and 1 deletions

View file

@ -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;

View file

@ -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.
*

View file

@ -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);