mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-14 17:18:09 +00: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>
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user