wayland-ivi-extension: disable building EGLWLMockNavigation example
[AGL/meta-agl.git] / meta-agl-profile-graphical / recipes-graphics / wayland / weston / 0018-compositor-add-output-type-to-weston_output.patch
1 From 99fb36e62d3d0e3bda3d2984f280f534a629f70c Mon Sep 17 00:00:00 2001
2 From: Wataru Mizuno <wmizuno@jp.adit-jv.com>
3 Date: Thu, 12 Oct 2017 14:55:13 +0900
4 Subject: [PATCH 1/5] compositor: add output type to weston_output
5
6 This enables weston to use multiple types of backend
7 Each backends have own output structure for each functions
8 To avoid invalid member access, type identifier is needed
9
10 Signed-off-by: Wataru Mizuno <wmizuno@jp.adit-jv.com>
11 ---
12  libweston/compositor-drm.c      | 100 +++++++++++++++++++++++-----------------
13  libweston/compositor-fbdev.c    |   1 +
14  libweston/compositor-headless.c |   1 +
15  libweston/compositor-rdp.c      |   1 +
16  libweston/compositor-wayland.c  |   1 +
17  libweston/compositor-x11.c      |   1 +
18  libweston/compositor.h          |  12 +++++
19  7 files changed, 74 insertions(+), 43 deletions(-)
20
21 diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
22 index 1d38f05..0b5b4c4 100644
23 --- a/libweston/compositor-drm.c
24 +++ b/libweston/compositor-drm.c
25 @@ -243,14 +243,16 @@ drm_output_find_by_crtc(struct drm_backend *b, uint32_t crtc_id)
26         struct drm_output *output;
27  
28         wl_list_for_each(output, &b->compositor->output_list, base.link) {
29 -               if (output->crtc_id == crtc_id)
30 -                       return output;
31 +               if(output->base.output_type == OUTPUT_DRM)
32 +                       if (output->crtc_id == crtc_id)
33 +                               return output;
34         }
35  
36         wl_list_for_each(output, &b->compositor->pending_output_list,
37                          base.link) {
38 -               if (output->crtc_id == crtc_id)
39 -                       return output;
40 +               if(output->base.output_type == OUTPUT_DRM)
41 +                       if (output->crtc_id == crtc_id)
42 +                               return output;
43         }
44  
45         return NULL;
46 @@ -262,14 +264,16 @@ drm_output_find_by_connector(struct drm_backend *b, uint32_t connector_id)
47         struct drm_output *output;
48  
49         wl_list_for_each(output, &b->compositor->output_list, base.link) {
50 -               if (output->connector_id == connector_id)
51 -                       return output;
52 +               if(output->base.output_type == OUTPUT_DRM)
53 +                       if (output->connector_id == connector_id)
54 +                               return output;
55         }
56  
57         wl_list_for_each(output, &b->compositor->pending_output_list,
58                          base.link) {
59 -               if (output->connector_id == connector_id)
60 -                       return output;
61 +               if(output->base.output_type == OUTPUT_DRM)
62 +                       if (output->connector_id == connector_id)
63 +                               return output;
64         }
65  
66         return NULL;
67 @@ -2433,6 +2437,7 @@ drm_output_enable(struct weston_output *base)
68         struct weston_mode *m;
69  
70         output->dpms_prop = drm_get_prop(b->drm.fd, output->connector, "DPMS");
71 +       output->base.output_type = OUTPUT_DRM;
72  
73         if (b->use_pixman) {
74                 if (drm_output_init_pixman(output, b) < 0) {
75 @@ -2797,38 +2802,42 @@ update_outputs(struct drm_backend *b, struct udev_device *drm_device)
76  
77         wl_list_for_each_safe(output, next, &b->compositor->output_list,
78                               base.link) {
79 -               bool disconnected = true;
80 -
81 -               for (i = 0; i < resources->count_connectors; i++) {
82 -                       if (connected[i] == output->connector_id) {
83 -                               disconnected = false;
84 -                               break;
85 +               if (output->base.output_type == OUTPUT_DRM) {
86 +                       bool disconnected = true;
87 +
88 +                       for (i = 0; i < resources->count_connectors; i++) {
89 +                               if (connected[i] == output->connector_id) {
90 +                                       disconnected = false;
91 +                                       break;
92 +                               }
93                         }
94 -               }
95  
96 -               if (!disconnected)
97 -                       continue;
98 +                       if (!disconnected)
99 +                               continue;
100  
101 -               weston_log("connector %d disconnected\n", output->connector_id);
102 -               drm_output_destroy(&output->base);
103 +                       weston_log("connector %d disconnected\n", output->connector_id);
104 +                       drm_output_destroy(&output->base);
105 +               }
106         }
107  
108         wl_list_for_each_safe(output, next, &b->compositor->pending_output_list,
109                               base.link) {
110 -               bool disconnected = true;
111 -
112 -               for (i = 0; i < resources->count_connectors; i++) {
113 -                       if (connected[i] == output->connector_id) {
114 -                               disconnected = false;
115 -                               break;
116 +               if (output->base.output_type == OUTPUT_DRM) {
117 +                       bool disconnected = true;
118 +
119 +                       for (i = 0; i < resources->count_connectors; i++) {
120 +                               if (connected[i] == output->connector_id) {
121 +                                       disconnected = false;
122 +                                       break;
123 +                               }
124                         }
125 -               }
126  
127 -               if (!disconnected)
128 -                       continue;
129 +                       if (!disconnected)
130 +                               continue;
131  
132 -               weston_log("connector %d disconnected\n", output->connector_id);
133 -               drm_output_destroy(&output->base);
134 +                       weston_log("connector %d disconnected\n", output->connector_id);
135 +                       drm_output_destroy(&output->base);
136 +               }
137         }
138  
139         free(connected);
140 @@ -2925,18 +2934,21 @@ session_notify(struct wl_listener *listener, void *data)
141                  * pending frame callbacks. */
142  
143                 wl_list_for_each(output, &compositor->output_list, base.link) {
144 -                       output->base.repaint_needed = 0;
145 -                       drmModeSetCursor(b->drm.fd, output->crtc_id, 0, 0, 0);
146 +                       if(output->base.output_type == OUTPUT_DRM) {
147 +                               output->base.repaint_needed = 0;
148 +                               drmModeSetCursor(b->drm.fd, output->crtc_id, 0, 0, 0);
149 +                       }
150 +               }
151 +               if(output->base.output_type == OUTPUT_DRM) {
152 +                       output = container_of(compositor->output_list.next,
153 +                                             struct drm_output, base.link);
154 +
155 +                       wl_list_for_each(sprite, &b->sprite_list, link)
156 +                               drmModeSetPlane(b->drm.fd,
157 +                                               sprite->plane_id,
158 +                                               output->crtc_id, 0, 0,
159 +                                               0, 0, 0, 0, 0, 0, 0, 0);
160                 }
161 -
162 -               output = container_of(compositor->output_list.next,
163 -                                     struct drm_output, base.link);
164 -
165 -               wl_list_for_each(sprite, &b->sprite_list, link)
166 -                       drmModeSetPlane(b->drm.fd,
167 -                                       sprite->plane_id,
168 -                                       output->crtc_id, 0, 0,
169 -                                       0, 0, 0, 0, 0, 0, 0, 0);
170         };
171  }
172  
173 @@ -3148,7 +3160,8 @@ switch_to_gl_renderer(struct drm_backend *b)
174         }
175  
176         wl_list_for_each(output, &b->compositor->output_list, base.link)
177 -               pixman_renderer_output_destroy(&output->base);
178 +               if(output->base.output_type == OUTPUT_DRM)
179 +                       pixman_renderer_output_destroy(&output->base);
180  
181         b->compositor->renderer->destroy(b->compositor);
182  
183 @@ -3160,7 +3173,8 @@ switch_to_gl_renderer(struct drm_backend *b)
184         }
185  
186         wl_list_for_each(output, &b->compositor->output_list, base.link)
187 -               drm_output_init_egl(output, b);
188 +               if(output->base.output_type == OUTPUT_DRM)
189 +                       drm_output_init_egl(output, b);
190  
191         b->use_pixman = 0;
192  
193 diff --git a/libweston/compositor-fbdev.c b/libweston/compositor-fbdev.c
194 index 44f0cf5..9cb903e 100644
195 --- a/libweston/compositor-fbdev.c
196 +++ b/libweston/compositor-fbdev.c
197 @@ -433,6 +433,7 @@ fbdev_output_enable(struct weston_output *base)
198         int fb_fd;
199         struct wl_event_loop *loop;
200  
201 +       output->base.output_type = OUTPUT_FBDEV;
202         /* Create the frame buffer. */
203         fb_fd = fbdev_frame_buffer_open(output, output->device, &output->fb_info);
204         if (fb_fd < 0) {
205 diff --git a/libweston/compositor-headless.c b/libweston/compositor-headless.c
206 index a1aec6d..b0d5afb 100644
207 --- a/libweston/compositor-headless.c
208 +++ b/libweston/compositor-headless.c
209 @@ -148,6 +148,7 @@ headless_output_enable(struct weston_output *base)
210         loop = wl_display_get_event_loop(b->compositor->wl_display);
211         output->finish_frame_timer =
212                 wl_event_loop_add_timer(loop, finish_frame_handler, output);
213 +       output->base.output_type = OUTPUT_HEADLESS;
214  
215         if (b->use_pixman) {
216                 output->image_buf = malloc(output->base.current_mode->width *
217 diff --git a/libweston/compositor-rdp.c b/libweston/compositor-rdp.c
218 index d9668e8..d525982 100644
219 --- a/libweston/compositor-rdp.c
220 +++ b/libweston/compositor-rdp.c
221 @@ -519,6 +519,7 @@ rdp_output_enable(struct weston_output *base)
222         struct rdp_backend *b = to_rdp_backend(base->compositor);
223         struct wl_event_loop *loop;
224  
225 +       output->base.output_type = OUTPUT_RDP;
226         output->shadow_surface = pixman_image_create_bits(PIXMAN_x8r8g8b8,
227                                                           output->base.current_mode->width,
228                                                           output->base.current_mode->height,
229 diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c
230 index 9d35ef7..66a0dbf 100644
231 --- a/libweston/compositor-wayland.c
232 +++ b/libweston/compositor-wayland.c
233 @@ -1164,6 +1164,7 @@ wayland_output_enable(struct weston_output *base)
234         struct wayland_backend *b = to_wayland_backend(base->compositor);
235         int ret = 0;
236  
237 +       output->base.output_type = OUTPUT_WAYLAND;
238         weston_log("Creating %dx%d wayland output at (%d, %d)\n",
239                    output->base.current_mode->width,
240                    output->base.current_mode->height,
241 diff --git a/libweston/compositor-x11.c b/libweston/compositor-x11.c
242 index f9cb461..fcf39e1 100644
243 --- a/libweston/compositor-x11.c
244 +++ b/libweston/compositor-x11.c
245 @@ -825,6 +825,7 @@ x11_output_enable(struct weston_output *base)
246                 XCB_EVENT_MASK_STRUCTURE_NOTIFY,
247                 0
248         };
249 +       output->base.output_type = OUTPUT_X11;
250  
251         if (!b->no_input)
252                 values[0] |=
253 diff --git a/libweston/compositor.h b/libweston/compositor.h
254 index 08e728a..51157d0 100644
255 --- a/libweston/compositor.h
256 +++ b/libweston/compositor.h
257 @@ -146,9 +146,21 @@ enum dpms_enum {
258         WESTON_DPMS_OFF
259  };
260  
261 +/* bit compatible with drm definitions. */
262 +enum output_type {
263 +       OUTPUT_DRM,
264 +       OUTPUT_FBDEV,
265 +       OUTPUT_HEADLESS,
266 +       OUTPUT_RDP,
267 +       OUTPUT_WAYLAND,
268 +       OUTPUT_X11,
269 +       OUTPUT_WALTHAM
270 +};
271 +
272  struct weston_output {
273         uint32_t id;
274         char *name;
275 +       enum output_type output_type;
276  
277         void *renderer_state;
278  
279 -- 
280 2.7.4
281