mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-20 02:10:06 +01:00
render: remove buffer primaries from pass options
colorspace conversion is now carried explicitely by setting a wlr_color_transform_matrix in the color transform
This commit is contained in:
parent
fdb473e675
commit
3d3d5fb1b7
5 changed files with 29 additions and 29 deletions
|
|
@ -430,9 +430,6 @@ struct wlr_vk_render_pass {
|
|||
bool two_pass; // rendering via intermediate blending buffer
|
||||
struct wlr_color_transform *color_transform;
|
||||
|
||||
bool has_primaries;
|
||||
struct wlr_color_primaries primaries;
|
||||
|
||||
struct wlr_drm_syncobj_timeline *signal_timeline;
|
||||
uint64_t signal_point;
|
||||
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ struct wlr_buffer_pass_options {
|
|||
* Leave NULL to indicate the default transform (Gamma 2.2 encoding for
|
||||
* sRGB monitors) */
|
||||
struct wlr_color_transform *color_transform;
|
||||
/** Primaries describing the color volume of the destination buffer */
|
||||
const struct wlr_color_primaries *primaries;
|
||||
|
||||
/* Signal a timeline synchronization point when the render pass completes.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -253,14 +253,6 @@ static bool render_pass_submit(struct wlr_render_pass *wlr_pass) {
|
|||
.lut_3d_scale = (float)(dim - 1) / dim,
|
||||
};
|
||||
|
||||
if (pass->has_primaries) {
|
||||
// overwrite matrix from color_tranform, if any
|
||||
struct wlr_color_primaries srgb;
|
||||
wlr_color_primaries_from_named(&srgb, WLR_COLOR_NAMED_PRIMARIES_SRGB);
|
||||
|
||||
wlr_color_primaries_transform_absolute_colorimetric(&srgb, &pass->primaries, matrix);
|
||||
}
|
||||
|
||||
encode_color_matrix(matrix, frag_pcr_data.matrix);
|
||||
|
||||
VkPipeline pipeline = VK_NULL_HANDLE;
|
||||
|
|
@ -1284,10 +1276,6 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend
|
|||
pass->signal_timeline = wlr_drm_syncobj_timeline_ref(options->signal_timeline);
|
||||
pass->signal_point = options->signal_point;
|
||||
}
|
||||
if (options != NULL && options->primaries != NULL) {
|
||||
pass->has_primaries = true;
|
||||
pass->primaries = *options->primaries;
|
||||
}
|
||||
|
||||
rect_union_init(&pass->updated_region);
|
||||
|
||||
|
|
|
|||
|
|
@ -257,13 +257,22 @@ static struct wlr_buffer *render_cursor_buffer(struct wlr_output_cursor *cursor)
|
|||
buffer->width, buffer->height);
|
||||
|
||||
struct wlr_buffer_pass_options options = {0};
|
||||
struct wlr_color_primaries primaries_value;
|
||||
if (output->image_description != NULL) {
|
||||
options.color_transform = wlr_color_transform_init_linear_to_inverse_eotf(
|
||||
output->image_description->transfer_function);
|
||||
wlr_color_primaries_from_named(&primaries_value,
|
||||
output->image_description->primaries);
|
||||
options.primaries = &primaries_value;
|
||||
struct wlr_color_primaries primaries_srgb;
|
||||
wlr_color_primaries_from_named(&primaries_srgb, WLR_COLOR_NAMED_PRIMARIES_SRGB);
|
||||
struct wlr_color_primaries primaries;
|
||||
wlr_color_primaries_from_named(&primaries, output->image_description->primaries);
|
||||
float matrix[9];
|
||||
wlr_color_primaries_transform_absolute_colorimetric(&primaries_srgb, &primaries, matrix);
|
||||
struct wlr_color_transform *transforms[] = {
|
||||
wlr_color_transform_init_matrix(matrix),
|
||||
wlr_color_transform_init_linear_to_inverse_eotf(
|
||||
output->image_description->transfer_function),
|
||||
};
|
||||
size_t transform_count = sizeof(transforms) / sizeof(transforms[0]);
|
||||
options.color_transform = wlr_color_transform_init_pipeline(transforms, transform_count);
|
||||
wlr_color_transform_unref(transforms[0]);
|
||||
wlr_color_transform_unref(transforms[1]);
|
||||
}
|
||||
struct wlr_render_pass *pass = wlr_renderer_begin_buffer_pass(renderer, buffer, &options);
|
||||
wlr_color_transform_unref(options.color_transform);
|
||||
|
|
|
|||
|
|
@ -2385,13 +2385,22 @@ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output,
|
|||
}
|
||||
|
||||
struct wlr_color_transform *color_transform = NULL;
|
||||
const struct wlr_color_primaries *primaries = NULL;
|
||||
struct wlr_color_primaries primaries_value;
|
||||
const struct wlr_output_image_description *img_desc = output_pending_image_description(output, state);
|
||||
if (img_desc != NULL) {
|
||||
color_transform = wlr_color_transform_init_linear_to_inverse_eotf(img_desc->transfer_function);
|
||||
wlr_color_primaries_from_named(&primaries_value, img_desc->primaries);
|
||||
primaries = &primaries_value;
|
||||
struct wlr_color_primaries primaries_srgb;
|
||||
wlr_color_primaries_from_named(&primaries_srgb, WLR_COLOR_NAMED_PRIMARIES_SRGB);
|
||||
struct wlr_color_primaries primaries;
|
||||
wlr_color_primaries_from_named(&primaries, img_desc->primaries);
|
||||
float matrix[9];
|
||||
wlr_color_primaries_transform_absolute_colorimetric(&primaries_srgb, &primaries, matrix);
|
||||
struct wlr_color_transform *transforms[] = {
|
||||
wlr_color_transform_init_matrix(matrix),
|
||||
wlr_color_transform_init_linear_to_inverse_eotf(img_desc->transfer_function),
|
||||
};
|
||||
size_t transform_count = sizeof(transforms) / sizeof(transforms[0]);
|
||||
color_transform = wlr_color_transform_init_pipeline(transforms, transform_count);
|
||||
wlr_color_transform_unref(transforms[0]);
|
||||
wlr_color_transform_unref(transforms[1]);
|
||||
}
|
||||
if (options->color_transform != NULL) {
|
||||
assert(color_transform == NULL);
|
||||
|
|
@ -2414,7 +2423,6 @@ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output,
|
|||
&(struct wlr_buffer_pass_options){
|
||||
.timer = timer ? timer->render_timer : NULL,
|
||||
.color_transform = color_transform,
|
||||
.primaries = primaries,
|
||||
.signal_timeline = scene_output->in_timeline,
|
||||
.signal_point = scene_output->in_point,
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue