From edb4ac4bf7cb5bb00c068f9078f13908b3e4391e Mon Sep 17 00:00:00 2001
From: Philipp Zabel
Date: Thu, 11 Mar 2021 16:13:05 +0100
Subject: [PATCH] backend-wayland: store backend on struct wayland_output
To avoid retrieving the backend from the compositor all the time, store
a pointer to the wayland backend on its wayland_output structures.
This will be useful once the compositor contains more than one backend.
Signed-off-by: Philipp Zabel
---
libweston/backend-wayland/wayland.c | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
diff --git a/libweston/backend-wayland/wayland.c b/libweston/backend-wayland/wayland.c
index 6f00dc8e..85e2726d 100644
--- a/libweston/backend-wayland/wayland.c
+++ b/libweston/backend-wayland/wayland.c
@@ -103,6 +103,7 @@ struct wayland_backend {
struct wayland_output {
struct weston_output base;
+ struct wayland_backend *backend;
struct {
bool draw_initial_frame;
@@ -289,8 +290,7 @@ static const struct wl_buffer_listener buffer_listener = {
static struct wayland_shm_buffer *
wayland_output_get_shm_buffer(struct wayland_output *output)
{
- struct wayland_backend *b =
- to_wayland_backend(output->base.compositor);
+ struct wayland_backend *b = output->backend;
struct wl_shm *shm = b->parent.shm;
struct wayland_shm_buffer *sb;
@@ -457,7 +457,7 @@ wayland_output_start_repaint_loop(struct weston_output *output_base)
assert(output);
- wb = to_wayland_backend(output->base.compositor);
+ wb = output->backend;
/* If this is the initial frame, we need to attach a buffer so that
* the compositor can map the surface and include it in its render
@@ -596,7 +596,7 @@ wayland_output_repaint_pixman(struct weston_output *output_base,
assert(output);
- b = to_wayland_backend(output->base.compositor);
+ b = output->backend;
if (output->frame) {
if (frame_status(output->frame) & FRAME_STATUS_REPAINT)
@@ -773,7 +773,7 @@ wayland_output_init_pixman_renderer(struct wayland_output *output)
static void
wayland_output_resize_surface(struct wayland_output *output)
{
- struct wayland_backend *b = to_wayland_backend(output->base.compositor);
+ struct wayland_backend *b = output->backend;
/* Defaults for without frame: */
struct weston_size fb_size = {
.width = output->base.current_mode->width,
@@ -846,8 +846,7 @@ wayland_output_resize_surface(struct wayland_output *output)
static int
wayland_output_set_windowed(struct wayland_output *output)
{
- struct wayland_backend *b =
- to_wayland_backend(output->base.compositor);
+ struct wayland_backend *b = output->backend;
if (output->frame)
return 0;
@@ -965,7 +964,7 @@ static enum mode_status
wayland_output_fullscreen_shell_mode_feedback(struct wayland_output *output,
struct weston_mode *mode)
{
- struct wayland_backend *b = to_wayland_backend(output->base.compositor);
+ struct wayland_backend *b = output->backend;
struct zwp_fullscreen_shell_mode_feedback_v1 *mode_feedback;
enum mode_status mode_status;
int ret = 0;
@@ -1016,7 +1015,7 @@ wayland_output_switch_mode(struct weston_output *output_base,
return -1;
}
- b = to_wayland_backend(output_base->compositor);
+ b = output->backend;
if (output->parent.xdg_surface || !b->parent.fshell)
return -1;
@@ -1123,7 +1122,7 @@ static const struct xdg_toplevel_listener xdg_toplevel_listener = {
static int
wayland_backend_create_output_surface(struct wayland_output *output)
{
- struct wayland_backend *b = to_wayland_backend(output->base.compositor);
+ struct wayland_backend *b = output->backend;
assert(!output->parent.surface);
@@ -1173,7 +1172,7 @@ wayland_output_enable(struct weston_output *base)
assert(output);
- b = to_wayland_backend(base->compositor);
+ b = output->backend;
wl_list_init(&output->shm.buffers);
wl_list_init(&output->shm.free_buffers);
@@ -1259,7 +1258,7 @@ wayland_output_attach_head(struct weston_output *output_base,
if (!head)
return -1;
- b = to_wayland_backend(output_base->compositor);
+ b = output->backend;
if (!wl_list_empty(&output->base.head_list))
return -1;
@@ -1329,6 +1328,8 @@ wayland_output_create(struct weston_backend *backend, const char *name)
output->base.attach_head = wayland_output_attach_head;
output->base.detach_head = wayland_output_detach_head;
+ output->backend = b;
+
weston_compositor_add_pending_output(&output->base, compositor);
return &output->base;
@@ -1500,7 +1501,7 @@ static int
wayland_output_setup_fullscreen(struct wayland_output *output,
struct wayland_head *head)
{
- struct wayland_backend *b = to_wayland_backend(output->base.compositor);
+ struct wayland_backend *b = output->backend;
int width = 0, height = 0;
output->base.scale = 1;