From c6133f9912b96b3f03ba30347678712c0776ad5c Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 5 Jun 2025 12:42:12 +0200 Subject: [PATCH] scene: send surface preferred transform alongside DMA-BUF feedback wl_surface.preferred_buffer_transform is mainly useful to make direct scan-out more likely. It shouldn't make a difference with GL/Vulkan rendering. --- types/scene/surface.c | 5 ----- types/scene/wlr_scene.c | 8 ++++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/types/scene/surface.c b/types/scene/surface.c index 53a4b1069..1973abcaa 100644 --- a/types/scene/surface.c +++ b/types/scene/surface.c @@ -44,11 +44,6 @@ static void handle_scene_buffer_outputs_update( double scale = get_surface_preferred_buffer_scale(surface->surface); wlr_fractional_scale_v1_notify_scale(surface->surface, scale); wlr_surface_set_preferred_buffer_scale(surface->surface, ceil(scale)); - - if (surface->buffer->primary_output != NULL) { - wlr_surface_set_preferred_buffer_transform(surface->surface, - surface->buffer->primary_output->output->transform); - } } static void handle_scene_buffer_output_enter( diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index f12f0d263..1acbb5650 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -1867,6 +1867,14 @@ static void scene_buffer_send_dmabuf_feedback(const struct wlr_scene *scene, return; } + enum wl_output_transform preferred_buffer_transform = WL_OUTPUT_TRANSFORM_NORMAL; + if (options->scanout_primary_output != NULL) { + preferred_buffer_transform = options->scanout_primary_output->transform; + } + + // TODO: also send wl_surface.preferred_buffer_transform when running with + // pure software rendering + wlr_surface_set_preferred_buffer_transform(surface->surface, preferred_buffer_transform); wlr_linux_dmabuf_v1_set_surface_feedback(scene->linux_dmabuf_v1, surface->surface, &feedback);