gl-renderer: iterate paint nodes

Iterate paint nodes instead of the global view list. Right now this does
not change behavior.

This is a step towards using per-output view lists that can then be
optimized for the output in libweston core.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 4 years ago
parent e02dbf650b
commit 29cdb34019
  1. 25
      libweston/renderer-gl/gl-renderer.c

@ -1092,11 +1092,13 @@ static void
repaint_views(struct weston_output *output, pixman_region32_t *damage) repaint_views(struct weston_output *output, pixman_region32_t *damage)
{ {
struct weston_compositor *compositor = output->compositor; struct weston_compositor *compositor = output->compositor;
struct weston_view *view; struct weston_paint_node *pnode;
wl_list_for_each_reverse(view, &compositor->view_list, link) wl_list_for_each_reverse(pnode, &output->paint_node_z_order_list,
if (view->plane == &compositor->primary_plane) z_order_link) {
draw_view(view, output, damage); if (pnode->view->plane == &compositor->primary_plane)
draw_view(pnode->view, output, damage);
}
} }
static int static int
@ -1110,9 +1112,11 @@ static void
update_buffer_release_fences(struct weston_compositor *compositor, update_buffer_release_fences(struct weston_compositor *compositor,
struct weston_output *output) struct weston_output *output)
{ {
struct weston_view *view; struct weston_paint_node *pnode;
wl_list_for_each_reverse(view, &compositor->view_list, link) { wl_list_for_each_reverse(pnode, &output->paint_node_z_order_list,
z_order_link) {
struct weston_view *view = pnode->view;
struct gl_surface_state *gs; struct gl_surface_state *gs;
struct weston_buffer_release *buffer_release; struct weston_buffer_release *buffer_release;
int fence_fd; int fence_fd;
@ -1560,17 +1564,18 @@ gl_renderer_repaint_output(struct weston_output *output,
/* total area we need to repaint this time */ /* total area we need to repaint this time */
pixman_region32_t total_damage; pixman_region32_t total_damage;
enum gl_border_status border_status = BORDER_STATUS_CLEAN; enum gl_border_status border_status = BORDER_STATUS_CLEAN;
struct weston_view *view; struct weston_paint_node *pnode;
if (use_output(output) < 0) if (use_output(output) < 0)
return; return;
/* Clear the used_in_output_repaint flag, so that we can properly track /* Clear the used_in_output_repaint flag, so that we can properly track
* which surfaces were used in this output repaint. */ * which surfaces were used in this output repaint. */
wl_list_for_each_reverse(view, &compositor->view_list, link) { wl_list_for_each_reverse(pnode, &output->paint_node_z_order_list,
if (view->plane == &compositor->primary_plane) { z_order_link) {
if (pnode->view->plane == &compositor->primary_plane) {
struct gl_surface_state *gs = struct gl_surface_state *gs =
get_surface_state(view->surface); get_surface_state(pnode->view->surface);
gs->used_in_output_repaint = false; gs->used_in_output_repaint = false;
} }
} }

Loading…
Cancel
Save