mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-25 20:00:06 +01:00
xwayland: Use a dedicated feedback callback for windows
Separate the callbacks for the default's feedback from the one for
regular windows.
This is preparation work to recreate the window buffer of feedback
updates, no functional change.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
(cherry picked from commit 1a0cc25d48)
This commit is contained in:
parent
f03dd41290
commit
1a32a8c2af
1 changed files with 96 additions and 18 deletions
|
|
@ -659,24 +659,6 @@ static const struct zwp_linux_dmabuf_feedback_v1_listener xwl_dmabuf_feedback_li
|
|||
.tranche_flags = xwl_dmabuf_feedback_tranche_flags,
|
||||
};
|
||||
|
||||
Bool
|
||||
xwl_dmabuf_setup_feedback_for_window(struct xwl_window *xwl_window)
|
||||
{
|
||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
||||
|
||||
xwl_window->feedback.dmabuf_feedback =
|
||||
zwp_linux_dmabuf_v1_get_surface_feedback(xwl_screen->dmabuf, xwl_window->surface);
|
||||
|
||||
if (!xwl_window->feedback.dmabuf_feedback)
|
||||
return FALSE;
|
||||
|
||||
zwp_linux_dmabuf_feedback_v1_add_listener(xwl_window->feedback.dmabuf_feedback,
|
||||
&xwl_dmabuf_feedback_listener,
|
||||
&xwl_window->feedback);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Bool
|
||||
xwl_screen_set_dmabuf_interface(struct xwl_screen *xwl_screen,
|
||||
uint32_t id, uint32_t version)
|
||||
|
|
@ -707,6 +689,102 @@ xwl_screen_set_dmabuf_interface(struct xwl_screen *xwl_screen,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_main_device(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
|
||||
struct wl_array *dev)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_main_device(&xwl_window->feedback, dmabuf_feedback, dev);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_tranche_target_device(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
|
||||
struct wl_array *dev)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_tranche_target_device(&xwl_window->feedback, dmabuf_feedback, dev);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_tranche_flags(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
|
||||
uint32_t flags)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_tranche_flags(&xwl_window->feedback, dmabuf_feedback, flags);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_tranche_formats(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
|
||||
struct wl_array *indices)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_tranche_formats(&xwl_window->feedback, dmabuf_feedback, indices);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_tranche_done(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_tranche_done(&xwl_window->feedback, dmabuf_feedback);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_done(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_done(&xwl_window->feedback, dmabuf_feedback);
|
||||
}
|
||||
|
||||
static void
|
||||
xwl_window_dmabuf_feedback_format_table(void *data,
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback,
|
||||
int32_t fd, uint32_t size)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
|
||||
xwl_dmabuf_feedback_format_table(&xwl_window->feedback, dmabuf_feedback, fd, size);
|
||||
}
|
||||
|
||||
static const struct zwp_linux_dmabuf_feedback_v1_listener xwl_window_dmabuf_feedback_listener = {
|
||||
.done = xwl_window_dmabuf_feedback_done,
|
||||
.format_table = xwl_window_dmabuf_feedback_format_table,
|
||||
.main_device = xwl_window_dmabuf_feedback_main_device,
|
||||
.tranche_done = xwl_window_dmabuf_feedback_tranche_done,
|
||||
.tranche_target_device = xwl_window_dmabuf_feedback_tranche_target_device,
|
||||
.tranche_formats = xwl_window_dmabuf_feedback_tranche_formats,
|
||||
.tranche_flags = xwl_window_dmabuf_feedback_tranche_flags,
|
||||
};
|
||||
|
||||
Bool
|
||||
xwl_dmabuf_setup_feedback_for_window(struct xwl_window *xwl_window)
|
||||
{
|
||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
||||
|
||||
xwl_window->feedback.dmabuf_feedback =
|
||||
zwp_linux_dmabuf_v1_get_surface_feedback(xwl_screen->dmabuf, xwl_window->surface);
|
||||
|
||||
if (!xwl_window->feedback.dmabuf_feedback)
|
||||
return FALSE;
|
||||
|
||||
zwp_linux_dmabuf_feedback_v1_add_listener(xwl_window->feedback.dmabuf_feedback,
|
||||
&xwl_window_dmabuf_feedback_listener,
|
||||
xwl_window);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
xwl_glamor_init_wl_registry(struct xwl_screen *xwl_screen,
|
||||
struct wl_registry *registry,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue