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>
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user