mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-14 08:22:25 -04:00
scene: add support for TF/primaries direct scanout
This commit is contained in:
parent
0c272a3842
commit
5b5380cce6
1 changed files with 22 additions and 2 deletions
|
|
@ -1961,13 +1961,25 @@ static enum scene_direct_scanout_result scene_entry_try_direct_scanout(
|
||||||
.height = default_height,
|
.height = default_height,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum wlr_color_named_primaries primaries = 0;
|
||||||
|
if (buffer->primaries != WLR_COLOR_NAMED_PRIMARIES_SRGB) {
|
||||||
|
primaries = buffer->primaries;
|
||||||
|
}
|
||||||
|
enum wlr_color_transfer_function tf = 0;
|
||||||
|
if (buffer->transfer_function != WLR_COLOR_TRANSFER_FUNCTION_SRGB) {
|
||||||
|
tf = buffer->transfer_function;
|
||||||
|
}
|
||||||
|
|
||||||
if (buffer->transform != data->transform) {
|
if (buffer->transform != data->transform) {
|
||||||
return SCANOUT_INELIGIBLE;
|
return SCANOUT_INELIGIBLE;
|
||||||
}
|
}
|
||||||
if (buffer->transfer_function != 0 && buffer->transfer_function != WLR_COLOR_TRANSFER_FUNCTION_SRGB) {
|
if ((tf == 0) != (primaries == 0)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (buffer->primaries != 0 && buffer->primaries != WLR_COLOR_NAMED_PRIMARIES_SRGB) {
|
if (primaries != 0 && (primaries & scene_output->output->supported_primaries) == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (tf != 0 && (tf & scene_output->output->supported_transfer_functions) == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2012,6 +2024,14 @@ static enum scene_direct_scanout_result scene_entry_try_direct_scanout(
|
||||||
if (buffer->wait_timeline != NULL) {
|
if (buffer->wait_timeline != NULL) {
|
||||||
wlr_output_state_set_wait_timeline(&pending, buffer->wait_timeline, buffer->wait_point);
|
wlr_output_state_set_wait_timeline(&pending, buffer->wait_timeline, buffer->wait_point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (primaries != 0 && tf != 0) {
|
||||||
|
wlr_output_state_set_image_description(&pending, &(struct wlr_output_image_description){
|
||||||
|
.primaries = primaries,
|
||||||
|
.transfer_function = tf,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (!wlr_output_test_state(scene_output->output, &pending)) {
|
if (!wlr_output_test_state(scene_output->output, &pending)) {
|
||||||
wlr_output_state_finish(&pending);
|
wlr_output_state_finish(&pending);
|
||||||
return SCANOUT_CANDIDATE;
|
return SCANOUT_CANDIDATE;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue